mirror of
https://github.com/ershisan99/todolist_next.git
synced 2025-12-16 20:59:24 +00:00
83 lines
2.0 KiB
TypeScript
83 lines
2.0 KiB
TypeScript
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
|
|
import { QUERY_KEYS } from "@/constants";
|
|
import { noRefetch } from "@/helpers";
|
|
import { TodolistAPI } from "@/services";
|
|
|
|
export const useTodolistsQuery = () => {
|
|
return useQuery({
|
|
queryFn: TodolistAPI.getTodolists,
|
|
queryKey: [QUERY_KEYS.TODOLISTS],
|
|
...noRefetch,
|
|
});
|
|
};
|
|
|
|
export const useCreateTodolistMutation = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: TodolistAPI.createTodolist,
|
|
//todo: add onMutate
|
|
onSuccess: async () => {
|
|
await queryClient.invalidateQueries([QUERY_KEYS.TODOLISTS]);
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useDeleteTodolistMutation = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: TodolistAPI.deleteTodolist,
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries([QUERY_KEYS.TODOLISTS]);
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useGetTasksQuery = (todolistId: string) => {
|
|
return useQuery({
|
|
queryKey: [QUERY_KEYS.TASKS, todolistId],
|
|
queryFn: () => TodolistAPI.getTodolistTasks({ todolistId }),
|
|
});
|
|
};
|
|
|
|
export const useCreateTaskMutation = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: TodolistAPI.createTask,
|
|
onSuccess: (res) => {
|
|
const todolistId = res.data.item.todoListId;
|
|
|
|
queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]);
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useUpdateTaskMutation = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: TodolistAPI.updateTask,
|
|
onSuccess: async (res) => {
|
|
const todolistId = res.data.item.todoListId;
|
|
|
|
await queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]);
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useDeleteTaskMutation = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: TodolistAPI.deleteTask,
|
|
onSuccess: (_, variables) => {
|
|
const todolistId = variables.todolistId;
|
|
|
|
queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]);
|
|
},
|
|
});
|
|
};
|