carbon-components
Version:
The Carbon Design System is IBM’s open-source design system for products and experiences.
74 lines (66 loc) • 2.13 kB
JavaScript
/**
* Copyright IBM Corp. 2016, 2018
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
import mixin from '../../globals/js/misc/mixin';
import createComponent from '../../globals/js/mixins/create-component';
import initComponentBySearch from '../../globals/js/mixins/init-component-by-search';
import eventedState from '../../globals/js/mixins/evented-state';
import handles from '../../globals/js/mixins/handles';
import on from '../../globals/js/misc/on';
class Notification extends mixin(
createComponent,
initComponentBySearch,
eventedState,
handles
) {
/**
* InlineNotification.
* @extends CreateComponent
* @extends InitComponentBySearch
* @extends Handles
* @param {HTMLElement} element The element working as a InlineNotification.
*/
constructor(element, options) {
super(element, options);
this.button = element.querySelector(this.options.selectorButton);
if (this.button) {
this.manage(
on(this.button, 'click', (evt) => {
if (evt.currentTarget === this.button) {
this.remove();
}
})
);
}
}
_changeState = (state, callback) => {
if (state === 'delete-notification') {
this.element.parentNode.removeChild(this.element);
this.release();
}
callback();
};
remove() {
this.changeState('delete-notification');
}
/**
* The map associating DOM element and accordion UI instance.
* @type {WeakMap}
*/
static components /* #__PURE_CLASS_PROPERTY__ */ = new WeakMap();
/**
* The component options.
* @property {string} selectorInit The CSS selector to find InlineNotification.
* @property {string} selectorButton The CSS selector to find close button.
*/
static options /* #__PURE_CLASS_PROPERTY__ */ = {
selectorInit: '[data-notification]',
selectorButton: '[data-notification-btn]',
eventBeforeDeleteNotification: 'notification-before-delete',
eventAfterDeleteNotification: 'notification-after-delete',
};
}
export default Notification;