import { useEffect, useState } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { inviteLinkApi, authApi } from '../api/client'; import { useStore } from '../store/useStore'; import { Loader2, Users, UserPlus, AlertCircle } from 'lucide-react'; export default function InvitePage() { const { t } = useTranslation(); const { token } = useParams<{ token: string }>(); const navigate = useNavigate(); const { isAuthenticated, setUser } = useStore(); const [loading, setLoading] = useState(true); const [joining, setJoining] = useState(false); const [error, setError] = useState(''); const [familyName, setFamilyName] = useState(null); const [isValid, setIsValid] = useState(false); useEffect(() => { if (token) { validateInvite(); } }, [token]); useEffect(() => { if (isAuthenticated && isValid && token) { joinFamily(); } }, [isAuthenticated, isValid]); const validateInvite = async () => { if (!token) return; try { setLoading(true); const response = await inviteLinkApi.validate(token); if (response.data.valid) { setIsValid(true); setFamilyName(response.data.family_name); } else { setError(t('invite.invalid')); } } catch (err) { setError(t('invite.notFound')); } finally { setLoading(false); } }; const joinFamily = async () => { if (!token) return; try { setJoining(true); const response = await inviteLinkApi.join(token); if (response.data.success) { const meResponse = await authApi.me(); setUser(meResponse.data); navigate(`/family/${response.data.family_id}`); } else { setError(response.data.message); } } catch (err: any) { if (err.response?.status === 400) { setError(t('invite.alreadyInFamily')); } else { setError(t('invite.joinError')); } } finally { setJoining(false); } }; const handleGoogleLogin = async () => { if (token) { localStorage.setItem('pendingInviteToken', token); } try { const response = await authApi.getGoogleAuthUrl(window.location.href); window.location.href = response.data.url; } catch (err) { setError(t('login.authError')); } }; if (loading) { return (
{t('invite.validating')}
); } if (joining) { return (
{t('invite.joining')}
); } if (error) { return (

{t('common.error')}

{error}

); } return (

{t('invite.pageTitle')}

{familyName}

{t('invite.pageDescription')}

); }