import {Colors, Picker, Text, TextField, View} from "react-native-ui-lib"; import React, {useEffect, useRef, useState} from "react"; import {ImageBackground, StyleSheet} from "react-native"; import {ScrollView} from "react-native-gesture-handler"; import {useAuthContext} from "@/contexts/AuthContext"; import {useUpdateUserData} from "@/hooks/firebase/useUpdateUserData"; import Ionicons from "@expo/vector-icons/Ionicons"; import * as tz from 'tzdata'; import * as Localization from 'expo-localization'; import debounce from "debounce"; const MyProfile = () => { const {user, profileData} = useAuthContext(); const [timeZone, setTimeZone] = useState(profileData?.timeZone! ?? Localization.getCalendars()[0].timeZone); const [lastName, setLastName] = useState(profileData?.lastName || ""); const [firstName, setFirstName] = useState( profileData?.firstName || "" ); const {mutateAsync: updateUserData} = useUpdateUserData(); const isFirstRender = useRef(true); const handleUpdateUserData = async () => { await updateUserData({newUserData: {firstName, lastName, timeZone}}); } const debouncedUserDataUpdate = debounce(handleUpdateUserData, 500); useEffect(() => { if (isFirstRender.current) { isFirstRender.current = false; return; } debouncedUserDataUpdate(); }, [timeZone, lastName, firstName]); return ( Your Profile Change Photo Remove Photo First name { setFirstName(value); }} /> Last name { setLastName(value); }} /> Email address Settings Time Zone { setTimeZone(item as string) }} showSearch floatingPlaceholder style={styles.inViewPicker} trailingAccessory={ } > {timeZoneItems} ); }; const timeZoneItems = Object.keys(tz.zones).sort().map((zone) => ( )); const styles = StyleSheet.create({ card: { marginVertical: 15, backgroundColor: "white", width: "100%", borderRadius: 12, paddingHorizontal: 20, paddingVertical: 21, }, pfp: { aspectRatio: 1, width: 65.54, backgroundColor: "green", borderRadius: 20, }, txtBox: { backgroundColor: "#fafafa", borderRadius: 50, borderWidth: 2, borderColor: "#cecece", padding: 15, height: 45, fontFamily: "PlusJakartaSans_500Medium", fontSize: 13 }, subTit: { fontFamily: "Manrope_500Medium", fontSize: 15, }, label: { fontFamily: "PlusJakartaSans_500Medium", fontSize: 12, color: "#a1a1a1" }, photoSet: { fontFamily: "PlusJakartaSans_500Medium", fontSize: 13.07 }, jakarta12: { paddingVertical: 10, fontFamily: "PlusJakartaSans_500Medium", fontSize: 12, color: "#a1a1a1", }, picker: { borderRadius: 50, paddingVertical: 12, paddingHorizontal: 16, backgroundColor: Colors.grey80, marginBottom: 16, borderColor: Colors.grey50, borderWidth: 1, marginTop: -20, height: 40, zIndex: 10, }, viewPicker: { borderRadius: 50, backgroundColor: Colors.grey80, marginBottom: 16, borderColor: Colors.grey50, borderWidth: 1, marginTop: 0, height: 40, zIndex: 10, }, inViewPicker: { borderRadius: 50, paddingVertical: 12, paddingHorizontal: 16, marginBottom: 16, marginTop: -20, height: 40, zIndex: 10, }, }); export default MyProfile;