Compare commits

..

No commits in common. "63583b9b25ab8d579117d4a58184e9a99899b53a" and "ab7e20becd10b4a8d094c651542cd3e927da362a" have entirely different histories.

12 changed files with 13 additions and 37 deletions

View File

@ -62,10 +62,7 @@ class FieldCollection extends Collection
*/ */
public static function fromRequest(Form $form, array $input): self public static function fromRequest(Form $form, array $input): self
{ {
return $form->getFields()->map(function ($field) use ($input) { return $form->getFields()->each(fn ($field) => $field->value = array_key_exists($field->key, $input) ? $input[$field->key] : $field->default());
$field->value = array_key_exists($field->key, $input) ? $input[$field->key] : $field->default();
return $field;
});
} }
public function find(Field $givenField): ?Field public function find(Field $givenField): ?Field

View File

@ -4,8 +4,6 @@ namespace App\Form\Fields;
use App\Form\Models\Form; use App\Form\Models\Form;
use App\Form\Models\Participant; use App\Form\Models\Participant;
use App\Form\Presenters\BooleanPresenter;
use App\Form\Presenters\Presenter;
use Faker\Generator; use Faker\Generator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
@ -23,7 +21,7 @@ class CheckboxField extends Field
{ {
return [ return [
['key' => 'description', 'default' => '', 'rules' => ['description' => 'required|string'], 'label' => 'Beschreibung'], ['key' => 'description', 'default' => '', 'rules' => ['description' => 'required|string'], 'label' => 'Beschreibung'],
['key' => 'required', 'default' => true, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'], ['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
]; ];
} }
@ -74,9 +72,4 @@ class CheckboxField extends Field
public function afterRegistration(Form $form, Participant $participant, array $input): void public function afterRegistration(Form $form, Participant $participant, array $input): void
{ {
} }
public function getPresenter(): Presenter
{
return app(BooleanPresenter::class);
}
} }

View File

