Refactor: Implement Filament actions for study group edit and delete, including permission-based visibility and updated button styling.

This commit is contained in:
Yoga Pangestu 2026-03-12 10:38:31 +07:00
parent 3bb9fa4fa1
commit 299bb34236
4 changed files with 26 additions and 19 deletions

View File

@ -4,6 +4,7 @@
use App\Filament\Actions\Cheerful\DeleteAction; use App\Filament\Actions\Cheerful\DeleteAction;
use App\Models\StudyGroup; use App\Models\StudyGroup;
use Filament\Support\Icons\Heroicon;
class DeleteStudyGroupAction extends DeleteAction class DeleteStudyGroupAction extends DeleteAction
{ {
@ -16,7 +17,12 @@ protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->record(fn (array $arguments): StudyGroup => StudyGroup::findOrFail($arguments['record'])) $this->record(fn (array $arguments): StudyGroup => StudyGroup::findOrFail($arguments['studyGroup']))
->label('Hapus')
->icon(Heroicon::OutlinedTrash)
->color('danger')
->iconButton()
->tooltip('Hapus')
->modalHeading(fn (StudyGroup $record) => "Hapus {$record->name}") ->modalHeading(fn (StudyGroup $record) => "Hapus {$record->name}")
->modalDescription('Apakah Anda yakin ingin menghapus kelompok ini? Tindakan ini tidak dapat dibatalkan.') ->modalDescription('Apakah Anda yakin ingin menghapus kelompok ini? Tindakan ini tidak dapat dibatalkan.')
->modalSubmitActionLabel('Hapus') ->modalSubmitActionLabel('Hapus')

View File

@ -5,6 +5,7 @@
use App\Filament\Actions\Cheerful\EditAction; use App\Filament\Actions\Cheerful\EditAction;
use App\Models\StudyGroup; use App\Models\StudyGroup;
use Filament\Support\Enums\Width; use Filament\Support\Enums\Width;
use Filament\Support\Icons\Heroicon;
class EditStudyGroupAction extends EditAction class EditStudyGroupAction extends EditAction
{ {
@ -17,7 +18,13 @@ protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->record(fn (array $arguments): StudyGroup => StudyGroup::findOrFail($arguments['record'])) $this
->label('Ubah')
->icon(Heroicon::OutlinedPencilSquare)
->color('warning')
->iconButton()
->tooltip('Ubah')
->record(fn (array $arguments): StudyGroup => StudyGroup::findOrFail($arguments['studyGroup']))
->modalHeading(fn (StudyGroup $record) => "Ubah {$record->name}") ->modalHeading(fn (StudyGroup $record) => "Ubah {$record->name}")
->modalSubmitActionLabel('Simpan') ->modalSubmitActionLabel('Simpan')
->modalCancelActionLabel('Batal') ->modalCancelActionLabel('Batal')

View File

@ -89,13 +89,13 @@ protected function getHeaderActions(): array
]; ];
} }
protected function editStudyGroupAction(): Action public function editStudyGroupAction(): Action
{ {
return EditStudyGroupAction::make() return EditStudyGroupAction::make()
->visible(fn () => auth()->user()->can('Update:StudyGroup')); ->visible(fn () => auth()->user()->can('Update:StudyGroup'));
} }
protected function deleteStudyGroupAction(): Action public function deleteStudyGroupAction(): Action
{ {
return DeleteStudyGroupAction::make() return DeleteStudyGroupAction::make()
->visible(fn () => auth()->user()->can('Delete:StudyGroup')); ->visible(fn () => auth()->user()->can('Delete:StudyGroup'));

View File

@ -131,22 +131,16 @@ class="text-[10px] font-bold px-1.5 py-0.5 rounded bg-violet-50 dark:bg-violet-5
</div> </div>
</div> </div>
<div @class([ @canAny(['Update:StudyGroup', 'Delete:StudyGroup'])
'flex items-center justify-end gap-2 p-4 pt-0 rounded-b-xl', <div @class([
'bg-primary-100/30 dark:bg-primary-900/10 pt-4' => $isMyGroup, 'flex items-center justify-end gap-2 p-4 pt-0 rounded-b-xl',
])> 'bg-primary-100/30 dark:bg-primary-900/10 pt-4' => $isMyGroup,
<x-filament::button size="xs" color="warning" tooltip="Ubah" variant="primary" ])>
class="rounded-lg shadow-sm" {{ ($this->editStudyGroupAction)(['studyGroup' => $record->id]) }}
wire:click="mountAction('editStudyGroup', { record: {{ $record->id }} })">
<x-heroicon-m-pencil-square class="w-4 h-4" />
</x-filament::button>
<x-filament::button size="xs" color="danger" tooltip="Hapus" {{ ($this->deleteStudyGroupAction)(['studyGroup' => $record->id]) }}
class="rounded-lg shadow-sm" </div>
wire:click="mountAction('deleteStudyGroup', { record: {{ $record->id }} })"> @endcanAny
<x-heroicon-m-trash class="w-4 h-4" />
</x-filament::button>
</div>
</div> </div>
</div> </div>
@endforeach @endforeach