import React, { useEffect, useState } from 'react'
function Auth(props) {
const { supabaseClient, authView, setAuthView } = props
const [email, setEmail] = useState('')
const [password, setPassword] = useState('')
const [message, setMessage] = useState('')
const [error, setError] = useState('')
const [loading, setLoading] = useState(false)
const handleSignIn = async (e) => {
e.preventDefault()
setError('')
setLoading(true)
const { error: signInError } = await supabaseClient.auth.signIn({
email,
password,
})
if (signInError) setError(signInError.message)
setLoading(false)
}
const handleSignUp = async (e) => {
e.preventDefault()
setError('')
setLoading(true)
const { error: signUpError } = await supabaseClient.auth.signUp({
email,
password,
})
if (signUpError) setError(signUpError.message)
setLoading(false)
}
const handlePasswordReset = async (e) => {
e.preventDefault()
setError('')
setMessage('')
setLoading(true)
const { error } = await supabaseClient.auth.api.resetPasswordForEmail(email)
if (error) setError(error.message)
else setMessage('Check your email for the password reset link')
setLoading(false)
}
const handleMagicLinkSignIn = async (e) => {
e.preventDefault()
setError('')
setMessage('')
setLoading(true)
const { error } = await supabaseClient.auth.signIn({ email })
if (error) setError(error.message)
else setMessage('Check your email for the magic link')
setLoading(false)
}
return (
<>
{loading &&
Loading..
}
{error && {error}
}
{message && {message}
}
{authView === 'sign_in' ? (
<>
Sign in
setAuthView('sign_up')}>Don't have an account? Sign up
setAuthView('forgotten_password')}>Forgot my password
setAuthView('magic_link')}>Send magic link email
>
) : authView === 'sign_up' ? (
<>
Sign up
setAuthView('sign_in')}>Already have an account, Sign in
setAuthView('forgotten_password')}>Forgot my password
setAuthView('magic_link')}>Send magic link email
>
) : authView === 'forgotten_password' ? (
<>
Forgotten password
setAuthView('sign_up')}>Don't have an account? Sign up
setAuthView('sign_in')}>Already have an account, Sign in
setAuthView('magic_link')}>Send magic link email
>
) : authView === 'magic_link' ? (
<>
Magic link
setAuthView('sign_up')}>Don't have an account? Sign up
setAuthView('sign_in')}>Already have an account, Sign in
>
) : null}
>
)
}
function UpdatePassword({ supabaseClient }) {
const [password, setPassword] = useState('')
const [error, setError] = useState('')
const [message, setMessage] = useState('')
const [loading, setLoading] = useState(false)
const handlePasswordReset = async (e) => {
e.preventDefault()
setError('')
setMessage('')
setLoading(true)
const { error } = await supabaseClient.auth.update({ password })
if (error) setError(error.message)
else setMessage('Your password has been updated')
setLoading(false)
}
return (
<>
{loading && Loading..
}
{error && {error}
}
{message && {message}
}
Set a new password
>
)
}
Auth.UpdatePassword = UpdatePassword
export default Auth