@@ -81,6 +81,11 @@ class Response implements Responsable
8181     */ 
8282    protected  ?Closure   $ urlResolver  = null ;
8383
84+     /** 
85+      * The initial props resolver callback. 
86+      */ 
87+     protected  ?Closure   $ initialPropsResolver  = null ;
88+ 
8489    /** 
8590     * Create a new Inertia response instance. 
8691     * 
@@ -92,7 +97,8 @@ public function __construct(
9297        string  $ rootView  = 'app ' ,
9398        string  $ version  = '' ,
9499        bool  $ encryptHistory  = false ,
95-         ?Closure   $ urlResolver  = null 
100+         ?Closure   $ urlResolver  = null ,
101+         ?Closure   $ initialPropsResolver  = null ,
96102    ) {
97103        $ this  ->component  = $ component ;
98104        $ this  ->props  = $ props ;
@@ -101,6 +107,7 @@ public function __construct(
101107        $ this  ->clearHistory  = session ()->pull ('inertia.clear_history ' , false );
102108        $ this  ->encryptHistory  = $ encryptHistory ;
103109        $ this  ->urlResolver  = $ urlResolver ;
110+         $ this  ->initialPropsResolver  = $ initialPropsResolver ;
104111    }
105112
106113    /** 
@@ -188,6 +195,7 @@ public function toResponse($request)
188195            $ this  ->resolveMergeProps ($ request ),
189196            $ this  ->resolveDeferredProps ($ request ),
190197            $ this  ->resolveCacheDirections ($ request ),
198+             $ this  ->resolveInitialProps ($ request ),
191199        );
192200
193201        if  ($ request ->header (Header::INERTIA )) {
@@ -508,6 +516,26 @@ public function resolveDeferredProps(Request $request): array
508516        return  $ deferredProps ->isNotEmpty () ? ['deferredProps '  => $ deferredProps ->toArray ()] : [];
509517    }
510518
519+     /** 
520+      * Resolve initial props. 
521+      * 
522+      * @return array<string, mixed> 
523+      */ 
524+     public  function  resolveInitialProps (Request   $ request ): array 
525+     {
526+         if  ($ request ->header (Header::INERTIA )) {
527+             return  [];
528+         }
529+ 
530+         if  ($ this  ->initialPropsResolver  === null ) {
531+             return  [];
532+         }
533+ 
534+         $ initialProps  = App::call ($ this  ->initialPropsResolver , ['request '  => $ request ]);
535+ 
536+         return  empty ($ initialProps ) ? [] : ['initialProps '  => $ initialProps ];
537+     }
538+ 
511539    /** 
512540     * Determine if the request is a partial request. 
513541     */ 
0 commit comments