From dc9b0145c507273121a7a1343d826909e0f34425 Mon Sep 17 00:00:00 2001 From: Marc MacLeod <847542+marbemac@users.noreply.github.com> Date: Tue, 26 Sep 2023 16:14:42 -0500 Subject: [PATCH] feat: support loader/action requestContext on the client Signed-off-by: Marc MacLeod <847542+marbemac@users.noreply.github.com> --- packages/react-router-dom/index.tsx | 7 +++++++ packages/router/router.ts | 12 +++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/react-router-dom/index.tsx b/packages/react-router-dom/index.tsx index 9f274dd4e7..9601ee7a3b 100644 --- a/packages/react-router-dom/index.tsx +++ b/packages/react-router-dom/index.tsx @@ -218,6 +218,11 @@ interface DOMRouterOpts { future?: Partial>; hydrationData?: HydrationState; window?: Window; + + /** + * This value is passed to the `requestContext` property in your loader/action functions. + */ + requestContext?: unknown; } export function createBrowserRouter( @@ -234,6 +239,7 @@ export function createBrowserRouter( hydrationData: opts?.hydrationData || parseHydrationData(), routes, mapRouteProperties, + requestContext: opts?.requestContext, }).initialize(); } @@ -251,6 +257,7 @@ export function createHashRouter( hydrationData: opts?.hydrationData || parseHydrationData(), routes, mapRouteProperties, + requestContext: opts?.requestContext, }).initialize(); } diff --git a/packages/router/router.ts b/packages/router/router.ts index a611128fe9..b728001176 100644 --- a/packages/router/router.ts +++ b/packages/router/router.ts @@ -354,6 +354,7 @@ export interface RouterInit { future?: Partial; hydrationData?: HydrationState; window?: Window; + requestContext?: unknown; } /** @@ -866,6 +867,8 @@ export function createRouter(init: RouterInit): Router { // a POP navigation that was blocked by the user without touching router state let ignoreNextHistoryUpdate = false; + let requestContext = init.requestContext; + // Initialize the router, all side effects should be kicked off from here. // Implemented as a Fluent API for ease of: // let router = createRouter(init).initialize(); @@ -1387,7 +1390,8 @@ export function createRouter(init: RouterInit): Router { matches, manifest, mapRouteProperties, - basename + basename, + { requestContext } ); if (request.signal.aborted) { @@ -2193,7 +2197,8 @@ export function createRouter(init: RouterInit): Router { matches, manifest, mapRouteProperties, - basename + basename, + { requestContext } ) ), ...fetchersToLoad.map((f) => { @@ -2205,7 +2210,8 @@ export function createRouter(init: RouterInit): Router { f.matches, manifest, mapRouteProperties, - basename + basename, + { requestContext } ); } else { let error: ErrorResult = {