Files
leocrm/frontend/src/api/automation.ts
T

278 lines
7.6 KiB
TypeScript
Raw Normal View History

2026-07-23 20:00:37 +02:00
/**
* React Query hooks for Automation & Agents API.
* Follows the pattern from plugins.ts.
*/
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { apiGet, apiPost, apiPatch, apiDelete } from './client';
import type {
AutomationDefinition,
AutomationRun,
AutomationVersion,
AgentDefinition,
AgentRun,
AgentVersion,
AgentTool,
AutomationSettings,
MiniAppDef,
} from '@/types/automation';
// ── Automation Hooks ──
export function useAutomations() {
return useQuery({
queryKey: ['automations'],
queryFn: () => apiGet<AutomationDefinition[]>('/automation'),
});
}
export function useAutomation(id: string) {
return useQuery({
queryKey: ['automation', id],
queryFn: () => apiGet<AutomationDefinition>(`/automation/${id}`),
enabled: !!id,
});
}
export function useCreateAutomation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: Partial<AutomationDefinition>) => apiPost<AutomationDefinition>('/automation', data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['automations'] });
},
});
}
export function useUpdateAutomation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, data }: { id: string; data: Partial<AutomationDefinition> }) =>
apiPatch<AutomationDefinition>(`/automation/${id}`, data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['automations'] });
},
});
}
export function useDeleteAutomation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: string) => apiDelete(`/automation/${id}`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['automations'] });
},
});
}
export function useExecuteAutomation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: string) => apiPost(`/automation/${id}/execute`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['automationRuns'] });
},
});
}
export function useDryRunAutomation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: string) => apiPost(`/automation/${id}/dry-run`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['automationRuns'] });
},
});
}
export function useAutomationRuns(automationId: string) {
return useQuery({
queryKey: ['automationRuns', automationId],
queryFn: () => apiGet<AutomationRun[]>(`/automation/${automationId}/runs`),
enabled: !!automationId,
});
}
export function useAutomationVersions(automationId: string) {
return useQuery({
queryKey: ['automationVersions', automationId],
queryFn: () => apiGet<AutomationVersion[]>(`/automation/${automationId}/versions`),
enabled: !!automationId,
});
}
export function useRestoreAutomationVersion() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, versionId }: { id: string; versionId: string }) =>
apiPost(`/automation/${id}/versions/${versionId}/restore`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['automations'] });
queryClient.invalidateQueries({ queryKey: ['automationVersions'] });
},
});
}
export function useAutomationSettings() {
return useQuery({
queryKey: ['automationSettings'],
queryFn: () => apiGet<AutomationSettings>('/automation/settings'),
});
}
export function useUpdateAutomationSettings() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: Partial<AutomationSettings>) =>
apiPatch<AutomationSettings>('/automation/settings', data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['automationSettings'] });
},
});
}
// ── Agent Hooks ──
export function useAgents() {
return useQuery({
queryKey: ['agents'],
queryFn: () => apiGet<AgentDefinition[]>('/agents'),
});
}
export function useAgent(id: string) {
return useQuery({
queryKey: ['agent', id],
queryFn: () => apiGet<AgentDefinition>(`/agents/${id}`),
enabled: !!id,
});
}
export function useCreateAgent() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: Partial<AgentDefinition>) => apiPost<AgentDefinition>('/agents', data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['agents'] });
},
});
}
export function useUpdateAgent() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, data }: { id: string; data: Partial<AgentDefinition> }) =>
apiPatch<AgentDefinition>(`/agents/${id}`, data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['agents'] });
},
});
}
export function useDeleteAgent() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: string) => apiDelete(`/agents/${id}`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['agents'] });
},
});
}
export function useExecuteAgent() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: string) => apiPost(`/agents/${id}/execute`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['agentRuns'] });
},
});
}
export function useTestRunAgent() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: string) => apiPost(`/agents/${id}/test-run`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['agentRuns'] });
},
});
}
export function useAgentRuns(agentId: string) {
return useQuery({
queryKey: ['agentRuns', agentId],
queryFn: () => apiGet<AgentRun[]>(`/agents/${agentId}/runs`),
enabled: !!agentId,
});
}
export function useAgentVersions(agentId: string) {
return useQuery({
queryKey: ['agentVersions', agentId],
queryFn: () => apiGet<AgentVersion[]>(`/agents/${agentId}/versions`),
enabled: !!agentId,
});
}
export function useRestoreAgentVersion() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, versionId }: { id: string; versionId: string }) =>
apiPost(`/agents/${id}/versions/${versionId}/restore`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['agents'] });
queryClient.invalidateQueries({ queryKey: ['agentVersions'] });
},
});
}
export function useAgentTools() {
return useQuery({
queryKey: ['agentTools'],
queryFn: () => apiGet<AgentTool[]>('/agents/tools'),
});
}
// ── Agent Communication Hooks ──
export function useSendAgentMessage() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, toAgentName, message }: { id: string; toAgentName: string; message: string }) =>
apiPost(`/agents/${id}/send-message`, { to_agent_name: toAgentName, message }),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['agentRuns'] });
},
});
}
// ── MiniApp Hooks ──
export function useMiniApps() {
return useQuery({
queryKey: ['miniapps'],
queryFn: () => apiGet<MiniAppDef[]>('/automation/miniapps'),
});
}
export function useCreateMiniApp() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: Partial<MiniAppDef>) => apiPost<MiniAppDef>('/automation/miniapps', data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['miniapps'] });
},
});
}
export function useDeleteMiniApp() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (appId: string) => apiDelete(`/automation/miniapps/${appId}`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['miniapps'] });
},
});
}