30 lines
641 B
TypeScript
30 lines
641 B
TypeScript
import {
|
|
createContext,
|
|
type ReactNode,
|
|
useContext,
|
|
} from "react";
|
|
|
|
import type { ParsedRouteInput } from "./route-contract.ts";
|
|
|
|
const RouteInputContext = createContext<ParsedRouteInput | null>(null);
|
|
|
|
export function RouteInputProvider({
|
|
input,
|
|
children,
|
|
}: Readonly<{
|
|
input: ParsedRouteInput;
|
|
children: ReactNode;
|
|
}>) {
|
|
return (
|
|
<RouteInputContext.Provider value={input}>
|
|
{children}
|
|
</RouteInputContext.Provider>
|
|
);
|
|
}
|
|
|
|
export function useRouteInput(): ParsedRouteInput {
|
|
const input = useContext(RouteInputContext);
|
|
if (!input) throw new Error("Registered route input is required");
|
|
return input;
|
|
}
|