68 lines
1.9 KiB
PHP
68 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Member\Data;
|
|
|
|
use App\Activity;
|
|
use App\Group;
|
|
use Spatie\LaravelData\Data;
|
|
use App\Lib\Data\DateData;
|
|
use App\Lib\Data\RecordData;
|
|
use App\Lib\HasDataMeta;
|
|
use App\Member\Membership;
|
|
use App\Membership\FilterScope;
|
|
use App\Subactivity;
|
|
|
|
class MembershipData extends Data
|
|
{
|
|
|
|
use HasDataMeta;
|
|
|
|
/**
|
|
* @param array<string, string> $links
|
|
*/
|
|
public function __construct(
|
|
public int $id,
|
|
public RecordData $activity,
|
|
public ?RecordData $subactivity,
|
|
public RecordData $group,
|
|
public ?DateData $promisedAt,
|
|
public DateData $from,
|
|
public ?DateData $to,
|
|
public MemberData $member,
|
|
public bool $isActive,
|
|
public array $links,
|
|
) {}
|
|
|
|
public static function fromModel(Membership $membership): static
|
|
{
|
|
return static::factory()->withoutMagicalCreation()->from([
|
|
'id' => $membership->id,
|
|
'activity' => $membership->activity,
|
|
'subactivity' => $membership->subactivity,
|
|
'isActive' => $membership->isActive(),
|
|
'from' => $membership->from,
|
|
'to' => $membership->to,
|
|
'group' => $membership->group,
|
|
'promisedAt' => $membership->promised_at,
|
|
'member' => $membership->member,
|
|
'links' => [
|
|
'update' => route('membership.update', $membership),
|
|
'destroy' => route('membership.destroy', $membership),
|
|
]
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public static function meta(): array {
|
|
return [
|
|
'activities' => RecordData::collect(Activity::get()),
|
|
'subactivities' => RecordData::collect(Subactivity::get()),
|
|
'groups' => RecordData::collect(Group::get()),
|
|
'filter' => FilterScope::fromRequest(request()->input('filter', '')),
|
|
];
|
|
}
|
|
|
|
}
|