import api from "@/lib/api"; import { ApplyLayoutResult, AssignNodeBody, GetClusterLayoutResult, GetStatusResult, } from "./types"; import { useMutation, UseMutationOptions, useQuery, } from "@tanstack/react-query"; export const useClusterStatus = () => { return useQuery({ queryKey: ["status"], queryFn: () => api.get("/v1/status"), }); }; export const useClusterLayout = () => { return useQuery({ queryKey: ["layout"], queryFn: () => api.get("/v1/layout"), }); }; export const useConnectNode = (options?: Partial) => { return useMutation({ mutationFn: async (nodeId) => { const [res] = await api.post("/v1/connect", { body: [nodeId] }); if (!res.success) { throw new Error(res.error || "Unknown error"); } return res; }, ...(options as any), }); }; export const useAssignNode = (options?: Partial) => { return useMutation({ mutationFn: (data) => api.post("/v1/layout", { body: [data] }), ...(options as any), }); }; export const useUnassignNode = (options?: Partial) => { return useMutation({ mutationFn: (nodeId) => api.post("/v1/layout", { body: [{ id: nodeId, remove: true }] }), ...(options as any), }); }; export const useRevertChanges = (options?: Partial) => { return useMutation({ mutationFn: (version) => api.post("/v1/layout/revert", { body: { version } }), ...(options as any), }); }; export const useApplyChanges = (options?: Partial) => { return useMutation({ mutationFn: (version) => api.post("/v1/layout/apply", { body: { version } }), ...(options as any), }); };