mirror of
https://github.com/status-im/consul.git
synced 2025-01-12 14:55:02 +00:00
a6c990c6fe
* Upgrade @hashicorp/design-system-tokens to 1.9.0 * Upgrade @hashicorp/design-system-components to 1.8.1 * Upgrade @hashicorp/design-system-components and ember-in-viewport * Explicitly install ember-modifier@4.1.0 * rename copy-button * Fix how cleanup is done in with-copyable * Update aria-menu modifier for new structure * Update css-prop modifier to new structure * Convert did-upsert to regular class modifier * Update notification modifier for new structure * Update on-oustside modifier for new structure * Move destroy handler registration in with-copyable * Update style modifier for new structure * Update validate modifier for new structure * Guard against setting on destroyed object * Upgrade @hashicorp/design-system-components to 2.14.1 * Remove debugger * Guard against null in aria-menu * Fix undefined hash in validate addon * Upgrade ember-on-resize-modifier * Fix copy button import, missing import and array destructuring --------- Co-authored-by: wenincode <tyler.wendlandt@hashicorp.com>
50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import Modifier from 'ember-modifier';
|
|
import { action } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
import { registerDestructor } from '@ember/destroyable';
|
|
|
|
function cleanup(instance) {
|
|
if (instance) {
|
|
instance.doc?.removeEventListener('click', instance.listen);
|
|
}
|
|
}
|
|
|
|
export default class OnOutsideModifier extends Modifier {
|
|
@service('dom') dom;
|
|
|
|
constructor(owner, args) {
|
|
super(owner, args);
|
|
this.doc = this.dom.document();
|
|
|
|
registerDestructor(this, cleanup);
|
|
}
|
|
|
|
async modify(element, positional, named) {
|
|
cleanup.call(this);
|
|
|
|
this.params = positional;
|
|
this.options = named;
|
|
this.element = element;
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
try {
|
|
this.doc.addEventListener(positional[0], this.listen);
|
|
} catch (e) {
|
|
// continue
|
|
}
|
|
}
|
|
|
|
@action
|
|
listen(e) {
|
|
if (this.element && this.dom.isOutside(this.element, e.target)) {
|
|
const dispatch = typeof this.params[1] === 'function' ? this.params[1] : (_) => {};
|
|
dispatch.apply(this.element, [e]);
|
|
}
|
|
}
|
|
}
|