frontend: rig the ability to disable a medicine regimen
Parents:
2ab1b145 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";