From ae6c8164f719f75c8e0ffc3d9436aa7bc4cb8dba Mon Sep 17 00:00:00 2001 From: Hazem Krimi Date: Thu, 29 Apr 2021 19:12:18 +0100 Subject: [PATCH] Complete additional info logic --- src/pages/Auth/AdditionalInfo/index.tsx | 222 +++++++++++++++++------- 1 file changed, 162 insertions(+), 60 deletions(-) diff --git a/src/pages/Auth/AdditionalInfo/index.tsx b/src/pages/Auth/AdditionalInfo/index.tsx index b7ac3a0..3ddf5d1 100644 --- a/src/pages/Auth/AdditionalInfo/index.tsx +++ b/src/pages/Auth/AdditionalInfo/index.tsx @@ -1,8 +1,81 @@ -import { Box, Button, Input, Select, Text } from '../../../components'; +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 - - {}} - /> - {}} - /> +
- {}} + name='lastName' + label='Last Name' + value={form.values.lastName} + onChange={form.handleChange} + onBlur={form.handleBlur} + error={!!form.errors.lastName} + errorMessage={form.errors.lastName} /> - - {}} - /> - {}} - /> - - {}} /> + + + {}} + name='place' + label='Address' + onChange={form.handleChange} + onBlur={form.handleBlur} + value={form.values.place} /> - - -