From 4fa4a91ddc1382245efab7bc0b2aa9fff5bd8487 Mon Sep 17 00:00:00 2001 From: Kirill Date: Thu, 21 May 2026 21:55:10 +0500 Subject: [PATCH] feat: avatars in /me/messages chat --- .../src/pages/me/ui/sections/MessagesPage.tsx | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/client/src/pages/me/ui/sections/MessagesPage.tsx b/client/src/pages/me/ui/sections/MessagesPage.tsx index a2b74ef..220753d 100644 --- a/client/src/pages/me/ui/sections/MessagesPage.tsx +++ b/client/src/pages/me/ui/sections/MessagesPage.tsx @@ -10,19 +10,30 @@ import ListItemText from '@mui/material/ListItemText' import Stack from '@mui/material/Stack' import Typography from '@mui/material/Typography' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' +import { useUnit } from 'effector-react' import { Link as RouterLink } from 'react-router-dom' import { fetchMyOrder, postOrderMessage } from '@/entities/order/api/order-api' import { fetchMyConversations, markOrderMessagesRead } from '@/entities/user/api/messages-api' +import { fetchAdminAvatar } from '@/entities/user/api/user-api' import { orderStatusLabelRu } from '@/shared/lib/order-status-labels' +import { $user } from '@/shared/model/auth' import { ChatMessageBubble } from '@/shared/ui/ChatMessageBubble' import { OrderMessageBody } from '@/shared/ui/OrderMessageBody' import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent' import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor' +import { UserAvatar } from '@/shared/ui/UserAvatar' export function MessagesPage() { const qc = useQueryClient() const [selectedId, setSelectedId] = useState(null) const [text, setText] = useState('') + const currentUser = useUnit($user) + + const adminAvatarQuery = useQuery({ + queryKey: ['admin', 'avatar'], + queryFn: fetchAdminAvatar, + staleTime: 5 * 60 * 1000, + }) const listQuery = useQuery({ queryKey: ['me', 'conversations'], @@ -163,14 +174,35 @@ export function MessagesPage() { - {order.messages.map((m) => ( - - - {m.authorType === 'admin' ? 'Админ' : 'Вы'} · {new Date(m.createdAt).toLocaleString()} - - - - ))} + {order.messages.map((m) => { + const isAdminMsg = m.authorType === 'admin' + const adminAv = adminAvatarQuery.data + const avatarNode = isAdminMsg ? ( + + ) : currentUser ? ( + + ) : null + return ( + + + {isAdminMsg ? 'Админ' : 'Вы'} · {new Date(m.createdAt).toLocaleString()} + + + + ) + })} {order.messages.length === 0 && Нет сообщений.}