From a576fdb5e4ecddc73dede97ff26239d90c94e72f Mon Sep 17 00:00:00 2001
From: Adam <2363879+adamdotdevin@users.noreply.github.com>
Date: Tue, 30 Dec 2025 04:57:28 -0600
Subject: feat(web): open projects
---
packages/app/src/pages/home.tsx | 48 ++++++++++++--------
packages/app/src/pages/layout.tsx | 94 +++++++++++++++++++++------------------
2 files changed, 79 insertions(+), 63 deletions(-)
(limited to 'packages/app/src/pages')
diff --git a/packages/app/src/pages/home.tsx b/packages/app/src/pages/home.tsx
index 7cd2916e8..129a50320 100644
--- a/packages/app/src/pages/home.tsx
+++ b/packages/app/src/pages/home.tsx
@@ -8,11 +8,14 @@ import { base64Encode } from "@opencode-ai/util/encode"
import { Icon } from "@opencode-ai/ui/icon"
import { usePlatform } from "@/context/platform"
import { DateTime } from "luxon"
+import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { DialogSelectDirectory } from "@/components/dialog-select-directory"
export default function Home() {
const sync = useGlobalSync()
const layout = useLayout()
const platform = usePlatform()
+ const dialog = useDialog()
const navigate = useNavigate()
const homedir = createMemo(() => sync.data.path.home)
@@ -22,16 +25,27 @@ export default function Home() {
}
async function chooseProject() {
- const result = await platform.openDirectoryPickerDialog?.({
- title: "Open project",
- multiple: true,
- })
- if (Array.isArray(result)) {
- for (const directory of result) {
- openProject(directory)
+ function resolve(result: string | string[] | null) {
+ if (Array.isArray(result)) {
+ for (const directory of result) {
+ openProject(directory)
+ }
+ } else if (result) {
+ openProject(result)
}
- } else if (result) {
- openProject(result)
+ }
+
+ if (platform.openDirectoryPickerDialog) {
+ const result = await platform.openDirectoryPickerDialog?.({
+ title: "Open project",
+ multiple: true,
+ })
+ resolve(result)
+ } else {
+ dialog.show(
+ () => ,
+ () => resolve(null),
+ )
}
}
@@ -43,11 +57,9 @@ export default function Home() {
Recent projects
-
-
-
+
Get started by opening a local project
-
-
-
+
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx
index 480c5eddf..46ea3bd4d 100644
--- a/packages/app/src/pages/layout.tsx
+++ b/packages/app/src/pages/layout.tsx
@@ -52,6 +52,7 @@ import { DialogSelectProvider } from "@/components/dialog-select-provider"
import { DialogEditProject } from "@/components/dialog-edit-project"
import { useCommand, type CommandOption } from "@/context/command"
import { ConstrainDragXAxis } from "@/utils/solid-dnd"
+import { DialogSelectDirectory } from "@/components/dialog-select-directory"
export default function Layout(props: ParentProps) {
const [store, setStore] = createStore({
@@ -338,17 +339,13 @@ export default function Layout(props: ParentProps) {
keybind: "mod+b",
onSelect: () => layout.sidebar.toggle(),
},
- ...(platform.openDirectoryPickerDialog
- ? [
- {
- id: "project.open",
- title: "Open project",
- category: "Project",
- keybind: "mod+o",
- onSelect: () => chooseProject(),
- },
- ]
- : []),
+ {
+ id: "project.open",
+ title: "Open project",
+ category: "Project",
+ keybind: "mod+o",
+ onSelect: () => chooseProject(),
+ },
{
id: "provider.connect",
title: "Connect provider",
@@ -457,17 +454,28 @@ export default function Layout(props: ParentProps) {
}
async function chooseProject() {
- const result = await platform.openDirectoryPickerDialog?.({
- title: "Open project",
- multiple: true,
- })
- if (Array.isArray(result)) {
- for (const directory of result) {
- openProject(directory, false)
+ function resolve(result: string | string[] | null) {
+ if (Array.isArray(result)) {
+ for (const directory of result) {
+ openProject(directory, false)
+ }
+ navigateToProject(result[0])
+ } else if (result) {
+ openProject(result)
}
- navigateToProject(result[0])
- } else if (result) {
- openProject(result)
+ }
+
+ if (platform.openDirectoryPickerDialog) {
+ const result = await platform.openDirectoryPickerDialog?.({
+ title: "Open project",
+ multiple: true,
+ })
+ resolve(result)
+ } else {
+ dialog.show(
+ () => ,
+ () => resolve(null),
+ )
}
}
@@ -955,30 +963,28 @@ export default function Layout(props: ParentProps) {
-
-
- Open project
-
- {command.keybind("project.open")}
-
-
- }
- inactive={expanded()}
+
+ Open project
+
+ {command.keybind("project.open")}
+
+
+ }
+ inactive={expanded()}
+ >
+
-
+ Open project
+
+