import {useState, useMemo} from 'react'; import NextLink from 'next/link'; import TextField from '@mui/material/TextField'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; import CardContent from '@mui/material/CardContent'; import FormHelperText from '@mui/material/FormHelperText'; import CardActions from '@mui/material/CardActions'; import Divider from '@mui/material/Divider'; import Box from '@mui/material/Box'; import {useTheme} from '@mui/material/styles'; import {useTranslation} from 'react-i18next'; import {signIn} from 'next-auth/react'; import useAddToEvents from '../../hooks/useAddToEvents'; import LoginGoogle from '../LoginGoogle'; import {useRouter} from 'next/router'; interface Props { error?: string; } const errorsMap = { CredentialsSignin: 'signin.errors.CredentialsSignin', EmailNotConfirmed: 'signin.errors.EmailNotConfirmed', }; const SignIn = (props: Props) => { const {error} = props; const {t} = useTranslation(); const router = useRouter(); const theme = useTheme(); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const {saveStoredEvents} = useAddToEvents(); const canSubmit = useMemo( () => [email, password].filter(s => s.length < 4).length === 0, [email, password] ); const onSubmit = async e => { e.preventDefault?.(); try { await signIn('credentials', { email, password, callbackUrl: (router.query?.redirectPath as string) || '/dashboard', }); saveStoredEvents(); } catch (error) { console.error(error); } return false; }; const spaceAround = { width: '100%', textAlign: 'center', margin: theme.spacing(2, 0), }; return (
{t('signin.title')} {error && ( {t(errorsMap[error])} )} setEmail(value)} name="email" type="email" error={!!error} /> setPassword(value)} id="SignInEmail" name="password" type="password" error={!!error} /> {t('lost_password.message')} {t('signin.or')} {t('signin.no_account')} ); }; export default SignIn;