frontend: rig new care actions use queries hooks
Pedro Lucas Porcellis porcellis@eletrotupi.com · 4 months ago
d02f513430f49f5c5ff57d78eab853a7284e0cf2 Browse filesParents
8091581Changed files
3
Additions
+200
Deletions
0
frontend/hooks/index.ts
1 1
// Legacy shit from react native
2 2
export { useThemeColor } from "@/hooks/use-theme-color";
3 3
4 4
export { useColorScheme } from "@/hooks/use-color-scheme";
5 5
25 25
useTriggers,
26 26
useTrigger,
27 27
useCreateTrigger,
28 28
useUpdateTrigger,
29 29
useDeleteTrigger,
30 +
useLinkMoodToTrigger,
30 31
} from "@/hooks/useTrigger.queries";
32 +
33 +
export {
34 +
medicineRegimenKeys,
35 +
useMedicineRegimens,
36 +
useCreateMedicineRegimen,
37 +
useUpdateMedicineRegimen,
38 +
useDeleteMedicineRegimen,
39 +
} from "@/hooks/useMedicineRegimen.queries";
40 +
41 +
export {
42 +
careActionKeys,
43 +
useCareActions,
44 +
useCareAction,
45 +
useCreateCareAction,
46 +
useDeleteCareAction,
47 +
} from "@/hooks/useCareAction.queries";
/dev/null → frontend/hooks/useCareAction.queries.ts
1 +
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
2 +
3 +
import {
4 +
apiClient,
5 +
CareAction,
6 +
CareActionType,
7 +
CreateCareActionPayload,
8 +
} from "@/lib/api";
9 +
10 +
interface CareActionFilters {
11 +
type?: CareActionType;
12 +
from?: string;
13 +
to?: string;
14 +
limit?: number;
15 +
}
16 +
17 +
export const careActionKeys = {
18 +
all: () => ["careActions"] as const,
19 +
lists: () => [...careActionKeys.all(), "list"] as const,
20 +
list: (filters?: CareActionFilters) => [...careActionKeys.lists(), filters] as const,
21 +
detail: (id: string) => [...careActionKeys.all(), "detail", id] as const,
22 +
};
23 +
24 +
export const useCareActions = (filters?: CareActionFilters) => {
25 +
return useQuery({
26 +
queryKey: careActionKeys.list(filters),
27 +
queryFn: () => apiClient.getCareActions(filters),
28 +
});
29 +
};
30 +
31 +
export const useCareAction = (id: string) => {
32 +
return useQuery({
33 +
queryKey: careActionKeys.detail(id),
34 +
queryFn: () => apiClient.getCareAction(id),
35 +
enabled: !!id,
36 +
});
37 +
};
38 +
39 +
export const useCreateCareAction = () => {
40 +
const queryClient = useQueryClient();
41 +
42 +
return useMutation({
43 +
mutationFn: (payload: CreateCareActionPayload) =>
44 +
apiClient.createCareAction(payload),
45 +
46 +
onSuccess: () => {
47 +
queryClient.invalidateQueries({ queryKey: careActionKeys.lists() });
48 +
},
49 +
});
50 +
};
51 +
52 +
export const useDeleteCareAction = () => {
53 +
const queryClient = useQueryClient();
54 +
55 +
return useMutation({
56 +
mutationFn: (id: string) => apiClient.deleteCareAction(id),
57 +
58 +
onMutate: async (id) => {
59 +
await queryClient.cancelQueries({ queryKey: careActionKeys.lists() });
60 +
const previous = queryClient.getQueryData(careActionKeys.list());
61 +
62 +
queryClient.setQueryData(
63 +
careActionKeys.list(),
64 +
(old: { entries: CareAction[] } | undefined) =>
65 +
old ? { ...old, entries: old.entries.filter((e) => e.id !== Number(id)) } : old,
66 +
);
67 +
68 +
return { previous };
69 +
},
70 +
71 +
onError: (_err, _id, context) => {
72 +
if (context?.previous) {
73 +
queryClient.setQueryData(careActionKeys.list(), context.previous);
74 +
}
75 +
},
76 +
77 +
onSuccess: () => {
78 +
queryClient.invalidateQueries({ queryKey: careActionKeys.lists() });
79 +
},
80 +
});
81 +
};
/dev/null → frontend/hooks/useMedicineRegimen.queries.ts
1 +
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
2 +
3 +
import {
4 +
apiClient,
5 +
MedicineRegimen,
6 +
CreateMedicineRegimenPayload,
7 +
UpdateMedicineRegimenPayload,
8 +
} from "@/lib/api";
9 +
10 +
export const medicineRegimenKeys = {
11 +
all: () => ["medicineRegimens"] as const,
12 +
lists: () => [...medicineRegimenKeys.all(), "list"] as const,
13 +
list: () => [...medicineRegimenKeys.lists()] as const,
14 +
detail: (id: string) => [...medicineRegimenKeys.all(), "detail", id] as const,
15 +
};
16 +
17 +
export const useMedicineRegimens = () => {
18 +
return useQuery({
19 +
queryKey: medicineRegimenKeys.list(),
20 +
queryFn: () => apiClient.getMedicineRegimens(),
21 +
});
22 +
};
23 +
24 +
export const useCreateMedicineRegimen = () => {
25 +
const queryClient = useQueryClient();
26 +
27 +
return useMutation({
28 +
mutationFn: (payload: CreateMedicineRegimenPayload) =>
29 +
apiClient.createMedicineRegimen(payload),
30 +
31 +
onSuccess: () => {
32 +
queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.lists() });
33 +
},
34 +
});
35 +
};
36 +
37 +
export const useUpdateMedicineRegimen = () => {
38 +
const queryClient = useQueryClient();
39 +
40 +
return useMutation({
41 +
mutationFn: ({ id, payload }: { id: string; payload: UpdateMedicineRegimenPayload }) =>
42 +
apiClient.updateMedicineRegimen(id, payload),
43 +
44 +
onMutate: async ({ id, payload }) => {
45 +
await queryClient.cancelQueries({ queryKey: medicineRegimenKeys.detail(id) });
46 +
await queryClient.cancelQueries({ queryKey: medicineRegimenKeys.lists() });
47 +
48 +
const previousDetail = queryClient.getQueryData(medicineRegimenKeys.detail(id));
49 +
50 +
if (previousDetail) {
51 +
queryClient.setQueryData(
52 +
medicineRegimenKeys.detail(id),
53 +
(old: MedicineRegimen) => ({ ...old, ...payload }),
54 +
);
55 +
}
56 +
57 +
return { previousDetail };
58 +
},
59 +
60 +
onError: (_err, { id }, context) => {
61 +
if (context?.previousDetail) {
62 +
queryClient.setQueryData(medicineRegimenKeys.detail(id), context.previousDetail);
63 +
}
64 +
},
65 +
66 +
onSuccess: (_data, { id }) => {
67 +
queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.detail(id) });
68 +
queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.lists() });
69 +
},
70 +
});
71 +
};
72 +
73 +
export const useDeleteMedicineRegimen = () => {
74 +
const queryClient = useQueryClient();
75 +
76 +
return useMutation({
77 +
mutationFn: (id: string) => apiClient.deleteMedicineRegimen(id),
78 +
79 +
onMutate: async (id) => {
80 +
await queryClient.cancelQueries({ queryKey: medicineRegimenKeys.lists() });
81 +
const previous = queryClient.getQueryData(medicineRegimenKeys.list());
82 +
83 +
queryClient.setQueryData(
84 +
medicineRegimenKeys.list(),
85 +
(old: { regimens: MedicineRegimen[] } | undefined) =>
86 +
old ? { ...old, regimens: old.regimens.filter((r) => r.id !== Number(id)) } : old,
87 +
);
88 +
89 +
return { previous };
90 +
},
91 +
92 +
onError: (_err, _id, context) => {
93 +
if (context?.previous) {
94 +
queryClient.setQueryData(medicineRegimenKeys.list(), context.previous);
95 +
}
96 +
},
97 +
98 +
onSuccess: () => {
99 +
queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.lists() });
100 +
},
101 +
});
102 +
};