import { AnimatedBackground } from "@ui/components/AnimatedBackground"; import { LoginWithGoogle } from "@ui/components/BrandButtons/LoginWithGoogle"; import { useTheme } from "@ui/contexts/ThemeContext"; import { useSignUp } from "@ui/hooks/auth"; import { Button } from "@ui/ui-library/button"; import { FieldError, Input, Label, TextField } from "@ui/ui-library/field"; import { Form } from "@ui/ui-library/form"; import { Text } from "@ui/ui-library/text"; import { MonitorIcon, MoonIcon, SunIcon } from "lucide-react"; import { useState } from "react"; import { Link, useNavigate } from "react-router-dom"; import { twMerge } from "tailwind-merge"; export function SignUpPage() { const navigate = useNavigate(); const redirectUrl = localStorage.getItem("redirectUrl"); const { mutate: signUp, isPending } = useSignUp({ redirectUrl: redirectUrl ?? null, }); const [errors, setErrors] = useState>({}); const [formData, setFormData] = useState({ email: "", password: "", confirmPassword: "", username: "", first_name: "", last_name: "", business_name: "", }); // Theme const { theme, setTheme } = useTheme(); const toggleTheme = () => { if (theme === "light") { setTheme("dark"); } else if (theme === "dark") { setTheme("system"); } else { setTheme("light"); } }; const getThemeIcon = () => { switch (theme) { case "light": return ; case "dark": return ; case "system": return ; default: return ; } }; const validateForm = () => { const errors: Record = {}; // // Business name validation // if (formData.business_name.length < 3) { // errors.business_name = // "Le nom de l'entreprise doit contenir au moins 3 caractères"; // } // Password length validation if (formData.password.length < 8) { errors.password = "Le mot de passe doit contenir au moins 8 caractères"; } // Password match validation if (formData.password !== formData.confirmPassword) { errors.confirmPassword = "Les mots de passe ne correspondent pas"; } // Email validation const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(formData.email)) { errors.email = "Veuillez entrer une adresse email valide"; } return Object.keys(errors).length === 0 ? null : errors; }; const onSubmit = async (e: React.FormEvent) => { e.preventDefault(); const validationErrors = validateForm(); if (validationErrors) { setErrors(validationErrors); return; } signUp({ email: formData.email, password: formData.password, first_name: formData.first_name, last_name: formData.last_name, confirm_password: formData.confirmPassword, business_name: formData.business_name, }); }; return (
navigate("/")} >
e.stopPropagation()} >
Retour à l'accueil {/* Theme Toggle */}
{/* Xtablo Icon */}
Xtablo Xtablo

Créer un compte Xtablo

setFormData({ ...formData, first_name: e.target.value })} required /> setFormData({ ...formData, last_name: e.target.value })} required />
{/* setFormData({ ...formData, business_name: e.target.value }) } required /> */} setFormData({ ...formData, email: e.target.value })} required /> setFormData({ ...formData, password: e.target.value })} required /> {!errors.password && ( {errors.password} )} setFormData({ ...formData, confirmPassword: e.target.value, }) } required />
Ou continuer avec

Déjà un compte ?{" "} Se connecter

); }