diff options
| author | Adam <[email protected]> | 2025-12-30 04:57:28 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-30 04:57:37 -0600 |
| commit | a576fdb5e4ecddc73dede97ff26239d90c94e72f (patch) | |
| tree | f44d10ff36b1ecc6aa8e8222d0a9b9bf3f4221fc /packages/app/src/pages/layout.tsx | |
| parent | ae53f876f1e201363415279826e820b2e7769f56 (diff) | |
| download | opencode-a576fdb5e4ecddc73dede97ff26239d90c94e72f.tar.gz opencode-a576fdb5e4ecddc73dede97ff26239d90c94e72f.zip | |
feat(web): open projects
Diffstat (limited to 'packages/app/src/pages/layout.tsx')
| -rw-r--r-- | packages/app/src/pages/layout.tsx | 94 |
1 files changed, 50 insertions, 44 deletions
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( + () => <DialogSelectDirectory multiple={true} onSelect={resolve} />, + () => resolve(null), + ) } } @@ -955,30 +963,28 @@ export default function Layout(props: ParentProps) { </Tooltip> </Match> </Switch> - <Show when={platform.openDirectoryPickerDialog}> - <Tooltip - placement="right" - value={ - <div class="flex items-center gap-2"> - <span>Open project</span> - <Show when={!sidebarProps.mobile}> - <span class="text-icon-base text-12-medium">{command.keybind("project.open")}</span> - </Show> - </div> - } - inactive={expanded()} + <Tooltip + placement="right" + value={ + <div class="flex items-center gap-2"> + <span>Open project</span> + <Show when={!sidebarProps.mobile}> + <span class="text-icon-base text-12-medium">{command.keybind("project.open")}</span> + </Show> + </div> + } + inactive={expanded()} + > + <Button + class="flex w-full text-left justify-start text-text-base stroke-[1.5px] rounded-lg px-2" + variant="ghost" + size="large" + icon="folder-add-left" + onClick={chooseProject} > - <Button - class="flex w-full text-left justify-start text-text-base stroke-[1.5px] rounded-lg px-2" - variant="ghost" - size="large" - icon="folder-add-left" - onClick={chooseProject} - > - <Show when={expanded()}>Open project</Show> - </Button> - </Tooltip> - </Show> + <Show when={expanded()}>Open project</Show> + </Button> + </Tooltip> <Tooltip placement="right" value="Share feedback" inactive={expanded()}> <Button as={"a"} |
