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

49 lines
1.1 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 { registerDestructor } from '@ember/destroyable';
function cleanup(instance) {
if (instance && instance?.named?.sticky) {
instance.notify?.clearMessages();
}
}
export default class NotificationModifier extends Modifier {
@service('flashMessages') notify;
modify(element, _, named) {
this.named = named;
element.setAttribute('role', 'alert');
element.dataset['notification'] = null;
const options = {
timeout: 6000,
extendedTimeout: 300,
...named,
};
options.dom = element.outerHTML;
element.remove();
this.notify.clearMessages();
if (typeof options.after === 'function') {
Promise.resolve()
.then((_) => options.after())
.catch((e) => {
if (e.name !== 'TransitionAborted') {
throw e;
}
})
.then((_) => {
this.notify.add(options);
});
} else {
this.notify.add(options);
}
registerDestructor(this, cleanup);
}
}