import { useState } from 'react'; import { Search, Plus, MessageSquare, Star, Clock } from 'lucide-react'; import { useCommunicationsStore } from '../services/communicationsService'; import { Badge, Button } from '@omnichannel/ui'; interface ContactsViewProps { onAddContactModal: () => void; } export function ContactsView({ onAddContactModal }: ContactsViewProps) { const { conversations, setActiveTab, setActiveChatId } = useCommunicationsStore(); const [filterType, setFilterType] = useState<'all' | 'clients' | 'vip'>('all'); const [searchQuery, setSearchQuery] = useState(''); const contactsList = conversations.map((c) => ({ ...c.contact, conversationId: c.id, })); const filteredContacts = contactsList.filter((cnt) => { if (filterType === 'clients' && !cnt.isClient) return false; if (filterType === 'vip' && !cnt.isVip) return false; if (searchQuery.trim()) { const q = searchQuery.toLowerCase(); return ( cnt.name.toLowerCase().includes(q) || cnt.company.toLowerCase().includes(q) || cnt.role.toLowerCase().includes(q) ); } return true; }); const handleOpenChat = (conversationId: string) => { setActiveChatId(conversationId); setActiveTab('messengers'); }; return (
{/* Header controls */}
setSearchQuery(e.target.value)} placeholder="Поиск по контактам..." className="w-full h-10 pl-9 pr-3 rounded-xl bg-[var(--krona-surface)] border border-[var(--krona-border)] text-sm text-[var(--krona-text-primary)] placeholder-[var(--krona-text-muted)] focus:outline-none focus:border-[var(--krona-primary)]" />
{/* Contacts Cards Grid */}
{filteredContacts.map((cnt) => (
{cnt.initials}

{cnt.name}

{cnt.isVip && }
{cnt.company} • {cnt.role}
{cnt.isClient && Клиент} {cnt.isVip && VIP}
{/* Channels snippet */}
{cnt.channels.slice(0, 2).map((ch, idx) => (
{ch.label}: {ch.value}
))}
{cnt.lastActivity}
))}
); }