79 lines
2.6 KiB
TypeScript
79 lines
2.6 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import { workflowEngineService } from '@/lib/services/workflow-engine.service';
|
|
import {
|
|
CreateWorkflowDefinitionDto,
|
|
UpdateWorkflowDefinitionDto,
|
|
EvaluateWorkflowDto,
|
|
GetAvailableActionsDto,
|
|
} from '@/types/dto/workflow-engine/workflow-engine.dto';
|
|
|
|
export const workflowKeys = {
|
|
all: ['workflows'] as const,
|
|
definitions: () => [...workflowKeys.all, 'definitions'] as const,
|
|
definition: (id: string | number) => [...workflowKeys.definitions(), id] as const,
|
|
};
|
|
|
|
export const useWorkflowDefinitions = () => {
|
|
return useQuery({
|
|
queryKey: workflowKeys.definitions(),
|
|
queryFn: () => workflowEngineService.getDefinitions(),
|
|
});
|
|
};
|
|
|
|
export const useWorkflowDefinition = (id: string | number) => {
|
|
return useQuery({
|
|
queryKey: workflowKeys.definition(id),
|
|
queryFn: () => workflowEngineService.getDefinitionById(id),
|
|
enabled: !!id,
|
|
});
|
|
};
|
|
|
|
export const useCreateWorkflowDefinition = () => {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (data: CreateWorkflowDefinitionDto) => workflowEngineService.createDefinition(data),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: workflowKeys.definitions() });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useUpdateWorkflowDefinition = () => {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ id, data }: { id: string | number; data: UpdateWorkflowDefinitionDto }) =>
|
|
workflowEngineService.updateDefinition(id, data),
|
|
onSuccess: (_, variables) => {
|
|
queryClient.invalidateQueries({ queryKey: workflowKeys.definitions() });
|
|
queryClient.invalidateQueries({ queryKey: workflowKeys.definition(variables.id) });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useDeleteWorkflowDefinition = () => {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (id: string | number) => workflowEngineService.deleteDefinition(id),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: workflowKeys.definitions() });
|
|
},
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Since this is a POST request, we use mutation. If you prefer to use useQuery,
|
|
* you would need to adjust the service to use GET (if possible) or pass the body via queryKey.
|
|
* For now, using useMutation for actions evaluation.
|
|
*/
|
|
export const useEvaluateWorkflow = () => {
|
|
return useMutation({
|
|
mutationFn: (data: EvaluateWorkflowDto) => workflowEngineService.evaluate(data),
|
|
});
|
|
};
|
|
|
|
export const useGetAvailableActions = () => {
|
|
return useMutation({
|
|
mutationFn: (data: GetAvailableActionsDto) => workflowEngineService.getAvailableActions(data),
|
|
});
|
|
};
|