diff --git a/src/MergeProp.php b/src/MergeProp.php index 4600b634..499b43f4 100644 --- a/src/MergeProp.php +++ b/src/MergeProp.php @@ -13,13 +13,11 @@ class MergeProp implements Mergeable /** * @param mixed $value - * @param string[] $mergeStrategies */ - public function __construct($value, array $mergeStrategies = []) + public function __construct($value) { $this->value = $value; $this->merge = true; - $this->mergeStrategies = $mergeStrategies; } public function __invoke() diff --git a/src/MergesProps.php b/src/MergesProps.php index 0e442f58..6e5423d0 100644 --- a/src/MergesProps.php +++ b/src/MergesProps.php @@ -2,13 +2,15 @@ namespace Inertia; +use Illuminate\Support\Arr; + trait MergesProps { protected bool $merge = false; protected bool $deepMerge = false; - protected array $mergeStrategies = []; + protected array $matchOn = []; public function merge(): static { @@ -24,6 +26,13 @@ public function deepMerge(): static return $this->merge(); } + public function matchOn(string|array $matchOn): static + { + $this->matchOn = Arr::wrap($matchOn); + + return $this; + } + public function shouldMerge(): bool { return $this->merge; @@ -34,8 +43,8 @@ public function shouldDeepMerge(): bool return $this->deepMerge; } - public function mergeStrategies(): array + public function matchesOn(): array { - return $this->mergeStrategies; + return $this->matchOn; } } diff --git a/src/Response.php b/src/Response.php index ccc49239..b5f8ec82 100644 --- a/src/Response.php +++ b/src/Response.php @@ -333,9 +333,9 @@ public function resolveMergeProps(Request $request): array ->filter(fn ($prop) => $prop->shouldDeepMerge()) ->keys(); - $mergeStrategies = $mergeProps + $matchPropsOn = $mergeProps ->map(function ($prop, $key) { - return collect($prop->mergeStrategies()) + return collect($prop->matchesOn()) ->map(fn ($strategy) => $key.'.'.$strategy) ->toArray(); }) @@ -349,7 +349,7 @@ public function resolveMergeProps(Request $request): array return array_filter([ 'mergeProps' => $mergeProps->toArray(), 'deepMergeProps' => $deepMergeProps->toArray(), - 'mergeStrategies' => $mergeStrategies->toArray(), + 'matchPropsOn' => $matchPropsOn->toArray(), ], fn ($prop) => count($prop) > 0); } diff --git a/src/ResponseFactory.php b/src/ResponseFactory.php index f0c1dca7..31a8c335 100644 --- a/src/ResponseFactory.php +++ b/src/ResponseFactory.php @@ -142,12 +142,10 @@ public function merge($value): MergeProp /** * @param mixed $value - * - * @parram null|string|string[] $mergeStrategies */ - public function deepMerge($value, $mergeStrategies = null): MergeProp + public function deepMerge($value): MergeProp { - return (new MergeProp($value, Arr::wrap($mergeStrategies)))->deepMerge(); + return (new MergeProp($value))->deepMerge(); } /** diff --git a/tests/DeepMergePropTest.php b/tests/DeepMergePropTest.php index 4e282dec..d5cf437b 100644 --- a/tests/DeepMergePropTest.php +++ b/tests/DeepMergePropTest.php @@ -28,10 +28,17 @@ public function test_can_resolve_bindings_when_invoked(): void $this->assertInstanceOf(Request::class, $mergeProp()); } - public function test_can_use_single_string_as_merge_strategy(): void + public function test_can_use_single_string_as_key_to_match_on(): void { - $mergeProp = (new MergeProp(['key' => 'value'], ['key']))->deepMerge(); + $mergeProp = (new MergeProp(['key' => 'value']))->matchOn('key'); - $this->assertEquals(['key'], $mergeProp->mergeStrategies()); + $this->assertEquals(['key'], $mergeProp->matchesOn()); + } + + public function test_can_use_an_array_of_strings_as_keys_to_match_on(): void + { + $mergeProp = (new MergeProp(['key' => 'value']))->matchOn(['key', 'anotherKey']); + + $this->assertEquals(['key', 'anotherKey'], $mergeProp->matchesOn()); } } diff --git a/tests/ResponseTest.php b/tests/ResponseTest.php index a262db3d..9014ba28 100644 --- a/tests/ResponseTest.php +++ b/tests/ResponseTest.php @@ -210,8 +210,8 @@ public function test_server_response_with_merge_strategies(): void 'User/Edit', [ 'user' => $user, - 'foo' => (new MergeProp('foo value', ['foo-key']))->deepMerge(), - 'bar' => (new MergeProp('bar value', ['bar-key']))->deepMerge(), + 'foo' => (new MergeProp('foo value'))->matchOn('foo-key')->deepMerge(), + 'bar' => (new MergeProp('bar value'))->matchOn('bar-key')->deepMerge(), ], 'app', '123' @@ -231,13 +231,14 @@ public function test_server_response_with_merge_strategies(): void 'foo', 'bar', ], $page['deepMergeProps']); + $this->assertSame([ 'foo.foo-key', 'bar.bar-key', - ], $page['mergeStrategies']); + ], $page['matchPropsOn']); $this->assertFalse($page['clearHistory']); $this->assertFalse($page['encryptHistory']); - $this->assertSame('
', $view->render()); + $this->assertSame('
', $view->render()); } public function test_server_response_with_defer_and_merge_props(): void