@@ -38,6 +38,8 @@ class Response implements Responsable
38
38
39
39
protected ?Closure $ urlResolver = null ;
40
40
41
+ protected ?Closure $ oncePropsResolver = null ;
42
+
41
43
/**
42
44
* @param array|Arrayable $props
43
45
*/
@@ -47,7 +49,8 @@ public function __construct(
47
49
string $ rootView = 'app ' ,
48
50
string $ version = '' ,
49
51
bool $ encryptHistory = false ,
50
- ?Closure $ urlResolver = null
52
+ ?Closure $ urlResolver = null ,
53
+ ?Closure $ oncePropsResolver = null ,
51
54
) {
52
55
$ this ->component = $ component ;
53
56
$ this ->props = $ props instanceof Arrayable ? $ props ->toArray () : $ props ;
@@ -56,6 +59,7 @@ public function __construct(
56
59
$ this ->clearHistory = session ()->pull ('inertia.clear_history ' , false );
57
60
$ this ->encryptHistory = $ encryptHistory ;
58
61
$ this ->urlResolver = $ urlResolver ;
62
+ $ this ->oncePropsResolver = $ oncePropsResolver ;
59
63
}
60
64
61
65
/**
@@ -132,6 +136,8 @@ public function toResponse($request)
132
136
return new JsonResponse ($ page , 200 , [Header::INERTIA => 'true ' ]);
133
137
}
134
138
139
+ $ page += $ this ->resolveOnceProps ($ request );
140
+
135
141
return ResponseFactory::view ($ this ->rootView , $ this ->viewData + ['page ' => $ page ]);
136
142
}
137
143
@@ -376,6 +382,15 @@ public function resolveDeferredProps(Request $request): array
376
382
return $ deferredProps ->isNotEmpty () ? ['deferredProps ' => $ deferredProps ->toArray ()] : [];
377
383
}
378
384
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
+
379
394
/**
380
395
* Determine if the request is a partial request.
381
396
*/
0 commit comments