Skip to content

Commit 549889b

Browse files
committed
Use properties instead of payloads
1 parent 46c9551 commit 549889b

File tree

4 files changed

+19
-20
lines changed

4 files changed

+19
-20
lines changed

src/Contracts/PropertyMorphableData.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44

55
interface PropertyMorphableData
66
{
7-
public static function morph(mixed ...$payloads): ?string;
7+
public static function morph(array $properties): ?string;
88
}

src/Resolvers/DataFromArrayResolver.php

+16
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use ArgumentCountError;
66
use Spatie\LaravelData\Contracts\BaseData;
7+
use Spatie\LaravelData\Contracts\PropertyMorphableData;
78
use Spatie\LaravelData\Exceptions\CannotCreateData;
89
use Spatie\LaravelData\Exceptions\CannotSetComputedValue;
910
use Spatie\LaravelData\Optional;
@@ -28,6 +29,11 @@ public function execute(string $class, array $properties): BaseData
2829
{
2930
$dataClass = $this->dataConfig->getDataClass($class);
3031

32+
if ($propertyMorphableClass = $this->propertyMorphableClass($dataClass)) {
33+
$class = $propertyMorphableClass::morph($properties) ?? $class;
34+
$dataClass = $this->dataConfig->getDataClass($class);
35+
}
36+
3137
$data = $this->createData($dataClass, $properties);
3238

3339
foreach ($dataClass->properties as $property) {
@@ -101,4 +107,14 @@ protected function createData(
101107
);
102108
}
103109
}
110+
111+
/**
112+
* @return class-string<PropertyMorphableData>
113+
*/
114+
protected function propertyMorphableClass(DataClass $dataClass): ?string
115+
{
116+
return $dataClass->isAbstract && $dataClass->propertyMorphable
117+
? $dataClass->name
118+
: null;
119+
}
104120
}

src/Resolvers/DataFromSomethingResolver.php

-17
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Illuminate\Http\Request;
66
use Spatie\LaravelData\Contracts\BaseData;
7-
use Spatie\LaravelData\Contracts\PropertyMorphableData;
87
use Spatie\LaravelData\Enums\CustomCreationMethodType;
98
use Spatie\LaravelData\Optional;
109
use Spatie\LaravelData\Support\Creation\CreationContext;
@@ -31,10 +30,6 @@ public function execute(
3130
CreationContext $creationContext,
3231
mixed ...$payloads
3332
): BaseData {
34-
if ($propertyMorphableClass = $this->propertyMorphableClass($class)) {
35-
$class = $propertyMorphableClass::morph(...$payloads) ?? $class;
36-
}
37-
3833
if ($data = $this->createFromCustomCreationMethod($class, $creationContext, $payloads)) {
3934
return $data;
4035
}
@@ -65,18 +60,6 @@ public function execute(
6560
return $this->dataFromArrayResolver->execute($class, $properties);
6661
}
6762

68-
/**
69-
* @return class-string<PropertyMorphableData>
70-
*/
71-
protected function propertyMorphableClass(string $class): ?string
72-
{
73-
$dataClass = $this->dataConfig->getDataClass($class);
74-
75-
return $dataClass->isAbstract && $dataClass->propertyMorphable
76-
? $class
77-
: null;
78-
}
79-
8063
protected function createFromCustomCreationMethod(
8164
string $class,
8265
CreationContext $creationContext,

tests/Fakes/PropertyMorphableData/AbstractPropertyMorphableData.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public function __construct(
1414
) {
1515
}
1616

17-
public static function morph(...$payloads): ?string
17+
public static function morph(array $properties): ?string
1818
{
19-
return match ($payloads[0]['variant'] ?? null) {
19+
return match ($properties['variant'] ?? null) {
2020
'a' => PropertyMorphableDataA::class,
2121
'b' => PropertyMorphableDataB::class,
2222
default => null,

0 commit comments

Comments
 (0)