feat: Add reusable Filament actions, bulk actions, and timestamp columns with custom cheerful notifications.

This commit is contained in:
Yoga Pangestu 2026-02-09 08:45:47 +07:00
parent 7a70ef7d74
commit 78e8de28d7
9 changed files with 181 additions and 1 deletions

View File

@ -0,0 +1,22 @@
<?php
namespace App\Filament\Actions;
use Filament\Actions\Action;
class BackAction extends Action
{
public static function getDefaultName(): ?string
{
return 'back';
}
protected function setUp(): void
{
parent::setUp();
$this->label('Kembali')
->color('secondary')
->outlined();
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Filament\Actions\Cheerful;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\CreateAction as ActionsCreateAction;
class CreateAction extends ActionsCreateAction
{
protected function setUp(): void
{
parent::setUp();
$this->successNotification(
CheerfulNotification::create()
);
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Filament\Actions\Cheerful;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\DeleteAction as ActionsDeleteAction;
class DeleteAction extends ActionsDeleteAction
{
protected function setUp(): void
{
parent::setUp();
$this->successNotification(
CheerfulNotification::delete()
);
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Filament\Actions\Cheerful;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\EditAction as ActionsEditAction;
class EditAction extends ActionsEditAction
{
protected function setUp(): void
{
parent::setUp();
$this->successNotification(
CheerfulNotification::update()
);
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Filament\Actions\Cheerful;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\ForceDeleteAction as ActionsForceDeleteAction;
class ForceDeleteAction extends ActionsForceDeleteAction
{
protected function setUp(): void
{
parent::setUp();
$this->successNotification(
CheerfulNotification::forceDelete()
);
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Filament\Actions\Cheerful;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\RestoreAction as ActionsRestoreAction;
class RestoreAction extends ActionsRestoreAction
{
protected function setUp(): void
{
parent::setUp();
$this->successNotification(
CheerfulNotification::restore()
);
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Filament\Actions;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreBulkAction;
class DefaultBulkActions
{
public static function make(string $entity): array
{
return [
DeleteBulkAction::make()
->modalHeading("Hapus {$entity} yang dipilih")
->successNotification(
CheerfulNotification::bulkDelete()
),
ForceDeleteBulkAction::make()
->modalHeading("Hapus {$entity} yang dipilih")
->successNotification(
CheerfulNotification::bulkForceDelete()
),
RestoreBulkAction::make()
->modalHeading("Pulihkan {$entity} yang dipilih")
->successNotification(
CheerfulNotification::bulkRestore()
),
];
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Filament\Columns;
use Filament\Tables\Columns\TextColumn;
class TimestampColumns
{
public static function make(): array
{
return [
TextColumn::make('created_at')
->label('Dibuat')
->sortable()
->toggleable(isToggledHiddenByDefault: true)
->dateTime('l, d F Y H:i:s')
->wrap(),
TextColumn::make('updated_at')
->label('Diperbarui')
->sortable()
->toggleable(isToggledHiddenByDefault: true)
->dateTime('l, d F Y H:i:s')
->wrap(),
TextColumn::make('deleted_at')
->label('Dihapus')
->sortable()
->toggleable(isToggledHiddenByDefault: true)
->dateTime('l, d F Y H:i:s')
->wrap(),
];
}
}

View File

@ -136,7 +136,7 @@ public function authenticate(): ?LoginResponse
CheerfulNotification::success(
'Hore! Berhasil Masuk 🎉',
'Selamat datang kembali, ' . $user->name . '! Siap untuk beraksi hari ini? 🚀✨'
'Selamat datang kembali, '.$user->name.'! Siap untuk beraksi hari ini? 🚀✨'
)->send();
return app(LoginResponse::class);