import { useMutation, useQueryClient, type UseMutationResult } from "@tanstack/react-query"; import { toast } from "react-toastify"; import { taskTemplatesApi } from "@/domain/settings/task-templates/api/task-templates-api"; import type { TaskTemplate, TaskTemplateFormValues, } from "@/domain/settings/task-templates/types/task-template"; import { queryKeys } from "@/infra/query-key/query-key"; interface UpdateTaskTemplateInput { id: string | number; values: TaskTemplateFormValues; } export function useCreateTaskTemplate(): UseMutationResult< TaskTemplate, Error, TaskTemplateFormValues > { const queryClient = useQueryClient(); return useMutation({ mutationFn: (values: TaskTemplateFormValues) => taskTemplatesApi.create(values), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: queryKeys.taskTemplates.all }); void queryClient.invalidateQueries({ queryKey: queryKeys.workOrders.taskTemplates() }); toast.success("Template created"); }, onError: (error: Error) => { toast.error(error.message || "Failed to create template"); }, }); } export function useUpdateTaskTemplate(): UseMutationResult< TaskTemplate, Error, UpdateTaskTemplateInput > { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, values }: UpdateTaskTemplateInput) => taskTemplatesApi.update(id, values), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: queryKeys.taskTemplates.all }); void queryClient.invalidateQueries({ queryKey: queryKeys.workOrders.taskTemplates() }); toast.success("Template updated"); }, onError: (error: Error) => { toast.error(error.message || "Failed to update template"); }, }); } export function useDeleteTaskTemplate(): UseMutationResult { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: string | number) => taskTemplatesApi.delete(id), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: queryKeys.taskTemplates.all }); void queryClient.invalidateQueries({ queryKey: queryKeys.workOrders.taskTemplates() }); toast.success("Template deleted"); }, onError: (error: Error) => { toast.error(error.message || "Failed to delete template"); }, }); }