Add form control

This commit is contained in:
Hazem Krimi
2021-04-28 21:29:11 +01:00
parent 3fc8d6edea
commit 53423a1526
+93 -44
View File
@@ -1,9 +1,41 @@
import * as Yup from 'yup';
import { useFormik } from 'formik';
import { useState } from 'react';
import { useHistory } from 'react-router-dom';
import { Google, Signup as SignupIllustration, Logo } from '../../../assets'; import { Google, Signup as SignupIllustration, Logo } from '../../../assets';
import { Box, Button, Input, Link, Text } from '../../../components'; import { Box, Button, Input, Link, Text, Alert } from '../../../components';
import { theme } from '../../../themes'; import { theme } from '../../../themes';
import { Wrapper } from './styles'; import { Wrapper } from './styles';
const Signup = () => { const Signup = () => {
const history = useHistory();
const [error, setError] = useState<string>('');
const form = useFormik({
initialValues: {
email: '',
password: '',
},
validationSchema: Yup.object().shape({
email: Yup.string()
.required('Email is required')
.email('Email is invalid'),
password: Yup.string()
.required('Password is required')
.min(6, 'Password is 6 characters minimum'),
}),
onSubmit: ({ email, password }, { resetForm }) => {
try {
history.push(`/additional-info?email=${email}&password=${password}`);
} catch (err) {
setError(err.message);
setTimeout(() => setError(''), 3000);
} finally {
resetForm();
}
},
});
return ( return (
<Wrapper> <Wrapper>
<Box <Box
@@ -22,62 +54,79 @@ const Signup = () => {
<Box marginRight='0.625rem'> <Box marginRight='0.625rem'>
<Logo /> <Logo />
</Box> </Box>
<Text variant='headline' weight='bold'>
astrobuild
</Text>
</Box> </Box>
<Text variant='headline' weight='bold'>
Signup
</Text>
<Box <Box
display='grid' display='grid'
gridTemplateColumns='auto' gridTemplateColumns='auto 1fr'
columnGap='1rem'
alignItems='center' alignItems='center'
rowGap='0.5rem'
padding='1.563rem 0rem'
> >
<Input label='Email' name='email' value='' onChange={() => {}} /> <Text variant='headline' weight='bold'>
<Input Signup
label='Password' </Text>
name='password' {error && <Alert color='error' text={error} />}
type='password' </Box>
value='' <form onSubmit={form.handleSubmit}>
onChange={() => {}}
/>
<Box <Box
display='grid' display='grid'
gridTemplateColumns='auto' gridTemplateColumns='auto'
marginTop='0.5rem' alignItems='center'
rowGap='1rem' rowGap='0.5rem'
padding='1.563rem 0rem'
> >
<Button <Input
variant='primary-action' label='Email'
fullWidth name='email'
color='client' value={form.values.email}
text='Signup' onChange={form.handleChange}
onClick={() => {}} onBlur={form.handleBlur}
error={!!form.errors.email}
errorMessage={form.errors.email}
/> />
<Button <Input
variant='secondary-action' label='Password'
fullWidth name='password'
color='client' type='password'
text='Signup with Google' value={form.values.password}
iconLeft={<Google />} onChange={form.handleChange}
onClick={() => {}} onBlur={form.handleBlur}
error={!!form.errors.password}
errorMessage={form.errors.password}
/> />
</Box> <Box
<Box display='flex' flexDirection='row'> display='grid'
<Box flexGrow='1'> gridTemplateColumns='auto'
<Text variant='body' display='inline'> marginTop='0.5rem'
Already have an account ?{' '} rowGap='1rem'
</Text> >
<Link href='/login'>Login</Link> <Button
variant='primary-action'
fullWidth
type='submit'
color='client'
text='Signup'
/>
<Button
variant='secondary-action'
fullWidth
color='client'
text='Signup with Google'
iconLeft={<Google />}
/>
</Box>
<Box display='flex' flexDirection='row'>
<Box flexGrow='1'>
<Text variant='body' display='inline'>
Already have an account ?{' '}
</Text>
<Link href='/login'>Login</Link>
</Box>
<Link href='/' color='gray'>
Build a Project
</Link>
</Box> </Box>
<Link href='/' color='gray'>
Build a Project
</Link>
</Box> </Box>
</Box> </form>
</Box> </Box>
<Box <Box
background={theme.colors.client.main} background={theme.colors.client.main}