MCPcopy Create free account
hub / github.com/aiprodcoder/MIXAPI / useMessageEdit

Function useMessageEdit

web/src/hooks/useMessageEdit.js:7–109  ·  view source on GitHub ↗
(
  setMessage,
  inputs,
  parameterEnabled,
  sendRequest,
  saveMessages
)

Source from the content-addressed store, hash-verified

5import { MESSAGE_ROLES } from '../constants/playground.constants';
6
7export const useMessageEdit = (
8 setMessage,
9 inputs,
10 parameterEnabled,
11 sendRequest,
12 saveMessages
13) => {
14 const { t } = useTranslation();
15 const [editingMessageId, setEditingMessageId] = useState(null);
16 const [editValue, setEditValue] = useState('');
17 const editingMessageRef = useRef(null);
18
19 const handleMessageEdit = useCallback((targetMessage) => {
20 const editableContent = getTextContent(targetMessage);
21 setEditingMessageId(targetMessage.id);
22 editingMessageRef.current = targetMessage;
23 setEditValue(editableContent);
24 }, []);
25
26 const handleEditSave = useCallback(() => {
27 if (!editingMessageId || !editValue.trim()) return;
28
29 setMessage(prevMessages => {
30 let messageIndex = prevMessages.findIndex(msg => msg === editingMessageRef.current);
31
32 if (messageIndex === -1) {
33 messageIndex = prevMessages.findIndex(msg => msg.id === editingMessageId);
34 }
35
36 const targetMessage = prevMessages[messageIndex];
37 let newContent;
38
39 if (Array.isArray(targetMessage.content)) {
40 newContent = targetMessage.content.map(item =>
41 item.type === 'text' ? { ...item, text: editValue.trim() } : item
42 );
43 } else {
44 newContent = editValue.trim();
45 }
46
47 const updatedMessages = prevMessages.map(msg =>
48 msg.id === editingMessageId ? { ...msg, content: newContent } : msg
49 );
50
51 // 处理用户消息编辑后的重新生成
52 if (targetMessage.role === MESSAGE_ROLES.USER) {
53 const hasSubsequentAssistantReply = messageIndex < prevMessages.length - 1 &&
54 prevMessages[messageIndex + 1].role === MESSAGE_ROLES.ASSISTANT;
55
56 if (hasSubsequentAssistantReply) {
57 Modal.confirm({
58 title: t('消息已编辑'),
59 content: t('检测到该消息后有AI回复,是否删除后续回复并重新生成?'),
60 okText: t('重新生成'),
61 cancelText: t('仅保存'),
62 onOk: () => {
63 const messagesUntilUser = updatedMessages.slice(0, messageIndex + 1);
64 setMessage(messagesUntilUser);

Callers 1

index.jsFile · 0.90

Calls 5

getTextContentFunction · 0.90
buildApiPayloadFunction · 0.90
saveMessagesFunction · 0.85
tFunction · 0.50

Tested by

no test coverage detected