-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathhook.ts
More file actions
70 lines (59 loc) · 2.19 KB
/
hook.ts
File metadata and controls
70 lines (59 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import type { UseQueryOptions } from '@tanstack/react-query';
import { getUpperGoalIds, getSubGoals, getCoreGoals, updateSubGoal } from '.';
import type { UpdateSubGoalRequest, SubGoalsResponse } from '.';
import type { BaseResponse } from '@/type/api';
import { QUERY_KEY } from '@/api/constant/queryKey';
type CycleType = 'DAILY' | 'WEEKLY' | 'ONCE';
export const EDIT_QUERY_KEY = {
all: ['edit'] as const,
upperGoalIds: (mandalartId: number) =>
[...EDIT_QUERY_KEY.all, 'upperGoalIds', mandalartId] as const,
subGoals: (mandalartId: number, coreGoalId?: number, cycle?: CycleType) =>
[...EDIT_QUERY_KEY.all, 'subGoals', mandalartId, coreGoalId, cycle] as const,
coreGoals: (mandalartId: number) => [...EDIT_QUERY_KEY.all, 'coreGoals', mandalartId] as const,
};
export const useUpperGoalIds = (mandalartId: number) => {
return useQuery({
queryKey: EDIT_QUERY_KEY.upperGoalIds(mandalartId),
queryFn: () => getUpperGoalIds(mandalartId),
enabled: !!mandalartId,
});
};
export const useSubGoals = (
mandalartId: number,
coreGoalId?: number,
cycle?: CycleType,
options?: Omit<UseQueryOptions<BaseResponse<SubGoalsResponse>>, 'queryKey' | 'queryFn'>,
) => {
const enabled = !!mandalartId && (options?.enabled ?? true);
return useQuery({
queryKey: EDIT_QUERY_KEY.subGoals(mandalartId, coreGoalId, cycle),
queryFn: () => getSubGoals(mandalartId, coreGoalId, cycle),
...options,
enabled,
});
};
export const useUpdateSubGoal = (mandalartId: number) => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: UpdateSubGoalRequest) => updateSubGoal(mandalartId, data),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: [...QUERY_KEY.MANDAL_ALL, mandalartId],
exact: true,
});
queryClient.invalidateQueries({
queryKey: EDIT_QUERY_KEY.subGoals(mandalartId),
exact: true,
});
},
});
};
export const useCoreGoals = (mandalartId: number) => {
return useQuery({
queryKey: EDIT_QUERY_KEY.coreGoals(mandalartId),
queryFn: () => getCoreGoals(mandalartId),
enabled: !!mandalartId,
});
};