mirror of
https://github.com/hazemKrimi/crimson-quirks-ui.git
synced 2026-05-01 18:20:28 +00:00
Complete additional info logic
This commit is contained in:
@@ -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 { theme } from '../../../themes';
|
||||||
import { Wrapper } from './styles';
|
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 AdditionalInfo = () => {
|
||||||
|
const history = useHistory();
|
||||||
|
const [error, setError] = useState<string>('');
|
||||||
|
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 (
|
return (
|
||||||
<Wrapper>
|
<Wrapper>
|
||||||
<Box
|
<Box
|
||||||
@@ -21,6 +94,7 @@ const AdditionalInfo = () => {
|
|||||||
Tell us more about yourself
|
Tell us more about yourself
|
||||||
</Text>
|
</Text>
|
||||||
</Box>
|
</Box>
|
||||||
|
<form onSubmit={form.handleSubmit}>
|
||||||
<Box
|
<Box
|
||||||
display='grid'
|
display='grid'
|
||||||
gridTemplateColumns='auto'
|
gridTemplateColumns='auto'
|
||||||
@@ -30,14 +104,20 @@ const AdditionalInfo = () => {
|
|||||||
<Input
|
<Input
|
||||||
name='firstName'
|
name='firstName'
|
||||||
label='First Name'
|
label='First Name'
|
||||||
value=''
|
value={form.values.firstName}
|
||||||
onChange={() => {}}
|
onChange={form.handleChange}
|
||||||
|
onBlur={form.handleBlur}
|
||||||
|
error={!!form.errors.firstName}
|
||||||
|
errorMessage={form.errors.firstName}
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
name='lastName'
|
name='lastName'
|
||||||
label='Last Name'
|
label='Last Name'
|
||||||
value=''
|
value={form.values.lastName}
|
||||||
onChange={() => {}}
|
onChange={form.handleChange}
|
||||||
|
onBlur={form.handleBlur}
|
||||||
|
error={!!form.errors.lastName}
|
||||||
|
errorMessage={form.errors.lastName}
|
||||||
/>
|
/>
|
||||||
<Box
|
<Box
|
||||||
display='grid'
|
display='grid'
|
||||||
@@ -45,39 +125,57 @@ const AdditionalInfo = () => {
|
|||||||
columnGap='10px'
|
columnGap='10px'
|
||||||
>
|
>
|
||||||
<Select
|
<Select
|
||||||
name='coutryConde'
|
name='prefix'
|
||||||
label='Country Code'
|
label='Country Code'
|
||||||
options={[{ value: '+216', label: '+216' }]}
|
options={[
|
||||||
onChange={() => {}}
|
{ value: '+216', label: '+216' },
|
||||||
value=''
|
{ value: '+213', label: '+213' },
|
||||||
|
]}
|
||||||
|
onChange={form.handleChange}
|
||||||
|
onBlur={form.handleBlur}
|
||||||
|
value={form.values.prefix}
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
name='phone'
|
name='number'
|
||||||
type='tel'
|
type='tel'
|
||||||
label='Phone'
|
label='Phone'
|
||||||
value=''
|
onChange={form.handleChange}
|
||||||
onChange={() => {}}
|
onBlur={form.handleBlur}
|
||||||
|
value={form.values.number}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
<Input
|
<Input
|
||||||
name='address'
|
name='place'
|
||||||
label='Address'
|
label='Address'
|
||||||
value=''
|
onChange={form.handleChange}
|
||||||
onChange={() => {}}
|
onBlur={form.handleBlur}
|
||||||
|
value={form.values.place}
|
||||||
/>
|
/>
|
||||||
|
<Input
|
||||||
|
name='city'
|
||||||
|
label='City'
|
||||||
|
onChange={form.handleChange}
|
||||||
|
onBlur={form.handleBlur}
|
||||||
|
value={form.values.city}
|
||||||
|
/>
|
||||||
|
<Box
|
||||||
|
display='grid'
|
||||||
|
gridTemplateColumns='2fr 1fr'
|
||||||
|
columnGap='10px'
|
||||||
|
>
|
||||||
<Input
|
<Input
|
||||||
name='country'
|
name='country'
|
||||||
label='Country'
|
label='Country'
|
||||||
value=''
|
onChange={form.handleChange}
|
||||||
onChange={() => {}}
|
onBlur={form.handleBlur}
|
||||||
|
value={form.values.country}
|
||||||
/>
|
/>
|
||||||
<Box display='grid' gridTemplateColumns='2fr 1fr' columnGap='10px'>
|
|
||||||
<Input name='city' label='City' value='' onChange={() => {}} />
|
|
||||||
<Input
|
<Input
|
||||||
name='zipCode'
|
name='zip'
|
||||||
label='Zip Code'
|
label='Zip Code'
|
||||||
value=''
|
onChange={form.handleChange}
|
||||||
onChange={() => {}}
|
onBlur={form.handleBlur}
|
||||||
|
value={form.values.zip}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
<Box marginTop='0.5rem'>
|
<Box marginTop='0.5rem'>
|
||||||
@@ -86,10 +184,14 @@ const AdditionalInfo = () => {
|
|||||||
variant='primary-action'
|
variant='primary-action'
|
||||||
color='client'
|
color='client'
|
||||||
text='Done'
|
text='Done'
|
||||||
onClick={() => {}}
|
type='submit'
|
||||||
|
loading={loading}
|
||||||
|
disabled={loading}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
|
{error && <Alert color='error' text={error} />}
|
||||||
</Box>
|
</Box>
|
||||||
|
</form>
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
</Wrapper>
|
</Wrapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user