diff --git a/SparkyFitnessFrontend/src/api/Diary/dailyProgressService.ts b/SparkyFitnessFrontend/src/api/Diary/dailyProgressService.ts deleted file mode 100644 index 5b4945943..000000000 --- a/SparkyFitnessFrontend/src/api/Diary/dailyProgressService.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { FoodEntry } from '@/types/food'; -import type { Goals } from '@/types/diary'; -import type { CheckInMeasurement } from '@/types/checkin'; -import type { GroupedExerciseEntry } from '@/types/exercises'; -import { loadGoals } from '@/api/Goals/goals'; -import { loadFoodEntries } from '@/api/Diary/foodEntryService'; -import { loadExistingCheckInMeasurements } from '@/api/CheckIn/checkInService'; -import { getErrorMessage } from '@/utils/api'; - -export { getExerciseEntriesForDate } from '../Exercises/exerciseEntryService'; - -export const getGoalsForDate = async (date: string): Promise => { - return loadGoals(date); -}; - -export const getFoodEntriesForDate = async ( - date: string -): Promise => { - const data = await loadFoodEntries(date); - return data || []; -}; - -export const getCheckInMeasurementsForDate = async ( - date: string -): Promise => { - try { - const measurement = await loadExistingCheckInMeasurements(date); - return measurement || null; - } catch (error: unknown) { - const message = getErrorMessage(error); - if (message.includes('404')) { - return null; - } - throw error; - } -}; - -// Re-export types so existing consumers don't break -export type { Goals, CheckInMeasurement, GroupedExerciseEntry }; diff --git a/SparkyFitnessFrontend/src/api/keys/admin.ts b/SparkyFitnessFrontend/src/api/keys/admin.ts index 34ab8f255..6d97f5a68 100644 --- a/SparkyFitnessFrontend/src/api/keys/admin.ts +++ b/SparkyFitnessFrontend/src/api/keys/admin.ts @@ -11,10 +11,10 @@ export const settingsKeys = { export const userKeys = { all: ['users'] as const, - list: (filters: { searchTerm: string; sortBy: string; sortOrder: string }) => [...userKeys.all, filters] as const, profile: (userId: string) => [...userKeys.all, 'profile', userId] as const, + avatar: (url: string) => [...userKeys.all, 'profile', 'avatar', url] as const, }; export const aiServiceKeys = { diff --git a/SparkyFitnessFrontend/src/api/keys/checkin.ts b/SparkyFitnessFrontend/src/api/keys/checkin.ts index 8755f3b92..6ddae1865 100644 --- a/SparkyFitnessFrontend/src/api/keys/checkin.ts +++ b/SparkyFitnessFrontend/src/api/keys/checkin.ts @@ -13,6 +13,8 @@ export const checkInKeys = { [...checkInKeys.all, 'mostRecent', type] as const, customEntries: (categoryId: string, userId?: string) => [...checkInKeys.all, 'customEntries', categoryId, userId] as const, + rawStressData: (userId: string, categoryId: string) => + [...checkInKeys.all, 'rawStressData', userId, categoryId] as const, }; export const moodKeys = { diff --git a/SparkyFitnessFrontend/src/api/keys/diary.ts b/SparkyFitnessFrontend/src/api/keys/diary.ts index a39020e61..ad57c3492 100644 --- a/SparkyFitnessFrontend/src/api/keys/diary.ts +++ b/SparkyFitnessFrontend/src/api/keys/diary.ts @@ -5,10 +5,7 @@ export const mealTypeKeys = { export const dailyProgressKeys = { all: ['dailyProgress'] as const, - goals: (date: string) => [...dailyProgressKeys.all, 'goals', date] as const, steps: (date: string) => [...dailyProgressKeys.all, 'steps', date] as const, - exercises: (date: string) => - [...dailyProgressKeys.all, 'exercises', date] as const, measurements: { mostRecent: (type: string) => [...dailyProgressKeys.all, 'measurements', 'recent', type] as const, @@ -20,6 +17,8 @@ export const dailyProgressKeys = { export const foodEntryKeys = { all: ['foodEntries'] as const, byDate: (date: string) => [...foodEntryKeys.all, 'date', date] as const, + foodIntake: (date: string) => + [...foodEntryKeys.all, 'foodIntake', date] as const, }; export const foodEntryMealKeys = { diff --git a/SparkyFitnessFrontend/src/api/keys/exercises.ts b/SparkyFitnessFrontend/src/api/keys/exercises.ts index 52de4875e..26a15cd3a 100644 --- a/SparkyFitnessFrontend/src/api/keys/exercises.ts +++ b/SparkyFitnessFrontend/src/api/keys/exercises.ts @@ -109,6 +109,8 @@ export const exerciseEntryKeys = { entryId, providerName, ] as const, + dailyStats: (date: string) => + [...exerciseEntryKeys.all, 'dailyStats', date] as const, }; export const suggestedExercisesKeys = { all: ['exercises', 'suggested'] as const, diff --git a/SparkyFitnessFrontend/src/api/keys/meals.ts b/SparkyFitnessFrontend/src/api/keys/meals.ts index 4efdba614..8b3460554 100644 --- a/SparkyFitnessFrontend/src/api/keys/meals.ts +++ b/SparkyFitnessFrontend/src/api/keys/meals.ts @@ -33,7 +33,8 @@ export const providerKeys = { }; export const mealPlanKeys = { - all: (userId: string) => [userId, 'mealplan'] as const, + all: ['mealPlans'] as const, + byUser: (userId: string) => [...mealPlanKeys.all, userId] as const, }; export const customNutrientsKeys = { diff --git a/SparkyFitnessFrontend/src/api/keys/settings.ts b/SparkyFitnessFrontend/src/api/keys/settings.ts index cdd5c5a54..8e4403d48 100644 --- a/SparkyFitnessFrontend/src/api/keys/settings.ts +++ b/SparkyFitnessFrontend/src/api/keys/settings.ts @@ -3,11 +3,6 @@ export const externalProviderKeys = { lists: () => [...externalProviderKeys.all, 'list'] as const, }; -export const customCategoryKeys = { - all: ['customCategories'] as const, - lists: () => [...customCategoryKeys.all, 'list'] as const, -}; - export const familyAccessKeys = { all: ['familyAccess'] as const, lists: () => [...familyAccessKeys.all, 'list'] as const, @@ -31,11 +26,6 @@ export const apiKeyKeys = { lists: () => [...apiKeyKeys.all, 'list'] as const, }; -export const profileKeys = { - all: ['profile'] as const, - avatar: (url: string) => [...profileKeys.all, 'avatar', url] as const, -}; - export const preferencesKeys = { all: ['preferences'] as const, user: () => [...preferencesKeys.all, 'user'] as const, diff --git a/SparkyFitnessFrontend/src/hooks/CheckIn/useCheckIn.ts b/SparkyFitnessFrontend/src/hooks/CheckIn/useCheckIn.ts index 62265df69..fb98dd6ee 100644 --- a/SparkyFitnessFrontend/src/hooks/CheckIn/useCheckIn.ts +++ b/SparkyFitnessFrontend/src/hooks/CheckIn/useCheckIn.ts @@ -14,6 +14,7 @@ import { getMostRecentMeasurement, } from '@/api/CheckIn/checkInService'; import { checkInKeys } from '@/api/keys/checkin'; +import { dailyProgressKeys } from '@/api/keys/diary'; export const useCustomCategories = (userId?: string) => { return useQuery({ @@ -102,7 +103,8 @@ export const useDeleteCustomMeasurementMutation = () => { return useMutation({ mutationFn: (id: string) => deleteCustomMeasurement(id), onSuccess: () => { - return queryClient.invalidateQueries({ queryKey: checkInKeys.all }); + queryClient.invalidateQueries({ queryKey: checkInKeys.all }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { errorMessage: t( @@ -123,7 +125,8 @@ export const useUpdateCheckInMeasurementFieldMutation = () => { return useMutation({ mutationFn: updateCheckInMeasurementField, onSuccess: () => { - return queryClient.invalidateQueries({ queryKey: checkInKeys.all }); + queryClient.invalidateQueries({ queryKey: checkInKeys.all }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { errorMessage: t( @@ -144,7 +147,8 @@ export const useSaveCheckInMeasurementsMutation = () => { return useMutation({ mutationFn: saveCheckInMeasurements, onSuccess: () => { - return queryClient.invalidateQueries({ queryKey: checkInKeys.all }); + queryClient.invalidateQueries({ queryKey: checkInKeys.all }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { errorMessage: t( diff --git a/SparkyFitnessFrontend/src/hooks/Diary/useDailyProgress.ts b/SparkyFitnessFrontend/src/hooks/Diary/useDailyProgress.ts index 5ed00ef60..cf3f51268 100644 --- a/SparkyFitnessFrontend/src/hooks/Diary/useDailyProgress.ts +++ b/SparkyFitnessFrontend/src/hooks/Diary/useDailyProgress.ts @@ -9,16 +9,17 @@ import { convertStepsToCalories, } from '@/utils/nutritionCalculations'; import { getExerciseEntriesForDate } from '@/api/Exercises/exerciseEntryService'; -import { - getCheckInMeasurementsForDate, - getFoodEntriesForDate, - getGoalsForDate, -} from '@/api/Diary/dailyProgressService'; import { userManagementService } from '@/api/Admin/userManagementService'; -import { getMostRecentMeasurement } from '@/api/CheckIn/checkInService'; +import { + getMostRecentMeasurement, + loadExistingCheckInMeasurements, +} from '@/api/CheckIn/checkInService'; import { adaptiveTdeeService } from '@/api/Settings/adaptiveTdeeService'; import { calculateBmr, BmrAlgorithm } from '@/services/bmrService'; import { GroupedExerciseEntry } from '@/types/exercises'; +import { userKeys } from '@/api/keys/admin'; +import { exerciseEntryKeys } from '@/api/keys/exercises'; +import { loadFoodEntries } from '@/api/Diary/foodEntryService'; export const useAdaptiveTdee = (date: string) => { return useQuery({ @@ -28,26 +29,11 @@ export const useAdaptiveTdee = (date: string) => { }); }; -export const useDailyGoals = (date: string) => { - const { t } = useTranslation(); - return useQuery({ - queryKey: dailyProgressKeys.goals(date), - queryFn: () => getGoalsForDate(date), - enabled: !!date, - meta: { - errorMessage: t( - 'dailyProgress.goalsLoadError', - 'Failed to load daily goals.' - ), - }, - }); -}; - export const useDailyFoodIntake = (date: string) => { const { t } = useTranslation(); return useQuery({ - queryKey: foodEntryKeys.byDate(date), - queryFn: () => getFoodEntriesForDate(date), + queryKey: foodEntryKeys.foodIntake(date), + queryFn: () => loadFoodEntries(date), enabled: !!date, select: (entries: FoodEntry[]) => { const totals = entries.reduce( @@ -86,7 +72,7 @@ export const useDailyFoodIntake = (date: string) => { export const useDailyExerciseStats = (date: string) => { const { t } = useTranslation(); return useQuery({ - queryKey: dailyProgressKeys.exercises(date), + queryKey: exerciseEntryKeys.dailyStats(date), queryFn: () => getExerciseEntriesForDate(date), enabled: !!date, select: (data: GroupedExerciseEntry[]) => { @@ -129,7 +115,7 @@ export const useDailyExerciseStats = (date: string) => { export const useDailySteps = (date: string) => { return useQuery({ queryKey: dailyProgressKeys.steps(date), - queryFn: () => getCheckInMeasurementsForDate(date), + queryFn: () => loadExistingCheckInMeasurements(date), enabled: !!date, select: (data) => { const steps = data?.steps || 0; @@ -176,7 +162,7 @@ export const useCalculatedBMR = () => { const { bmrAlgorithm, includeBmrInNetCalories } = usePreferences(); const { data: userProfile } = useQuery({ - queryKey: ['user', 'profile', user?.id], + queryKey: userKeys.profile(user?.id), queryFn: () => userManagementService.getUserProfile(user!.id), enabled: !!user?.id, }); diff --git a/SparkyFitnessFrontend/src/hooks/Diary/useFoodEntries.ts b/SparkyFitnessFrontend/src/hooks/Diary/useFoodEntries.ts index 8837128dd..16a67b7d0 100644 --- a/SparkyFitnessFrontend/src/hooks/Diary/useFoodEntries.ts +++ b/SparkyFitnessFrontend/src/hooks/Diary/useFoodEntries.ts @@ -23,7 +23,11 @@ import { } from '@/api/Diary/foodEntryService'; import { goalKeys } from '@/api/keys/goals'; -import { foodEntryKeys, foodEntryMealKeys } from '@/api/keys/diary'; +import { + dailyProgressKeys, + foodEntryKeys, + foodEntryMealKeys, +} from '@/api/keys/diary'; import i18n from '@/i18n'; export const useFoodEntries = (date: string) => { @@ -81,10 +85,10 @@ export const useCreateFoodEntryMutation = () => { return useMutation({ mutationFn: createFoodEntry, - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: foodEntryKeys.byDate(variables.entry_date), - }); + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: foodEntryMealKeys.all }); + queryClient.invalidateQueries({ queryKey: foodEntryKeys.all }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { successMessage: t('diary.addSuccess', 'Food added successfully.'), @@ -102,6 +106,8 @@ export const useUpdateFoodEntryMutation = () => { updateFoodEntry(id, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: foodEntryKeys.all }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); + queryClient.invalidateQueries({ queryKey: foodEntryMealKeys.all }); }, meta: { successMessage: t('diary.updateSuccess', 'Entry updated.'), @@ -118,6 +124,7 @@ export const useDeleteFoodEntryMutation = () => { mutationFn: removeFoodEntry, onSuccess: () => { queryClient.invalidateQueries({ queryKey: foodEntryKeys.all }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { successMessage: t('diary.deleteSuccess', 'Entry deleted.'), @@ -147,6 +154,7 @@ export const useCopyFoodEntriesMutation = () => { queryClient.invalidateQueries({ queryKey: foodEntryKeys.byDate(variables.targetDate), }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { successMessage: t('diary.copySuccess', 'Entries copied successfully.'), @@ -171,6 +179,7 @@ export const useCopyFoodEntriesFromYesterdayMutation = () => { queryClient.invalidateQueries({ queryKey: foodEntryKeys.byDate(variables.targetDate), }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { successMessage: t('diary.copySuccess', 'Entries copied from yesterday.'), @@ -192,6 +201,7 @@ export const useCreateFoodEntryMealMutation = () => { queryClient.invalidateQueries({ queryKey: foodEntryKeys.byDate(variables.entry_date), }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { successMessage: t('diary.mealAddSuccess', 'Meal added successfully.'), @@ -210,6 +220,7 @@ export const useUpdateFoodEntryMealMutation = () => { onSuccess: () => { queryClient.invalidateQueries({ queryKey: foodEntryMealKeys.all }); queryClient.invalidateQueries({ queryKey: foodEntryKeys.all }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { successMessage: t( @@ -230,6 +241,7 @@ export const useDeleteFoodEntryMealMutation = () => { onSuccess: () => { queryClient.invalidateQueries({ queryKey: foodEntryMealKeys.all }); queryClient.invalidateQueries({ queryKey: foodEntryKeys.all }); + queryClient.invalidateQueries({ queryKey: dailyProgressKeys.all }); }, meta: { successMessage: t('diary.mealDeleteSuccess', 'Meal deleted.'), diff --git a/SparkyFitnessFrontend/src/hooks/Exercises/useExerciseEntries.ts b/SparkyFitnessFrontend/src/hooks/Exercises/useExerciseEntries.ts index e5bcd9f25..6926ac29f 100644 --- a/SparkyFitnessFrontend/src/hooks/Exercises/useExerciseEntries.ts +++ b/SparkyFitnessFrontend/src/hooks/Exercises/useExerciseEntries.ts @@ -32,12 +32,12 @@ export const useCreateExerciseEntryMutation = () => { return useMutation({ mutationFn: createExerciseEntry, - onSuccess: (_, variables) => { + onSuccess: () => { queryClient.invalidateQueries({ - queryKey: exerciseEntryKeys.byDate(variables.entry_date), + queryKey: exerciseEntryKeys.all, }); queryClient.invalidateQueries({ - queryKey: exerciseEntryKeys.history(variables.exercise_id), + queryKey: dailyProgressKeys.all, }); }, meta: { @@ -94,6 +94,9 @@ export const useDeleteExerciseEntryMutation = () => { mutationFn: deleteExerciseEntry, onSuccess: () => { queryClient.invalidateQueries({ queryKey: exerciseEntryKeys.all }); + queryClient.invalidateQueries({ + queryKey: dailyProgressKeys.all, + }); }, meta: { successMessage: t( @@ -124,6 +127,9 @@ export const useLogWorkoutPresetMutation = () => { queryClient.invalidateQueries({ queryKey: exerciseEntryKeys.byDate(variables.date), }); + queryClient.invalidateQueries({ + queryKey: dailyProgressKeys.all, + }); }, meta: { successMessage: t( @@ -146,6 +152,9 @@ export const useDeleteExercisePresetEntryMutation = () => { mutationFn: deleteExercisePresetEntry, onSuccess: () => { queryClient.invalidateQueries({ queryKey: exerciseEntryKeys.all }); + queryClient.invalidateQueries({ + queryKey: dailyProgressKeys.all, + }); }, meta: { successMessage: t( diff --git a/SparkyFitnessFrontend/src/hooks/Foods/useMealplanTemplate.ts b/SparkyFitnessFrontend/src/hooks/Foods/useMealplanTemplate.ts index 042bf4059..6b50a33da 100644 --- a/SparkyFitnessFrontend/src/hooks/Foods/useMealplanTemplate.ts +++ b/SparkyFitnessFrontend/src/hooks/Foods/useMealplanTemplate.ts @@ -13,7 +13,7 @@ export const useMealPlanTemplates = (userId: string) => { const { t } = useTranslation(); return useQuery({ - queryKey: mealPlanKeys.all(userId), + queryKey: mealPlanKeys.byUser(userId), queryFn: () => getMealPlanTemplates(userId), meta: { errorTitle: t('common.error', 'Error'), @@ -39,7 +39,7 @@ export const useCreateMealPlanMutation = () => { }) => createMealPlanTemplate(userId, templateData, currentClientDate), onSuccess: (_data, variables) => { return queryClient.invalidateQueries({ - queryKey: mealPlanKeys.all(variables.userId), + queryKey: mealPlanKeys.byUser(variables.userId), }); }, meta: { @@ -75,7 +75,7 @@ export const useUpdateMealPlanMutation = () => { ), onSuccess: (_data, variables) => { return queryClient.invalidateQueries({ - queryKey: mealPlanKeys.all(variables.userId), + queryKey: mealPlanKeys.byUser(variables.userId), }); }, meta: { @@ -103,7 +103,7 @@ export const useDeleteMealPlanMutation = () => { }) => deleteMealPlanTemplate(userId, templateId), onSuccess: (_data, variables) => { return queryClient.invalidateQueries({ - queryKey: mealPlanKeys.all(variables.userId), + queryKey: mealPlanKeys.byUser(variables.userId), }); }, meta: { diff --git a/SparkyFitnessFrontend/src/hooks/Reports/useReports.ts b/SparkyFitnessFrontend/src/hooks/Reports/useReports.ts index d9be246cd..14e04b883 100644 --- a/SparkyFitnessFrontend/src/hooks/Reports/useReports.ts +++ b/SparkyFitnessFrontend/src/hooks/Reports/useReports.ts @@ -10,7 +10,7 @@ import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { useCustomCategories } from '../CheckIn/useCheckIn'; -export const useRawStressData = (userId?: string) => { +export const useRawStressData = (userId: string) => { const { data: categories } = useCustomCategories(userId); const { t } = useTranslation(); const categoryId = categories?.find( @@ -18,7 +18,7 @@ export const useRawStressData = (userId?: string) => { )?.id; return useQuery({ - queryKey: [...checkInKeys.all, 'rawStressData', categoryId, userId], + queryKey: checkInKeys.rawStressData(userId, categoryId), queryFn: async () => { const customMeasurements = await fetchCustomEntries( categoryId as string, diff --git a/SparkyFitnessFrontend/src/hooks/Settings/useCustomCategories.ts b/SparkyFitnessFrontend/src/hooks/Settings/useCustomCategories.ts index a2f442f6f..f94290e4f 100644 --- a/SparkyFitnessFrontend/src/hooks/Settings/useCustomCategories.ts +++ b/SparkyFitnessFrontend/src/hooks/Settings/useCustomCategories.ts @@ -6,17 +6,17 @@ import { updateCategory, deleteCategory, } from '@/api/Settings/customCategoryService'; -import { customCategoryKeys } from '@/api/keys/settings'; +import { checkInKeys } from '@/api/keys/checkin'; export const useCustomCategories = (userId?: string) => { return useQuery({ - queryKey: customCategoryKeys.lists(), + queryKey: checkInKeys.customCategories(userId), queryFn: () => getCategories(), enabled: !!userId, }); }; -export const useAddCategoryMutation = () => { +export const useAddCategoryMutation = (userId?: string) => { const queryClient = useQueryClient(); const { t } = useTranslation(); @@ -31,7 +31,7 @@ export const useAddCategoryMutation = () => { }) => addCategory(categoryData), onSuccess: () => { queryClient.invalidateQueries({ - queryKey: customCategoryKeys.lists(), + queryKey: checkInKeys.customCategories(userId), }); }, meta: { @@ -47,7 +47,7 @@ export const useAddCategoryMutation = () => { }); }; -export const useUpdateCategoryMutation = () => { +export const useUpdateCategoryMutation = (userId?: string) => { const queryClient = useQueryClient(); const { t } = useTranslation(); @@ -67,7 +67,7 @@ export const useUpdateCategoryMutation = () => { }) => updateCategory(categoryId, categoryData), onSuccess: () => { queryClient.invalidateQueries({ - queryKey: customCategoryKeys.lists(), + queryKey: checkInKeys.customCategories(userId), }); }, meta: { @@ -83,7 +83,7 @@ export const useUpdateCategoryMutation = () => { }); }; -export const useDeleteCategoryMutation = () => { +export const useDeleteCategoryMutation = (userId?: string) => { const queryClient = useQueryClient(); const { t } = useTranslation(); @@ -91,7 +91,7 @@ export const useDeleteCategoryMutation = () => { mutationFn: deleteCategory, onSuccess: () => { queryClient.invalidateQueries({ - queryKey: customCategoryKeys.lists(), + queryKey: checkInKeys.customCategories(userId), }); }, meta: { diff --git a/SparkyFitnessFrontend/src/hooks/Settings/useProfile.ts b/SparkyFitnessFrontend/src/hooks/Settings/useProfile.ts index e268b0493..be36e7d25 100644 --- a/SparkyFitnessFrontend/src/hooks/Settings/useProfile.ts +++ b/SparkyFitnessFrontend/src/hooks/Settings/useProfile.ts @@ -1,4 +1,4 @@ -import { profileKeys } from '@/api/keys/settings'; +import { userKeys } from '@/api/keys/admin'; import { fetchAvatarBlob, UpdateProfilePayload, @@ -10,17 +10,17 @@ import { } from '@/api/Settings/profileService'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; -export const useAvatarQuery = (url?: string | null) => { +export const useAvatarQuery = (url: string | null) => { return useQuery({ - queryKey: profileKeys.avatar(url!), - queryFn: () => fetchAvatarBlob(url!), + queryKey: userKeys.avatar(url), + queryFn: () => fetchAvatarBlob(url), enabled: !!url, }); }; export const useProfileQuery = (userId?: string) => { return useQuery({ - queryKey: profileKeys.all, + queryKey: userKeys.profile(userId), queryFn: getProfileData, enabled: !!userId, meta: { @@ -29,14 +29,14 @@ export const useProfileQuery = (userId?: string) => { }); }; -export const useUpdateProfileMutation = () => { +export const useUpdateProfileMutation = (userId?: string) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (payload: Partial) => updateProfileData(payload), onSuccess: () => { - queryClient.invalidateQueries({ queryKey: profileKeys.all }); + queryClient.invalidateQueries({ queryKey: userKeys.profile(userId) }); }, meta: { successMessage: 'Profile updated successfully', @@ -45,13 +45,13 @@ export const useUpdateProfileMutation = () => { }); }; -export const useUploadAvatarMutation = () => { +export const useUploadAvatarMutation = (userId?: string) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (formData: FormData) => uploadAvatarImage(formData), onSuccess: () => { - queryClient.invalidateQueries({ queryKey: profileKeys.all }); + queryClient.invalidateQueries({ queryKey: userKeys.profile(userId) }); }, meta: { successMessage: 'Profile picture updated successfully', diff --git a/SparkyFitnessFrontend/src/hooks/useInvalidateKeys.ts b/SparkyFitnessFrontend/src/hooks/useInvalidateKeys.ts index c5e52cce2..cdc80829d 100644 --- a/SparkyFitnessFrontend/src/hooks/useInvalidateKeys.ts +++ b/SparkyFitnessFrontend/src/hooks/useInvalidateKeys.ts @@ -6,6 +6,7 @@ import { checkInKeys, sleepKeys } from '@/api/keys/checkin'; import { chatbotKeys } from '@/api/keys/ai'; import { mealKeys } from '@/api/keys/meals'; import { userAiConfigKeys } from '@/api/keys/admin'; +import { goalKeys } from '@/api/keys/goals'; export const useDiaryInvalidation = () => { const queryClient = useQueryClient(); @@ -16,6 +17,7 @@ export const useDiaryInvalidation = () => { queryClient.invalidateQueries({ queryKey: foodEntryKeys.all }); queryClient.invalidateQueries({ queryKey: checkInKeys.all }); queryClient.invalidateQueries({ queryKey: sleepKeys.all }); + queryClient.invalidateQueries({ queryKey: goalKeys.all }); }, [queryClient]); }; diff --git a/SparkyFitnessFrontend/src/pages/Diary/DailyProgress.tsx b/SparkyFitnessFrontend/src/pages/Diary/DailyProgress.tsx index e566cd538..2b7bfd2ec 100644 --- a/SparkyFitnessFrontend/src/pages/Diary/DailyProgress.tsx +++ b/SparkyFitnessFrontend/src/pages/Diary/DailyProgress.tsx @@ -34,7 +34,6 @@ import { } from '@/utils/calorieCalculations'; import { - useDailyGoals, useDailyFoodIntake, useDailyExerciseStats, useDailySteps, @@ -44,6 +43,7 @@ import { import { DailyProgressSkeleton } from './DailyProgressSkeleton'; import { getEnergyUnitString } from '@/utils/nutritionCalculations'; import { EnergyCircle } from './EnergyProgressCircle'; +import { useDailyGoals } from '@/hooks/Goals/useGoals'; const DailyProgress = ({ selectedDate }: { selectedDate: string }) => { const { t } = useTranslation(); diff --git a/SparkyFitnessFrontend/src/pages/Settings/CustomCategoryManager.tsx b/SparkyFitnessFrontend/src/pages/Settings/CustomCategoryManager.tsx index 16b7f5244..d88c2899c 100644 --- a/SparkyFitnessFrontend/src/pages/Settings/CustomCategoryManager.tsx +++ b/SparkyFitnessFrontend/src/pages/Settings/CustomCategoryManager.tsx @@ -35,9 +35,15 @@ const CustomCategoryManager = () => { const [isAddDialogOpen, setIsAddDialogOpen] = useState(false); const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); const { data: categories = [] } = useCustomCategories(user.activeUserId); - const { mutateAsync: addCategory } = useAddCategoryMutation(); - const { mutateAsync: updateCategory } = useUpdateCategoryMutation(); - const { mutateAsync: deleteCategory } = useDeleteCategoryMutation(); + const { mutateAsync: addCategory } = useAddCategoryMutation( + user.activeUserId + ); + const { mutateAsync: updateCategory } = useUpdateCategoryMutation( + user.activeUserId + ); + const { mutateAsync: deleteCategory } = useDeleteCategoryMutation( + user.activeUserId + ); const [editingCategory, setEditingCategory] = useState( null ); diff --git a/SparkyFitnessFrontend/src/pages/Settings/ProfileInformation.tsx b/SparkyFitnessFrontend/src/pages/Settings/ProfileInformation.tsx index 9c97e4310..848f8b4cc 100644 --- a/SparkyFitnessFrontend/src/pages/Settings/ProfileInformation.tsx +++ b/SparkyFitnessFrontend/src/pages/Settings/ProfileInformation.tsx @@ -36,7 +36,7 @@ export const ProfileInformation = () => { return URL.createObjectURL(avatarBlob); }, [avatarBlob]); const { mutateAsync: uploadAvatar, isPending: uploadingImage } = - useUploadAvatarMutation(); + useUploadAvatarMutation(user.activeUserId); useEffect(() => { return () => {