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(