From 3d167204e703a7a3df1becd065f4dafc388d3e6e Mon Sep 17 00:00:00 2001 From: chanx <1243304602@qq.com> Date: Wed, 8 Jul 2026 16:47:14 +0800 Subject: [PATCH] fix: issue with memory error message display (#16738) --- web/src/pages/memory/memory-message/hook.ts | 52 ++++++++------- .../memory/memory-message/message-table.tsx | 65 ++++++++++++++----- 2 files changed, 77 insertions(+), 40 deletions(-) diff --git a/web/src/pages/memory/memory-message/hook.ts b/web/src/pages/memory/memory-message/hook.ts index 899439c67..f6d77812c 100644 --- a/web/src/pages/memory/memory-message/hook.ts +++ b/web/src/pages/memory/memory-message/hook.ts @@ -78,42 +78,44 @@ export const useMessageAction = () => { memory_id: memoryId, message_id: selectedMessage.message_id, }) - .then(() => { - message.success(t('message.deleted')); - queryClient.invalidateQueries({ - queryKey: [MemoryApiAction.FetchMemoryMessage], - }); + .then((data: any) => { + if (data.data.code === 0) { + message.success(t('message.deleted')); + queryClient.invalidateQueries({ + queryKey: [MemoryApiAction.FetchMemoryMessage], + }); + } }); setShowDeleteDialog(false); - }, [selectedMessage.message_id, queryClient]); + }, [selectedMessage.message_id, queryClient, memoryId]); const handleUpdateMessageState = useCallback( - (messageInfo: IMessageInfo, enable: boolean) => { - // delete message - const selectedMessageInfo = messageInfo || selectedMessage; - memoryService - .updateMessageState({ + async (messageInfo: IMessageInfo, enable: boolean): Promise => { + try { + const { data } = await memoryService.updateMessageState({ memory_id: memoryId, - message_id: selectedMessageInfo.message_id, + message_id: messageInfo.message_id, status: enable || false, - }) - .then((data: any) => { - if (data.data.code === 0) { - message.success(t('message.updated')); - queryClient.invalidateQueries({ - queryKey: [MemoryApiAction.FetchMemoryMessage], - }); - } }); - setShowDeleteDialog(false); + if (data.code === 0) { + message.success(t('message.updated')); + queryClient.invalidateQueries({ + queryKey: [MemoryApiAction.FetchMemoryMessage], + }); + return true; + } + return false; + } catch { + return false; + } }, - [selectedMessage, queryClient, memoryId], + [queryClient, memoryId], ); const handleClickUpdateMessageState = useCallback( - (message: IMessageInfo, enable: boolean) => { - setSelectedMessage(message); - handleUpdateMessageState(message, enable); + (messageInfo: IMessageInfo, enable: boolean): Promise => { + setSelectedMessage(messageInfo); + return handleUpdateMessageState(messageInfo, enable); }, [handleUpdateMessageState], ); diff --git a/web/src/pages/memory/memory-message/message-table.tsx b/web/src/pages/memory/memory-message/message-table.tsx index 2ee6e80b8..f54f535de 100644 --- a/web/src/pages/memory/memory-message/message-table.tsx +++ b/web/src/pages/memory/memory-message/message-table.tsx @@ -51,7 +51,7 @@ import { TextSelect, } from 'lucide-react'; import * as React from 'react'; -import { useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import { useMessageAction } from './hook'; import { IMessageInfo } from './interface'; @@ -75,6 +75,48 @@ function getTaskStatus(progress: number) { } } +type UpdateMessageStateFn = ( + message: IMessageInfo, + enable: boolean, +) => Promise; + +function StatusSwitch({ + row, + disabled, + onUpdate, +}: { + row: Row; + disabled: boolean; + onUpdate: UpdateMessageStateFn; +}) { + const serverStatus = row.original.status; + const [optimisticStatus, setOptimisticStatus] = useState(serverStatus); + const [pending, setPending] = useState(false); + + useEffect(() => { + setOptimisticStatus(serverStatus); + }, [serverStatus]); + + return ( +
+ { + setOptimisticStatus(val); + setPending(true); + onUpdate(row.original, val).then((success) => { + setPending(false); + if (!success) { + setOptimisticStatus(serverStatus); + } + }); + }} + /> +
+ ); +} + export function MemoryTable({ messages, total, @@ -216,20 +258,13 @@ export function MemoryTable({ { accessorKey: 'status', header: () => {t('memory.messages.enable')}, - cell: ({ row }) => { - const isEnabled = row.getValue('status') as boolean; - return ( -
- { - handleClickUpdateMessageState(row.original, val); - }} - /> -
- ); - }, + cell: ({ row }) => ( + + ), }, columnHelper.display({ id: 'task_progress',