// 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 = { //
// // //
h2>~~header~~
// // //

~~header~~

//
//
//
//
//
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 };