推进 INI 面板 control-page refresh workflow helper
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
import {
|
||||
refreshMachineSessionControlPage,
|
||||
} from "./control-page-refresh-workflow.js";
|
||||
|
||||
export function createMachineSessionControlPageController({
|
||||
panelFrame,
|
||||
statusNode,
|
||||
@@ -34,19 +38,16 @@ export function createMachineSessionControlPageController({
|
||||
}
|
||||
|
||||
function render() {
|
||||
const view = getControlView();
|
||||
if (!view) {
|
||||
statusNode.textContent = "waiting for panel";
|
||||
viewNode.textContent = "";
|
||||
return null;
|
||||
}
|
||||
return refresh().renderResult;
|
||||
}
|
||||
|
||||
statusNode.textContent = [
|
||||
view.status.lastAction ?? "-",
|
||||
view.status.runStatus ?? "-",
|
||||
view.status.error ?? "-",
|
||||
].join(" | ");
|
||||
return renderControlView(viewNode, view);
|
||||
function refresh() {
|
||||
return refreshMachineSessionControlPage({
|
||||
getControlView,
|
||||
statusNode,
|
||||
viewNode,
|
||||
renderControlView,
|
||||
});
|
||||
}
|
||||
|
||||
function startPolling() {
|
||||
@@ -72,6 +73,7 @@ export function createMachineSessionControlPageController({
|
||||
getPanelApi,
|
||||
getPanelWindow,
|
||||
mount,
|
||||
refresh,
|
||||
render,
|
||||
startPolling,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
export function controlPageStatusText(status = {}) {
|
||||
return [
|
||||
status.lastAction ?? "-",
|
||||
status.runStatus ?? "-",
|
||||
status.error ?? "-",
|
||||
].join(" | ");
|
||||
}
|
||||
|
||||
export function createControlPageRefreshState({
|
||||
phase,
|
||||
statusText,
|
||||
view = null,
|
||||
renderResult = null,
|
||||
error = null,
|
||||
} = {}) {
|
||||
return {
|
||||
phase,
|
||||
statusText,
|
||||
view,
|
||||
renderResult,
|
||||
error,
|
||||
};
|
||||
}
|
||||
|
||||
export function refreshMachineSessionControlPage({
|
||||
getControlView,
|
||||
statusNode,
|
||||
viewNode,
|
||||
renderControlView,
|
||||
} = {}) {
|
||||
if (typeof getControlView !== "function") {
|
||||
throw new Error("A control view getter is required.");
|
||||
}
|
||||
if (!statusNode) {
|
||||
throw new Error("A control page status node is required.");
|
||||
}
|
||||
if (!viewNode) {
|
||||
throw new Error("A control page view node is required.");
|
||||
}
|
||||
if (typeof renderControlView !== "function") {
|
||||
throw new Error("A control view renderer is required.");
|
||||
}
|
||||
|
||||
let view = null;
|
||||
try {
|
||||
view = getControlView() ?? null;
|
||||
} catch (error) {
|
||||
const statusText = `refresh failed | - | ${error.message}`;
|
||||
statusNode.textContent = statusText;
|
||||
viewNode.textContent = "";
|
||||
return createControlPageRefreshState({
|
||||
phase: "error",
|
||||
statusText,
|
||||
error: error.message,
|
||||
});
|
||||
}
|
||||
|
||||
if (!view) {
|
||||
const statusText = "waiting for panel";
|
||||
statusNode.textContent = statusText;
|
||||
viewNode.textContent = "";
|
||||
return createControlPageRefreshState({
|
||||
phase: "waiting",
|
||||
statusText,
|
||||
});
|
||||
}
|
||||
|
||||
const statusText = controlPageStatusText(view.status);
|
||||
statusNode.textContent = statusText;
|
||||
try {
|
||||
const renderResult = renderControlView(viewNode, view);
|
||||
return createControlPageRefreshState({
|
||||
phase: "rendered",
|
||||
statusText,
|
||||
view,
|
||||
renderResult,
|
||||
});
|
||||
} catch (error) {
|
||||
const errorStatusText = `refresh failed | - | ${error.message}`;
|
||||
statusNode.textContent = errorStatusText;
|
||||
viewNode.textContent = "";
|
||||
return createControlPageRefreshState({
|
||||
phase: "error",
|
||||
statusText: errorStatusText,
|
||||
view,
|
||||
error: error.message,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -21,5 +21,6 @@ controller.mount();
|
||||
window.linuxCncIniPanelControlPageApi = {
|
||||
getControlView: controller.getControlView,
|
||||
getPanelApi: controller.getPanelApi,
|
||||
refreshControlPage: controller.refresh,
|
||||
renderControlPage: controller.render,
|
||||
};
|
||||
|
||||
@@ -9,6 +9,16 @@ import {
|
||||
import {
|
||||
renderMachineSessionControlView,
|
||||
} from "./control-view-renderer.js";
|
||||
import {
|
||||
controlPageStatusText,
|
||||
createControlPageRefreshState,
|
||||
refreshMachineSessionControlPage,
|
||||
} from "./control-page-refresh-workflow.js";
|
||||
export {
|
||||
controlPageStatusText,
|
||||
createControlPageRefreshState,
|
||||
refreshMachineSessionControlPage,
|
||||
} from "./control-page-refresh-workflow.js";
|
||||
export {
|
||||
INI_PANEL_ENTRIES,
|
||||
getIniPanelEntryByHref,
|
||||
@@ -43,6 +53,7 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries
|
||||
launcherLinks: createIniPanelLauncherLinkViewModel(entries),
|
||||
controlPage: {
|
||||
createController: createMachineSessionControlPageController,
|
||||
refresh: refreshMachineSessionControlPage,
|
||||
renderView: renderMachineSessionControlView,
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user