import { useEffect, useState, useCallback } from 'react' import { Logo, Button, Input } from '@components/ui' import useLogin from '@framework/auth/use-login' import { useUI } from '@components/ui/context' import { validate } from 'email-validator' const LoginView: React.FC = () => { // Form State const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [loading, setLoading] = useState(false) const [message, setMessage] = useState('') const [dirty, setDirty] = useState(false) const [disabled, setDisabled] = useState(false) const { setModalView, closeModal } = useUI() const login = useLogin() const handleLogin = async (e: React.SyntheticEvent) => { e.preventDefault() if (!dirty && !disabled) { setDirty(true) handleValidation() } try { setLoading(true) setMessage('') await login({ email, password, }) closeModal() } catch ({ errors }) { if (errors instanceof Array) { setMessage(errors.map((e: any) => e.message).join('
')) } else { setMessage('Unexpected error') } setDisabled(false) } finally { setLoading(false) } } const handleValidation = useCallback(() => { // Test for Alphanumeric password const validPassword = /^(?=.*[a-zA-Z])(?=.*[0-9])/.test(password) // Unable to send form unless fields are valid. if (dirty) { setDisabled(!validate(email) || password.length < 7 || !validPassword) } }, [email, password, dirty]) useEffect(() => { handleValidation() }, [handleValidation]) return (
{message && (
{message}. Did you {` `} setModalView('FORGOT_VIEW')} > forgot your password?
)}
Don't have an account? {` `} setModalView('SIGNUP_VIEW')} > Sign Up
) } export default LoginView