Skip to content

Commit 8edbd02

Browse files
committed
new meta key, nested version -> assetVersion under meta key
1 parent 369faff commit 8edbd02

File tree

4 files changed

+60
-30
lines changed

4 files changed

+60
-30
lines changed

src/Response.php

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public function toResponse($request)
9595
'component' => $this->component,
9696
'props' => $props,
9797
'url' => Str::start(Str::after($request->fullUrl(), $request->getSchemeAndHttpHost()), '/'),
98-
'version' => $this->version,
98+
'meta' => $this->resolveMeta($request),
9999
];
100100

101101
if ($request->header(Header::INERTIA)) {
@@ -110,7 +110,7 @@ public function toResponse($request)
110110
*/
111111
public function resolveProperties(Request $request, array $props): array
112112
{
113-
$isPartial = $request->header(Header::PARTIAL_COMPONENT) === $this->component;
113+
$isPartial = $this->isPartial($request);
114114

115115
if (! $isPartial) {
116116
$props = array_filter($this->props, static function ($prop) {
@@ -132,21 +132,6 @@ public function resolveProperties(Request $request, array $props): array
132132

133133
$props = $this->resolvePropertyInstances($props, $request);
134134

135-
if (! $isPartial) {
136-
$deferredProps = collect($this->props)->filter(function ($prop) {
137-
return $prop instanceof DeferProp;
138-
})->map(function ($prop, $key) {
139-
return [
140-
'key' => $key,
141-
'group' => $prop->group(),
142-
];
143-
})->groupBy('group')->map->pluck('key');
144-
145-
if ($deferredProps->isNotEmpty()) {
146-
$props['deferred'] = $deferredProps->toArray();
147-
}
148-
}
149-
150135
return $props;
151136
}
152137

@@ -253,4 +238,46 @@ public function resolvePropertyInstances(array $props, Request $request): array
253238

254239
return $props;
255240
}
241+
242+
/**
243+
* Resolve the meta data for the response.
244+
*/
245+
public function resolveMeta(Request $request): array
246+
{
247+
$meta = [
248+
'assetVersion' => $this->version,
249+
];
250+
251+
if ($this->isPartial($request)) {
252+
return $meta;
253+
}
254+
255+
$deferredProps = collect($this->props)
256+
->filter(function ($prop) {
257+
return $prop instanceof DeferProp;
258+
})
259+
->map(function ($prop, $key) {
260+
return [
261+
'key' => $key,
262+
'group' => $prop->group(),
263+
];
264+
})
265+
->groupBy('group')
266+
->map
267+
->pluck('key');
268+
269+
if ($deferredProps->isNotEmpty()) {
270+
$meta['deferredProps'] = $deferredProps->toArray();
271+
}
272+
273+
return $meta;
274+
}
275+
276+
/**
277+
* Determine if the request is a partial request.
278+
*/
279+
public function isPartial(Request $request): bool
280+
{
281+
return $request->header(Header::PARTIAL_COMPONENT) === $this->component;
282+
}
256283
}

src/Testing/AssertableInertia.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,16 @@ public static function fromTestResponse(TestResponse $response): self
2929
PHPUnit::assertArrayHasKey('component', $page);
3030
PHPUnit::assertArrayHasKey('props', $page);
3131
PHPUnit::assertArrayHasKey('url', $page);
32-
PHPUnit::assertArrayHasKey('version', $page);
32+
PHPUnit::assertArrayHasKey('meta', $page);
33+
PHPUnit::assertArrayHasKey('assetVersion', $page['meta']);
3334
} catch (AssertionFailedError $e) {
3435
PHPUnit::fail('Not a valid Inertia response.');
3536
}
3637

3738
$instance = static::fromArray($page['props']);
3839
$instance->component = $page['component'];
3940
$instance->url = $page['url'];
40-
$instance->version = $page['version'];
41+
$instance->version = $page['meta']['assetVersion'];
4142

4243
return $instance;
4344
}

tests/ControllerTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ public function test_controller_returns_an_inertia_response(): void
2727
'errors' => (object) [],
2828
],
2929
'url' => '/',
30-
'version' => '',
30+
'meta' => [
31+
'assetVersion' => '',
32+
]
3133
]);
3234
}
3335
}

