Обновлены компоненты мессенджера: изменен интервал обновления списка чатов на 1 минуту и изменена политика выборки на 'cache-first' для повышения стабильности. В компоненте MessengerChat добавлена поддержка вложений и улучшена логика отметки сообщений как прочитанных с плавным обновлением. В компоненте MessengerConversations улучшено отображение загрузки и индикаторов непрочитанных сообщений. Также добавлен автофокус на поле ввода при открытии чата.

This commit is contained in:
Bivekich
2025-07-21 14:53:17 +03:00
parent 553b014b05
commit 1287d6ee65
6 changed files with 890 additions and 50 deletions

View File

@ -7,7 +7,7 @@ import { Button } from '@/components/ui/button'
import { Sidebar } from '@/components/dashboard/sidebar'
import { useSidebar } from '@/hooks/useSidebar'
import { MessengerConversations } from './messenger-conversations'
import { MessengerChat } from './messenger-chat'
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'
@ -47,8 +47,9 @@ export function MessengerDashboard() {
// Загружаем список чатов (conversations) для отображения непрочитанных сообщений
const { data: conversationsData, loading: conversationsLoading, refetch: refetchConversations } = useQuery(GET_CONVERSATIONS, {
pollInterval: 5000, // Обновляем каждые 5 секунд для получения новых непрочитанных сообщений
fetchPolicy: 'cache-and-network',
pollInterval: 30000, // Обновляем каждые 30 секунд - реже, но достаточно
fetchPolicy: 'cache-first', // Приоритет кэшу для стабильности
notifyOnNetworkStatusChange: false, // Не показываем загрузку при фоновых обновлениях
})
// Также загружаем полный список контрагентов на случай, если с кем-то еще не общались
@ -121,7 +122,10 @@ export function MessengerDashboard() {
<Panel defaultSize={70} className="pl-2">
<Card className="glass-card h-full overflow-hidden">
{selectedCounterparty && selectedCounterpartyData ? (
<MessengerChat counterparty={selectedCounterpartyData} />
<MessengerChatWithAttachments
counterparty={selectedCounterpartyData}
onMessagesRead={refetchConversations}
/>
) : (
<div className="flex items-center justify-center h-full">
<div className="text-center">