@@ -38,6 +38,8 @@ class Response implements Responsable
3838
3939 protected ?Closure $ urlResolver = null ;
4040
41+ protected ?Closure $ oncePropsResolver = null ;
42+
4143 /**
4244 * @param array|Arrayable $props
4345 */
@@ -47,7 +49,8 @@ public function __construct(
4749 string $ rootView = 'app ' ,
4850 string $ version = '' ,
4951 bool $ encryptHistory = false ,
50- ?Closure $ urlResolver = null
52+ ?Closure $ urlResolver = null ,
53+ ?Closure $ oncePropsResolver = null ,
5154 ) {
5255 $ this ->component = $ component ;
5356 $ this ->props = $ props instanceof Arrayable ? $ props ->toArray () : $ props ;
@@ -56,6 +59,7 @@ public function __construct(
5659 $ this ->clearHistory = session ()->pull ('inertia.clear_history ' , false );
5760 $ this ->encryptHistory = $ encryptHistory ;
5861 $ this ->urlResolver = $ urlResolver ;
62+ $ this ->oncePropsResolver = $ oncePropsResolver ;
5963 }
6064
6165 /**
@@ -132,6 +136,8 @@ public function toResponse($request)
132136 return new JsonResponse ($ page , 200 , [Header::INERTIA => 'true ' ]);
133137 }
134138
139+ $ page += $ this ->resolveOnceProps ($ request );
140+
135141 return ResponseFactory::view ($ this ->rootView , $ this ->viewData + ['page ' => $ page ]);
136142 }
137143
@@ -376,6 +382,15 @@ public function resolveDeferredProps(Request $request): array
376382 return $ deferredProps ->isNotEmpty () ? ['deferredProps ' => $ deferredProps ->toArray ()] : [];
377383 }
378384
385+ public function resolveOnceProps (Request $ request ): array
386+ {
387+ $ onceProps = $ this ->oncePropsResolver
388+ ? App::call ($ this ->oncePropsResolver , ['request ' => $ request ])
389+ : [];
390+
391+ return ['onceProps ' => $ onceProps ];
392+ }
393+
379394 /**
380395 * Determine if the request is a partial request.
381396 */
0 commit comments