|
@@ -27,16 +27,31 @@ interface Props {
|
|
|
textReasoning: string;
|
|
textReasoning: string;
|
|
|
message: TMessage;
|
|
message: TMessage;
|
|
|
showUser?: boolean
|
|
showUser?: boolean
|
|
|
|
|
+ mutate: (func:any, params:any)=>void
|
|
|
}
|
|
}
|
|
|
-export default ({ agent, text, message, showUser=false, textReasoning = "" }: Props) => {
|
|
|
|
|
|
|
+export default ({ agent, text, message, mutate, showUser=false}: Props) => {
|
|
|
const [isDislike, setIsDislike] = useState(message.isDislike);
|
|
const [isDislike, setIsDislike] = useState(message.isDislike);
|
|
|
const [isLike, setIsLike] = useState(message.isLike);
|
|
const [isLike, setIsLike] = useState(message.isLike);
|
|
|
const [isSpeaking, setIsSpeaking] = useState(false);
|
|
const [isSpeaking, setIsSpeaking] = useState(false);
|
|
|
const loginId = getLoginId();
|
|
const loginId = getLoginId();
|
|
|
- const { setMessageRespeaking, setMessageStopHandle, messageStopHandle, isReacting } = useTextChat()
|
|
|
|
|
|
|
+ const { setMessageRespeaking, setMessageStopHandle, messageStopHandle, isReacting, updateMessageReaction } = useTextChat()
|
|
|
const { startSpeech, stopSpeech, onPlayerStatusChanged } = useTextToSpeech()
|
|
const { startSpeech, stopSpeech, onPlayerStatusChanged } = useTextToSpeech()
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+ // 更新单个消息的函数
|
|
|
|
|
+ const updateMessage = (messageId: number, updatedFields: {isLike: boolean, isDislike: boolean}) => {
|
|
|
|
|
+ // 使用 mutate 更新 SWR 缓存
|
|
|
|
|
+ // 历史消息
|
|
|
|
|
+ mutate((pages:any) => {
|
|
|
|
|
+ return pages.map(page => {
|
|
|
|
|
+ const updatedMessages = page.data.map((msg:TMessage) =>
|
|
|
|
|
+ msg.msgId === messageId ? { ...msg, ...updatedFields } : msg
|
|
|
|
|
+ );
|
|
|
|
|
+ return { ...page, data: updatedMessages };
|
|
|
|
|
+ });
|
|
|
|
|
+ }, false); // 不重新验证,因为我们手动更新了
|
|
|
|
|
+ // 更新在 store 中新的 messages 数据
|
|
|
|
|
+ updateMessageReaction(messageId, updatedFields)
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
|
|
|
|
|
onPlayerStatusChanged((status)=> {
|
|
onPlayerStatusChanged((status)=> {
|
|
@@ -92,10 +107,15 @@ export default ({ agent, text, message, showUser=false, textReasoning = "" }: Pr
|
|
|
title: isDislike ? "已差评" : "已取消差评",
|
|
title: isDislike ? "已差评" : "已取消差评",
|
|
|
icon: "none",
|
|
icon: "none",
|
|
|
});
|
|
});
|
|
|
- message.isDislike = isDislike; // 更新本地状态
|
|
|
|
|
|
|
+ if(message.msgId){
|
|
|
|
|
+ updateMessage(message.msgId, {isLike: isLike ?? false, isDislike})
|
|
|
|
|
+ }
|
|
|
setIsDislike(isDislike);
|
|
setIsDislike(isDislike);
|
|
|
if (isDislike && isLike) {
|
|
if (isDislike && isLike) {
|
|
|
message.isLike = false; // 取消 like
|
|
message.isLike = false; // 取消 like
|
|
|
|
|
+ if(message.msgId){
|
|
|
|
|
+ updateMessage(message.msgId, {isLike: false, isDislike})
|
|
|
|
|
+ }
|
|
|
setIsLike(false); // 取消 like
|
|
setIsLike(false); // 取消 like
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -104,6 +124,7 @@ export default ({ agent, text, message, showUser=false, textReasoning = "" }: Pr
|
|
|
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,
|
|
@@ -117,10 +138,16 @@ export default ({ agent, text, message, showUser=false, textReasoning = "" }: Pr
|
|
|
title: isLike ? "已喜欢" : "已取消喜欢",
|
|
title: isLike ? "已喜欢" : "已取消喜欢",
|
|
|
icon: "none",
|
|
icon: "none",
|
|
|
});
|
|
});
|
|
|
- message.isLike = isLike; // 更新本地状态
|
|
|
|
|
|
|
+ if(message.msgId){
|
|
|
|
|
+ updateMessage(message.msgId, {isLike, isDislike: isDislike ?? false})
|
|
|
|
|
+ }
|
|
|
|
|
+ // message.isLike = isLike; // 更新本地状态
|
|
|
// 触发 mutate 更新列表
|
|
// 触发 mutate 更新列表
|
|
|
setIsLike(isLike);
|
|
setIsLike(isLike);
|
|
|
if (isDislike && isLike) {
|
|
if (isDislike && isLike) {
|
|
|
|
|
+ if(message.msgId){
|
|
|
|
|
+ updateMessage(message.msgId, {isLike, isDislike: false})
|
|
|
|
|
+ }
|
|
|
message.isDislike = false; // 取消 dislike
|
|
message.isDislike = false; // 取消 dislike
|
|
|
setIsDislike(false); // 取消 dislike
|
|
setIsDislike(false); // 取消 dislike
|
|
|
}
|
|
}
|
|
@@ -177,7 +204,7 @@ export default ({ agent, text, message, showUser=false, textReasoning = "" }: Pr
|
|
|
<View onClick={(e) => handleCopy(e, text)}>
|
|
<View onClick={(e) => handleCopy(e, text)}>
|
|
|
<IconCopy />
|
|
<IconCopy />
|
|
|
</View>
|
|
</View>
|
|
|
- <View className={isReacting ? 'text-opacity-60' : ''} onClick={(e) => handlePlayAudio(e, text)}>
|
|
|
|
|
|
|
+ <View className={isReacting ? 'opacity-60' : ''} onClick={(e) => handlePlayAudio(e, text)}>
|
|
|
<IconSpeaker color={isSpeaking} />
|
|
<IconSpeaker color={isSpeaking} />
|
|
|
</View>
|
|
</View>
|
|
|
{/* <IconSpeaker></IconSpeaker> */}
|
|
{/* <IconSpeaker></IconSpeaker> */}
|