summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-02 10:53:41 -0600
committerAdam <[email protected]>2026-02-02 14:24:23 -0600
commit23631a93935a33fb8e44272ba1572e3475a223c2 (patch)
treebde2d79b983e3fd58c03bfc91744b48d4019a82a
parentf1e0c31b8f7c299d2bdc5f69dc30ed55f86918bb (diff)
downloadopencode-23631a93935a33fb8e44272ba1572e3475a223c2.tar.gz
opencode-23631a93935a33fb8e44272ba1572e3475a223c2.zip
fix(app): navigate to last project on open
-rw-r--r--packages/app/src/pages/layout.tsx29
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)