Skip to content

Commit 23a6f3b

Browse files
Merge pull request #696 from pascalbaljet/2.x
[2.x] Call `toArray()` on `Arrayable` props resolved from the Container
2 parents ff666e1 + 443c78b commit 23a6f3b

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/Response.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,10 @@ public function resolvePropertyInstances(array $props, Request $request): array
261261
$value = App::call($value);
262262
}
263263

264+
if ($value instanceof Arrayable) {
265+
$value = $value->toArray();
266+
}
267+
264268
if ($value instanceof PromiseInterface) {
265269
$value = $value->wait();
266270
}

tests/ResponseTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Inertia\Tests;
44

5+
use Illuminate\Contracts\Support\Arrayable;
56
use Illuminate\Http\JsonResponse;
67
use Illuminate\Http\Request;
78
use Illuminate\Http\Resources\Json\JsonResource;
@@ -659,6 +660,31 @@ public function test_lazy_props_are_included_in_partial_reload(): void
659660
$this->assertSame('A lazy value', $page->props->lazy);
660661
}
661662

663+
public function test_defer_arrayable_props_are_resolved_in_partial_reload(): void
664+
{
665+
$request = Request::create('/users', 'GET');
666+
$request->headers->add(['X-Inertia' => 'true']);
667+
$request->headers->add(['X-Inertia-Partial-Component' => 'Users']);
668+
$request->headers->add(['X-Inertia-Partial-Data' => 'defer']);
669+
670+
$deferProp = new DeferProp(function () {
671+
return new class implements Arrayable
672+
{
673+
public function toArray()
674+
{
675+
return ['foo' => 'bar'];
676+
}
677+
};
678+
});
679+
680+
$response = new Response('Users', ['users' => [], 'defer' => $deferProp], 'app', '123');
681+
$response = $response->toResponse($request);
682+
$page = $response->getData();
683+
684+
$this->assertFalse(property_exists($page->props, 'users'));
685+
$this->assertEquals((object) ['foo' => 'bar'], $page->props->defer);
686+
}
687+
662688
public function test_always_props_are_included_on_partial_reload(): void
663689
{
664690
$request = Request::create('/user/123', 'GET');

0 commit comments

Comments
 (0)