import { useMemo } from "react"; import type { ApplicationPanelUtilityAction } from "@nodedc/ui-react"; import type { WorkspaceDefinition } from "../productModel"; interface ApplicationPanelActionsOptions { definition: WorkspaceDefinition | null; refreshRuntime: () => void; saveWorkspaceLayout: () => Promise; workspaceLayoutSaving: boolean; systemUtilityAction: ApplicationPanelUtilityAction; } export function useApplicationPanelActions({ definition, refreshRuntime, saveWorkspaceLayout, workspaceLayoutSaving, systemUtilityAction, }: ApplicationPanelActionsOptions): ApplicationPanelUtilityAction[] { return useMemo(() => { const actions: ApplicationPanelUtilityAction[] = []; if (definition?.kind === "device") { actions.push({ label: "Обновить состояние локального контура", icon: "refresh", onClick: refreshRuntime, }); } if (definition && ["spatial", "recordings"].includes(definition.kind)) { actions.push({ label: workspaceLayoutSaving ? "Сохраняем компоновку" : "Сохранить компоновку", icon: "save", disabled: workspaceLayoutSaving, onClick: () => void saveWorkspaceLayout(), }); } if (definition?.root === "system") actions.push(systemUtilityAction); return actions; }, [ definition, refreshRuntime, saveWorkspaceLayout, systemUtilityAction, workspaceLayoutSaving, ]); }