From d17ba84ee1e55093ff33f0ac512cbb00030c21e7 Mon Sep 17 00:00:00 2001 From: adamelmore <2363879+adamdottv@users.noreply.github.com> Date: Tue, 27 Jan 2026 16:13:00 -0600 Subject: [PATCH] fix(app): file tree not always loading --- packages/app/src/components/file-tree.tsx | 24 +--------------- packages/app/src/pages/session.tsx | 34 ++++++----------------- 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index bd989f755..d43310b19 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/packages/app/src/components/file-tree.tsx @@ -8,7 +8,6 @@ import { createMemo, For, Match, - onCleanup, Show, splitProps, Switch, @@ -124,28 +123,7 @@ export default function FileTree(props: { createEffect(() => { const path = props.path - const state = { cancelled: false, timer: undefined as number | undefined } - - const load = (attempt: number) => { - if (state.cancelled) return - if (file.tree.state(path)?.loaded) return - - void untrack(() => file.tree.list(path)).finally(() => { - if (state.cancelled) return - if (file.tree.state(path)?.loaded) return - if (attempt >= 2) return - - const wait = Math.min(2000, 250 * 2 ** attempt) - state.timer = window.setTimeout(() => load(attempt + 1), wait) - }) - } - - load(0) - - onCleanup(() => { - state.cancelled = true - if (state.timer !== undefined) clearTimeout(state.timer) - }) + untrack(() => void file.tree.list(path)) }) const nodes = createMemo(() => { diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index a4e6e24b1..eda15a581 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1255,34 +1255,18 @@ export default function Page() { const wants = isDesktop() ? fileTreeTab() === "changes" : store.mobileTab === "changes" if (!wants) return if (sync.data.session_diff[id] !== undefined) return + if (sync.status === "loading") return - const state = { - cancelled: false, - attempt: 0, - timer: undefined as number | undefined, - } + void sync.session.diff(id) + }) - const load = () => { - if (state.cancelled) return - const pending = sync.session.diff(id) - if (!pending) return - pending.catch(() => { - if (state.cancelled) return - const attempt = state.attempt + 1 - state.attempt = attempt - if (attempt > 5) return - if (state.timer !== undefined) clearTimeout(state.timer) - const wait = Math.min(10000, 250 * 2 ** (attempt - 1)) - state.timer = window.setTimeout(load, wait) - }) - } + createEffect(() => { + if (!isDesktop()) return + if (!layout.fileTree.opened()) return + if (sync.status === "loading") return - load() - - onCleanup(() => { - state.cancelled = true - if (state.timer !== undefined) clearTimeout(state.timer) - }) + fileTreeTab() + void file.tree.list("") }) const autoScroll = createAutoScroll({