@@ -453,24 +453,26 @@ function createRouterFromPayload({
453453
454454const renderedRoutesContext = createContext < RSCRouteManifest [ ] > ( ) ;
455455
456+ type DataRouteObjectWithManifestInfo = DataRouteObject & {
457+ children ?: DataRouteObjectWithManifestInfo [ ] ;
458+ hasLoader : boolean ;
459+ hasClientLoader : boolean ;
460+ hasComponent : boolean ;
461+ hasAction : boolean ;
462+ hasClientAction : boolean ;
463+ } ;
464+
465+ type RSCDataRouteMatch = DataRouteMatch & {
466+ route : DataRouteObjectWithManifestInfo ;
467+ } ;
468+
456469export function getRSCSingleFetchDataStrategy (
457470 getRouter : ( ) => DataRouter ,
458471 ssr : boolean ,
459472 createFromReadableStream : BrowserCreateFromReadableStreamFunction ,
460473 fetchImplementation : ( request : Request ) => Promise < Response > ,
461474 clientVersion ?: string ,
462475) : DataStrategyFunction {
463- // TODO: Clean this up with a shared type
464- type RSCDataRouteMatch = DataRouteMatch & {
465- route : DataRouteObject & {
466- hasLoader : boolean ;
467- hasClientLoader : boolean ;
468- hasComponent : boolean ;
469- hasAction : boolean ;
470- hasClientAction : boolean ;
471- } ;
472- } ;
473-
474476 // create map
475477 let dataStrategy = getSingleFetchDataStrategyImpl (
476478 getRouter ,
@@ -479,9 +481,6 @@ export function getRSCSingleFetchDataStrategy(
479481 return {
480482 hasLoader : M . route . hasLoader ,
481483 hasClientLoader : M . route . hasClientLoader ,
482- hasComponent : M . route . hasComponent ,
483- hasAction : M . route . hasAction ,
484- hasClientAction : M . route . hasClientAction ,
485484 } ;
486485 } ,
487486 // pass map into fetchAndDecode so it can add payloads
@@ -497,7 +496,7 @@ export function getRSCSingleFetchDataStrategy(
497496 // `serverLoader` or not, otherwise we'll have nothing to render.
498497 ( match ) => {
499498 let M = match as RSCDataRouteMatch ;
500- return M . route . hasComponent && ! M . route . element ;
499+ return ! M . route . hasComponent || M . route . element != null ;
501500 } ,
502501 ) ;
503502 return async ( args ) =>
@@ -892,14 +891,6 @@ export function RSCHydratedRouter({
892891 ) ;
893892}
894893
895- type DataRouteObjectWithManifestInfo = DataRouteObject & {
896- children ?: DataRouteObjectWithManifestInfo [ ] ;
897- hasLoader : boolean ;
898- hasClientLoader : boolean ;
899- hasAction : boolean ;
900- hasClientAction : boolean ;
901- } ;
902-
903894function createRouteFromServerManifest (
904895 match : RSCRouteManifest ,
905896 payload ?: RSCRenderPayload ,
@@ -982,6 +973,7 @@ function createRouteFromServerManifest(
982973 // have a `loader` we may need to get the `element` implementation
983974 hasLoader : true ,
984975 hasClientLoader : match . clientLoader != null ,
976+ hasComponent : match . hasComponent ,
985977 hasAction : match . hasAction ,
986978 hasClientAction : match . clientAction != null ,
987979 } ;
0 commit comments