/* eslint-disable react/jsx-no-target-blank */ /* eslint-disable jsx-a11y/anchor-is-valid */ import {useState, useEffect} from 'react' import {useFormik} from 'formik' import * as Yup from 'yup' import clsx from 'clsx' import {getUserByToken, register} from '../core/_requests' import {Link} from 'react-router-dom' import {toAbsoluteUrl} from '../../../../_metronic/helpers' import {PasswordMeterComponent} from '../../../../_metronic/assets/ts/components' import {useAuth} from '../core/Auth' const initialValues = { firstname: '', lastname: '', email: '', password: '', changepassword: '', acceptTerms: false, } const registrationSchema = Yup.object().shape({ firstname: Yup.string() .min(3, 'Minimum 3 symbols') .max(50, 'Maximum 50 symbols') .required('First name is required'), email: Yup.string() .email('Wrong email format') .min(3, 'Minimum 3 symbols') .max(50, 'Maximum 50 symbols') .required('Email is required'), lastname: Yup.string() .min(3, 'Minimum 3 symbols') .max(50, 'Maximum 50 symbols') .required('Last name is required'), password: Yup.string() .min(3, 'Minimum 3 symbols') .max(50, 'Maximum 50 symbols') .required('Password is required'), changepassword: Yup.string() .required('Password confirmation is required') .when('password', { is: (val: string) => (val && val.length > 0 ? true : false), then: Yup.string().oneOf([Yup.ref('password')], "Password and Confirm Password didn't match"), }), acceptTerms: Yup.bool().required('You must accept the terms and conditions'), }) export function Registration() { const [loading, setLoading] = useState(false) const {saveAuth, setCurrentUser} = useAuth() const formik = useFormik({ initialValues, validationSchema: registrationSchema, onSubmit: async (values, {setStatus, setSubmitting}) => { setLoading(true) try { const {data: auth} = await register( values.email, values.firstname, values.lastname, values.password, values.changepassword ) saveAuth(auth) const {data: user} = await getUserByToken(auth.api_token) setCurrentUser(user) } catch (error) { console.error(error) saveAuth(undefined) setStatus('The registration details is incorrect') setSubmitting(false) setLoading(false) } }, }) useEffect(() => { PasswordMeterComponent.bootstrap() }, []) return (
{/* begin::Login options */}
{/* begin::Col */}
{/* begin::Google link */} Logo Sign in with Google {/* end::Google link */}
{/* end::Col */} {/* begin::Col */}
{/* begin::Google link */} Logo Logo Sign in with Apple {/* end::Google link */}
{/* end::Col */}
{/* end::Login options */}
Or with email
{formik.status && (
{formik.status}
)} {/* begin::Form group Firstname */}
{formik.touched.firstname && formik.errors.firstname && (
{formik.errors.firstname}
)}
{/* end::Form group */}
{/* begin::Form group Lastname */} {formik.touched.lastname && formik.errors.lastname && (
{formik.errors.lastname}
)} {/* end::Form group */}
{/* begin::Form group Email */}
{formik.touched.email && formik.errors.email && (
{formik.errors.email}
)}
{/* end::Form group */} {/* begin::Form group Password */}
{formik.touched.password && formik.errors.password && (
{formik.errors.password}
)}
{/* begin::Meter */}
{/* end::Meter */}
Use 8 or more characters with a mix of letters, numbers & symbols.
{/* end::Form group */} {/* begin::Form group Confirm password */}
{formik.touched.changepassword && formik.errors.changepassword && (
{formik.errors.changepassword}
)}
{/* end::Form group */} {/* begin::Form group */}
{formik.touched.acceptTerms && formik.errors.acceptTerms && (
{formik.errors.acceptTerms}
)}
{/* end::Form group */} {/* begin::Form group */}
{/* end::Form group */}
) }