route.tsx 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { createStore } from "solid-js/store"
  2. import { createSimpleContext } from "./helper"
  3. import type { PromptInfo } from "../component/prompt/history"
  4. export type HomeRoute = {
  5. type: "home"
  6. initialPrompt?: PromptInfo
  7. }
  8. export type SessionRoute = {
  9. type: "session"
  10. sessionID: string
  11. initialPrompt?: PromptInfo
  12. }
  13. export type Route = HomeRoute | SessionRoute
  14. export const { use: useRoute, provider: RouteProvider } = createSimpleContext({
  15. name: "Route",
  16. init: () => {
  17. const [store, setStore] = createStore<Route>(
  18. process.env["OPENCODE_ROUTE"]
  19. ? JSON.parse(process.env["OPENCODE_ROUTE"])
  20. : {
  21. type: "home",
  22. },
  23. )
  24. return {
  25. get data() {
  26. return store
  27. },
  28. navigate(route: Route) {
  29. console.log("navigate", route)
  30. setStore(route)
  31. },
  32. }
  33. },
  34. })
  35. export type RouteContext = ReturnType<typeof useRoute>
  36. export function useRouteData<T extends Route["type"]>(type: T) {
  37. const route = useRoute()
  38. return route.data as Extract<Route, { type: typeof type }>
  39. }