import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useStore } from '../store/useStore'; import { authApi, familyApi, inviteLinkApi } from '../api/client'; import { Users, LogOut, Settings, Plus, Loader2, Eye, EyeOff } from 'lucide-react'; export default function NoFamily() { const { t } = useTranslation(); const navigate = useNavigate(); const { user, logout, setUser } = useStore(); const [familyName, setFamilyName] = useState(''); const [password, setPassword] = useState(''); const [showPassword, setShowPassword] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [joiningFamily, setJoiningFamily] = useState(false); useEffect(() => { checkPendingInvite(); }, []); const checkPendingInvite = async () => { const pendingToken = localStorage.getItem('pendingInviteToken'); if (!pendingToken) return; localStorage.removeItem('pendingInviteToken'); try { setJoiningFamily(true); const response = await inviteLinkApi.join(pendingToken); 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('noFamily.invalidInvite')); } else { setError(t('noFamily.joinError')); } } finally { setJoiningFamily(false); } }; const handleLogout = async () => { try { await authApi.logout(); logout(); } catch (err) { console.error(err); logout(); } }; const handleGoToAdmin = () => { navigate('/adminpanel'); }; const handleCreateFamily = async (e: React.FormEvent) => { e.preventDefault(); if (!familyName.trim()) { setError(t('noFamily.enterFamilyName')); return; } try { setLoading(true); setError(''); const response = await familyApi.createMyFamily({ name: familyName.trim(), password: password || undefined, }); setUser({ ...user!, family_id: response.data.family_id, }); navigate(`/family/${response.data.family_id}`); } catch (err: unknown) { if (err && typeof err === 'object' && 'response' in err) { const axiosError = err as { response?: { status?: number } }; if (axiosError.response?.status === 409) { setError(t('noFamily.alreadyInFamily')); } else { setError(t('noFamily.createError')); } } else { setError(t('noFamily.createError')); } console.error(err); } finally { setLoading(false); } }; if (joiningFamily) { return (
{user?.email || user?.username}