import { BindableProperty } from "@web-atoms/core/dist/core/BindableProperty"; import XNode from "@web-atoms/core/dist/core/XNode"; import { AtomControl } from "@web-atoms/core/dist/web/controls/AtomControl"; import { ChildEnumerator } from "@web-atoms/core/dist/web/core/AtomUI"; import MobileApp from "../mobile-app/MobileApp"; import "../styles/desktop-app.global.css"; import Action from "@web-atoms/core/dist/view-model/Action"; export default class DesktopApp extends AtomControl { @BindableProperty public menuRenderer: () => XNode; @BindableProperty public sideBarRenderer: () => XNode; @BindableProperty public statusBarRenderer: () => XNode; private initialized: boolean; public onPropertyChanged(name) { super.onPropertyChanged(name); if (!this.initialized) { return; } switch (name) { case "statusBarRenderer": this.recreate(name, "status-bar"); break; case "menuRenderer": this.recreate(name, "menu-renderer"); break; case "sideBarRenderer": this.recreate(name, "side-bar"); break; } } protected init(): any { } protected recreate(renderer, name, remove = true): HTMLElement { const node = this[renderer]?.() ?? undefined; if (remove) { for (const e of ChildEnumerator.enumerate(this.element)) { if (e.dataset.pageElement === name) { this.dispose(e); e.remove(); break; } } } if (node) { const na = node.attributes ??= {}; na["data-page-element"] = name; this.render(