/* eslint-disable jsx-a11y/anchor-is-valid */ import {useState} from 'react' import * as Yup from 'yup' import clsx from 'clsx' import {Link} from 'react-router-dom' import {useFormik} from 'formik' import {getUserByToken, login} from '../core/_requests' import {toAbsoluteUrl} from '../../../../_metronic/helpers' import {useAuth} from '../core/Auth' const loginSchema = Yup.object().shape({ email: Yup.string() .email('Wrong email format') .min(3, 'Minimum 3 symbols') .max(50, 'Maximum 50 symbols') .required('Email is required'), password: Yup.string() .min(3, 'Minimum 3 symbols') .max(50, 'Maximum 50 symbols') .required('Password is required'), }) const initialValues = { email: 'admin@demo.com', password: 'demo', } /* Formik+YUP+Typescript: https://jaredpalmer.com/formik/docs/tutorial#getfieldprops https://medium.com/@maurice.de.beijer/yup-validation-and-typescript-and-formik-6c342578a20e */ export function Login() { const [loading, setLoading] = useState(false) const {saveAuth, setCurrentUser} = useAuth() const formik = useFormik({ initialValues, validationSchema: loginSchema, onSubmit: async (values, {setStatus, setSubmitting}) => { setLoading(true) try { const {data: auth} = await login(values.email, values.password) saveAuth(auth) const {data: user} = await getUserByToken(auth.api_token) setCurrentUser(user) } catch (error) { console.error(error) saveAuth(undefined) setStatus('The login details are incorrect') setSubmitting(false) setLoading(false) } }, }) return (
) }