/* 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 (
{/* begin::Heading */} {/* 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 */} {/* begin::Separator */}
Or with email
{/* end::Separator */} {formik.status ? (
{formik.status}
) : ( null )} {/* begin::Form group */}
{formik.touched.email && formik.errors.email && (
{formik.errors.email}
)}
{/* end::Form group */} {/* begin::Form group */}
{formik.touched.password && formik.errors.password && (
{formik.errors.password}
)}
{/* end::Form group */} {/* begin::Wrapper */}
{/* begin::Link */} Forgot Password ? {/* end::Link */}
{/* end::Wrapper */} {/* begin::Action */}
{/* end::Action */}
Not a Member yet?{' '} Sign up
) }