Добавлены новые поля в модель Supply и обновлены компоненты для работы с расходниками. Реализована логика загрузки и отображения чатов с непрочитанными сообщениями в мессенджере. Обновлены запросы и мутации GraphQL для поддержки новых полей. Исправлены ошибки отображения и добавлены индикаторы для непрочитанных сообщений.
This commit is contained in:
@ -3,7 +3,7 @@
|
||||
import { useState, useRef, useEffect, useMemo } from 'react'
|
||||
import { useMutation, useQuery } from '@apollo/client'
|
||||
import { GET_MESSAGES } from '@/graphql/queries'
|
||||
import { SEND_MESSAGE, SEND_VOICE_MESSAGE, SEND_IMAGE_MESSAGE, SEND_FILE_MESSAGE } from '@/graphql/mutations'
|
||||
import { SEND_MESSAGE, SEND_VOICE_MESSAGE, SEND_IMAGE_MESSAGE, SEND_FILE_MESSAGE, MARK_MESSAGES_AS_READ } from '@/graphql/mutations'
|
||||
import { Button } from '@/components/ui/button'
|
||||
|
||||
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
|
||||
@ -60,6 +60,13 @@ export function MessengerChat({ counterparty }: MessengerChatProps) {
|
||||
fetchPolicy: 'cache-and-network', // Всегда загружаем свежие данные
|
||||
errorPolicy: 'all' // Показываем данные даже при ошибках
|
||||
})
|
||||
|
||||
// Мутация для отметки сообщений как прочитанных
|
||||
const [markMessagesAsReadMutation] = useMutation(MARK_MESSAGES_AS_READ, {
|
||||
onError: (error) => {
|
||||
console.error('Ошибка отметки сообщений как прочитанных:', error)
|
||||
}
|
||||
})
|
||||
|
||||
const [sendMessageMutation] = useMutation(SEND_MESSAGE, {
|
||||
onCompleted: () => {
|
||||
@ -99,6 +106,33 @@ export function MessengerChat({ counterparty }: MessengerChatProps) {
|
||||
|
||||
const messages = useMemo(() => messagesData?.messages || [], [messagesData?.messages])
|
||||
|
||||
// Автоматически отмечаем сообщения как прочитанные при открытии чата
|
||||
useEffect(() => {
|
||||
if (user?.organization?.id && counterparty.id) {
|
||||
const conversationId = `${user.organization.id}-${counterparty.id}`
|
||||
markMessagesAsReadMutation({
|
||||
variables: { conversationId },
|
||||
})
|
||||
}
|
||||
}, [counterparty.id, user?.organization?.id, markMessagesAsReadMutation])
|
||||
|
||||
// Отмечаем сообщения как прочитанные при получении новых сообщений
|
||||
useEffect(() => {
|
||||
if (messages.length > 0 && user?.organization?.id && counterparty.id) {
|
||||
const hasUnreadMessages = messages.some((msg: Message) =>
|
||||
!msg.isRead &&
|
||||
msg.senderOrganization?.id !== user.organization?.id
|
||||
)
|
||||
|
||||
if (hasUnreadMessages) {
|
||||
const conversationId = `${user.organization.id}-${counterparty.id}`
|
||||
markMessagesAsReadMutation({
|
||||
variables: { conversationId },
|
||||
})
|
||||
}
|
||||
}
|
||||
}, [messages, counterparty.id, user?.organization?.id, markMessagesAsReadMutation])
|
||||
|
||||
|
||||
|
||||
const scrollToBottom = () => {
|
||||
|
Reference in New Issue
Block a user