From 9013fcba14ccdfe3fd8605c5001a3e5f532555e8 Mon Sep 17 00:00:00 2001 From: Phantom Date: Sun, 9 Nov 2025 18:17:34 +0800 Subject: [PATCH] fix(useMessageOperations): skip timestamp update for UI-only changes (#10927) Prevent unnecessary message updates when only UI-related states change by checking the update keys and skipping timestamp updates in those cases --- src/renderer/src/hooks/useMessageOperations.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/renderer/src/hooks/useMessageOperations.ts b/src/renderer/src/hooks/useMessageOperations.ts index b1836f3fa7..b3b920085a 100644 --- a/src/renderer/src/hooks/useMessageOperations.ts +++ b/src/renderer/src/hooks/useMessageOperations.ts @@ -20,11 +20,11 @@ import { updateMessageAndBlocksThunk, updateTranslationBlockThunk } from '@renderer/store/thunk/messageThunk' -import type { Assistant, Model, Topic, TranslateLanguageCode } from '@renderer/types' +import { type Assistant, type Model, objectKeys, type Topic, type TranslateLanguageCode } from '@renderer/types' import type { Message, MessageBlock } from '@renderer/types/newMessage' import { MessageBlockStatus, MessageBlockType } from '@renderer/types/newMessage' import { abortCompletion } from '@renderer/utils/abortController' -import { throttle } from 'lodash' +import { difference, throttle } from 'lodash' import { useCallback } from 'react' const logger = loggerService.withContext('UseMessageOperations') @@ -82,10 +82,12 @@ export function useMessageOperations(topic: Topic) { logger.error('[editMessage] Topic prop is not valid.') return } - + const uiStates = ['multiModelMessageStyle', 'foldSelected'] as const satisfies (keyof Message)[] + const extraUpdate = difference(objectKeys(updates), uiStates) + const isUiUpdateOnly = extraUpdate.length === 0 const messageUpdates: Partial & Pick = { id: messageId, - updatedAt: new Date().toISOString(), + updatedAt: isUiUpdateOnly ? undefined : new Date().toISOString(), ...updates }