eletrotupi / tcc/ commit / d02f513

frontend: rig new care actions use queries hooks

Pedro Lucas Porcellis porcellis@eletrotupi.com · 4 months ago d02f513430f49f5c5ff57d78eab853a7284e0cf2 Browse files
Parents 8091581
Changed 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 +
};