/* 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 (
) }