42 lines
1.4 KiB
PHP
42 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Member\Data;
|
|
|
|
use App\Activity;
|
|
use Spatie\LaravelData\Data;
|
|
use Spatie\LaravelData\Attributes\MapInputName;
|
|
use Spatie\LaravelData\Attributes\MapOutputName;
|
|
use Spatie\LaravelData\Mappers\SnakeCaseMapper;
|
|
use App\Member\Member;
|
|
use Illuminate\Support\Collection;
|
|
|
|
#[MapInputName(SnakeCaseMapper::class)]
|
|
#[MapOutputName(SnakeCaseMapper::class)]
|
|
class MembershipMeta extends Data
|
|
{
|
|
|
|
public function __construct(
|
|
public array $links,
|
|
public Collection $groups,
|
|
public Collection $activities,
|
|
public Collection $subactivities,
|
|
public MembershipData $default,
|
|
) {}
|
|
|
|
public static function fromMember(Member $member): static
|
|
{
|
|
$activities = Activity::with('subactivities')->get();
|
|
|
|
return static::factory()->withoutMagicalCreation()->from([
|
|
'links' => [
|
|
'store' => route('member.membership.store', ['member' => $member]),
|
|
],
|
|
'groups' => NestedGroup::cacheForSelect(),
|
|
'activities' => $activities->map(fn($activity) => ['id' => $activity->id, 'name' => $activity->name]),
|
|
'subactivities' => $activities->mapWithKeys(fn($activity) => [$activity->id => $activity->subactivities->map(fn($subactivity) => ['id' => $subactivity->id, 'name' => $subactivity->name, 'is_age_group' => $subactivity->is_age_group])]),
|
|
'default' => MembershipData::from(['group' => $member->group_id]),
|
|
]);
|
|
}
|
|
|
|
}
|