Add presenters
This commit is contained in:
parent
a0bcd99642
commit
891f0c21ad
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace App\Form\Fields;
|
namespace App\Form\Fields;
|
||||||
|
|
||||||
|
use App\Form\Presenters\EnumPresenter;
|
||||||
|
use App\Form\Presenters\Presenter;
|
||||||
use Faker\Generator;
|
use Faker\Generator;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
@ -63,4 +65,9 @@ class CheckboxesField extends Field
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPresenter(): Presenter
|
||||||
|
{
|
||||||
|
return app(EnumPresenter::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
namespace App\Form\Fields;
|
namespace App\Form\Fields;
|
||||||
|
|
||||||
use App\Form\Contracts\Displayable;
|
use App\Form\Contracts\Displayable;
|
||||||
|
use App\Form\Presenters\DatePresenter;
|
||||||
|
use App\Form\Presenters\Presenter;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Faker\Generator;
|
use Faker\Generator;
|
||||||
|
|
||||||
|
@ -74,20 +76,8 @@ class DateField extends Field
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function getPresenter(): Presenter
|
||||||
* @param mixed $value
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function presentValue($value)
|
|
||||||
{
|
{
|
||||||
return [
|
return app(DatePresenter::class);
|
||||||
$this->key => $value,
|
|
||||||
$this->key . '_human' => $value ? Carbon::parse($value)->format('d.m.Y') : null,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function displayAttribute(): string
|
|
||||||
{
|
|
||||||
return $this->key . '_human';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace App\Form\Fields;
|
namespace App\Form\Fields;
|
||||||
|
|
||||||
|
use App\Form\Presenters\DefaultPresenter;
|
||||||
|
use App\Form\Presenters\Presenter;
|
||||||
use Faker\Generator;
|
use Faker\Generator;
|
||||||
use Spatie\LaravelData\Data;
|
use Spatie\LaravelData\Data;
|
||||||
use Spatie\LaravelData\Attributes\MapInputName;
|
use Spatie\LaravelData\Attributes\MapInputName;
|
||||||
|
@ -81,6 +83,7 @@ abstract class Field extends Data
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
$this->key => $value,
|
$this->key => $value,
|
||||||
|
$this->getDisplayAttribute() => $this->getPresenter()->present($value),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,8 +134,13 @@ abstract class Field extends Data
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function displayAttribute(): string
|
public function getPresenter(): Presenter
|
||||||
{
|
{
|
||||||
return $this->key;
|
return app(DefaultPresenter::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDisplayAttribute(): string
|
||||||
|
{
|
||||||
|
return $this->key . '_display';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace App\Form\Fields;
|
namespace App\Form\Fields;
|
||||||
|
|
||||||
|
use App\Form\Presenters\GroupPresenter;
|
||||||
|
use App\Form\Presenters\Presenter;
|
||||||
use App\Group;
|
use App\Group;
|
||||||
use App\Group\Enums\Level;
|
use App\Group\Enums\Level;
|
||||||
use Faker\Generator;
|
use Faker\Generator;
|
||||||
|
@ -78,20 +80,8 @@ class GroupField extends Field
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function getPresenter(): Presenter
|
||||||
* @param mixed $value
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function presentValue($value)
|
|
||||||
{
|
{
|
||||||
return [
|
return app(GroupPresenter::class);
|
||||||
$this->key => $value,
|
|
||||||
$this->key . '_name' => Group::find($value)?->display() ?: ''
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function displayAttribute(): string
|
|
||||||
{
|
|
||||||
return $this->key . '_name';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Form\Fields;
|
namespace App\Form\Fields;
|
||||||
|
|
||||||
|
use App\Form\Presenters\Presenter;
|
||||||
use Faker\Generator;
|
use Faker\Generator;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Form\Presenters;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class DatePresenter extends Presenter
|
||||||
|
{
|
||||||
|
|
||||||
|
public function present($value): string
|
||||||
|
{
|
||||||
|
return $value ? Carbon::parse($value)->format('d.m.Y') : '';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Form\Presenters;
|
||||||
|
|
||||||
|
class DefaultPresenter extends Presenter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $value
|
||||||
|
*/
|
||||||
|
public function present($value): string
|
||||||
|
{
|
||||||
|
return ((string) $value) ?: '';
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Form\Presenters;
|
||||||
|
|
||||||
|
class EnumPresenter extends Presenter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array<int, string> $value
|
||||||
|
*/
|
||||||
|
public function present($value): string
|
||||||
|
{
|
||||||
|
return is_array($value)
|
||||||
|
? implode(', ', $value)
|
||||||
|
: '';
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Form\Presenters;
|
||||||
|
|
||||||
|
use App\Group;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class GroupPresenter extends Presenter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ?int $value
|
||||||
|
*/
|
||||||
|
public function present($value): string
|
||||||
|
{
|
||||||
|
if (!$value) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return Group::find($value)?->display() ?: '';
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Form\Presenters;
|
||||||
|
|
||||||
|
abstract class Presenter
|
||||||
|
{
|
||||||
|
/* @var mixed */
|
||||||
|
public $value;
|
||||||
|
|
||||||
|
abstract public function present($value): string;
|
||||||
|
}
|
|
@ -42,7 +42,7 @@ class ParticipantResource extends JsonResource
|
||||||
'name' => $field->name,
|
'name' => $field->name,
|
||||||
'base_type' => class_basename($field),
|
'base_type' => class_basename($field),
|
||||||
'id' => $field->key,
|
'id' => $field->key,
|
||||||
'display_attribute' => $field->displayAttribute(),
|
'display_attribute' => $field->getdisplayAttribute(),
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
|
@ -23,7 +23,7 @@ class ParticipantIndexActionTest extends TestCase
|
||||||
$this->login()->loginNami()->withoutExceptionHandling();
|
$this->login()->loginNami()->withoutExceptionHandling();
|
||||||
$group = Group::factory()->innerName('Stamm')->create();
|
$group = Group::factory()->innerName('Stamm')->create();
|
||||||
$form = Form::factory()
|
$form = Form::factory()
|
||||||
->has(Participant::factory()->data(['vorname' => 'Max', 'select' => 'A', 'stufe' => 'Pfadfinder', 'test1' => '', 'test2' => '', 'test3' => '', 'birthday' => '1991-04-20', 'bezirk' => $group->id]))
|
->has(Participant::factory()->data(['vorname' => 'Max', 'select' => ['A', 'B'], 'stufe' => 'Pfadfinder', 'test1' => '', 'test2' => '', 'test3' => '', 'birthday' => '1991-04-20', 'bezirk' => $group->id]))
|
||||||
->sections([
|
->sections([
|
||||||
FormtemplateSectionRequest::new()->fields([
|
FormtemplateSectionRequest::new()->fields([
|
||||||
FormtemplateFieldRequest::type(TextField::class)->name('Vorname')->key('vorname'),
|
FormtemplateFieldRequest::type(TextField::class)->name('Vorname')->key('vorname'),
|
||||||
|
@ -41,16 +41,19 @@ class ParticipantIndexActionTest extends TestCase
|
||||||
$this->callFilter('form.participant.index', [], ['form' => $form])
|
$this->callFilter('form.participant.index', [], ['form' => $form])
|
||||||
->assertOk()
|
->assertOk()
|
||||||
->assertJsonPath('data.0.vorname', 'Max')
|
->assertJsonPath('data.0.vorname', 'Max')
|
||||||
|
->assertJsonPath('data.0.vorname_display', 'Max')
|
||||||
->assertJsonPath('data.0.stufe', 'Pfadfinder')
|
->assertJsonPath('data.0.stufe', 'Pfadfinder')
|
||||||
->assertJsonPath('data.0.bezirk', $group->id)
|
->assertJsonPath('data.0.bezirk', $group->id)
|
||||||
->assertJsonPath('data.0.bezirk_name', 'Stamm')
|
->assertJsonPath('data.0.bezirk_display', 'Stamm')
|
||||||
->assertJsonPath('data.0.birthday_human', '20.04.1991')
|
->assertJsonPath('data.0.birthday_display', '20.04.1991')
|
||||||
->assertJsonPath('data.0.birthday', '1991-04-20')
|
->assertJsonPath('data.0.birthday', '1991-04-20')
|
||||||
|
->assertJsonPath('data.0.select', ['A', 'B'])
|
||||||
|
->assertJsonPath('data.0.select_display', 'A, B')
|
||||||
->assertJsonPath('meta.columns.0.name', 'Vorname')
|
->assertJsonPath('meta.columns.0.name', 'Vorname')
|
||||||
->assertJsonPath('meta.columns.0.base_type', class_basename(TextField::class))
|
->assertJsonPath('meta.columns.0.base_type', class_basename(TextField::class))
|
||||||
->assertJsonPath('meta.columns.0.id', 'vorname')
|
->assertJsonPath('meta.columns.0.id', 'vorname')
|
||||||
->assertJsonPath('meta.columns.6.display_attribute', 'birthday_human')
|
->assertJsonPath('meta.columns.6.display_attribute', 'birthday_display')
|
||||||
->assertJsonPath('meta.columns.0.display_attribute', 'vorname')
|
->assertJsonPath('meta.columns.0.display_attribute', 'vorname_display')
|
||||||
->assertJsonPath('meta.active_columns', ['vorname', 'select', 'stufe', 'test1']);
|
->assertJsonPath('meta.active_columns', ['vorname', 'select', 'stufe', 'test1']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue