import { useState, useEffect } from 'react' import { useSearchParams, useNavigate } from 'react-router-dom' import { supabase } from '@/lib/supabase' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { toast } from 'sonner' export function AcceptInvite() { const [searchParams] = useSearchParams() const token = searchParams.get('token') const navigate = useNavigate() const [email, setEmail] = useState('') const [name, setName] = useState('') const [password, setPassword] = useState('') const [loading, setLoading] = useState(true) const [valid, setValid] = useState(false) /* eslint-disable react-hooks/set-state-in-effect */ useEffect(() => { let cancelled = false async function checkToken() { const { data } = await supabase .from('invitations') .select('*') .eq('token', token) .eq('accepted', false) .gte('expires_at', new Date().toISOString()) .single() if (!cancelled) { if (data) { setEmail(data.email) setValid(true) } setLoading(false) } } if (token) checkToken() else setLoading(false) return () => { cancelled = true } }, [token]) /* eslint-enable react-hooks/set-state-in-effect */ async function handleSubmit(e) { e.preventDefault() setLoading(true) const { error } = await supabase.auth.signUp({ email, password, options: { data: { full_name: name } }, }) if (error) { toast.error(error.message) setLoading(false) return } await supabase.from('invitations').update({ accepted: true }).eq('token', token) toast.success('Compte créé ! Vous pouvez vous connecter.') navigate('/login') } if (loading) return
Vérification...
if (!valid) return (

Lien d'invitation invalide ou expiré.

) return (
Accepter l'invitation

{email}

setName(e.target.value)} required /> setPassword(e.target.value)} required minLength={6} />
) }