feat(realtime): implement SSE realtime notifications; publish events from resolvers; remove polling in chat/sidebar/supplies/warehouse and wire realtime refetch
This commit is contained in:
@ -10,6 +10,7 @@ import { Button } from '@/components/ui/button'
|
||||
import { Card } from '@/components/ui/card'
|
||||
import { GET_CONVERSATIONS, GET_MY_COUNTERPARTIES } from '@/graphql/queries'
|
||||
import { useSidebar } from '@/hooks/useSidebar'
|
||||
import { useRealtime } from '@/hooks/useRealtime'
|
||||
|
||||
import { MessengerChat } from './messenger-chat'
|
||||
import { MessengerConversations } from './messenger-conversations'
|
||||
@ -48,14 +49,19 @@ export function MessengerDashboard() {
|
||||
const [selectedCounterparty, setSelectedCounterparty] = useState<string | null>(null)
|
||||
|
||||
// Загружаем список чатов (conversations) для отображения непрочитанных сообщений
|
||||
const {
|
||||
data: conversationsData,
|
||||
loading: conversationsLoading,
|
||||
refetch: refetchConversations,
|
||||
} = useQuery(GET_CONVERSATIONS, {
|
||||
pollInterval: 30000, // Обновляем каждые 30 секунд - реже, но достаточно
|
||||
fetchPolicy: 'cache-first', // Приоритет кэшу для стабильности
|
||||
notifyOnNetworkStatusChange: false, // Не показываем загрузку при фоновых обновлениях
|
||||
const { data: conversationsData, loading: conversationsLoading, refetch: refetchConversations } = useQuery(
|
||||
GET_CONVERSATIONS,
|
||||
{
|
||||
fetchPolicy: 'cache-first', // Приоритет кэшу для стабильности
|
||||
notifyOnNetworkStatusChange: false, // Не показываем загрузку при фоновых обновлениях
|
||||
},
|
||||
)
|
||||
|
||||
// Realtime: обновление списка бесед
|
||||
useRealtime({
|
||||
onEvent: (evt) => {
|
||||
if (evt.type === 'message:new') refetchConversations()
|
||||
},
|
||||
})
|
||||
|
||||
// Также загружаем полный список контрагентов на случай, если с кем-то еще не общались
|
||||
|
Reference in New Issue
Block a user