import { ApiError, Session, UserCredentials } from '@supabase/gotrue-js'; import { IoLogoGoogle } from 'react-icons/io'; import router from 'next/router'; import { toast } from 'react-toastify'; import { useState } from 'react'; type LoginProperties = { resetPassword: (data: string) => Promise<{ data: {} | null; error: ApiError | null; }>; signIn: (data: UserCredentials) => Promise<{ user: Session['user'] | null; session: Session | null; error: ApiError | null; }>; }; const Login = ({ resetPassword, signIn }: LoginProperties): JSX.Element => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [forgot, setForgot] = useState(false); const resetPasswordLogin = async (): Promise => { const result = await resetPassword(email); if (result.error) { toast.error(result.error.message); } else if (result.data) { toast.success( 'A password reset email has been sent to you, watch your mailbox!' ); } }; const login = async ( event: React.SyntheticEvent ): Promise => { event.preventDefault(); // Handle the login. Go to the homepage if success or display an error. const result = await signIn({ email, password, }); if (result.error) { toast.error(result.error.message); } else if (result.user) { void router.push('/'); } }; return (
{!forgot && ( <>

Account Login

{ setEmail(event.target.value); }} />
{ setPassword(event.target.value); }} />
or login with
)} {forgot && ( <>

Password recovery

{ setEmail(event.target.value); }} />

)}
); }; export default Login;