|
- import { useEffect, useState } from 'react';
- import { Link as RouterLink } from 'react-router-dom';
-
- // material-ui
- import {
- Box,
- Button,
- Divider,
- FormControl,
- FormHelperText,
- Grid,
- Link,
- IconButton,
- InputAdornment,
- InputLabel,
- OutlinedInput,
- Stack,
- Typography
- } from '@mui/material';
-
- // third party
- import * as Yup from 'yup';
- import { Formik } from 'formik';
-
- // project import
- import FirebaseSocial from './FirebaseSocial';
- import AnimateButton from 'components/@extended/AnimateButton';
- import { strengthColorChi, strengthIndicator } from 'utils/password-strength';
-
- // assets
- import { EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons';
-
- // ============================|| FIREBASE - REGISTER ||============================ //
-
- const AuthRegister = () => {
- const [level, setLevel] = useState();
- const [showPassword, setShowPassword] = useState(false);
- const handleClickShowPassword = () => {
- setShowPassword(!showPassword);
- };
-
- const handleMouseDownPassword = (event) => {
- event.preventDefault();
- };
-
- const changePassword = (value) => {
- const temp = strengthIndicator(value);
- setLevel(strengthColorChi(temp));
- };
-
- useEffect(() => {
- changePassword('');
- }, []);
-
- function getMaxErrStr(num, fieldname){
- return intl.formatMessage({ id: 'noMoreThenNWords' },{num:num, fieldname:fieldname?intl.formatMessage({ id: fieldname})+": ":""});
- }
-
-
- return (
- <>
- <Formik
- initialValues={{
- firstname: '',
- lastname: '',
- email: '',
- company: '',
- password: '',
- submit: null
- }}
- validationSchema={Yup.object().shape({
- firstname: Yup.string().max(30, getMaxErrStr(30)).required('First Name is required'),
- lastname: Yup.string().max(30, getMaxErrStr(30)).required('Last Name is required'),
- email: Yup.string().email('Must be a valid email').max(128, getMaxErrStr(128)).required('Email is required'),
- password: Yup.string().max(60, getMaxErrStr(60)).required('Password is required')
- })}
- onSubmit={async (values, { setErrors, setStatus, setSubmitting }) => {
- try {
- setStatus({ success: false });
- setSubmitting(false);
- } catch (err) {
- console.error(err);
- setStatus({ success: false });
- setErrors({ submit: err.message });
- setSubmitting(false);
- }
- }}
- >
- {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values }) => (
- <form noValidate onSubmit={handleSubmit}>
- <Grid container spacing={3}>
- <Grid item xs={12} md={6}>
- <Stack spacing={1}>
- <InputLabel htmlFor="firstname-signup">First Name*</InputLabel>
- <OutlinedInput
- id="firstname-login"
- type="firstname"
- value={values.firstname}
- name="firstname"
- onBlur={handleBlur}
- onChange={handleChange}
- placeholder="John"
- fullWidth
- error={Boolean(touched.firstname && errors.firstname)}
- />
- {touched.firstname && errors.firstname && (
- <FormHelperText error id="helper-text-firstname-signup">
- {errors.firstname}
- </FormHelperText>
- )}
- </Stack>
- </Grid>
- <Grid item xs={12} md={6}>
- <Stack spacing={1}>
- <InputLabel htmlFor="lastname-signup">Last Name*</InputLabel>
- <OutlinedInput
- fullWidth
- error={Boolean(touched.lastname && errors.lastname)}
- id="lastname-signup"
- type="lastname"
- value={values.lastname}
- name="lastname"
- onBlur={handleBlur}
- onChange={handleChange}
- placeholder="Doe"
- inputProps={{}}
- />
- {touched.lastname && errors.lastname && (
- <FormHelperText error id="helper-text-lastname-signup">
- {errors.lastname}
- </FormHelperText>
- )}
- </Stack>
- </Grid>
- <Grid item xs={12}>
- <Stack spacing={1}>
- <InputLabel htmlFor="company-signup">Company</InputLabel>
- <OutlinedInput
- fullWidth
- error={Boolean(touched.company && errors.company)}
- id="company-signup"
- value={values.company}
- name="company"
- onBlur={handleBlur}
- onChange={handleChange}
- placeholder="Demo Inc."
- inputProps={{}}
- />
- {touched.company && errors.company && (
- <FormHelperText error id="helper-text-company-signup">
- {errors.company}
- </FormHelperText>
- )}
- </Stack>
- </Grid>
- <Grid item xs={12}>
- <Stack spacing={1}>
- <InputLabel htmlFor="email-signup">Email Address*</InputLabel>
- <OutlinedInput
- fullWidth
- error={Boolean(touched.email && errors.email)}
- id="email-login"
- type="email"
- value={values.email}
- name="email"
- onBlur={handleBlur}
- onChange={handleChange}
- placeholder="[email protected]"
- inputProps={{}}
- />
- {touched.email && errors.email && (
- <FormHelperText error id="helper-text-email-signup">
- {errors.email}
- </FormHelperText>
- )}
- </Stack>
- </Grid>
- <Grid item xs={12}>
- <Stack spacing={1}>
- <InputLabel htmlFor="password-signup">Password</InputLabel>
- <OutlinedInput
- fullWidth
- error={Boolean(touched.password && errors.password)}
- id="password-signup"
- type={showPassword ? 'text' : 'password'}
- value={values.password}
- name="password"
- onBlur={handleBlur}
- onChange={(e) => {
- handleChange(e);
- changePassword(e.target.value);
- }}
- endAdornment={
- <InputAdornment position="end">
- <IconButton
- aria-label="toggle password visibility"
- onClick={handleClickShowPassword}
- onMouseDown={handleMouseDownPassword}
- edge="end"
- size="large"
- >
- {showPassword ? <EyeOutlined /> : <EyeInvisibleOutlined />}
- </IconButton>
- </InputAdornment>
- }
- placeholder="******"
- inputProps={{}}
- />
- {touched.password && errors.password && (
- <FormHelperText error id="helper-text-password-signup">
- {errors.password}
- </FormHelperText>
- )}
- </Stack>
- <FormControl fullWidth sx={{ mt: 2 }}>
- <Grid container spacing={2} alignItems="center">
- <Grid item>
- <Box sx={{ bgcolor: level?.color, width: 85, height: 8, borderRadius: '7px' }} />
- </Grid>
- <Grid item>
- <Typography variant="subtitle1" fontSize="0.75rem">
- {level?.label}
- </Typography>
- </Grid>
- </Grid>
- </FormControl>
- </Grid>
- <Grid item xs={12}>
- <Typography variant="body2">
- By Signing up, you agree to our
- <Link variant="subtitle2" component={RouterLink} to="#">
- Terms of Service
- </Link>
- and
- <Link variant="subtitle2" component={RouterLink} to="#">
- Privacy Policy
- </Link>
- </Typography>
- </Grid>
- {errors.submit && (
- <Grid item xs={12}>
- <FormHelperText error>{errors.submit}</FormHelperText>
- </Grid>
- )}
- <Grid item xs={12}>
- <AnimateButton>
- <Button disableElevation disabled={isSubmitting} fullWidth size="large" type="submit" variant="contained" color="primary">
- Create Account
- </Button>
- </AnimateButton>
- </Grid>
- <Grid item xs={12}>
- <Divider>
- <Typography variant="caption">Sign up with</Typography>
- </Divider>
- </Grid>
- <Grid item xs={12}>
- <FirebaseSocial />
- </Grid>
- </Grid>
- </form>
- )}
- </Formik>
- </>
- );
- };
-
- export default AuthRegister;
|