Skip to content

Commit 443c78b

Browse files
committed
Call toArray() on Arrayable props resolved from the Container
1 parent 0259e37 commit 443c78b

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
@@ -263,6 +263,10 @@ public function resolvePropertyInstances(array $props, Request $request): array
263263
$value = App::call($value);
264264
}
265265

266+
if ($value instanceof Arrayable) {
267+
$value = $value->toArray();
268+
}
269+
266270
if ($value instanceof PromiseInterface) {
267271
$value = $value->wait();
268272
}

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;
@@ -584,6 +585,31 @@ public function test_lazy_props_are_included_in_partial_reload(): void
584585
$this->assertSame('A lazy value', $page->props->lazy);
585586
}
586587

588+
public function test_defer_arrayable_props_are_resolved_in_partial_reload(): void
589+
{
590+
$request = Request::create('/users', 'GET');
591+
$request->headers->add(['X-Inertia' => 'true']);
592+
$request->headers->add(['X-Inertia-Partial-Component' => 'Users']);
593+
$request->headers->add(['X-Inertia-Partial-Data' => 'defer']);
594+
595+
$deferProp = new DeferProp(function () {
596+
return new class implements Arrayable
597+
{
598+
public function toArray()
599+
{
600+
return ['foo' => 'bar'];
601+
}
602+
};
603+
});
604+
605+
$response = new Response('Users', ['users' => [], 'defer' => $deferProp], 'app', '123');
606+
$response = $response->toResponse($request);
607+
$page = $response->getData();
608+
609+
$this->assertFalse(property_exists($page->props, 'users'));
610+
$this->assertEquals((object) ['foo' => 'bar'], $page->props->defer);
611+
}
612+
587613
public function test_always_props_are_included_on_partial_reload(): void
588614
{
589615
$request = Request::create('/user/123', 'GET');

0 commit comments

Comments
 (0)