frontend: rig new care actions use queries hooks
Parents:
80915813 file(s) changed
- frontend/hooks/index.ts +17 -0
- frontend/hooks/useCareAction.queries.ts +81 -0
- frontend/hooks/useMedicineRegimen.queries.ts +102 -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
▸ 19 unchanged lines
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";
frontend/hooks/useCareAction.queries.ts
@@ -0,0 +1,81 @@
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 + };
frontend/hooks/useMedicineRegimen.queries.ts
@@ -0,0 +1,102 @@
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 + };