Skip to content

Commit 8979774

Browse files
authored
added keyfactory for where mutations exist (#307)
* added key factory for tests * added key factory for interactions * added keyfactory for traineeInfo
1 parent f3d5267 commit 8979774

File tree

8 files changed

+49
-21
lines changed

8 files changed

+49
-21
lines changed

client/src/features/trainee-profile/education/tests/TestsComponent.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { ConfirmationDialog } from '../../../../components/ConfirmationDialog';
66
import { Test } from '../../../../data/types/Trainee';
77
import { TestDetailsModal } from './TestDetailsModal';
88
import { TestsList } from './TestsList';
9-
import { useQueryClient } from '@tanstack/react-query';
109
import { useState } from 'react';
1110
import { useTraineeProfileContext } from '../../context/useTraineeProfileContext';
1211

@@ -23,9 +22,7 @@ export const TestsComponent = () => {
2322
const [isConfirmationDialogOpen, setIsConfirmationDialogOpen] = useState(false);
2423

2524
const [idToDelete, setIdToDelete] = useState<string>('');
26-
const queryClient = useQueryClient();
2725
const handleSuccess = () => {
28-
queryClient.invalidateQueries({ queryKey: ['tests', traineeId] });
2926
setIsModalOpen(false);
3027
setInitialTest(null);
3128
};
@@ -91,7 +88,6 @@ export const TestsComponent = () => {
9188
deleteTest(idToDelete, {
9289
onSuccess: () => {
9390
setIsConfirmationDialogOpen(false);
94-
queryClient.invalidateQueries({ queryKey: ['tests', traineeId] });
9591
},
9692
});
9793
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const TESTS_QUERY_KEY = 'tests';
2+
3+
export const testsQueryKeys = {
4+
list: (traineeId: string) => [TESTS_QUERY_KEY, 'list', traineeId] as const,
5+
};

client/src/features/trainee-profile/education/tests/data/test-queries.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
1-
import { useMutation, useQuery } from '@tanstack/react-query';
1+
import { addTest, deleteTest, editTest, getTests } from '../api/api';
2+
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
3+
24
import { Test } from '../../../../../data/types/Trainee';
3-
import { getTests, addTest, deleteTest, editTest } from '../api/api';
5+
import { testsQueryKeys } from './keys';
46

57
/**
68
* Hook to add a test to a trainee.
79
* @param {string} traineeId the id of the trainee to add the test to.
810
* @param {Test} test the test to add.
911
*/
1012
export const useAddTest = (traineeId: string) => {
13+
const queryClient = useQueryClient();
1114
return useMutation({
1215
mutationFn: (test: Test) => addTest(traineeId, test),
16+
onSuccess: async () => {
17+
await queryClient.invalidateQueries({ queryKey: testsQueryKeys.list(traineeId) });
18+
},
1319
});
1420
};
1521

@@ -20,7 +26,7 @@ export const useAddTest = (traineeId: string) => {
2026
*/
2127
export const useGetTests = (traineeId: string) => {
2228
return useQuery({
23-
queryKey: ['tests', traineeId],
29+
queryKey: testsQueryKeys.list(traineeId),
2430
queryFn: async () => {
2531
const data = await getTests(traineeId);
2632
return orderTestsByDateDesc(data);
@@ -38,8 +44,12 @@ export const useGetTests = (traineeId: string) => {
3844
* */
3945

4046
export const useDeleteTest = (traineeId: string) => {
47+
const queryClient = useQueryClient();
4148
return useMutation({
4249
mutationFn: (testId: string) => deleteTest(traineeId, testId),
50+
onSuccess: async () => {
51+
await queryClient.invalidateQueries({ queryKey: testsQueryKeys.list(traineeId) });
52+
},
4353
});
4454
};
4555

@@ -48,8 +58,12 @@ export const useDeleteTest = (traineeId: string) => {
4858
* @param {string} traineeId the id of the trainee to edit the test of.
4959
*/
5060
export const useEditTest = (traineeId: string) => {
61+
const queryClient = useQueryClient();
5162
return useMutation({
5263
mutationFn: (test: Test) => editTest(traineeId, test),
64+
onSuccess: async () => {
65+
await queryClient.invalidateQueries({ queryKey: testsQueryKeys.list(traineeId) });
66+
},
5367
});
5468
};
5569

client/src/features/trainee-profile/interactions/data/interaction-queries.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import { addInteraction, deleteInteraction, editInteraction, getInteractions } from '../api/api';
12
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
3+
24
import { Interaction } from '../Interactions';
3-
import { getInteractions, addInteraction, deleteInteraction, editInteraction } from '../api/api';
5+
import { interactionsQueryKeys } from './keys';
46

57
/**
68
* gets all interactions for a trainee
@@ -9,7 +11,7 @@ import { getInteractions, addInteraction, deleteInteraction, editInteraction } f
911
*/
1012
export const useGetInteractions = (traineeId: string) => {
1113
return useQuery({
12-
queryKey: ['interactions', traineeId],
14+
queryKey: interactionsQueryKeys.list(traineeId),
1315
queryFn: async () => {
1416
const interactions = await getInteractions(traineeId);
1517
return orderInteractionsByDateDesc(interactions);
@@ -34,8 +36,8 @@ export const useAddInteraction = (traineeId: string) => {
3436
// partial because not all fields are sent to the backend
3537
return useMutation({
3638
mutationFn: (interaction: Partial<Interaction>) => addInteraction(traineeId, interaction),
37-
onSuccess: () => {
38-
queryClient.invalidateQueries({ queryKey: ['interactions', traineeId] });
39+
onSuccess: async () => {
40+
await queryClient.invalidateQueries({ queryKey: interactionsQueryKeys.list(traineeId) });
3941
},
4042
});
4143
};
@@ -50,8 +52,8 @@ export const useDeleteInteraction = (traineeId: string) => {
5052

5153
return useMutation({
5254
mutationFn: (interactionId: string) => deleteInteraction(traineeId, interactionId),
53-
onSuccess: () => {
54-
queryClient.invalidateQueries({ queryKey: ['interactions', traineeId] });
55+
onSuccess: async () => {
56+
await queryClient.invalidateQueries({ queryKey: interactionsQueryKeys.list(traineeId) });
5557
},
5658
});
5759
};
@@ -65,8 +67,8 @@ export const useEditInteraction = (traineeId: string) => {
6567
const queryClient = useQueryClient();
6668
return useMutation({
6769
mutationFn: (interaction: Interaction) => editInteraction(traineeId, interaction),
68-
onSuccess: () => {
69-
queryClient.invalidateQueries({ queryKey: ['interactions', traineeId] });
70+
onSuccess: async () => {
71+
await queryClient.invalidateQueries({ queryKey: interactionsQueryKeys.list(traineeId) });
7072
},
7173
});
7274
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const INTERACTIONS_QUERY_KEY = 'interactions';
2+
3+
export const interactionsQueryKeys = {
4+
list: (traineeId: string) => [INTERACTIONS_QUERY_KEY, 'list', traineeId] as const,
5+
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const TRAINEE_QUERY_KEY = 'traineeInfo';
2+
3+
export const traineeQueryKeys = {
4+
details: (traineeId: string) => [TRAINEE_QUERY_KEY, 'details', traineeId] as const,
5+
};

client/src/features/trainee-profile/personal-info/data/useTraineeInfoData.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { getTrainee, updateTrainee } from '../api/api';
2-
import { useMutation, useQuery } from '@tanstack/react-query';
2+
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
33

44
import { Trainee } from '../../../../data/types/Trainee';
55
import { UpdateTraineeRequestData } from '../api/types';
6+
import { traineeQueryKeys } from './keys';
67

78
/**
89
* A React Query hook that fetches trainee information data form api.
@@ -11,7 +12,7 @@ import { UpdateTraineeRequestData } from '../api/types';
1112
*/
1213
export const useTraineeInfoData = (traineeId: string) => {
1314
return useQuery<Trainee, Error>({
14-
queryKey: ['traineeInfo', traineeId],
15+
queryKey: traineeQueryKeys.details(traineeId),
1516
queryFn: () => getTrainee(traineeId),
1617
enabled: !!traineeId,
1718
//Added because it keeps rendering
@@ -27,8 +28,12 @@ export const useTraineeInfoData = (traineeId: string) => {
2728
* @param {string} traineeId trainee id
2829
*/
2930
export const useSaveTraineeInfo = (traineeId: string) => {
31+
const queryClient = useQueryClient();
3032
return useMutation({
3133
mutationFn: (dataToSave: UpdateTraineeRequestData) => updateTrainee(traineeId, dataToSave),
34+
onSuccess: async () => {
35+
await queryClient.invalidateQueries({ queryKey: traineeQueryKeys.details(traineeId) });
36+
},
3237
});
3338
};
3439

client/src/features/trainee-profile/profile/components/TraineeProfile.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import PersonalInfo from '../../personal-info/PersonalInfo';
1616
import ProfileNav from './ProfileNav';
1717
import ProfileSidebar from '../ProfileSidebar';
1818
import { Trainee } from '../../../../data/types/Trainee';
19-
import { useQueryClient } from '@tanstack/react-query';
2019
import { useTraineeProfileContext } from '../../context/useTraineeProfileContext';
2120

2221
interface TraineeProfileProps {
@@ -35,7 +34,6 @@ const TraineeProfile = ({ id }: TraineeProfileProps) => {
3534
const { data: traineeData } = useTraineeInfoData(id);
3635
const { isPending: isSaveLoading, mutate } = useSaveTraineeInfo(id);
3736
const { isEditMode, setTrainee, setIsEditMode, getTraineeInfoChanges } = useTraineeProfileContext();
38-
const queryClient = useQueryClient();
3937

4038
const [snackbarOpen, setSnackbarOpen] = useState(false);
4139
const [snackbarSeverity, setSnackbarSeverity] = useState<'success' | 'error'>('success');
@@ -68,8 +66,6 @@ const TraineeProfile = ({ id }: TraineeProfileProps) => {
6866
setSnackbarSeverity('success');
6967
setSnackbarMessage('Trainee data saved successfully');
7068
setTrainee(data);
71-
72-
queryClient.invalidateQueries({ queryKey: ['traineeInfo', id] });
7369
setIsEditMode(false);
7470
},
7571
onError: (error: Error) => {

0 commit comments

Comments
 (0)