Browse Source

fix(app): navigate to last project on open

Adam 3 weeks ago
parent
commit
23631a9393
1 changed files with 22 additions and 7 deletions
  1. 22 7
      packages/app/src/pages/layout.tsx

+ 22 - 7
packages/app/src/pages/layout.tsx

@@ -109,7 +109,7 @@ export default function Layout(props: ParentProps) {
   const command = useCommand()
   const theme = useTheme()
   const language = useLanguage()
-  const initialDir = params.dir
+  const initialDirectory = decode64(params.dir)
   const availableThemeEntries = createMemo(() => Object.entries(theme.themes()))
   const colorSchemeOrder: ColorScheme[] = ["system", "light", "dark"]
   const colorSchemeKey: Record<ColorScheme, "theme.scheme.system" | "theme.scheme.light" | "theme.scheme.dark"> = {
@@ -120,7 +120,7 @@ export default function Layout(props: ParentProps) {
   const colorSchemeLabel = (scheme: ColorScheme) => language.t(colorSchemeKey[scheme])
 
   const [state, setState] = createStore({
-    autoselect: !params.dir,
+    autoselect: !initialDirectory,
     busyWorkspaces: new Set<string>(),
     hoverSession: undefined as string | undefined,
     hoverProject: undefined as string | undefined,
@@ -180,13 +180,21 @@ export default function Layout(props: ParentProps) {
 
   const autoselecting = createMemo(() => {
     if (params.dir) return false
-    if (initialDir) return false
     if (!state.autoselect) return false
     if (!pageReady()) return true
     if (!layoutReady()) return true
     const list = layout.projects.list()
-    if (list.length === 0) return false
-    return true
+    if (list.length > 0) return true
+    return !!server.projects.last()
+  })
+
+  createEffect(() => {
+    if (!state.autoselect) return
+    const dir = params.dir
+    if (!dir) return
+    const directory = decode64(dir)
+    if (!directory) return
+    setState("autoselect", false)
   })
 
   const editorOpen = (id: string) => editor.active === id
@@ -566,11 +574,18 @@ export default function Layout(props: ParentProps) {
         if (!value.ready) return
         if (!value.layoutReady) return
         if (!state.autoselect) return
-        if (initialDir) return
         if (value.dir) return
-        if (value.list.length === 0) return
 
         const last = server.projects.last()
+
+        if (value.list.length === 0) {
+          if (!last) return
+          setState("autoselect", false)
+          openProject(last, false)
+          navigateToProject(last)
+          return
+        }
+
         const next = value.list.find((project) => project.worktree === last) ?? value.list[0]
         if (!next) return
         setState("autoselect", false)