mirror of
https://github.com/anomalyco/opencode.git
synced 2026-04-25 07:15:19 +00:00
48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import { createStore } from "solid-js/store"
|
|
import { createSimpleContext } from "./helper"
|
|
import type { PromptInfo } from "../component/prompt/history"
|
|
|
|
export type HomeRoute = {
|
|
type: "home"
|
|
initialPrompt?: PromptInfo
|
|
workspaceID?: string
|
|
}
|
|
|
|
export type SessionRoute = {
|
|
type: "session"
|
|
sessionID: string
|
|
initialPrompt?: PromptInfo
|
|
}
|
|
|
|
export type Route = HomeRoute | SessionRoute
|
|
|
|
export const { use: useRoute, provider: RouteProvider } = createSimpleContext({
|
|
name: "Route",
|
|
init: () => {
|
|
const [store, setStore] = createStore<Route>(
|
|
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 }>
|
|
}
|