import { FormEvent, useState } from 'react' import { Button, Input, Text, useToasts, Note } from '@geist-ui/core' import styles from './auth.module.css' import { useRouter } from 'next/router' import Link from '../Link' const NO_EMPTY_SPACE_REGEX = /^\S*$/; const ERROR_MESSAGE = "Provide a non empty username and a password with at least 6 characters"; const Auth = ({ page }: { page: "signup" | "signin" }) => { const router = useRouter(); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [errorMsg, setErrorMsg] = useState(''); const { setToast } = useToasts(); const signingIn = page === 'signin' const handleJson = (json: any) => { localStorage.setItem('drift-token', json.token) localStorage.setItem('drift-userid', json.userId) router.push('/') } const handleSubmit = async (e: FormEvent) => { e.preventDefault() if (!NO_EMPTY_SPACE_REGEX.test(username) || password.length < 6) return setErrorMsg(ERROR_MESSAGE) else setErrorMsg(''); const reqOpts = { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) } try { const signUrl = signingIn ? '/server-api/auth/signin' : '/server-api/auth/signup'; const resp = await fetch(signUrl, reqOpts); const json = await resp.json(); if (!resp.ok) throw new Error(); handleJson(json) } catch (err: any) { setToast({ text: "Something went wrong", type: 'error' }) } } return (

{signingIn ? 'Sign In' : 'Sign Up'}

setUsername(event.target.value)} placeholder="Username" required scale={4 / 3} /> setPassword(event.target.value)} placeholder="Password" required scale={4 / 3} />
{signingIn ? ( Don't have an account?{" "} Sign up ) : ( Already have an account?{" "} Sign in )}
{errorMsg && {errorMsg}}
) } export default Auth