Files
bim_engine/src/managers/dialog-manager.ts

45 lines
1.3 KiB
TypeScript
Raw Normal View History

import { BimDialog } from '../components/dialog';
import type { DialogOptions } from '../components/dialog/index.type';
import type { ThemeConfig } from '../themes/types';
2025-12-08 10:02:24 +08:00
import { themeManager } from '../services/theme';
import { BaseManager } from '../core/base-manager';
export class DialogManager extends BaseManager {
private container: HTMLElement;
private activeDialogs: BimDialog[] = [];
constructor(container: HTMLElement) {
super();
this.container = container;
}
public create(options: Omit<DialogOptions, 'container'>): BimDialog {
const dialog = new BimDialog({
container: this.container,
...options,
onClose: () => {
this.activeDialogs = this.activeDialogs.filter(d => d !== dialog);
if (options.onClose) options.onClose();
}
});
dialog.setTheme(themeManager.getTheme());
this.activeDialogs.push(dialog);
return dialog;
}
public updateTheme(theme: ThemeConfig) {
this.activeDialogs.forEach(dialog => {
if (dialog.setTheme) {
dialog.setTheme(theme);
}
});
}
2025-12-08 10:02:24 +08:00
public destroy() {
this.activeDialogs.forEach(d => d.destroy());
this.activeDialogs = [];
super.destroy();
2025-12-08 10:02:24 +08:00
}
2025-12-22 18:48:38 +08:00
}