mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-15 20:30:33 +00:00
119 lines
2.7 KiB
TypeScript
119 lines
2.7 KiB
TypeScript
// @ts-nocheck
|
|
import { useQueryClient, useMutation } from 'react-query';
|
|
import { useRequestQuery } from '@/hooks/useQueryRequest';
|
|
import useApiRequest from '@/hooks/useRequest';
|
|
import t from './type';
|
|
|
|
// Common invalidate queries.
|
|
const commonInvalidateQueries = (queryClient) => {
|
|
// Invalidate projects.
|
|
queryClient.invalidateQueries(t.PROJECTS);
|
|
// Invalidate project tasks.
|
|
queryClient.invalidateQueries(t.PROJECT_TASKS);
|
|
};
|
|
|
|
/**
|
|
* Create a new project task.
|
|
* @param props
|
|
*/
|
|
export function useCreateProjectTask(props) {
|
|
const queryClient = useQueryClient();
|
|
const apiRequest = useApiRequest();
|
|
|
|
return useMutation(
|
|
([id, values]) => apiRequest.post(`/projects/${id}/tasks`, values),
|
|
{
|
|
onSuccess: (res, [id, values]) => {
|
|
// Common invalidate queries.
|
|
commonInvalidateQueries(queryClient);
|
|
},
|
|
...props,
|
|
},
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Edit the given project task.
|
|
* @param props
|
|
* @returns
|
|
*/
|
|
export function useEditProjectTask(props) {
|
|
const queryClient = useQueryClient();
|
|
const apiRequest = useApiRequest();
|
|
|
|
return useMutation(([id, values]) => apiRequest.put(`tasks/${id}`, values), {
|
|
onSuccess: (res, [id, values]) => {
|
|
// Common invalidate queries.
|
|
commonInvalidateQueries(queryClient);
|
|
|
|
// Invalidate specific project task.
|
|
queryClient.invalidateQueries([t.PROJECT_TASK, id]);
|
|
},
|
|
...props,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Delete the given project task.
|
|
* @param props
|
|
*/
|
|
export function useDeleteProjectTask(props) {
|
|
const queryClient = useQueryClient();
|
|
const apiRequest = useApiRequest();
|
|
|
|
return useMutation((id) => apiRequest.delete(`tasks/${id}`), {
|
|
onSuccess: (res, id) => {
|
|
// Invalidate specific project task.
|
|
queryClient.invalidateQueries([t.PROJECT_TASK, id]);
|
|
|
|
// Common invalidate queries.
|
|
commonInvalidateQueries(queryClient);
|
|
},
|
|
...props,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Retrive the given project task.
|
|
* @param taskId
|
|
* @param props
|
|
* @param requestProps
|
|
* @returns
|
|
*/
|
|
export function useProjectTask(taskId, props, requestProps) {
|
|
return useRequestQuery(
|
|
[t.PROJECT_TASK, taskId],
|
|
{ method: 'get', url: `tasks/${taskId}`, ...requestProps },
|
|
{
|
|
select: (res) => res.data.task,
|
|
defaultData: {},
|
|
...props,
|
|
},
|
|
);
|
|
}
|
|
|
|
const transformProjectTasks = (res) => ({
|
|
projectTasks: res.data.tasks,
|
|
});
|
|
|
|
/**
|
|
*
|
|
* @param projectId - Project id.
|
|
* @param query
|
|
* @param requestProps
|
|
* @returns
|
|
*/
|
|
export function useProjectTasks(projectId, props, requestProps) {
|
|
return useRequestQuery(
|
|
[t.PROJECT_TASKS, projectId],
|
|
{ method: 'get', url: `projects/${projectId}/tasks`, ...requestProps },
|
|
{
|
|
select: transformProjectTasks,
|
|
defaultData: {
|
|
projectTasks: [],
|
|
},
|
|
...props,
|
|
},
|
|
);
|
|
}
|