"use client" import React, { useState } from 'react' import { useQuery } from '@apollo/client' import { Card } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Sidebar } from '@/components/dashboard/sidebar' import { useSidebar } from '@/hooks/useSidebar' import { MessengerConversations } from './messenger-conversations' import { MessengerChatWithAttachments } from './messenger-chat-with-attachments' import { MessengerEmptyState } from './messenger-empty-state' import { GET_CONVERSATIONS, GET_MY_COUNTERPARTIES } from '@/graphql/queries' import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels' import { MessageCircle } from 'lucide-react' interface Organization { id: string inn: string name?: string fullName?: string type: 'FULFILLMENT' | 'SELLER' | 'LOGIST' | 'WHOLESALE' address?: string phones?: Array<{ value: string }> emails?: Array<{ value: string }> users?: Array<{ id: string, avatar?: string }> createdAt: string } interface Conversation { id: string counterparty: Organization lastMessage?: { id: string content?: string type?: string senderId: string isRead: boolean createdAt: string } unreadCount: number updatedAt: string } export function MessengerDashboard() { const { getSidebarMargin } = useSidebar() const [selectedCounterparty, setSelectedCounterparty] = useState(null) // Загружаем список чатов (conversations) для отображения непрочитанных сообщений const { data: conversationsData, loading: conversationsLoading, refetch: refetchConversations } = useQuery(GET_CONVERSATIONS, { pollInterval: 30000, // Обновляем каждые 30 секунд - реже, но достаточно fetchPolicy: 'cache-first', // Приоритет кэшу для стабильности notifyOnNetworkStatusChange: false, // Не показываем загрузку при фоновых обновлениях }) // Также загружаем полный список контрагентов на случай, если с кем-то еще не общались const { data: counterpartiesData, loading: counterpartiesLoading } = useQuery(GET_MY_COUNTERPARTIES) const conversations: Conversation[] = conversationsData?.conversations || [] const counterparties = counterpartiesData?.myCounterparties || [] const handleSelectCounterparty = (counterpartyId: string) => { setSelectedCounterparty(counterpartyId) } // Найти данные выбранного контрагента (сначала в чатах, потом в общем списке) const selectedCounterpartyData = conversations.find((conv: Conversation) => conv.counterparty.id === selectedCounterparty)?.counterparty || counterparties.find((cp: Organization) => cp.id === selectedCounterparty) // Если нет контрагентов, показываем заглушку if (!counterpartiesLoading && !conversationsLoading && counterparties.length === 0) { return (
) } return (
{/* Основной контент */}
{/* Левая панель - список контрагентов */} {/* Разделитель для изменения размера */}
{/* Правая панель - чат */} {selectedCounterparty && selectedCounterpartyData ? ( ) : (

Выберите контрагента

Начните беседу с одним из ваших контрагентов

)}
) }