icynet-auth-server/src/fe/ts/modal/modals.ts

41 lines
906 B
TypeScript

import { Modal } from './modal';
export class ModalManager {
public modals: Record<string, Modal> = {};
public closers = document.querySelectorAll(
'[data-modal-closer]',
) as NodeListOf<HTMLElement>;
constructor() {
this.closers.forEach((item) => {
item.setAttribute('aria-label', 'Close modal');
item.addEventListener('click', (evt) => {
evt.preventDefault();
this.close();
});
});
window.addEventListener('keyup', (evt: KeyboardEvent) => {
if (evt.key === 'Escape') {
this.close();
}
});
}
public register<T extends Modal>(item: T): T {
this.modals[item.name] = item;
item.initialize();
item.reset();
return item;
}
public close(name?: string): void {
if (name) {
this.modals[name].reset();
return;
}
Object.values(this.modals).forEach((item) => item.reset());
}
}