From 605e5335588adeb96bc9549553e9976b84338a8d Mon Sep 17 00:00:00 2001 From: adamelmore <2363879+adamdottv@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:55:26 -0600 Subject: fix(app): file tree not always loading --- packages/app/src/components/file-tree.tsx | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'packages/app/src/components') diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index d43310b19..bd989f755 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/packages/app/src/components/file-tree.tsx @@ -8,6 +8,7 @@ import { createMemo, For, Match, + onCleanup, Show, splitProps, Switch, @@ -123,7 +124,28 @@ export default function FileTree(props: { createEffect(() => { const path = props.path - untrack(() => void file.tree.list(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) + }) }) const nodes = createMemo(() => { -- cgit v1.2.3