Files
todolist_next/src/services/todolists/todolists.hooks.ts
2023-04-04 17:53:19 +02:00

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]);
},
});
};