From 29499cb4ba3f92adb5a7049d8e74cdf3197814e5 Mon Sep 17 00:00:00 2001 From: G30 <50341825+silentoplayz@users.noreply.github.com> Date: Sun, 26 Jul 2026 17:27:33 -0400 Subject: [PATCH] perf: dedupe folder refetches and chat-list sweeps on sidebar folder selection (#27540) --- .../components/layout/Sidebar/Folders.svelte | 4 ++-- .../(app)/folders/[folderId]/+page.svelte | 22 ++++++++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/lib/components/layout/Sidebar/Folders.svelte b/src/lib/components/layout/Sidebar/Folders.svelte index 22e28e1490..2aedba22ef 100644 --- a/src/lib/components/layout/Sidebar/Folders.svelte +++ b/src/lib/components/layout/Sidebar/Folders.svelte @@ -4,7 +4,7 @@ const dispatch = createEventDispatcher(); import RecursiveFolder from './RecursiveFolder.svelte'; - import { chatId, selectedFolder } from '$lib/stores'; + import { chatId } from '$lib/stores'; export let folderRegistry = {}; @@ -49,7 +49,7 @@ } }; - $: if (folders || ($selectedFolder && $chatId)) { + $: if (folders || $chatId) { loadFolderItems(); } diff --git a/src/routes/(app)/folders/[folderId]/+page.svelte b/src/routes/(app)/folders/[folderId]/+page.svelte index 16223b28b2..9aee4da0a5 100644 --- a/src/routes/(app)/folders/[folderId]/+page.svelte +++ b/src/routes/(app)/folders/[folderId]/+page.svelte @@ -18,17 +18,23 @@ return; } - const folder = await getFolderById(localStorage.token, folderId).catch((error) => { - toast.error(`${error}`); - return null; - }); + // The sidebar click handler already fetches the folder and sets + // `selectedFolder` before navigating here; refetching would duplicate + // the request and re-trigger the sidebar's folder refresh. + if ($selectedFolder?.id !== folderId) { + const folder = await getFolderById(localStorage.token, folderId).catch((error) => { + toast.error(`${error}`); + return null; + }); - if (!folder) { - await goto('/'); - return; + if (!folder) { + await goto('/'); + return; + } + + await selectedFolder.set(folder); } - await selectedFolder.set(folder); ready = true; });