diff --git a/src/contexts/User.ctx.tsx b/src/contexts/User.ctx.tsx index 9d99e59..54f2900 100644 --- a/src/contexts/User.ctx.tsx +++ b/src/contexts/User.ctx.tsx @@ -25,6 +25,7 @@ interface UserContextType { setAuthState: (data: ILoginResponse) => void; logout: () => void; setUser: Dispatch>; + syncCurrentUser: (updates: Partial) => void; } const UserContext = createContext(undefined); @@ -99,6 +100,16 @@ export const UserProvider: React.FC = ({ children }) => { Cookies.set(COOKIE_KEYS.user, JSON.stringify(data.user)); }, []); + const syncCurrentUser = useCallback((updates: Partial) => { + setUser((prev) => { + if (!prev) return prev; + + const next = { ...prev, ...updates }; + Cookies.set(COOKIE_KEYS.user, JSON.stringify(next)); + return next; + }); + }, []); + const value = useMemo( () => ({ user, @@ -108,8 +119,9 @@ export const UserProvider: React.FC = ({ children }) => { setAuthState, logout, setUser, + syncCurrentUser, }), - [user, accessToken, isLoading, setAuthState, logout, setUser], + [user, accessToken, isLoading, setAuthState, logout, setUser, syncCurrentUser], ); return {children}; diff --git a/src/hooks/queries/useAdminQueries.ts b/src/hooks/queries/useAdminQueries.ts index 11ae454..5322bf0 100644 --- a/src/hooks/queries/useAdminQueries.ts +++ b/src/hooks/queries/useAdminQueries.ts @@ -1,4 +1,5 @@ -import { API_ENDPOINTS, userService } from "@/lib/api"; +import { useUser } from "@/contexts"; +import { API_ENDPOINTS, ICreateAdminCredentials, userService } from "@/lib/api"; import { useInfiniteQuery, useMutation, @@ -9,6 +10,11 @@ import { useRouter } from "next/navigation"; import { useMemo } from "react"; import { toast } from "react-toastify"; +const toCurrentUserUpdates = ({ + password: _password, + ...profile +}: ICreateAdminCredentials) => profile; + export const useDeleteAdmin = (onSuccessCallback: () => void) => { const queryClient = useQueryClient(); const mutationKey = useMemo(() => [API_ENDPOINTS.USER.ADMINS, "delete"], []); @@ -45,6 +51,7 @@ export const useCreateAdmin = () => { export const useUpdateAdmin = (id: string) => { const queryClient = useQueryClient(); const router = useRouter(); + const { user, syncCurrentUser } = useUser(); const mutationKey = useMemo( () => [API_ENDPOINTS.USER.ADMINS, "update", id], [id], @@ -52,7 +59,11 @@ export const useUpdateAdmin = (id: string) => { return useMutation({ mutationKey, mutationFn: userService.updateAdmin, - onSuccess: (response) => { + onSuccess: (response, { id: adminId, credentials }) => { + if (user?.id === adminId) { + syncCurrentUser(toCurrentUserUpdates(credentials)); + } + toast.success(response); queryClient.invalidateQueries({ queryKey: [API_ENDPOINTS.USER.ADMINS], diff --git a/src/hooks/queries/useProfileQueries.ts b/src/hooks/queries/useProfileQueries.ts index 8af07c9..9eca9f1 100644 --- a/src/hooks/queries/useProfileQueries.ts +++ b/src/hooks/queries/useProfileQueries.ts @@ -14,7 +14,7 @@ export const useProfileQuery = () => { }); }; export const useUpdateProfileQuery = () => { - const { setUser } = useUser(); + const { syncCurrentUser } = useUser(); const queryClient = useQueryClient(); const mutationKey = useMemo( () => [API_ENDPOINTS.PROFILE.UPDATE, "UPDATE_USER_PROFILE"], @@ -28,7 +28,7 @@ export const useUpdateProfileQuery = () => { queryClient.invalidateQueries({ queryKey: [API_ENDPOINTS.PROFILE.READ, "CURRENT_USER_PROFILE"], }); - setUser(response); + syncCurrentUser(response); }, }); };