import { FormEvent, useRef, useState } from "react" import { BASE } from "../Constants.ts" import { fetchAPI, redirect } from "../Fetcher.ts" import { Failure } from "../api/failure.ts" import { getSession, saveSession } from "../api/session.ts" import "../style/form.css" export default function LoginApp() { const [errors, setErrors] = useState([]) const emailRef = useRef(null) const passwordRef = useRef(null) async function handleSubmit(e: FormEvent) { e.preventDefault() const email = emailRef.current!.value const password = passwordRef.current!.value const response = await fetchAPI( "auth/token", { email, password }, "POST", false, ) if (response.ok) { const session = getSession() const { token, expirationDate } = await response.json() saveSession({ ...session, auth: { token, expirationDate } }) redirect(session.urlTarget ?? "/") return } // if unauthorized : if (response.status === 401) { setErrors([ { type: "Non autorisé", messages: [ "L'adresse email ou le mot de passe sont invalide.", ], }, ]) return } try { const failures = await response.json() setErrors( Object.entries(failures).map(([type, messages]) => ({ type, messages, })), ) } catch (e) { setErrors([ { type: "internal error", messages: ["an internal error occurred."], }, ]) } } return (

Se connecter

{errors.map(({ type, messages }) => messages.map((message) => (

{type} : {message}

)), )}
Vous n'avez pas de compte ?

) }