Capture the current unreleased K1 connection, recovery, lifecycle, viewer, and test work as a single known-bad baseline for subsequent fixes.
82 lines
2.6 KiB
TypeScript
82 lines
2.6 KiB
TypeScript
import { useMemo } from "react";
|
|
import type { ApplicationPanelUtilityAction } from "@nodedc/ui-react";
|
|
|
|
import type { WorkspaceDefinition } from "../productModel";
|
|
|
|
interface ApplicationPanelActionsOptions {
|
|
definition: WorkspaceDefinition | null;
|
|
refreshRuntime: () => void;
|
|
resetConnectionScenario?: () => Promise<boolean>;
|
|
connectionScenarioResetting: boolean;
|
|
saveWorkspaceLayout: () => Promise<void>;
|
|
workspaceLayoutSaving: boolean;
|
|
systemUtilityActions: readonly ApplicationPanelUtilityAction[];
|
|
}
|
|
|
|
export function deviceRuntimeUtilityAction({
|
|
refreshRuntime,
|
|
resetConnectionScenario,
|
|
connectionScenarioResetting,
|
|
}: Pick<
|
|
ApplicationPanelActionsOptions,
|
|
"refreshRuntime" | "resetConnectionScenario" | "connectionScenarioResetting"
|
|
>): ApplicationPanelUtilityAction {
|
|
return {
|
|
label: resetConnectionScenario
|
|
? connectionScenarioResetting
|
|
? "Сбрасываем подключение"
|
|
: "Сбросить подключение"
|
|
: "Обновить состояние локального контура",
|
|
icon: resetConnectionScenario && connectionScenarioResetting
|
|
? "activity"
|
|
: "refresh",
|
|
disabled: resetConnectionScenario && connectionScenarioResetting
|
|
? true
|
|
: undefined,
|
|
onClick: resetConnectionScenario
|
|
? connectionScenarioResetting
|
|
? () => undefined
|
|
: () => void resetConnectionScenario()
|
|
: refreshRuntime,
|
|
};
|
|
}
|
|
|
|
export function useApplicationPanelActions({
|
|
definition,
|
|
refreshRuntime,
|
|
resetConnectionScenario,
|
|
connectionScenarioResetting,
|
|
saveWorkspaceLayout,
|
|
workspaceLayoutSaving,
|
|
systemUtilityActions,
|
|
}: ApplicationPanelActionsOptions): ApplicationPanelUtilityAction[] {
|
|
return useMemo(() => {
|
|
const actions: ApplicationPanelUtilityAction[] = [];
|
|
if (definition?.kind === "device") {
|
|
actions.push(deviceRuntimeUtilityAction({
|
|
refreshRuntime,
|
|
resetConnectionScenario,
|
|
connectionScenarioResetting,
|
|
}));
|
|
}
|
|
if (definition && ["spatial", "recordings"].includes(definition.kind)) {
|
|
actions.push({
|
|
label: workspaceLayoutSaving ? "Сохраняем компоновку" : "Сохранить компоновку",
|
|
icon: "save",
|
|
disabled: workspaceLayoutSaving,
|
|
onClick: () => void saveWorkspaceLayout(),
|
|
});
|
|
}
|
|
if (definition?.root === "system") actions.push(...systemUtilityActions);
|
|
return actions;
|
|
}, [
|
|
definition,
|
|
refreshRuntime,
|
|
resetConnectionScenario,
|
|
connectionScenarioResetting,
|
|
saveWorkspaceLayout,
|
|
systemUtilityActions,
|
|
workspaceLayoutSaving,
|
|
]);
|
|
}
|