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; connectionScenarioResetting: boolean; saveWorkspaceLayout: () => Promise; 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, ]); }