diff options
| author | Adam <[email protected]> | 2026-02-02 10:53:41 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-02-02 14:24:23 -0600 |
| commit | 23631a93935a33fb8e44272ba1572e3475a223c2 (patch) | |
| tree | bde2d79b983e3fd58c03bfc91744b48d4019a82a | |
| parent | f1e0c31b8f7c299d2bdc5f69dc30ed55f86918bb (diff) | |
| download | opencode-23631a93935a33fb8e44272ba1572e3475a223c2.tar.gz opencode-23631a93935a33fb8e44272ba1572e3475a223c2.zip | |
fix(app): navigate to last project on open
| -rw-r--r-- | packages/app/src/pages/layout.tsx | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 202443ee7..5d285c5ec 100644 --- a/packages/app/src/pages/layout.tsx +++ b/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) |
