'use client'; import { useEffect, useState } from 'react'; import { Loader2 } from 'lucide-react'; import { AvatarWithPresence } from '@/components/family/avatar-with-presence'; import { useAuth } from '@/components/id/auth-provider'; import { useToast } from '@/components/id/toast-provider'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { FamilyInviteCandidate, getApiErrorMessage, searchFamilyInviteUsers, sendFamilyInvite } from '@/lib/api'; export function FamilyInviteDialog({ groupId, open, onOpenChange, onInvited }: { groupId: string; open: boolean; onOpenChange: (open: boolean) => void; onInvited?: () => void; }) { const { token } = useAuth(); const { showToast } = useToast(); const [inviteQuery, setInviteQuery] = useState(''); const [inviteResults, setInviteResults] = useState([]); const [inviteSearching, setInviteSearching] = useState(false); const [selectedInviteUser, setSelectedInviteUser] = useState(null); const [submitting, setSubmitting] = useState(false); useEffect(() => { if (!open) { setInviteQuery(''); setInviteResults([]); setSelectedInviteUser(null); return; } if (!token || inviteQuery.trim().length < 2) { setInviteResults([]); return; } const timer = window.setTimeout(() => { setInviteSearching(true); searchFamilyInviteUsers(groupId, inviteQuery.trim(), token) .then((response) => setInviteResults(response.users ?? [])) .catch(() => setInviteResults([])) .finally(() => setInviteSearching(false)); }, 300); return () => window.clearTimeout(timer); }, [groupId, inviteQuery, open, token]); async function submitInvite() { if (!token || !selectedInviteUser) return; setSubmitting(true); try { await sendFamilyInvite(groupId, { inviteeUserId: selectedInviteUser.id }, token); showToast('Приглашение отправлено'); onOpenChange(false); onInvited?.(); } catch (error) { showToast(getApiErrorMessage(error, 'Не удалось отправить приглашение') ?? 'Ошибка'); } finally { setSubmitting(false); } } return ( Пригласить в семью {selectedInviteUser ? (

{selectedInviteUser.displayName}

{selectedInviteUser.email ?? selectedInviteUser.phone ?? selectedInviteUser.username ?? 'Контакт не указан'}

) : ( <> setInviteQuery(event.target.value)} />
{inviteSearching ? (
Ищем пользователей...
) : inviteQuery.trim().length < 2 ? (

Введите минимум 2 символа для поиска

) : inviteResults.length ? ( inviteResults.map((candidate) => ( )) ) : (

Пользователи не найдены

)}
)}
); }