Explorar el Código

fix(app): file tree not always loading

adamelmore hace 3 semanas
padre
commit
d17ba84ee1
Se han modificado 2 ficheros con 10 adiciones y 48 borrados
  1. 1 23
      packages/app/src/components/file-tree.tsx
  2. 9 25
      packages/app/src/pages/session.tsx

+ 1 - 23
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(() => {

+ 9 - 25
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,
-    }
-
-    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)
-      })
-    }
+    void sync.session.diff(id)
+  })
 
-    load()
+  createEffect(() => {
+    if (!isDesktop()) return
+    if (!layout.fileTree.opened()) return
+    if (sync.status === "loading") return
 
-    onCleanup(() => {
-      state.cancelled = true
-      if (state.timer !== undefined) clearTimeout(state.timer)
-    })
+    fileTreeTab()
+    void file.tree.list("")
   })
 
   const autoScroll = createAutoScroll({