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
- - - +
- - - +
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 + +