From 93992b10a7b866e4bcc46a9ad49247f945c4b19c Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Tue, 27 Jan 2026 12:57:41 +0100 Subject: [PATCH] refactor: Encapsulate message editing state and actions in ChatMessage.svelte --- .../app/chat/ChatMessages/ChatMessage.svelte | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte index 967dc2b86f..0734e9f889 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte @@ -38,6 +38,45 @@ let shouldBranchAfterEdit = $state(false); let textareaElement: HTMLTextAreaElement | undefined = $state(); + let showSaveOnlyOption = $derived(message.role === MessageRole.USER); + + setMessageEditContext({ + get isEditing() { + return isEditing; + }, + get editedContent() { + return editedContent; + }, + get editedExtras() { + return editedExtras; + }, + get editedUploadedFiles() { + return editedUploadedFiles; + }, + get originalContent() { + return message.content; + }, + get originalExtras() { + return message.extra || []; + }, + get showSaveOnlyOption() { + return showSaveOnlyOption; + }, + setContent: (content: string) => { + editedContent = content; + }, + setExtras: (extras: DatabaseMessageExtra[]) => { + editedExtras = extras; + }, + setUploadedFiles: (files: ChatUploadedFile[]) => { + editedUploadedFiles = files; + }, + save: handleSaveEdit, + saveOnly: handleSaveEditOnly, + cancel: handleCancelEdit, + startEdit: handleEdit + }); + let mcpPromptExtra = $derived.by(() => { if (message.role !== MessageRole.USER) return null; if (message.content.trim()) return null; @@ -166,7 +205,7 @@ if (message.role === MessageRole.USER) { // For user messages, trim to avoid accidental whitespace const finalExtras = await getMergedExtras(); - onEditUserMessagePreserveResponses?.(message, editedContent.trim(), finalExtras); + chatActions.editUserMessagePreserveResponses(message, editedContent.trim(), finalExtras); } isEditing = false;