From f2b1519c677c5ce303b792554036a3346480ce6c Mon Sep 17 00:00:00 2001 From: gofnnp Date: Sat, 26 Jul 2025 20:01:24 +0400 Subject: [PATCH] AW-496-assistant-typing --- .../domains/chat/ChatMessage/ChatMessage.tsx | 7 ++++--- src/entities/chats/types.ts | 1 + src/hooks/chats/useChatSocket.ts | 10 ++++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/components/domains/chat/ChatMessage/ChatMessage.tsx b/src/components/domains/chat/ChatMessage/ChatMessage.tsx index 70078c1..fdac54c 100644 --- a/src/components/domains/chat/ChatMessage/ChatMessage.tsx +++ b/src/components/domains/chat/ChatMessage/ChatMessage.tsx @@ -30,18 +30,19 @@ export interface ChatMessageProps { } export default function ChatMessage({ message }: ChatMessageProps) { - const { read } = useChat(); + const { isConnected, read } = useChat(); useEffect(() => { if ( !!message.id && !message.isRead && message.id !== "typing" && - !message.id.startsWith("sending-message") + !message.id.startsWith("sending-message") && + isConnected ) { read([message.id]); } - }, [message.id, message.isRead, read]); + }, [message.id, message.isRead, read, isConnected]); return (
diff --git a/src/entities/chats/types.ts b/src/entities/chats/types.ts index e7085d9..6914571 100644 --- a/src/entities/chats/types.ts +++ b/src/entities/chats/types.ts @@ -9,6 +9,7 @@ const ChatMessageSchema = z.object({ isRead: z.boolean(), type: z.enum(["text", "image", "voice"]), text: z.string().optional(), + isLast: z.boolean().optional(), suggestions: z.array(z.string()).optional(), }); diff --git a/src/hooks/chats/useChatSocket.ts b/src/hooks/chats/useChatSocket.ts index cde91b5..e8d70de 100644 --- a/src/hooks/chats/useChatSocket.ts +++ b/src/hooks/chats/useChatSocket.ts @@ -22,7 +22,7 @@ const PAGE_LIMIT = 50; type UIMessage = Pick< IChatMessage, - "id" | "role" | "text" | "createdDate" | "isRead" | "suggestions" + "id" | "role" | "text" | "createdDate" | "isRead" | "suggestions" | "isLast" >; interface UseChatSocketOptions { @@ -46,6 +46,7 @@ export const useChatSocket = ( createdDate: m.createdDate, isRead: m.isRead, suggestions: m.suggestions, + isLast: m.isLast, }); const [messages, setMessages] = useState(() => @@ -65,7 +66,11 @@ export const useChatSocket = ( const { suggestions, setSuggestions } = useChatStore(state => state); const isLoadingAdvisorMessage = useMemo(() => { - return messages.length > 0 && messages[0].role !== "assistant"; + return ( + messages.length > 0 && + (messages[0].role !== "assistant" || + (Object.hasOwn(messages[0], "isLast") && !messages[0].isLast)) + ); }, [messages]); const joinChat = useCallback( @@ -179,6 +184,7 @@ export const useChatSocket = ( createdDate: d.createdDate, isRead: d.isRead, suggestions: d.suggestions, + isLast: d.isLast, }) ); return Array.from(map.values()).sort(