adrema/app/Form/Data/FieldCollection.php

58 lines
1.3 KiB
PHP
Raw Normal View History

2024-03-07 00:58:14 +01:00
<?php
namespace App\Form\Data;
use App\Form\Fields\Field;
use App\Form\Fields\NamiField;
2024-03-14 23:54:41 +01:00
use App\Form\Models\Form;
2024-03-07 00:58:14 +01:00
use Illuminate\Support\Collection;
/**
* @extends Collection<int, Field>
*/
class FieldCollection extends Collection
{
public function forMembers(): self
{
return $this->filter(fn ($field) => $field->forMembers === true);
}
2024-03-07 22:38:46 +01:00
public function withNamiType(): self
{
return $this->filter(fn ($field) => $field->namiType !== null);
}
2024-03-07 00:58:14 +01:00
public function noNamiType(): self
{
return $this->filter(fn ($field) => $field->namiType === null);
}
public function noNamiField(): self
{
return $this->filter(fn ($field) => !is_a($field, NamiField::class));
}
2024-03-14 23:54:41 +01:00
/**
* @param array<string, mixed> $input
*/
public static function fromRequest(Form $form, array $input): self
{
return $form->getFields()->each(fn ($field) => $field->value = array_key_exists($field->key, $input) ? $input[$field->key] : $field->default());
}
/**
* @return array<string, mixed>
*/
public function present(): array
{
$attributes = collect([]);
foreach ($this as $field) {
$attributes = $attributes->merge($field->present());
}
return $attributes->toArray();
}
2024-03-07 00:58:14 +01:00
}