From 757f6cf20c9223f2f94c4c6dfb24b1f727603c26 Mon Sep 17 00:00:00 2001 From: "Sabrina B." Date: Wed, 22 Oct 2025 18:04:34 +0200 Subject: [PATCH] feat(Member & Membership): table and form functionnalities --- .../MemberGroups/Schemas/MemberGroupForm.php | 33 +++++++++++++++---- .../Resources/Members/Tables/MembersTable.php | 6 ++-- .../Memberships/Schemas/MembershipForm.php | 2 +- app/Models/MemberGroup.php | 3 +- lang/en/member_groups.php | 4 ++- lang/fr/member_groups.php | 4 ++- lang/fr/modal.php | 23 +++++++++++++ 7 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 lang/fr/modal.php diff --git a/app/Filament/Resources/MemberGroups/Schemas/MemberGroupForm.php b/app/Filament/Resources/MemberGroups/Schemas/MemberGroupForm.php index 376a4bc..dc2098e 100644 --- a/app/Filament/Resources/MemberGroups/Schemas/MemberGroupForm.php +++ b/app/Filament/Resources/MemberGroups/Schemas/MemberGroupForm.php @@ -3,7 +3,10 @@ namespace App\Filament\Resources\MemberGroups\Schemas; use App\Models\MemberGroup; +use Filament\Actions\Action; +use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; +use Filament\Schemas\Components\Section; use Filament\Schemas\Schema; class MemberGroupForm @@ -12,12 +15,30 @@ class MemberGroupForm { return $schema ->components([ - TextInput::make('name') - ->label(MemberGroup::getAttributeLabel('name')) - ->required(), - TextInput::make('description') - ->label(MemberGroup::getAttributeLabel('description')) - ->default(null), + Section::make(fn (?MemberGroup $record) => $record?->name ?? MemberGroup::getAttributeLabel('name')) + ->headerActions([ + Action::make('view-members') + ->icon('heroicon-o-users') + ->label(MemberGroup::getAttributeLabel('view_members')) + ->action(function (MemberGroup $record) { + return redirect()->route('filament.admin.resources.members.index', [ 'filters[group][name][values][0]' => $record->id]); + }) + ->visible(fn(?MemberGroup $record) => $record !== null) + + + ]) + ->schema([ + TextInput::make('name') + ->label(MemberGroup::getAttributeLabel('name')) + ->required(), + TextInput::make('identifier') + ->label(MemberGroup::getAttributeLabel('identifier')) + ->disabledOn('edit') + ->required(), + Textarea::make('description') + ->label(MemberGroup::getAttributeLabel('description')) + ->default(null), + ]), ]); } } diff --git a/app/Filament/Resources/Members/Tables/MembersTable.php b/app/Filament/Resources/Members/Tables/MembersTable.php index acf362e..1f5c3c2 100644 --- a/app/Filament/Resources/Members/Tables/MembersTable.php +++ b/app/Filament/Resources/Members/Tables/MembersTable.php @@ -73,9 +73,9 @@ class MembersTable 'cancelled' => Member::getAttributeLabel('cancelled'), 'excluded' => Member::getAttributeLabel('excluded'), ]), - Filter::make('group.name') - ->label(Member::getAttributeLabel('group_id')) - + SelectFilter::make('group.name') + ->label(Member::getAttributeLabel('group_id'))->multiple() + ->relationship('group', 'name'), ]) ->recordActions([ EditAction::make(), diff --git a/app/Filament/Resources/Memberships/Schemas/MembershipForm.php b/app/Filament/Resources/Memberships/Schemas/MembershipForm.php index 0d3554a..9491ed1 100644 --- a/app/Filament/Resources/Memberships/Schemas/MembershipForm.php +++ b/app/Filament/Resources/Memberships/Schemas/MembershipForm.php @@ -31,7 +31,7 @@ class MembershipForm ->headerActions([ Action::make('view-profile') ->icon('heroicon-o-user') - ->label('Voir le profil') + ->label('Voir le profil du membre') ->action(function (Membership $record) { return redirect()->route('filament.admin.resources.members.edit', ['record' => $record->member_id]); }), diff --git a/app/Models/MemberGroup.php b/app/Models/MemberGroup.php index 64a1d56..c0523dd 100644 --- a/app/Models/MemberGroup.php +++ b/app/Models/MemberGroup.php @@ -9,7 +9,8 @@ class MemberGroup extends Model { protected $fillable = [ 'name', - 'description' + 'description', + 'identifier' ]; public static function getAttributeLabel(string $attribute): string diff --git a/lang/en/member_groups.php b/lang/en/member_groups.php index 3b1f8fc..ee22184 100644 --- a/lang/en/member_groups.php +++ b/lang/en/member_groups.php @@ -5,8 +5,10 @@ return [ 'group' => 'Group', 'groups' => 'Groups', 'name' => 'Name', + 'identifier' => 'Identifier', 'description' => 'Description', 'created_at' => 'Created at', - 'Updated at' => 'Updated at' + 'Updated at' => 'Updated at', + 'view_members' => 'View members of this group' ], ]; diff --git a/lang/fr/member_groups.php b/lang/fr/member_groups.php index 19244fb..a6d5efe 100644 --- a/lang/fr/member_groups.php +++ b/lang/fr/member_groups.php @@ -5,8 +5,10 @@ return [ 'group' => 'Groupe', 'groups' => 'Groupes', 'name' => 'Nom', + 'identifier' => 'Identifiant', 'description' => 'Description', 'created_at' => 'Créé le', - 'updated_at' => 'Mis à jour le' + 'updated_at' => 'Mis à jour le', + 'view_members' => 'Voir les membres de ce groupe' ], ]; diff --git a/lang/fr/modal.php b/lang/fr/modal.php new file mode 100644 index 0000000..5d46d3b --- /dev/null +++ b/lang/fr/modal.php @@ -0,0 +1,23 @@ + 'Êtes-vous sûr de vouloir supprimer ?', + + 'actions' => [ + + 'cancel' => [ + 'label' => 'Annuler', + ], + + 'confirm' => [ + 'label' => 'Confirmer', + ], + + 'submit' => [ + 'label' => 'Soumettre', + ], + + ], + +];