From 881f7c940087c08a7bd84644a3bd4ad076abd578 Mon Sep 17 00:00:00 2001 From: G30 <50341825+silentoplayz@users.noreply.github.com> Date: Sat, 19 Sep 2026 17:34:02 -0400 Subject: [PATCH] fix: save only the changed key when pinning, reordering or picking a default outside the Settings modal (#30183) --- src/lib/components/ChangelogModal.svelte | 2 +- src/lib/components/admin/Settings/Models.svelte | 2 +- src/lib/components/chat/Chat.svelte | 8 +++++--- src/lib/components/chat/ModelSelector.svelte | 4 ++-- src/lib/components/common/EmojiPicker.svelte | 2 +- src/lib/components/layout/Sidebar.svelte | 2 +- src/lib/components/layout/Sidebar/PinnedModelList.svelte | 6 ++++-- src/lib/components/layout/Sidebar/PinnedNoteList.svelte | 2 +- src/lib/components/layout/Sidebar/UserMenu.svelte | 2 +- src/lib/components/workspace/Models.svelte | 2 +- 10 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/lib/components/ChangelogModal.svelte b/src/lib/components/ChangelogModal.svelte index aff4b15fce..af6cf935e1 100644 --- a/src/lib/components/ChangelogModal.svelte +++ b/src/lib/components/ChangelogModal.svelte @@ -41,7 +41,7 @@ const closeModal = async () => { localStorage.version = $config.version; await settings.set({ ...$settings, ...{ version: $config.version } }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { ui: { version: $config.version } }); show = false; }; diff --git a/src/lib/components/admin/Settings/Models.svelte b/src/lib/components/admin/Settings/Models.svelte index 945acc3a69..f934977a41 100644 --- a/src/lib/components/admin/Settings/Models.svelte +++ b/src/lib/components/admin/Settings/Models.svelte @@ -666,7 +666,7 @@ ? $pinnedModels.filter((id) => id !== modelId) : [...$pinnedModels, modelId] }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { ui: { pinnedModels: $settings.pinnedModels } }); }; onMount(async () => { diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 7f41251e23..0e03b75324 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -448,9 +448,11 @@ tool_approval_mode } }); - await updateUserSettings(localStorage.token, { ui: $settings }).catch((err) => { - console.error('[tool permissions settings]', err); - }); + await updateUserSettings(localStorage.token, { ui: { params: $settings.params } }).catch( + (err) => { + console.error('[tool permissions settings]', err); + } + ); if ($chatId && !$temporaryChatEnabled && !isTemporaryChatId($chatId)) { const res = await updateChatById(localStorage.token, $chatId, { params }).catch((err) => { diff --git a/src/lib/components/chat/ModelSelector.svelte b/src/lib/components/chat/ModelSelector.svelte index f4591b0b73..ba3e0e26a8 100644 --- a/src/lib/components/chat/ModelSelector.svelte +++ b/src/lib/components/chat/ModelSelector.svelte @@ -30,7 +30,7 @@ return; } settings.set({ ...$settings, models: selectedModels }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { ui: { models: selectedModels } }); toast.success($i18n.t('Default model updated')); }; @@ -42,7 +42,7 @@ ? $pinnedModels.filter((id) => id !== modelId) : [...$pinnedModels, modelId] }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { ui: { pinnedModels: $settings.pinnedModels } }); }; $: if (selectedModels.length > 0 && $models.length > 0) { diff --git a/src/lib/components/common/EmojiPicker.svelte b/src/lib/components/common/EmojiPicker.svelte index 0fcf2cbfd1..aa2ae5235e 100644 --- a/src/lib/components/common/EmojiPicker.svelte +++ b/src/lib/components/common/EmojiPicker.svelte @@ -50,7 +50,7 @@ // Debounce backend save (avoid API spam on rapid picks) if (saveDebounceTimer) clearTimeout(saveDebounceTimer); saveDebounceTimer = setTimeout(async () => { - await updateUserSettings(localStorage.token, { ui: { ...$settings, recentEmojis: updated } }); + await updateUserSettings(localStorage.token, { ui: { recentEmojis: updated } }); }, 1000); } diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 19866b1202..d313d08151 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -231,7 +231,7 @@ current.splice(oldIndex, 1); current.splice(newIndex, 0, itemId); settings.set({ ...$settings, pinnedMenuItems: current }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { ui: { pinnedMenuItems: current } }); } }); } diff --git a/src/lib/components/layout/Sidebar/PinnedModelList.svelte b/src/lib/components/layout/Sidebar/PinnedModelList.svelte index b19c91d32b..2c53601d9f 100644 --- a/src/lib/components/layout/Sidebar/PinnedModelList.svelte +++ b/src/lib/components/layout/Sidebar/PinnedModelList.svelte @@ -45,7 +45,9 @@ ...$pinnedModels.filter((id) => !$visiblePinnedModels.includes(id)) ] }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { + ui: { pinnedModels: $settings.pinnedModels } + }); } }); } @@ -74,7 +76,7 @@ ...$settings, pinnedModels: $pinnedModels.filter((id) => id !== modelId) }); - updateUserSettings(localStorage.token, { ui: $settings }); + updateUserSettings(localStorage.token, { ui: { pinnedModels: $settings.pinnedModels } }); }} /> {/each} diff --git a/src/lib/components/layout/Sidebar/PinnedNoteList.svelte b/src/lib/components/layout/Sidebar/PinnedNoteList.svelte index 9f22e7856b..923e890c43 100644 --- a/src/lib/components/layout/Sidebar/PinnedNoteList.svelte +++ b/src/lib/components/layout/Sidebar/PinnedNoteList.svelte @@ -47,7 +47,7 @@ current.splice(oldIndex, 1); current.splice(newIndex, 0, noteId); settings.set({ ...$settings, pinnedNotesOrder: current }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { ui: { pinnedNotesOrder: current } }); } }); } diff --git a/src/lib/components/layout/Sidebar/UserMenu.svelte b/src/lib/components/layout/Sidebar/UserMenu.svelte index e3a25ba1e9..d4b45d0d51 100644 --- a/src/lib/components/layout/Sidebar/UserMenu.svelte +++ b/src/lib/components/layout/Sidebar/UserMenu.svelte @@ -68,7 +68,7 @@ updated = [...pinnedItems, id]; } await settings.set({ ...$settings, pinnedMenuItems: updated }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { ui: { pinnedMenuItems: updated } }); }; let usage = null; diff --git a/src/lib/components/workspace/Models.svelte b/src/lib/components/workspace/Models.svelte index 328fac0b03..d578c4f654 100644 --- a/src/lib/components/workspace/Models.svelte +++ b/src/lib/components/workspace/Models.svelte @@ -319,7 +319,7 @@ ? $pinnedModels.filter((id) => id !== modelId) : [...$pinnedModels, modelId] }); - await updateUserSettings(localStorage.token, { ui: $settings }); + await updateUserSettings(localStorage.token, { ui: { pinnedModels: $settings.pinnedModels } }); }; const fetchAllWorkspaceModels = async () => {