48 lines
1.5 KiB
TypeScript
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;
|
|
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,
|
|
]);
|
|
}
|