AW-496-assistant-typing
This commit is contained in:
parent
33863911c4
commit
f2b1519c67
@ -30,18 +30,19 @@ export interface ChatMessageProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function ChatMessage({ message }: ChatMessageProps) {
|
export default function ChatMessage({ message }: ChatMessageProps) {
|
||||||
const { read } = useChat();
|
const { isConnected, read } = useChat();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (
|
if (
|
||||||
!!message.id &&
|
!!message.id &&
|
||||||
!message.isRead &&
|
!message.isRead &&
|
||||||
message.id !== "typing" &&
|
message.id !== "typing" &&
|
||||||
!message.id.startsWith("sending-message")
|
!message.id.startsWith("sending-message") &&
|
||||||
|
isConnected
|
||||||
) {
|
) {
|
||||||
read([message.id]);
|
read([message.id]);
|
||||||
}
|
}
|
||||||
}, [message.id, message.isRead, read]);
|
}, [message.id, message.isRead, read, isConnected]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={clsx(styles.message, message.isOwn && styles.own)}>
|
<div className={clsx(styles.message, message.isOwn && styles.own)}>
|
||||||
|
|||||||
@ -9,6 +9,7 @@ const ChatMessageSchema = z.object({
|
|||||||
isRead: z.boolean(),
|
isRead: z.boolean(),
|
||||||
type: z.enum(["text", "image", "voice"]),
|
type: z.enum(["text", "image", "voice"]),
|
||||||
text: z.string().optional(),
|
text: z.string().optional(),
|
||||||
|
isLast: z.boolean().optional(),
|
||||||
suggestions: z.array(z.string()).optional(),
|
suggestions: z.array(z.string()).optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ const PAGE_LIMIT = 50;
|
|||||||
|
|
||||||
type UIMessage = Pick<
|
type UIMessage = Pick<
|
||||||
IChatMessage,
|
IChatMessage,
|
||||||
"id" | "role" | "text" | "createdDate" | "isRead" | "suggestions"
|
"id" | "role" | "text" | "createdDate" | "isRead" | "suggestions" | "isLast"
|
||||||
>;
|
>;
|
||||||
|
|
||||||
interface UseChatSocketOptions {
|
interface UseChatSocketOptions {
|
||||||
@ -46,6 +46,7 @@ export const useChatSocket = (
|
|||||||
createdDate: m.createdDate,
|
createdDate: m.createdDate,
|
||||||
isRead: m.isRead,
|
isRead: m.isRead,
|
||||||
suggestions: m.suggestions,
|
suggestions: m.suggestions,
|
||||||
|
isLast: m.isLast,
|
||||||
});
|
});
|
||||||
|
|
||||||
const [messages, setMessages] = useState<UIMessage[]>(() =>
|
const [messages, setMessages] = useState<UIMessage[]>(() =>
|
||||||
@ -65,7 +66,11 @@ export const useChatSocket = (
|
|||||||
const { suggestions, setSuggestions } = useChatStore(state => state);
|
const { suggestions, setSuggestions } = useChatStore(state => state);
|
||||||
|
|
||||||
const isLoadingAdvisorMessage = useMemo(() => {
|
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]);
|
}, [messages]);
|
||||||
|
|
||||||
const joinChat = useCallback(
|
const joinChat = useCallback(
|
||||||
@ -179,6 +184,7 @@ export const useChatSocket = (
|
|||||||
createdDate: d.createdDate,
|
createdDate: d.createdDate,
|
||||||
isRead: d.isRead,
|
isRead: d.isRead,
|
||||||
suggestions: d.suggestions,
|
suggestions: d.suggestions,
|
||||||
|
isLast: d.isLast,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
return Array.from(map.values()).sort(
|
return Array.from(map.values()).sort(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user