'use client'; import * as Yup from 'yup'; import { useState } from 'react'; import { useMutation } from 'react-query'; import RouterLink from 'next/link'; import { useSearchParams } from 'next/navigation'; import { useRouter } from 'next-nprogress-bar'; import toast from 'react-hot-toast'; // formik import { useFormik, Form, FormikProvider } from 'formik'; // cookies import { createCookies } from 'src/hooks/cookies'; // redux import { useDispatch } from 'react-redux'; import { setWishlist } from 'src/redux/slices/wishlist'; import { setLogin } from 'src/redux/slices/user'; // api import * as api from 'src/services'; // mui import { Link, Typography, Stack, Checkbox, TextField, IconButton, InputAdornment, FormControlLabel, Button, Alert, AlertTitle } from '@mui/material'; import { LoadingButton } from '@mui/lab'; // icons import { MdOutlineVisibility, MdLock, MdOutlineVisibilityOff } from 'react-icons/md'; import { IoMdMail } from 'react-icons/io'; export default function LoginForm() { const { push } = useRouter(); const dispatch = useDispatch(); const searchParam = useSearchParams(); const redirect = searchParam.get('redirect'); const [loading, setloading] = useState(false); const [showPassword, setShowPassword] = useState(false); const { mutate } = useMutation(api.login, { onSuccess: async (data) => { dispatch(setLogin(data.user)); dispatch(setWishlist(data.user.wishlist)); await createCookies('token', data.token); setloading(false); toast.success('Logged in successfully!'); const isAdmin = data.user.role.includes('admin'); const isVendor = data.user.role.includes('vendor'); push(redirect || isAdmin ? '/admin/dashboard' : isVendor ? '/vendor/dashboard' : '/'); }, onError: (err) => { setloading(false); toast.error(err.response.data.message); } }); const LoginSchema = Yup.object().shape({ email: Yup.string().email('Enter valid email').required('Email is required.'), password: Yup.string().required('Password is required.').min(8, 'Password should be 8 characters or longer.') }); const formik = useFormik({ initialValues: { email: '', password: '', remember: true }, validationSchema: LoginSchema, onSubmit: async (values) => { const { email, password } = values; setloading(true); mutate({ email, password }); } }); const { errors, touched, setFieldValue, values, handleSubmit, getFieldProps } = formik; return ( <> { setFieldValue('email', 'admin@nextall.com'); setFieldValue('password', 'test1234'); }} > Copy } > Admin Email: admin@test.com | password: test1234 { setFieldValue('email', 'vendor@nextall.com'); setFieldValue('password', 'test1234'); }} > Copy } > Vendor Email: vendor@test.com | password: test1234
Email ) }} /> Password ), endAdornment: ( setShowPassword((prev) => !prev)}> {showPassword ? : } ) }} error={Boolean(touched.password && errors.password)} helperText={touched.password && errors.password} /> } label="Remember me" /> Forgot password login Don{`'`}t you have an account?   Register
); }