import * as Yup from 'yup'; import { useFormik } from 'formik'; import { useState } from 'react'; import { useHistory } from 'react-router-dom'; import { useMutation, useReactiveVar } from '@apollo/client'; import { Box, Button, Input, Select, Text, Alert } from '../../../components'; import { theme } from '../../../themes'; import { Wrapper } from './styles'; import { UpdateUserInfoMutation, UpdateUserInfoMutationVariables, } from '../../../graphql/types'; import { UPDATE_USER_INFO } from '../../../graphql/auth.api'; import { userVar } from '../../../graphql/state'; const AdditionalInfo = () => { const history = useHistory(); const [error, setError] = useState(''); const currentUser = useReactiveVar(userVar); const [updateUserInfo, { loading }] = useMutation< UpdateUserInfoMutation, UpdateUserInfoMutationVariables >(UPDATE_USER_INFO, { onCompleted({ updateUserInfo: user }) { userVar(user); history.push('/'); }, onError({ graphQLErrors }) { setError(graphQLErrors[0]?.extensions?.info); setTimeout(() => setError(''), 3000); }, }); const form = useFormik({ initialValues: { firstName: '', lastName: '', prefix: '', number: '', place: '', city: '', zip: '', country: '', }, validationSchema: Yup.object().shape({ firstName: Yup.string().required('First Name is required'), lastName: Yup.string().required('Last Name is required'), prefix: Yup.string().required('Prefix is required'), number: Yup.number().required('Number is required'), place: Yup.string().required('Address is required'), city: Yup.string().required('City is required'), country: Yup.string().required('Country is required'), }), onSubmit: ( { firstName, lastName, prefix, number, place, city, country, zip }, { resetForm } ) => { try { updateUserInfo({ variables: { id: currentUser?.id!, email: currentUser?.email!, firstName, lastName, phone: { prefix, number }, address: { place, city, country, zip }, }, }); } catch (err) { setError(err.message); setTimeout(() => setError(''), 3000); } finally { resetForm(); } }, }); return ( Tell us more about yourself