summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components
diff options
context:
space:
mode:
authoradamelmore <[email protected]>2026-01-27 15:55:26 -0600
committeradamelmore <[email protected]>2026-01-27 15:59:01 -0600
commit605e5335588adeb96bc9549553e9976b84338a8d (patch)
tree0a588ea29f69b113bd0d91e92c7b25d594ce38ca /packages/app/src/components
parent33d400c567a48fc730b2e95f307b9edd99132cc0 (diff)
downloadopencode-605e5335588adeb96bc9549553e9976b84338a8d.tar.gz
opencode-605e5335588adeb96bc9549553e9976b84338a8d.zip
fix(app): file tree not always loading
Diffstat (limited to 'packages/app/src/components')
-rw-r--r--packages/app/src/components/file-tree.tsx24
1 files changed, 23 insertions, 1 deletions
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(() => {