43 lines
1.1 KiB
PHP
43 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Form\Data;
|
|
|
|
use App\Form\Casts\CollectionCast;
|
|
use App\Form\Transformers\CollectionTransformer;
|
|
use Illuminate\Support\Collection;
|
|
use Spatie\LaravelData\Data;
|
|
use Spatie\LaravelData\Attributes\WithCast;
|
|
use Spatie\LaravelData\Attributes\WithTransformer;
|
|
use Spatie\LaravelData\Support\EloquentCasts\DataEloquentCast;
|
|
|
|
class FormConfigData extends Data
|
|
{
|
|
|
|
/**
|
|
* @param Collection<int, SectionData> $sections
|
|
*/
|
|
public function __construct(
|
|
#[WithCast(CollectionCast::class, target: SectionData::class)]
|
|
#[WithTransformer(CollectionTransformer::class, target: SectionData::class)]
|
|
public Collection $sections
|
|
) {
|
|
}
|
|
|
|
public function fields(): FieldCollection
|
|
{
|
|
return $this->sections->reduce(
|
|
fn ($carry, $current) => $carry->merge($current->fields->all()),
|
|
new FieldCollection([])
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param array<int, mixed> $arguments
|
|
* @return DataEloquentCast<self>
|
|
*/
|
|
public static function castUsing(array $arguments): DataEloquentCast
|
|
{
|
|
return new DataEloquentCast(static::class, $arguments);
|
|
}
|
|
}
|