import firestore from "@react-native-firebase/firestore"; import {FirebaseAuthTypes} from "@react-native-firebase/auth"; import {useMutation, useQueryClient} from "react-query"; import {useAuthContext} from "@/contexts/AuthContext"; import {UserProfile} from "@/hooks/firebase/types/profileTypes"; export const useUpdateUserData = () => { const {user: currentUser, refreshProfileData} = useAuthContext(); const queryClient = useQueryClient(); return useMutation({ mutationKey: ["updateUserData"], mutationFn: async ({ newUserData, customUser, }: { newUserData: Partial; customUser?: FirebaseAuthTypes.User; }) => { console.log("Mutation function called with data:", {newUserData, customUser}); const user = currentUser ?? customUser; if (user) { console.log("Updating user data for UID:", user.uid); try { const updatedUserData = Object.fromEntries( Object.entries(newUserData).map(([key, value]) => [key, value === null ? firestore.FieldValue.delete() : value] ) ); console.log("Updated user data with deletions:", updatedUserData); await firestore() .collection("Profiles") .doc(user.uid) .update(updatedUserData); console.log("User data updated successfully, fetching updated profile..."); await refreshProfileData(); console.log("Profile data updated in context."); } catch (e) { console.error("Error updating user data:", e); } } else { console.warn("No user found: currentUser and customUser are both undefined."); } }, onSuccess: () => { queryClient.invalidateQueries("events"); }, }); };