tests/ResponseTest.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public function test_server_response(): void
4545
$this->assertSame('User/Edit', $page['component']);
4646
$this->assertSame('Jonathan', $page['props']['user']['name']);
4747
$this->assertSame('/user/123', $page['url']);
48-
$this->assertSame('123', $page['version']);
49-
$this->assertSame('<div id="app" data-page="{&quot;component&quot;:&quot;User\/Edit&quot;,&quot;props&quot;:{&quot;user&quot;:{&quot;name&quot;:&quot;Jonathan&quot;}},&quot;url&quot;:&quot;\/user\/123&quot;,&quot;version&quot;:&quot;123&quot;}"></div>', $view->render());
48+
$this->assertSame('123', $page['meta']['assetVersion']);
49+
$this->assertSame('<div id="app" data-page="{&quot;component&quot;:&quot;User\/Edit&quot;,&quot;props&quot;:{&quot;user&quot;:{&quot;name&quot;:&quot;Jonathan&quot;}},&quot;url&quot;:&quot;\/user\/123&quot;,&quot;meta&quot;:{&quot;assetVersion&quot;:&quot;123&quot;}}"></div>', $view->render());
5050
}
5151

5252
public function test_xhr_response(): void
@@ -63,7 +63,7 @@ public function test_xhr_response(): void
6363
$this->assertSame('User/Edit', $page->component);
6464
$this->assertSame('Jonathan', $page->props->user->name);
6565
$this->assertSame('/user/123', $page->url);
66-
$this->assertSame('123', $page->version);
66+
$this->assertSame('123', $page->meta->assetVersion);
6767
}
6868

6969
public function test_resource_response(): void
@@ -81,7 +81,7 @@ public function test_resource_response(): void
8181
$this->assertSame('User/Edit', $page->component);
8282
$this->assertSame('Jonathan', $page->props->user->name);
8383
$this->assertSame('/user/123', $page->url);
84-
$this->assertSame('123', $page->version);
84+
$this->assertSame('123', $page->meta->assetVersion);
8585
}
8686

8787
public function test_lazy_resource_response(): void
@@ -129,7 +129,7 @@ public function test_lazy_resource_response(): void
129129
$this->assertInstanceOf(JsonResponse::class, $response);
130130
$this->assertSame('User/Index', $page->component);
131131
$this->assertSame('/users?page=1', $page->url);
132-
$this->assertSame('123', $page->version);
132+
$this->assertSame('123', $page->meta->assetVersion);
133133
tap($page->props->users, function ($users) use ($expected) {
134134
$this->assertSame(json_encode($expected['data']), json_encode($users->data));
135135
$this->assertSame(json_encode($expected['links']), json_encode($users->links));
@@ -187,7 +187,7 @@ public function test_nested_lazy_resource_response(): void
187187
$this->assertInstanceOf(JsonResponse::class, $response);
188188
$this->assertSame('User/Index', $page->component);
189189
$this->assertSame('/users?page=1', $page->url);
190-
$this->assertSame('123', $page->version);
190+
$this->assertSame('123', $page->meta->assetVersion);
191191
tap($page->props->something->users, function ($users) use ($expected) {
192192
$this->assertSame(json_encode($expected['users']['data']), json_encode($users->data));
193193
$this->assertSame(json_encode($expected['users']['links']), json_encode($users->links));
@@ -210,7 +210,7 @@ public function test_arrayable_prop_response(): void
210210
$this->assertSame('User/Edit', $page->component);
211211
$this->assertSame('Jonathan', $page->props->user->name);
212212
$this->assertSame('/user/123', $page->url);
213-
$this->assertSame('123', $page->version);
213+
$this->assertSame('123', $page->meta->assetVersion);
214214
}
215215

216216
public function test_promise_props_are_resolved(): void
@@ -233,7 +233,7 @@ public function test_promise_props_are_resolved(): void
233233
$this->assertSame('User/Edit', $page->component);
234234
$this->assertSame('Jonathan', $page->props->user->name);
235235
$this->assertSame('/user/123', $page->url);
236-
$this->assertSame('123', $page->version);
236+
$this->assertSame('123', $page->meta->assetVersion);
237237
}
238238

239239
public function test_xhr_partial_response(): void
@@ -256,7 +256,7 @@ public function test_xhr_partial_response(): void
256256
$this->assertCount(1, $props);
257257
$this->assertSame('partial-data', $page->props->partial);
258258
$this->assertSame('/user/123', $page->url);
259-
$this->assertSame('123', $page->version);
259+
$this->assertSame('123', $page->meta->assetVersion);
260260
}
261261

262262
public function test_exclude_props_from_partial_response(): void
@@ -279,7 +279,7 @@ public function test_exclude_props_from_partial_response(): void
279279
$this->assertCount(1, $props);
280280
$this->assertSame('partial-data', $page->props->partial);
281281
$this->assertSame('/user/123', $page->url);
282-
$this->assertSame('123', $page->version);
282+
$this->assertSame('123', $page->meta->assetVersion);
283283
}
284284

285285
public function test_nested_partial_props(): void

0 commit comments

Comments
 (0)