Files
NODEDC_MISSION_CORE/apps/control-station/src/components/useApplicationPanelActions.ts
T

48 lines
1.5 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;
saveWorkspaceLayout: () => Promise<void>;
workspaceLayoutSaving: boolean;
systemUtilityActions: readonly ApplicationPanelUtilityAction[];
}
export function useApplicationPanelActions({
definition,
refreshRuntime,
saveWorkspaceLayout,
workspaceLayoutSaving,
systemUtilityActions,
}: 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(...systemUtilityActions);
return actions;
}, [
definition,
refreshRuntime,
saveWorkspaceLayout,
systemUtilityActions,
workspaceLayoutSaving,
]);
}