import { FormEvent, useRef, useState } from "react" import { BASE } from "../Constants.ts" import "../style/form.css" import { Failure } from "../api/failure.ts" import { fetchAPI, redirect } from "../Fetcher.ts" import { getSession, saveSession } from "../api/session.ts" export default function RegisterPage() { const usernameField = useRef(null) const passwordField = useRef(null) const confirmpasswordField = useRef(null) const emailField = useRef(null) const [errors, setErrors] = useState([]) async function handleSubmit(e: FormEvent) { e.preventDefault() const username = usernameField.current!.value const password = passwordField.current!.value const confirmpassword = confirmpasswordField.current!.value const email = emailField.current!.value if (confirmpassword !== password) { setErrors([ { type: "password", messages: [ "le mot de passe et la confirmation du mot de passe ne sont pas equivalent.", ], }, ]) return } const response = await fetchAPI("auth/register", { username, password, email, }) if (response.ok) { const { token, expirationDate } = await response.json() const session = getSession() saveSession({ ...session, auth: { token, expirationDate }, urlTarget: undefined }) redirect(session.urlTarget ?? "/") 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 (

S'enregistrer

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

{type} : {message}

)), )}
Vous avez déjà un compte ?
) }