Files
vault/ui/lib/core/addon/components/linked-block.js
hashicorp-copywrite[bot] 0b12cdcfd1 [COMPLIANCE] License changes (#22290)
* Adding explicit MPL license for sub-package.

This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository.

* Adding explicit MPL license for sub-package.

This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository.

* Updating the license from MPL to Business Source License.

Going forward, this project will be licensed under the Business Source License v1.1. Please see our blog post for more details at https://hashi.co/bsl-blog, FAQ at www.hashicorp.com/licensing-faq, and details of the license at www.hashicorp.com/bsl.

* add missing license headers

* Update copyright file headers to BUS-1.1

* Fix test that expected exact offset on hcl file

---------

Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com>
Co-authored-by: Sarah Thompson <sthompson@hashicorp.com>
Co-authored-by: Brian Kassouf <bkassouf@hashicorp.com>
2023-08-10 18:14:03 -07:00

70 lines
2.3 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { encodePath } from 'vault/utils/path-encoding-helpers';
/**
* @module LinkedBlock
* LinkedBlock components are linkable divs that yield any content nested within them. They are often used in list views such as when listing the secret engines.
*
* @example
* ```js
* <LinkedBlock
* @params={{array 'vault.cluster.secrets.backend.show 'my-secret-path'}}
* @queryParams={{hash version=1}}
* @class="list-item-row"
* data-test-list-item-link
* >
* // Use any wrapped content here
* </LinkedBlock>
* ```
*
* @param {Array} params=null - These are values sent to the router's transitionTo method. First item is route, second is the optional path.
* @param {Object} [queryParams=null] - queryParams can be passed via this property. It needs to be an object.
* @param {String} [linkPrefix=null] - Overwrite the params with custom route. Needed for use in engines (KMIP and PKI). ex: vault.cluster.secrets.backend.kmip
* @param {Boolean} [encode=false] - Encode the path.
* @param {boolean} [disabled] - disable the link -- prevents on click and removes linked-block hover styling
*/
export default class LinkedBlockComponent extends Component {
@service router;
@action
onClick(event) {
if (!this.args.disabled) {
const $target = event.target;
const isAnchorOrButton =
$target.tagName === 'A' ||
$target.tagName === 'BUTTON' ||
$target.closest('button') ||
$target.closest('a');
if (!isAnchorOrButton) {
let params = this.args.params;
if (this.args.encode) {
params = params.map((param, index) => {
if (index === 0 || typeof param !== 'string') {
return param;
}
return encodePath(param);
});
}
const queryParams = this.args.queryParams;
if (queryParams) {
params.push({ queryParams });
}
if (this.args.linkPrefix) {
let targetRoute = this.args.params[0];
targetRoute = `${this.args.linkPrefix}.${targetRoute}`;
this.args.params[0] = targetRoute;
}
this.router.transitionTo(...params);
}
}
}
}