eletrotupi / tcc/ commit / 9879196

frontend: rig the ability to disable a medicine regimen

Pedro Lucas Porcellis porcellis@eletrotupi.com 1 month ago 9879196f5eaf3242b6682db701cf97ceb37b4487
Parents: 2ab1b14
5 file(s) changed
  • frontend/hooks/index.ts +2 -0
  • frontend/hooks/useCareAction.queries.ts +2 -0
  • frontend/hooks/useMedicineRegimen.queries.ts +24 -0
  • frontend/lib/api/client.ts +14 -0
  • frontend/lib/api/index.ts +1 -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 unchanged lines
31 31
} from "@/hooks/useTrigger.queries";
32 32

33 33
export {
34 34
  medicineRegimenKeys,
35 35
  useMedicineRegimens,
36 +
  useMedicineRegimen,
36 37
  useCreateMedicineRegimen,
37 38
  useUpdateMedicineRegimen,
39 +
  useToggleMedicineRegimen,
38 40
  useDeleteMedicineRegimen,
39 41
} from "@/hooks/useMedicineRegimen.queries";
40 42

41 43
export {
42 44
  medicineTodayKeys,
▸ 8 unchanged lines
51 53
  useCareAction,
52 54
  useCreateCareAction,
53 55
  usePatchCareAction,
54 56
  useDeleteCareAction,
55 57
} from "@/hooks/useCareAction.queries";
frontend/hooks/useCareAction.queries.ts
1 1
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
2 2

3 3
import {
4 4
  apiClient,
5 5
  CareAction,
6 6
  CareActionType,
7 7
  CreateCareActionPayload,
8 8
  PatchCareActionPayload,
9 9
} from "@/lib/api";
10 10
import { medicineTodayKeys } from "@/hooks/useMedicineToday.queries";
11 +
import { medicineRegimenKeys } from "@/hooks/useMedicineRegimen.queries";
11 12

12 13
interface CareActionFilters {
13 14
  type?: CareActionType;
14 15
  from?: string;
15 16
  to?: string;
▸ 30 unchanged lines
46 47
      apiClient.createCareAction(payload),
47 48

48 49
    onSuccess: () => {
49 50
      queryClient.invalidateQueries({ queryKey: careActionKeys.lists() });
50 51
      queryClient.invalidateQueries({ queryKey: medicineTodayKeys.list() });
52 +
      queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.lists() });
51 53
    },
52 54
  });
53 55
};
54 56

55 57
export const usePatchCareAction = () => {
▸ 38 unchanged lines
94 96
    onSuccess: () => {
95 97
      queryClient.invalidateQueries({ queryKey: careActionKeys.lists() });
96 98
    },
97 99
  });
98 100
};
frontend/hooks/useMedicineRegimen.queries.ts
1 1
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
2 2

3 3
import {
4 4
  apiClient,
5 5
  MedicineRegimen,
6 6
  CreateMedicineRegimenPayload,
7 7
  UpdateMedicineRegimenPayload,
8 8
} from "@/lib/api";
9 +
import { medicineTodayKeys } from "@/hooks/useMedicineToday.queries";
9 10

10 11
export const medicineRegimenKeys = {
11 12
  all: () => ["medicineRegimens"] as const,
12 13
  lists: () => [...medicineRegimenKeys.all(), "list"] as const,
13 14
  list: () => [...medicineRegimenKeys.lists()] as const,
▸ 2 unchanged lines
16 17

17 18
export const useMedicineRegimens = () => {
18 19
  return useQuery({
19 20
    queryKey: medicineRegimenKeys.list(),
20 21
    queryFn: () => apiClient.getMedicineRegimens(),
22 +
  });
23 +
};
24 +

25 +
export const useMedicineRegimen = (id: string) => {
26 +
  return useQuery({
27 +
    queryKey: medicineRegimenKeys.detail(id),
28 +
    queryFn: () => apiClient.getMedicineRegimen(id),
29 +
    enabled: !!id,
21 30
  });
22 31
};
23 32

24 33
export const useCreateMedicineRegimen = () => {
25 34
  const queryClient = useQueryClient();
▸ 38 unchanged lines
64 73
    },
65 74

66 75
    onSuccess: (_data, { id }) => {
67 76
      queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.detail(id) });
