summaryrefslogtreecommitdiffhomepage
path: root/packages/opencode/src/cli/cmd/tui/context/route.tsx
blob: dd8ede156053815e8122118818bb16a26191ee03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { createStore } from "solid-js/store"
import { createSimpleContext } from "./helper"

export type HomeRoute = {
  type: "home"
}

export type SessionRoute = {
  type: "session"
  sessionID: string
}

export type Route = HomeRoute | SessionRoute

export const { use: useRoute, provider: RouteProvider } = createSimpleContext({
  name: "Route",
  init: (props: { data?: Route }) => {
    const [store, setStore] = createStore<Route>(
      props.data ??
        (process.env["OPENCODE_ROUTE"]
          ? JSON.parse(process.env["OPENCODE_ROUTE"])
          : {
              type: "home",
            }),
    )

    return {
      get data() {
        return store
      },
      navigate(route: Route) {
        console.log("navigate", route)
        setStore(route)
      },
    }
  },
})

export type RouteContext = ReturnType<typeof useRoute>

export function useRouteData<T extends Route["type"]>(type: T) {
  const route = useRoute()
  return route.data as Extract<Route, { type: typeof type }>
}