import React, { useCallback, useEffect, useState } from 'react'; import { View, ScrollView, Text } from 'react-native'; import { Formik } from 'formik'; import * as yup from 'yup'; import { CommonActions, useFocusEffect, useNavigation } from '@react-navigation/native'; import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; import { AvatarPicker, BigText, Button, Header, Input, PageWrapper } from '../../../components'; import { InputDatePicker } from '../../../components/Calendar/InputDatePicker'; import { ModalFlatList } from '../../../components/FlatList/modal-flatlist'; import { useRegisterMutation } from '@api/auth'; import { storage } from '../../../storage'; import store from '../../../storage/zustand'; import { NAVIGATION_PAGES } from '../../../types'; import { fetchAndSaveStatistics } from 'src/database/statisticsService'; import { usePostGetProfileInfoDataQuery } from '@api/user'; import { Colors } from 'src/theme'; import { getFontSize } from 'src/utils'; const SignUpSchema = yup.object({ first_name: yup.string().required(), last_name: yup.string().required(), date_of_birth: yup.string().required(), homebase: yup.number().required().min(1, 'Region of origin is required'), homebase2: yup.number().optional() }); //TODO: formik avatar | date and flatlist error shown const EditAccount = () => { const { dispatch } = useNavigation(); const [user] = store((state) => [state.registration.user]); const { data, error, mutate: userRegister } = useRegisterMutation(); const { data: profileData } = usePostGetProfileInfoDataQuery( data?.token || '', data?.uid ? +data.uid : 0, data?.token ? true : false ); const [isLoading, setIsLoading] = useState(true); const [isSubmitting, setIsSubmitting] = useState(false); useFocusEffect( useCallback(() => { const fetchData = async () => { setIsLoading(false); }; fetchData(); }, []) ); useEffect(() => { if (profileData) { const userInfo = { avatar: profileData?.data?.user_data.avatar ?? '', first_name: profileData?.data?.user_data.first_name, last_name: profileData?.data?.user_data.last_name, homebase_flag: profileData?.data?.user_data.flag1 }; storage.set('currentUserData', JSON.stringify(userInfo)); setIsSubmitting(false); dispatch( CommonActions.reset({ index: 1, routes: [{ name: NAVIGATION_PAGES.INFO }] }) ); } }, [profileData]); const updateLocalData = async (token: string) => { await fetchAndSaveStatistics(token); }; if (isLoading) { return null; } return (
Edit account data { setIsSubmitting(true); const dateObject = new Date(values.date_of_birth); const formattedDate = dateObject.toISOString().split('T')[0]; const data = { user: { ...user, first_name: values.first_name, last_name: values.last_name, date_of_birth: formattedDate, homebase: values.homebase, homebase2: values.homebase2 ?? -1 }, photo: values.photo.uri ? { type: values.photo.type, uri: values.photo.uri, name: values.photo.uri.split('/').pop()! } : { type: undefined, uri: undefined, name: undefined } }; await userRegister(data, { onSuccess: (data) => { if (data && data.token) { storage.set('token', data.token); storage.set('uid', data.uid.toString()); updateLocalData(data.token); } else { setIsSubmitting(false); } }, onError: () => { setIsSubmitting(false); } }); }} > {(props) => ( props.setFieldValue('photo', asset)} /> props.setFieldValue('date_of_birth', date)} formikError={props.touched.date_of_birth && props.errors.date_of_birth} /> props.setFieldValue('homebase', data.id)} /> {props.touched.homebase && props.errors.homebase ? ( {props.errors.homebase} ) : null} props.setFieldValue('homebase2', data.id)} /> )} ); }; export default EditAccount;