import { INI_PANEL_ENTRIES, getIniPanelEntryByHref, getIniPanelEntryManifest, } from "./entry-manifest.js"; import { createMachineSessionControlPageController, } from "./control-page-controller.js"; import { renderMachineSessionControlView, } from "./control-view-renderer.js"; import { controlPageStatusText, createControlPageRefreshState, refreshMachineSessionControlPage, } from "./control-page-refresh-workflow.js"; import { createControlPageSessionLoadState, loadMachineSessionForControlPageWorkflow, } from "./control-page-session-workflow.js"; import { createMachineSessionReadonlyStatus, createMachineSessionReadonlyStatusApiManifest, readMachineSessionReadonlyStatus, } from "./readonly-status-api.js"; export { controlPageStatusText, createControlPageRefreshState, refreshMachineSessionControlPage, } from "./control-page-refresh-workflow.js"; export { createControlPageSessionLoadState, loadMachineSessionForControlPageWorkflow, } from "./control-page-session-workflow.js"; export { createMachineSessionReadonlyStatus, createMachineSessionReadonlyStatusApiManifest, readMachineSessionReadonlyStatus, } from "./readonly-status-api.js"; export { INI_PANEL_ENTRIES, getIniPanelEntryByHref, getIniPanelEntryManifest, } from "./entry-manifest.js"; export { createMachineSessionControlPageController, } from "./control-page-controller.js"; export { renderMachineSessionControlView, } from "./control-view-renderer.js"; export function getVisibleIniPanelEntries() { return getIniPanelEntryManifest(); } export function createIniPanelLauncherLinkViewModel(entries = getVisibleIniPanelEntries()) { return entries.map(({ id, href, title }) => ({ entryId: id, href, label: title, })); } export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntries()) { return { apiName: "ini-panel-launch", methods: [ "getLaunchApiManifest", "getLauncherLinks", "getControlPageApiMethods", ], visibleEntries: entries.map(({ id, href, title }) => ({ id, href, title, })), targetPages: entries.map(({ id, href }) => ({ entryId: id, href, })), controlPageApiMethods: createControlPageBrowserApiMethods(), }; } export function createIniPanelShellControlPageContract() { const readonlyStatusApiManifest = createMachineSessionReadonlyStatusApiManifest(); return { methodNames: [ "createController", "loadSessionState", "readStatus", "refresh", "renderView", ], readonlyStatusApiManifest, readonlyStatusApiMethodNames: Object.keys(readonlyStatusApiManifest.methods), readonlyStatusApiStatusFields: readonlyStatusApiManifest.statusFields, relatedControlPageMethods: readonlyStatusApiManifest.relatedControlPageMethods, }; } export function createControlPageBrowserApiMethods() { return [ "getControlPageApiMethods", "getControlPageContract", "getControlView", "getPanelApi", "loadControlPageSessionState", "readControlPageStatus", "refreshControlPage", "renderControlPage", ]; } export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) { return { pages: entries.map(({ id, href, title }) => ({ id, href, title, })), launcherLinks: createIniPanelLauncherLinkViewModel(entries), launchApiManifest: createIniPanelLaunchApiManifest(entries), controlPage: { browserApiMethods: createControlPageBrowserApiMethods(), contract: createIniPanelShellControlPageContract(), createController: createMachineSessionControlPageController, loadSessionState: loadMachineSessionForControlPageWorkflow, readonlyStatusApiManifest: createMachineSessionReadonlyStatusApiManifest(), readStatus: readMachineSessionReadonlyStatus, refresh: refreshMachineSessionControlPage, renderView: renderMachineSessionControlView, }, }; }