// DataDashboard ~~ MIT License
// Controller
// Imports
import { dna, DnaCallback } from 'dna-engine';
import { fetchJson, FetchJsonLogger } from 'fetch-json';
import { libX } from 'web-ignition';
// Modules
import { WebAppWidget } from './config';
import { webAppLookup } from './lookup';
import { webAppNetwork } from './util';
import { webAppWidgets, WebAppWidgetsKey, WebAppWidgetCode } from './widgets';
const webAppController = {
//
//
//
//
//
//
//
//
//
//
//
//
showPanel(panelElem: HTMLElement): Element {
globalThis.window.scrollTo({ top: 0 });
const webAppWidgetsElem = panelElem.querySelector('web-app-widgets')!;
const showWidget = (widgetElem: Element) => {
const widget: WebAppWidget | null = dna.getModel(widgetElem) ?? null;
const msg = {
missingWidget: 'Missing widget, index: %s, panel: %s',
missingController: 'Widget controller missing: %s',
};
if (!widget)
throw new Error('[data-dashboard] ' + dna.util.printf(msg.missingWidget, panelElem.dataset.hash));
widgetElem.querySelector('web-app-widget-body')?.remove();
widgetElem.appendChild(dna.clone(widget.code, {}));
const webAppWidgetsKey = dna.util.toCamel(widget.code);
const widgetController = webAppWidgets[webAppWidgetsKey];
if (!widgetController)
throw new Error('[data-dashboard] ' + dna.util.printf(msg.missingController, widget.code));
widgetController.show(widgetElem);
};
dna.dom.forEach(webAppWidgetsElem.children, showWidget);
return panelElem;
},
setup(): void {
libX.ui.autoDisableButtons();
dna.registerInitializer(libX.bubbleHelp.setup);
fetchJson.enableLogger(webAppNetwork.logEvent);
webAppLookup.panels.forEach(panel =>
panel.widgetList = panel.widgets.map(code => (webAppLookup.widget[code])));
const displayedPanels = webAppLookup.panels.filter(panel => panel.display);
const onLoadSetup = () => {
dna.clone('web-app-menu-item', displayedPanels);
dna.clone('web-app-panel', displayedPanels);
};
dna.dom.onReady(onLoadSetup);
},
};
export { webAppController };