AW-496-assistant-typing

This commit is contained in:
gofnnp 2025-07-26 20:01:24 +04:00
parent 33863911c4
commit f2b1519c67
3 changed files with 13 additions and 5 deletions

View File

@ -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 (
<div className={clsx(styles.message, message.isOwn && styles.own)}>

View File

@ -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(),
});

View File

@ -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<UIMessage[]>(() =>
@ -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(