'use client';
import * as Yup from 'yup';
import { useEffect, 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,
FormControl,
FormControlLabel,
Select,
MenuItem,
Button
} from '@mui/material';
import { LoadingButton } from '@mui/lab';
// icons
import { MdOutlineVisibility, MdLock, MdOutlineVisibilityOff } from 'react-icons/md';
import { IoMdMail } from 'react-icons/io';
import { lang, langen, langjp } from '../lang/kr';
import getCookies from '../lang/langUtil';
import { Row } from '../customElements';
export default function LoginForm() {
const langIs = getCookies('lang');
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 [langState, setLangState] = useState(langIs ? langIs : 'kr')
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(lang['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(lang['Enter valid email']).required(lang['Email is required']),
password: Yup.string()
.required(lang['Password is required'])
.min(8, lang['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, values, handleSubmit, getFieldProps } = formik;
useEffect(() => {
createCookies('lang', langState)
}, [langState]);
return (
<>
{({ kr: lang, en: langen, jp: langjp }[langIs] || lang).login}
{({ kr: lang, en: langen, jp: langjp }[langIs] || lang)["Select Language"]}
>
);
}