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\Models\StudyGroup;
use Filament\Support\Icons\Heroicon;
class DeleteStudyGroupAction extends DeleteAction
{
@ -16,7 +17,12 @@ protected function setUp(): void
{
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}")
->modalDescription('Apakah Anda yakin ingin menghapus kelompok ini? Tindakan ini tidak dapat dibatalkan.')
->modalSubmitActionLabel('Hapus')

View File

@ -5,6 +5,7 @@
use App\Filament\Actions\Cheerful\EditAction;
use App\Models\StudyGroup;
use Filament\Support\Enums\Width;
use Filament\Support\Icons\Heroicon;
class EditStudyGroupAction extends EditAction
{
@ -17,7 +18,13 @@ protected function setUp(): void
{
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}")
->modalSubmitActionLabel('Simpan')
->modalCancelActionLabel('Batal')

View File

@ -89,13 +89,13 @@ protected function getHeaderActions(): array
];
}
protected function editStudyGroupAction(): Action
public function editStudyGroupAction(): Action
{
return EditStudyGroupAction::make()
->visible(fn () => auth()->user()->can('Update:StudyGroup'));
}
protected function deleteStudyGroupAction(): Action
public function deleteStudyGroupAction(): Action
{
return DeleteStudyGroupAction::make()
->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 @class([
'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"
wire:click="mountAction('editStudyGroup', { record: {{ $record->id }} })">
<x-heroicon-m-pencil-square class="w-4 h-4" />
</x-filament::button>
@canAny(['Update:StudyGroup', 'Delete:StudyGroup'])
<div @class([
'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,
])>
{{ ($this->editStudyGroupAction)(['studyGroup' => $record->id]) }}
<x-filament::button size="xs" color="danger" tooltip="Hapus"
class="rounded-lg shadow-sm"
wire:click="mountAction('deleteStudyGroup', { record: {{ $record->id }} })">
<x-heroicon-m-trash class="w-4 h-4" />
</x-filament::button>
</div>
{{ ($this->deleteStudyGroupAction)(['studyGroup' => $record->id]) }}
</div>
@endcanAny
</div>
</div>
@endforeach