Files
danak-admin/src/pages/taskmanager/task/hooks/useTaskData.ts
T
hamid zarghami 95177b529e
deploy to danak / build_and_deploy (push) Has been cancelled
update task phase
2026-07-12 12:29:52 +03:30

119 lines
3.8 KiB
TypeScript

import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import * as api from "../service/TaskService";
import {
ChangeTaskPhaseType,
CreateCheckListItemType,
CreateTaskAttachmentType,
CreateTaskRemarkType,
CreateTaskType,
UpdateCheckListItemType,
UpdateTaskType,
} from "../types/TaskTypes";
export const useGetTaskDetail = (id: string, enabled = true) => {
return useQuery({
queryKey: ["task-detail", id],
queryFn: () => api.getTaskDetail(id),
enabled: !!id && enabled,
});
};
export const useCreateTask = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (variables: CreateTaskType) => api.createTask(variables),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({ queryKey: ["project", variables.projectId] });
},
});
};
export const useUpdateTask = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, params }: { id: string; params: UpdateTaskType }) => api.updateTask(id, params),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({ queryKey: ["task-detail", variables.id] });
queryClient.invalidateQueries({ queryKey: ["project"] });
},
});
};
export const useChangeTaskPhase = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, params }: { id: string; params: ChangeTaskPhaseType; projectId: string }) =>
api.changeTaskPhase(id, params),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({ queryKey: ["task-detail", variables.id] });
queryClient.invalidateQueries({ queryKey: ["project", variables.projectId] });
queryClient.invalidateQueries({ queryKey: ["project"] });
},
});
};
export const useDeleteTask = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id }: { id: string; projectId: string }) => api.deleteTask(id),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({ queryKey: ["task-detail", variables.id] });
queryClient.invalidateQueries({ queryKey: ["project", variables.projectId] });
queryClient.invalidateQueries({ queryKey: ["project"] });
},
});
};
export const useCreateTaskRemark = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (variables: CreateTaskRemarkType) => api.createTaskRemark(variables),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({ queryKey: ["task-detail", variables.taskId] });
queryClient.invalidateQueries({ queryKey: ["project"] });
},
});
};
export const useCreateCheckListItem = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (variables: CreateCheckListItemType) => api.createCheckListItem(variables),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({ queryKey: ["task-detail", variables.taskId] });
queryClient.invalidateQueries({ queryKey: ["project"] });
},
});
};
export const useUpdateCheckListItem = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, params }: { id: string; params: UpdateCheckListItemType; taskId: string }) =>
api.updateCheckListItem(id, params),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({ queryKey: ["task-detail", variables.taskId] });
queryClient.invalidateQueries({ queryKey: ["project"] });
},
});
};
export const useCreateTaskAttachment = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (variables: CreateTaskAttachmentType) => api.createTaskAttachment(variables),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({ queryKey: ["task-detail", variables.taskId] });
queryClient.invalidateQueries({ queryKey: ["project"] });
},
});
};