From 4a1ccd2af57bdf5b672a8e8b81e79247441c3c3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Wei=C3=9F?= Date: Fri, 24 Jan 2025 21:57:19 +0100 Subject: [PATCH] Use DeferProp --- src/Lazy.php | 3 ++- src/Support/Lazy/InertiaDeferred.php | 5 ++--- tests/CreationTest.php | 21 +++++++++++-------- .../VisibleDataFieldsResolverTest.php | 3 ++- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Lazy.php b/src/Lazy.php index c407c411..4f5c72d3 100644 --- a/src/Lazy.php +++ b/src/Lazy.php @@ -5,6 +5,7 @@ use Closure; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Traits\Macroable; +use Inertia\DeferProp; use Spatie\LaravelData\Support\Lazy\ClosureLazy; use Spatie\LaravelData\Support\Lazy\ConditionalLazy; use Spatie\LaravelData\Support\Lazy\DefaultLazy; @@ -38,7 +39,7 @@ public static function inertia(Closure $value): InertiaLazy return new InertiaLazy($value); } - public static function inertiaDeferred(Closure $value): InertiaDeferred + public static function inertiaDeferred(DeferProp $value): InertiaDeferred { return new InertiaDeferred($value); } diff --git a/src/Support/Lazy/InertiaDeferred.php b/src/Support/Lazy/InertiaDeferred.php index 4670d930..96ec9290 100644 --- a/src/Support/Lazy/InertiaDeferred.php +++ b/src/Support/Lazy/InertiaDeferred.php @@ -2,15 +2,14 @@ namespace Spatie\LaravelData\Support\Lazy; -use Closure; use Inertia\DeferProp; class InertiaDeferred extends ConditionalLazy { public function __construct( - Closure $value, + DeferProp $value, ) { - parent::__construct(fn () => true, $value); + parent::__construct(fn () => true, fn () => $value()); } public function resolve(): DeferProp diff --git a/tests/CreationTest.php b/tests/CreationTest.php index e2d051e2..bb871fd7 100644 --- a/tests/CreationTest.php +++ b/tests/CreationTest.php @@ -10,6 +10,8 @@ use Illuminate\Support\Enumerable; use Illuminate\Support\Facades\Route; use Illuminate\Validation\ValidationException; +use Inertia\DeferProp; +use Inertia\Inertia; use Inertia\LazyProp; use function Pest\Laravel\postJson; @@ -1461,11 +1463,12 @@ class TestAutoLazyClassAttributeData extends Data public function __construct() { - $this->deferred = Lazy::inertiaDeferred(fn () => 'Deferred Value'); } }; - $data = $dataClass::from([]); + $data = $dataClass::from([ + "deferred" => Lazy::inertiaDeferred(Inertia::defer(fn () => 'Deferred Value')), + ]); expect($data->deferred)->toBeInstanceOf(InertiaDeferred::class); expect($data->deferred->resolve()())->toBe('Deferred Value'); @@ -1474,24 +1477,24 @@ public function __construct() it('can use auto deferred to construct a deferred property', function () { $dataClass = new class () extends Data { #[AutoInertiaDeferred] - public string|InertiaDeferred $string; + public InertiaDeferred $string; }; - $data = $dataClass::from(['string' => 'Hello World']); + $data = $dataClass::from(['string' => Lazy::inertiaDeferred(Inertia::defer(fn () => 'Deferred Value'))]); expect($data->string)->toBeInstanceOf(InertiaDeferred::class); - expect($data->toArray()['string'])->toBeInstanceOf(\Inertia\DeferProp::class); + expect($data->toArray()['string'])->toBeInstanceOf(DeferProp::class); }); it('can use class level auto deferred to construct a deferred property', function () { #[AutoInertiaDeferred] class AutoDeferredData extends Data { - public string|InertiaDeferred $string; + public InertiaDeferred $deferred; }; - $data = AutoDeferredData::from(['string' => 'Hello World']); + $data = AutoDeferredData::from(['string' => Inertia::defer(fn () => 'Deferred Value')]); - expect($data->string)->toBeInstanceOf(InertiaDeferred::class); - expect($data->toArray()['string'])->toBeInstanceOf(\Inertia\DeferProp::class); + expect($data->deferred)->toBeInstanceOf(InertiaDeferred::class); + expect($data->toArray()['string'])->toBeInstanceOf(DeferProp::class); })->todo(); diff --git a/tests/Resolvers/VisibleDataFieldsResolverTest.php b/tests/Resolvers/VisibleDataFieldsResolverTest.php index e016020e..b1fc12e6 100644 --- a/tests/Resolvers/VisibleDataFieldsResolverTest.php +++ b/tests/Resolvers/VisibleDataFieldsResolverTest.php @@ -1,6 +1,7 @@ $name) + Lazy::inertiaDeferred(Inertia::defer(fn () => $name)) ); } };