@ -24,7 +24,7 @@ class DateField extends Field
public static function meta(): array public static function meta(): array
{ {
return [ return [
['key' => 'required', 'default' => true, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'], ['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
['key' => 'max_today', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Nur daten bis heute erlauben'], ['key' => 'max_today', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Nur daten bis heute erlauben'],
]; ];
} }

View File

@ -22,7 +22,7 @@ class DropdownField extends Field
{ {
return [ return [
['key' => 'options', 'default' => [], 'rules' => ['options' => 'present|array', 'options.*' => 'string'], 'label' => 'Optionen'], ['key' => 'options', 'default' => [], 'rules' => ['options' => 'present|array', 'options.*' => 'string'], 'label' => 'Optionen'],
['key' => 'required', 'default' => true, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'], ['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
]; ];
} }

View File

@ -147,6 +147,7 @@ abstract class Field extends Data
'type' => static::type(), 'type' => static::type(),
'columns' => ['mobile' => 2, 'tablet' => 4, 'desktop' => 6], 'columns' => ['mobile' => 2, 'tablet' => 4, 'desktop' => 6],
'value' => static::default(), 'value' => static::default(),
'required' => false,
'nami_type' => null, 'nami_type' => null,
'for_members' => true, 'for_members' => true,
'special_type' => null, 'special_type' => null,

View File

@ -25,7 +25,7 @@ class GroupField extends Field
public static function meta(): array public static function meta(): array
{ {
return [ return [
['key' => 'required', 'default' => true, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'], ['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
['key' => 'parent_field', 'default' => null, 'rules' => ['parent_field' => 'present|nullable|string'], 'label' => 'Übergeordnetes Feld'], ['key' => 'parent_field', 'default' => null, 'rules' => ['parent_field' => 'present|nullable|string'], 'label' => 'Übergeordnetes Feld'],
['key' => 'parent_group', 'default' => null, 'rules' => ['parent_group' => ['present', 'nullable', Rule::in(Group::pluck('id')->toArray())]], 'label' => 'Übergeordnete Gruppierung'], ['key' => 'parent_group', 'default' => null, 'rules' => ['parent_group' => ['present', 'nullable', Rule::in(Group::pluck('id')->toArray())]], 'label' => 'Übergeordnete Gruppierung'],
]; ];

View File

@ -23,7 +23,7 @@ class RadioField extends Field
{ {
return [ return [
['key' => 'options', 'default' => [], 'rules' => ['options' => 'present|array', 'options.*' => 'required|string'], 'label' => 'Optionen'], ['key' => 'options', 'default' => [], 'rules' => ['options' => 'present|array', 'options.*' => 'required|string'], 'label' => 'Optionen'],
['key' => 'required', 'default' => true, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'], ['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
]; ];
} }

View File

@ -19,7 +19,7 @@ class TextField extends Field
public static function meta(): array public static function meta(): array
{ {
return [ return [
['key' => 'required', 'default' => true, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'], ['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
]; ];
} }

View File

@ -20,7 +20,7 @@ class TextareaField extends Field
{ {
return [ return [
['key' => 'rows', 'default' => 5, 'rules' => ['rows' => 'present|integer|gt:0'], 'label' => 'Zeilen'], ['key' => 'rows', 'default' => 5, 'rules' => ['rows' => 'present|integer|gt:0'], 'label' => 'Zeilen'],
['key' => 'required', 'default' => true, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'], ['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
]; ];
} }

View File

@ -1,15 +0,0 @@
<?php
namespace App\Form\Presenters;
class BooleanPresenter extends Presenter
{
/**
* @param mixed $value
*/
public function present($value): string
{
return $value ? 'Ja' : 'Nein';
}
}

@ -1 +1 @@
Subproject commit bc45e0cdf792158372b0f12db8739c19beda1a4f Subproject commit 7ae37c224e7579978874117436ce78c447d6ef52

View File

@ -38,12 +38,12 @@ class FormtemplateIndexActionTest extends TestCase
'type' => 'DropdownField', 'type' => 'DropdownField',
'columns' => ['mobile' => 2, 'tablet' => 4, 'desktop' => 6], 'columns' => ['mobile' => 2, 'tablet' => 4, 'desktop' => 6],
'value' => null, 'value' => null,
'required' => false,
'nami_type' => null, 'nami_type' => null,
'for_members' => true, 'for_members' => true,
'special_type' => null, 'special_type' => null,
'hint' => '', 'hint' => '',
'options' => [], 'options' => [],
'required' => true,
] ]
]) ])
->assertInertiaPath('data.meta.fields.7', [ ->assertInertiaPath('data.meta.fields.7', [
@ -54,11 +54,11 @@ class FormtemplateIndexActionTest extends TestCase
'type' => 'TextField', 'type' => 'TextField',
'columns' => ['mobile' => 2, 'tablet' => 4, 'desktop' => 6], 'columns' => ['mobile' => 2, 'tablet' => 4, 'desktop' => 6],
'value' => '', 'value' => '',
'required' => false,
'nami_type' => null, 'nami_type' => null,
'for_members' => true, 'for_members' => true,
'special_type' => null, 'special_type' => null,
'hint' => '', 'hint' => '',
'required' => true,
] ]
]) ])
->assertInertiaPath('data.meta.fields.8', [ ->assertInertiaPath('data.meta.fields.8', [
@ -69,12 +69,12 @@ class FormtemplateIndexActionTest extends TestCase
'type' => 'TextareaField', 'type' => 'TextareaField',
'columns' => ['mobile' => 2, 'tablet' => 4, 'desktop' => 6], 'columns' => ['mobile' => 2, 'tablet' => 4, 'desktop' => 6],
'value' => '', 'value' => '',
'required' => false,
'nami_type' => null, 'nami_type' => null,
'for_members' => true, 'for_members' => true,
'special_type' => null, 'special_type' => null,
'hint' => '', 'hint' => '',
'rows' => 5, 'rows' => 5,
'required' => true,
] ]
]) ])
->assertInertiaPath('data.meta.default', [ ->assertInertiaPath('data.meta.default', [