mirror of
https://github.com/datahub-project/datahub.git
synced 2025-08-10 18:26:24 +00:00
48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
![]() |
// @ts-ignore: Ignore import of compiled template
|
||
|
import template from '../templates/components/dynamic-link-with-action';
|
||
|
import { layout } from '@ember-decorators/component';
|
||
|
import DynamicLinkBase from 'dynamic-link/components/dynamic-link';
|
||
|
|
||
|
/**
|
||
|
* The purpose of this component is to extend and override some of the original dynamic-link
|
||
|
* component functionalities that use outdated methods and allow us to fully take advantage of
|
||
|
* dynamically assigning actions on click
|
||
|
*/
|
||
|
@layout(template)
|
||
|
export default class DynamicLinkWithAction extends DynamicLinkBase {
|
||
|
/**
|
||
|
* Externally provided click action, optional because we only want to call an action if this is
|
||
|
* a provided parameter
|
||
|
*/
|
||
|
onClickAction?: () => void;
|
||
|
|
||
|
/**
|
||
|
* If an onClickAction parameter was provided, then run the action. Otherwise default to
|
||
|
* original behavior
|
||
|
* @override
|
||
|
*/
|
||
|
performAction(): void {
|
||
|
const { onClickAction } = this;
|
||
|
onClickAction ? onClickAction() : super.performAction();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Refactors the click event from the base to look for an "onClickAction" instead of some action
|
||
|
* string.
|
||
|
* @param {MouseEvent} event - the event triggering the click function
|
||
|
* @override
|
||
|
*/
|
||
|
// From original component:
|
||
|
// Use prevent default to keep route transitions and actions from refreshing the page. Allows
|
||
|
// click behavior to bubble up if allowed by the bubbles property
|
||
|
click(event: MouseEvent): boolean {
|
||
|
if (this.onClickAction && !(event.metaKey || event.ctrlKey)) {
|
||
|
event.preventDefault();
|
||
|
this.performAction();
|
||
|
return this.bubbles !== false;
|
||
|
}
|
||
|
|
||
|
return super.click(event);
|
||
|
}
|
||
|
}
|