Skip to content

Commit 5e013e6

Browse files
committed
wip
1 parent a01a87f commit 5e013e6

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

packages/react-router/lib/hooks.tsx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1845,28 +1845,34 @@ function warningOnce(key: string, cond: boolean, message: string) {
18451845
}
18461846
}
18471847

1848-
type UseRoute<RouteId extends keyof RouteModules> =
1849-
| {
1850-
loaderData: GetLoaderData<RouteModules[RouteId]>;
1851-
actionData: GetActionData<RouteModules[RouteId]>;
1852-
}
1853-
| (RouteId extends "root" ? never : undefined);
1854-
1855-
export function useRoute<RouteId extends keyof RouteModules>(
1856-
routeId?: RouteId,
1857-
): UseRoute<RouteId> {
1858-
const state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);
1848+
type UseRouteArgs = [] | [routeId: keyof RouteModules];
1849+
1850+
// prettier-ignore
1851+
type UseRouteResult<Args extends UseRouteArgs> =
1852+
Args extends [] ? unknown :
1853+
Args extends ["root"] ? UseRoute<"root"> :
1854+
Args extends [infer RouteId extends keyof RouteModules] ? UseRoute<RouteId> | undefined :
1855+
never;
1856+
1857+
type UseRoute<RouteId extends keyof RouteModules> = {
1858+
loaderData: GetLoaderData<RouteModules[RouteId]>;
1859+
actionData: GetActionData<RouteModules[RouteId]>;
1860+
};
18591861

1862+
export function useRoute<Args extends UseRouteArgs>(
1863+
...args: Args
1864+
): UseRouteResult<Args> {
18601865
const currentRouteId: keyof RouteModules = useCurrentRouteId(
18611866
DataRouterStateHook.UseRoute,
18621867
);
1863-
const id: keyof RouteModules = routeId ?? currentRouteId;
1868+
const id: keyof RouteModules = args[0] ?? currentRouteId;
18641869

1870+
const state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);
18651871
const route = state.matches.find(({ route }) => route.id === id);
18661872

1867-
if (route === undefined) return undefined as UseRoute<RouteId>;
1873+
if (route === undefined) return undefined as UseRouteResult<Args>;
18681874
return {
18691875
loaderData: state.loaderData[id],
18701876
actionData: state.actionData?.[id],
1871-
};
1877+
} as UseRouteResult<Args>;
18721878
}

0 commit comments

Comments
 (0)