feat(add services on membership page)

This commit is contained in:
2026-03-16 15:20:49 +01:00
parent c3b64e4bb9
commit 1790214fff
11 changed files with 434 additions and 77 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Filament\Actions;
use App\Models\Membership;
use Filament\Actions\Action;
use Illuminate\Support\Facades\Bus;
use App\Models\Member;
@@ -10,45 +11,56 @@ class ServiceToggleAction extends Action
{
protected string $serviceIdentifier;
/*
* Create a new action instance.
*/
public static function forService(string $serviceIdentifier): static
{
return static::make('toggle_' . $serviceIdentifier)
->configureForService($serviceIdentifier);
}
/**
* Configure the action for a specific service.
*/
protected function configureForService(string $serviceIdentifier): static
{
$this->serviceIdentifier = $serviceIdentifier;
return $this
->label('Service actif')
->icon(fn (Member $record) =>
$record->hasService($serviceIdentifier)
->icon(fn (Member|Membership $record) =>
$this->getMember($record)?->hasService($serviceIdentifier)
? 'heroicon-o-check-circle'
: 'heroicon-o-x-circle'
)
->color(fn (Member $record) =>
$record->hasService($serviceIdentifier)
->color(fn (Member|Membership $record) =>
$this->getMember($record)?->hasService($serviceIdentifier)
? 'success'
: 'gray'
)
->requiresConfirmation()
->modalHeading(fn (Member $record) =>
$record->hasService($serviceIdentifier)
->modalHeading(fn (Member|Membership $record) =>
$this->getMember($record)?->hasService($serviceIdentifier)
? 'Désactiver le service'
: 'Activer le service'
)
->modalDescription(fn (Member $record) =>
$record->hasService($serviceIdentifier)
->modalDescription(fn (Member|Membership $record) =>
$this->getMember($record)?->hasService($serviceIdentifier)
? 'Êtes-vous sûr·e de vouloir désactiver ce service pour ce membre ?'
: 'Êtes-vous sûr·e de vouloir activer ce service pour ce membre ?'
)
->modalSubmitActionLabel(fn (Member $record) =>
$record->hasService($serviceIdentifier)
->modalSubmitActionLabel(fn (Member|Membership $record) =>
$this->getMember($record)?->hasService($serviceIdentifier)
? 'Désactiver'
: 'Activer'
)
->action(function (Member $record) use ($serviceIdentifier) {
->action(function (Member|Membership $record) use ($serviceIdentifier) {
$member = $this->getMember($record);
if (!$member) {
return;
}
// @todo à discuter
/* if ($record->hasService($serviceIdentifier)) {
@@ -62,4 +74,12 @@ class ServiceToggleAction extends Action
}*/
});
}
/**
* Get the member associated with the given record.
*/
protected function getMember(Member|Membership $record): ?Member
{
return $record instanceof Member ? $record : $record->member;
}
}