shoc-frontend-new/src/domain/settings/task-templates/use-cases/use-task-template-mutations.ts

70 lines
2.3 KiB
TypeScript
Raw Normal View History

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<void, Error, string | number> {
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");
},
});
}