68 77
      queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.lists() });
78 +
      queryClient.invalidateQueries({ queryKey: medicineTodayKeys.list() });
79 +
    },
80 +
  });
81 +
};
82 +

83 +
export const useToggleMedicineRegimen = () => {
84 +
  const queryClient = useQueryClient();
85 +

86 +
  return useMutation({
87 +
    mutationFn: ({ id, active }: { id: string; active: boolean }) =>
88 +
      apiClient.toggleMedicineRegimen(id, active),
89 +

90 +
    onSuccess: () => {
91 +
      queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.lists() });
92 +
      queryClient.invalidateQueries({ queryKey: medicineTodayKeys.list() });
69 93
    },
70 94
  });
71 95
};
72 96

73 97
export const useDeleteMedicineRegimen = () => {
▸ 24 unchanged lines
98 122
    onSuccess: () => {
99 123
      queryClient.invalidateQueries({ queryKey: medicineRegimenKeys.lists() });
100 124
    },
101 125
  });
102 126
};
frontend/lib/api/client.ts
1 1
import * as SecureStore from "expo-secure-store";
2 2
import {
3 3
  User,
4 4
  AuthResponse,
5 5
  VerifyTokenResponse,
▸ 329 unchanged lines
335 335
  // Medicine Regimens
336 336
  async getMedicineRegimens(): Promise<{ regimens: MedicineRegimen[] }> {
337 337
    return this.request('/medicine-regimens');
338 338
  }
339 339

340 +
  async getMedicineRegimen(id: string): Promise<{ regimen: MedicineRegimen }> {
341 +
    return this.request(`/medicine-regimens/${id}`);
342 +
  }
343 +

340 344
  async createMedicineRegimen(
341 345
    regimen: CreateMedicineRegimenPayload
342 346
  ): Promise<MedicineRegimenResponse> {
343 347
    return this.request('/medicine-regimens', {
344 348
      method: 'POST',
▸ 11 unchanged lines
356 360
    });
357 361
  }
358 362

359 363
  async deleteMedicineRegimen(id: string): Promise<void> {
360 364
    return this.request(`/medicine-regimens/${id}`, { method: 'DELETE' });
365 +
  }
366 +

367 +
  async toggleMedicineRegimen(
368 +
    id: string,
369 +
    active: boolean,
370 +
  ): Promise<MedicineRegimenResponse> {
371 +
    return this.request(`/medicine-regimens/${id}/active`, {
372 +
      method: 'PATCH',
373 +
      body: JSON.stringify({ active }),
374 +
    });
361 375
  }
362 376

363 377
  async getMedicineRegimensToday(): Promise<{ regimens: TodayMedicineEntry[] }> {
364 378
    return this.request('/medicine-regimens/today');
365 379
  }
▸ 64 unchanged lines
430 444
    return this.request(`/triggers/${triggerId}/link-mood/${moodId}`, { method: 'DELETE' });
431 445
  }
432 446
}
433 447

434 448
export const apiClient = new ApiClient();
frontend/lib/api/index.ts
1 1
export { apiClient } from "@/lib/api/client";
2 2

3 3
export type {
4 4
  User,
5 5
  AuthResponse,
▸ 25 unchanged lines
31 31
  CreateCareActionAppointmentPayload,
32 32
  CreateCareActionActivityPayload,
33 33
  PatchCareActionPayload,
34 34
  // Medicine Regimens
35 35
  MedicineRegimen,
36 +
  MedicinePeriodicity,
36 37
  MedicineRegimenResponse,
37 38
  CreateMedicineRegimenPayload,
38 39
  UpdateMedicineRegimenPayload,
39 40
  TodayMedicineEntry,
40 41
  UserPreferencesPayload,
▸ 2 unchanged lines
43 44
  TriggerMoodLink,
44 45
  TriggerMoodLinkWithMood,
45 46
  TriggerMoodLinkWithTrigger,
46 47
  LinkMoodPayload,
47 48
} from "@/lib/api/types";