Chris Hut a6c990c6fe
Cc 5545: Upgrade HDS packages and modifiers (#19226)
* 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>
2023-10-17 07:27:42 -06:00

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);
}
}