File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ---
2+ " react-router " : patch
3+ ---
4+
5+ Preserve ` clientLoader.hydrate=true ` when using ` <HydratedRouter unstable_instrumentations> `
Original file line number Diff line number Diff line change 11import { createMemoryRouter } from "../../lib/components" ;
2+ import { createMemoryHistory } from "../../lib/router/history" ;
23import type { StaticHandlerContext } from "../../lib/router/router" ;
3- import { createStaticHandler } from "../../lib/router/router" ;
4+ import { createRouter , createStaticHandler } from "../../lib/router/router" ;
45import {
56 ErrorResponseImpl ,
67 data ,
@@ -112,6 +113,56 @@ describe("instrumentation", () => {
112113 } ) ;
113114 } ) ;
114115
116+ it ( "preserves hydrate=true on client side loaders" , async ( ) => {
117+ let dfd = createDeferred ( ) ;
118+ let spy = jest . fn ( ) ;
119+ function loader ( ) {
120+ dfd . resolve ( ) ;
121+ return "INDEX*" ;
122+ }
123+ loader . hydrate = true ;
124+ let router = createRouter ( {
125+ history : createMemoryHistory ( ) ,
126+ routes : [
127+ {
128+ id : "index" ,
129+ index : true ,
130+ loader,
131+ } ,
132+ ] ,
133+ hydrationData : {
134+ loaderData : {
135+ index : "INDEX" ,
136+ } ,
137+ } ,
138+ unstable_instrumentations : [
139+ {
140+ route ( route ) {
141+ route . instrument ( {
142+ async loader ( loader ) {
143+ spy ( "start" ) ;
144+ await loader ( ) ;
145+ spy ( "end" ) ;
146+ } ,
147+ } ) ;
148+ } ,
149+ } ,
150+ ] ,
151+ } ) ;
152+
153+ expect ( router . state . initialized ) . toBe ( false ) ;
154+ expect ( router . state . loaderData ) . toEqual ( { index : "INDEX" } ) ;
155+
156+ router . initialize ( ) ;
157+ await dfd . promise ;
158+ await tick ( ) ;
159+
160+ expect ( router . state . initialized ) . toBe ( true ) ;
161+ expect ( router . state . loaderData ) . toEqual ( { index : "INDEX*" } ) ;
162+ expect ( spy ) . toHaveBeenCalledWith ( "start" ) ;
163+ expect ( spy ) . toHaveBeenCalledWith ( "end" ) ;
164+ } ) ;
165+
115166 it ( "allows instrumentation of actions" , async ( ) => {
116167 let spy = jest . fn ( ) ;
117168 let t = setup ( {
Original file line number Diff line number Diff line change @@ -9,6 +9,7 @@ import type {
99 FormEncType ,
1010 HTMLFormMethod ,
1111 LazyRouteObject ,
12+ LoaderFunction ,
1213 LoaderFunctionArgs ,
1314 MaybePromise ,
1415 MiddlewareFunction ,
@@ -218,6 +219,9 @@ export function getRouteInstrumentationUpdates(
218219 getHandlerInfo ( args [ 0 ] as LoaderFunctionArgs | ActionFunctionArgs ) ,
219220 ) ;
220221 if ( instrumented ) {
222+ if ( key === "loader" && original . hydrate === true ) {
223+ ( instrumented as LoaderFunction ) . hydrate = true ;
224+ }
221225 // @ts -expect-error
222226 instrumented [ UninstrumentedSymbol ] = original ;
223227 updates [ key ] = instrumented ;
You can’t perform that action at this time.
0 commit comments