diff options
Diffstat (limited to 'packages/desktop/src/DesktopInterface.tsx')
| -rw-r--r-- | packages/desktop/src/DesktopInterface.tsx | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/packages/desktop/src/DesktopInterface.tsx b/packages/desktop/src/DesktopInterface.tsx new file mode 100644 index 000000000..c4de3e089 --- /dev/null +++ b/packages/desktop/src/DesktopInterface.tsx @@ -0,0 +1,67 @@ +import "@/index.css" +import { Router, Route, Navigate } from "@solidjs/router" +import { MetaProvider } from "@solidjs/meta" +import { Font } from "@opencode-ai/ui/font" +import { Favicon } from "@opencode-ai/ui/favicon" +import { MarkedProvider } from "@opencode-ai/ui/context/marked" +import { DiffComponentProvider } from "@opencode-ai/ui/context/diff" +import { Diff } from "@opencode-ai/ui/diff" +import { GlobalSyncProvider, useGlobalSync } from "./context/global-sync" +import Layout from "@/pages/layout" +import DirectoryLayout from "@/pages/directory-layout" +import Session from "@/pages/session" +import { LayoutProvider } from "./context/layout" +import { GlobalSDKProvider } from "./context/global-sdk" +import { SessionProvider } from "./context/session" +import { base64Encode } from "./utils" +import { createMemo, Show } from "solid-js" + +const host = import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "127.0.0.1" +const port = import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096" + +const url = + new URLSearchParams(document.location.search).get("url") || + (location.hostname.includes("opencode.ai") || location.hostname.includes("localhost") + ? `http://${host}:${port}` + : "/") + +export function DesktopInterface() { + return ( + <MarkedProvider> + <DiffComponentProvider component={Diff}> + <GlobalSDKProvider url={url}> + <GlobalSyncProvider> + <LayoutProvider> + <MetaProvider> + <Font /> + <Router root={Layout}> + <Route + path="/" + component={() => { + const globalSync = useGlobalSync() + const slug = createMemo(() => base64Encode(globalSync.data.defaultProject!.worktree)) + return <Navigate href={`${slug()}/session`} /> + }} + /> + <Route path="/:dir" component={DirectoryLayout}> + <Route path="/" component={() => <Navigate href="session" />} /> + <Route + path="/session/:id?" + component={(p) => ( + <Show when={p.params.id || true} keyed> + <SessionProvider> + <Session /> + </SessionProvider> + </Show> + )} + /> + </Route> + </Router> + </MetaProvider> + </LayoutProvider> + </GlobalSyncProvider> + </GlobalSDKProvider> + </DiffComponentProvider> + </MarkedProvider> + ) +} |
