mirror of
https://github.com/status-im/consul.git
synced 2025-01-09 21:35:52 +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>
68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import Modifier from 'ember-modifier';
|
|
import { inject as service } from '@ember/service';
|
|
import { runInDebug } from '@ember/debug';
|
|
import { registerDestructor } from '@ember/destroyable';
|
|
|
|
const typeAssertion = (type, value, withDefault) => {
|
|
return typeof value === type ? value : withDefault;
|
|
};
|
|
|
|
function cleanup(instance) {
|
|
if (instance && instance?.source && instance?.hash) {
|
|
instance.source?.off('success', instance.hash.success)?.off('error', instance.hash.error);
|
|
|
|
instance.source?.destroy();
|
|
instance.hash = null;
|
|
instance.source = null;
|
|
}
|
|
}
|
|
export default class WithCopyableModifier extends Modifier {
|
|
@service('clipboard/os') clipboard;
|
|
|
|
hash = null;
|
|
source = null;
|
|
|
|
connect([value], _hash) {
|
|
value = typeAssertion('string', value, this.element.innerText);
|
|
const hash = {
|
|
success: (e) => {
|
|
runInDebug((_) => console.info(`with-copyable: Copied \`${value}\``));
|
|
return typeAssertion('function', _hash.success, () => {})(e);
|
|
},
|
|
error: (e) => {
|
|
runInDebug((_) => console.info(`with-copyable: Error copying \`${value}\``));
|
|
return typeAssertion('function', _hash.error, () => {})(e);
|
|
},
|
|
};
|
|
this.source = this.clipboard
|
|
.execute(this.element, {
|
|
text: (_) => value,
|
|
container: this.element,
|
|
...hash.options,
|
|
})
|
|
.on('success', hash.success)
|
|
.on('error', hash.error);
|
|
this.hash = hash;
|
|
}
|
|
|
|
constructor() {
|
|
super(...arguments);
|
|
registerDestructor(this, cleanup);
|
|
}
|
|
|
|
modify(element, value, namedArgs) {
|
|
this.element = element;
|
|
this.disconnect();
|
|
this.connect(value, namedArgs);
|
|
}
|
|
|
|
disconnect() {
|
|
cleanup.call(this);
|
|
}
|
|
}
|