Skip to content

Commit ef61873

Browse files
authored
Merge pull request #102 from fourstacks/recursive-arrayable-props
Add Arrayable support for nested props
2 parents fbd2afc + 0fd7b01 commit ef61873

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/Response.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ public function toResponse($request)
6464
if ($prop instanceof Responsable) {
6565
$prop = $prop->toResponse($request)->getData();
6666
}
67+
68+
if ($prop instanceof Arrayable) {
69+
$prop = $prop->toArray();
70+
}
6771
});
6872

6973
$page = [

tests/ResponseTest.php

Lines changed: 34 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 Inertia\Response;
67
use Illuminate\View\View;
78
use Illuminate\Http\Request;
@@ -126,4 +127,37 @@ public function test_lazy_resource_response()
126127
$this->assertSame('/users?page=1', $page->url);
127128
$this->assertSame('123', $page->version);
128129
}
130+
131+
public function test_arrayable_prop_response()
132+
{
133+
$request = Request::create('/user/123', 'GET');
134+
$request->headers->add(['X-Inertia' => 'true']);
135+
136+
$user = (object) ['name' => 'Jonathan'];
137+
138+
$resource = new class($user) implements Arrayable {
139+
140+
public $user;
141+
142+
public function __construct($user)
143+
{
144+
$this->user = $user;
145+
}
146+
147+
public function toArray()
148+
{
149+
return ['name' => $this->user->name];
150+
}
151+
};
152+
153+
$response = new Response('User/Edit', ['user' => $resource], 'app', '123');
154+
$response = $response->toResponse($request);
155+
$page = $response->getData();
156+
157+
$this->assertInstanceOf(JsonResponse::class, $response);
158+
$this->assertSame('User/Edit', $page->component);
159+
$this->assertSame('Jonathan', $page->props->user->name);
160+
$this->assertSame('/user/123', $page->url);
161+
$this->assertSame('123', $page->version);
162+
}
129163
}

0 commit comments

Comments
 (0)