|
@@ -37,13 +37,15 @@ export default ({ agent, text, message, mutate, showUser=false}: Props) => {
|
|
|
const { setMessageRespeaking, setMessageStopHandle, messageStopHandle, isReacting, updateMessageReaction } = useTextChat()
|
|
const { setMessageRespeaking, setMessageStopHandle, messageStopHandle, isReacting, updateMessageReaction } = useTextChat()
|
|
|
const { startSpeech, stopSpeech, onPlayerStatusChanged } = useTextToSpeech()
|
|
const { startSpeech, stopSpeech, onPlayerStatusChanged } = useTextToSpeech()
|
|
|
|
|
|
|
|
|
|
+ const hasText = text.length > 0;
|
|
|
|
|
+
|
|
|
// 更新单个消息的函数
|
|
// 更新单个消息的函数
|
|
|
const updateMessage = (messageId: number, updatedFields: {isLike: boolean, isDislike: boolean}) => {
|
|
const updateMessage = (messageId: number, updatedFields: {isLike: boolean, isDislike: boolean}) => {
|
|
|
// 使用 mutate 更新 SWR 缓存
|
|
// 使用 mutate 更新 SWR 缓存
|
|
|
// 历史消息
|
|
// 历史消息
|
|
|
mutate((pages:any) => {
|
|
mutate((pages:any) => {
|
|
|
return pages.map(page => {
|
|
return pages.map(page => {
|
|
|
- const updatedMessages = page.data.map((msg:TMessage) =>
|
|
|
|
|
|
|
+ const updatedMessages = page.data.map((msg:TMessage) =>
|
|
|
msg.msgId === messageId ? { ...msg, ...updatedFields } : msg
|
|
msg.msgId === messageId ? { ...msg, ...updatedFields } : msg
|
|
|
);
|
|
);
|
|
|
return { ...page, data: updatedMessages };
|
|
return { ...page, data: updatedMessages };
|
|
@@ -59,7 +61,7 @@ export default ({ agent, text, message, mutate, showUser=false}: Props) => {
|
|
|
setMessageRespeaking(isSpeaking)
|
|
setMessageRespeaking(isSpeaking)
|
|
|
setIsSpeaking(isSpeaking)
|
|
setIsSpeaking(isSpeaking)
|
|
|
})
|
|
})
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
const handlePlayAudio = async (e:any, text: string) => {
|
|
const handlePlayAudio = async (e:any, text: string) => {
|
|
|
e.stopPropagation();
|
|
e.stopPropagation();
|
|
|
if(isReacting){
|
|
if(isReacting){
|
|
@@ -86,7 +88,7 @@ export default ({ agent, text, message, mutate, showUser=false}: Props) => {
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
setMessageStopHandle(stopSpeech)
|
|
setMessageStopHandle(stopSpeech)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
setIsSpeaking(true)
|
|
setIsSpeaking(true)
|
|
|
setMessageRespeaking(true)
|
|
setMessageRespeaking(true)
|
|
|
}
|
|
}
|
|
@@ -124,7 +126,7 @@ export default ({ agent, text, message, mutate, showUser=false}: Props) => {
|
|
|
if (!agent?.agentId) {
|
|
if (!agent?.agentId) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
const isLike = !message.isLike;
|
|
const isLike = !message.isLike;
|
|
|
const response = await likeMessage({
|
|
const response = await likeMessage({
|
|
|
agentId: agent?.agentId,
|
|
agentId: agent?.agentId,
|
|
@@ -193,16 +195,16 @@ export default ({ agent, text, message, mutate, showUser=false}: Props) => {
|
|
|
<View className={`${style.messageContent}`}>
|
|
<View className={`${style.messageContent}`}>
|
|
|
|
|
|
|
|
{
|
|
{
|
|
|
- text.length === 0 ? <ThinkAnimation></ThinkAnimation> : <>
|
|
|
|
|
|
|
+ !hasText ? <ThinkAnimation></ThinkAnimation> : <>
|
|
|
{/* <Text user-select>{text}</Text> */}
|
|
{/* <Text user-select>{text}</Text> */}
|
|
|
{/* <MarkdownParser content='您可能想询问的是:**“汽车的核心理念”** 是什么。'></MarkdownParser> */}
|
|
{/* <MarkdownParser content='您可能想询问的是:**“汽车的核心理念”** 是什么。'></MarkdownParser> */}
|
|
|
<MarkdownParser content={text}></MarkdownParser>
|
|
<MarkdownParser content={text}></MarkdownParser>
|
|
|
{renderMessageBody()}
|
|
{renderMessageBody()}
|
|
|
</>
|
|
</>
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
</View>
|
|
</View>
|
|
|
- <View className="flex gap-12">
|
|
|
|
|
|
|
+ {hasText ? <View className={`flex gap-12`}>
|
|
|
<View onClick={(e) => handleCopy(e, text)}>
|
|
<View onClick={(e) => handleCopy(e, text)}>
|
|
|
<IconCopy />
|
|
<IconCopy />
|
|
|
</View>
|
|
</View>
|
|
@@ -217,6 +219,7 @@ export default ({ agent, text, message, mutate, showUser=false}: Props) => {
|
|
|
{isLike ? <IconLikeBlue /> : <IconLike />}
|
|
{isLike ? <IconLikeBlue /> : <IconLike />}
|
|
|
</View>
|
|
</View>
|
|
|
</View>
|
|
</View>
|
|
|
|
|
+ : <></> }
|
|
|
</View>
|
|
</View>
|
|
|
</View>
|
|
</View>
|
|
|
);
|
|
);
|