import 'jb-notification'; import 'jb-notification/wrapper'; // eslint-disable-next-line no-duplicate-imports import { JBNotificationWrapperWebComponent } from 'jb-notification/wrapper'; // eslint-disable-next-line no-duplicate-imports import { type JBNotificationWebComponent, type NotificationType } from 'jb-notification'; // new messaging system export class NotificationManager { #wrapperDom!: JBNotificationWrapperWebComponent; get wrapperDom() { return this.#wrapperDom; } constructor() { this.#initWrapperDom(); } #initWrapperDom() { const notificationWrapper = document.createElement('jb-notification-wrapper') as JBNotificationWrapperWebComponent; document.body.appendChild(notificationWrapper); this.#wrapperDom = notificationWrapper; } #createMessageDom(params: NewNotificationProps) { const { title, type, desc } = params; const notificationDom = document.createElement('jb-notification') as JBNotificationWebComponent; notificationDom.title = title; if (type) { notificationDom.type = type }; if (desc) { notificationDom.description = desc }; notificationDom.addEventListener("close", this.onNotificationClose.bind(this)); return notificationDom; } new(params: NewNotificationProps) { const { title, type, desc } = params; const dom = this.#createMessageDom({ title, type, desc }); //TODO: change it to new web component wrapper with managerial ability this.wrapperDom?.appendChild(dom); dom.show(); } onNotificationClose(e:Event) { this.wrapperDom.removeChild((e as any).target); } } export type NewNotificationProps = { title: string, type?: NotificationType, desc?: string }