refactor: centralize cheerful notifications and cleanup auth calls

- Introduce `CheerfulNotification` utility class to standardize cheerful and expressive notifications across the application.
- Refactor custom "Cheerful" actions (Create, Edit, Delete, etc.) and `DefaultBulkActions` to utilize the new utility class.
- Update all `ToggleColumn` status updates in Master Data modules to use `CheerfulNotification::statusUpdated()`.
- Replace inline `Notification::make()` calls in custom actions (Reply, Crawl News, Cooperation actions) and Resource Pages with `CheerfulNotification` methods.
- Address various lint errors by standardizing the use of the `Auth` facade and improving type hinting for the authenticated `User` model.
This commit is contained in:
Yoga Pangestu 2026-01-14 09:54:46 +07:00
parent ab318a030b
commit 2983cd243f
54 changed files with 552 additions and 149 deletions

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

@ -2,6 +2,7 @@
namespace App\Filament\Actions;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreBulkAction;
@ -12,13 +13,22 @@ public static function make(string $entity): array
{
return [
DeleteBulkAction::make()
->modalHeading("Hapus {$entity} yang dipilih"),
->modalHeading("Hapus {$entity} yang dipilih")
->successNotification(
CheerfulNotification::bulkDelete()
),
ForceDeleteBulkAction::make()
->modalHeading("Hapus {$entity} yang dipilih"),
->modalHeading("Hapus {$entity} yang dipilih")
->successNotification(
CheerfulNotification::bulkForceDelete()
),
RestoreBulkAction::make()
->modalHeading("Pulihkan {$entity} yang dipilih"),
->modalHeading("Pulihkan {$entity} yang dipilih")
->successNotification(
CheerfulNotification::bulkRestore()
),
];
}
}

View File

@ -4,6 +4,7 @@
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Resources\Manage\Contacts\Pages\ManageContacts;
use App\Filament\Support\CheerfulNotification;
use App\Mail\ContactReplyMail;
use App\Models\Contact;
use BackedEnum;
@ -13,7 +14,6 @@
use Filament\Actions\ViewAction;
use Filament\Forms\Components\Textarea;
use Filament\Infolists\Components\TextEntry;
use Filament\Notifications\Notification;
use Filament\Resources\Resource;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Section;
@ -22,6 +22,7 @@
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use UnitEnum;
@ -169,13 +170,13 @@ public static function table(Table $table): Table
$record->update([
'reply_message' => $data['reply_message'],
'replied_at' => now(),
'replied_by' => auth()->id(),
'replied_by' => Auth::id(),
]);
Notification::make()
->title('Balasan terkirim')
->success()
->send();
CheerfulNotification::success(
'Balasan Terkirim! 🚀✉️',
'Pesan balasan Anda sudah meluncur ke email pengirim. Semoga membantu mereka ya! 😊'
)->send();
})
->visible(fn (Contact $record): bool => $record->replied_at === null),

View File

@ -4,13 +4,14 @@
use App\Enums\ApprovalStatus;
use App\Filament\Resources\Manage\Cooperations\CooperationResource;
use App\Filament\Support\CheerfulNotification;
use App\Models\Cooperation;
use App\Models\User;
use App\Notifications\BroadcastNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Support\Icons\Heroicon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Auth;
class AcceptAction extends Action
{
@ -25,7 +26,7 @@ protected function setUp(): void
$cooperationMedia = $record->cooperationMedia()
->whereHas('partnerMedia', function (Builder $query): void {
$query->whereHas('company', function (Builder $subQuery): void {
$subQuery->where('user_id', auth()->id());
$subQuery->where('user_id', Auth::id());
});
})
->first();
@ -33,11 +34,10 @@ protected function setUp(): void
if ($cooperationMedia) {
$cooperationMedia->update(['status' => ApprovalStatus::ACCEPTED]);
Notification::make()
->title('Berhasil Diterima! ✅✨')
->body('Mantap! Anda telah menerima penawaran kerja sama ini. Silakan lanjut ke tahap pengajuan proposal ya! 💪')
->success()
->send();
CheerfulNotification::success(
'Berhasil Diterima! ✅✨',
'Mantap! Anda telah menerima penawaran kerja sama ini. Silakan lanjut ke tahap pengajuan proposal ya! 💪'
)->send();
// Notify Admins
User::superAdmin()
@ -56,7 +56,8 @@ protected function setUp(): void
}
})
->visible(function (Cooperation $record): bool {
$user = auth()->user();
/** @var \App\Models\User $user */
$user = Auth::user();
if (! $user || ! $user->hasRole('Perusahaan')) {
return false;
@ -65,7 +66,7 @@ protected function setUp(): void
$cooperationMedia = $record->cooperationMedia()
->whereHas('partnerMedia', function (Builder $query): void {
$query->whereHas('company', function (Builder $subQuery): void {
$subQuery->where('user_id', auth()->id());
$subQuery->where('user_id', Auth::id());
});
})
->first();

View File

@ -5,15 +5,16 @@
use App\Enums\ApprovalStatus;
use App\Enums\CooperationStatus;
use App\Filament\Resources\Manage\Cooperations\CooperationResource;
use App\Filament\Support\CheerfulNotification;
use App\Models\Cooperation;
use App\Notifications\BroadcastNotification;
use Filament\Actions\Action;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\Width;
use Filament\Support\Icons\Heroicon;
use Illuminate\Support\Facades\Auth;
class CreateTaskAssignmentAction extends Action
{
@ -94,16 +95,16 @@ protected function setUp(): void
}
}
Notification::make()
->title('Penugasan Berhasil Dibuat! 🚀✨')
->body('Mantap! Penugasan telah dibuat dan semua media terkait sudah diberi tahu. Mari kita pantau progresnya! 💪')
->success()
->send();
CheerfulNotification::success(
'Penugasan Berhasil Dibuat! 🚀✨',
'Mantap! Penugasan telah dibuat dan semua media terkait sudah diberi tahu. Mari kita pantau progresnya! 💪'
)->send();
})
->modalHeading('Buat Penugasan')
->modalSubmitActionLabel('Simpan')
->visible(function (Cooperation $record): bool {
$user = auth()->user();
/** @var \App\Models\User $user */
$user = Auth::user();
return $user && ! $user->hasRole('Perusahaan')
&& ! $record->taskAssignments()->exists()

View File

@ -3,12 +3,13 @@
namespace App\Filament\Resources\Manage\Cooperations\Actions\Cooperation;
use App\Enums\ApprovalStatus;
use App\Filament\Support\CheerfulNotification;
use App\Models\Cooperation;
use App\Models\User;
use App\Notifications\BroadcastNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Support\Icons\Heroicon;
use Illuminate\Support\Facades\Auth;
class RejectAction extends Action
{
@ -23,7 +24,7 @@ protected function setUp(): void
$cooperationMedia = $record->cooperationMedia()
->whereHas('partnerMedia', function ($query) {
$query->whereHas('company', function ($subQuery) {
$subQuery->where('user_id', auth()->id());
$subQuery->where('user_id', Auth::id());
});
})
->first();
@ -31,11 +32,10 @@ protected function setUp(): void
if ($cooperationMedia) {
$cooperationMedia->update(['status' => ApprovalStatus::REJECTED]);
Notification::make()
->title('Berhasil Ditolak 🙏')
->body('Terima kasih atas konfirmasinya. Pesan penolakan telah diteruskan ke Admin. 😊')
->info()
->send();
CheerfulNotification::info(
'Berhasil Ditolak 🙏',
'Terima kasih atas konfirmasinya. Pesan penolakan telah diteruskan ke Admin. 😊'
)->send();
// Notify Admins
User::superAdmin()
@ -49,16 +49,17 @@ protected function setUp(): void
}
})
->visible(function (Cooperation $record): bool {
$user = auth()->user();
/** @var \App\Models\User $user */
$user = Auth::user();
if (! $user->hasRole('Perusahaan')) {
if (! $user || ! $user->hasRole('Perusahaan')) {
return false;
}
$cooperationMedia = $record->cooperationMedia()
->whereHas('partnerMedia', function ($query) {
$query->whereHas('company', function ($subQuery) {
$subQuery->where('user_id', auth()->id());
$subQuery->where('user_id', Auth::id());
});
})
->first();

View File

@ -4,6 +4,7 @@
use App\Enums\ApprovalStatus;
use App\Filament\Resources\Manage\Cooperations\CooperationResource;
use App\Filament\Support\CheerfulNotification;
use App\Models\Cooperation;
use App\Models\User;
use App\Notifications\BroadcastNotification;
@ -11,10 +12,10 @@
use Filament\Actions\Action;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\Width;
use Filament\Support\Icons\Heroicon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
class SendProposalAction extends Action
@ -54,7 +55,7 @@ protected function setUp(): void
$cooperationMedia = $record->cooperationMedia()
->whereHas('partnerMedia', function (Builder $query): void {
$query->whereHas('company', function (Builder $subQuery): void {
$subQuery->where('user_id', auth()->id());
$subQuery->where('user_id', Auth::id());
});
})
->first();
@ -89,17 +90,17 @@ protected function setUp(): void
}
}
Notification::make()
->title('Berhasil Diajukan! 🚀')
->body('Yeay! Proposal kerja sama Anda sudah terkirim ke Admin. Mohon ditunggu ya, semoga hasilnya memuaskan! ✨')
->success()
->send();
CheerfulNotification::success(
'Berhasil Diajukan! 🚀',
'Yeay! Proposal kerja sama Anda sudah terkirim ke Admin. Mohon ditunggu ya, semoga hasilnya memuaskan! ✨'
)->send();
// Notify Admin
User::superAdmin()
->get()
->each(function ($admin) use ($isRevision, $record, $cooperationMedia): void {
$user = auth()->user();
/** @var \App\Models\User $user */
$user = Auth::user();
$admin->notify(new BroadcastNotification([
'title' => $isRevision ? 'Pembaruan Proposal Kerja Sama ✨' : 'Ada Proposal Kerja Sama Baru! 🚀',
'body' => $isRevision
@ -117,7 +118,8 @@ protected function setUp(): void
->modalHeading('Proposal Kerja Sama')
->modalSubmitActionLabel('Kirim Proposal')
->visible(function (Cooperation $record): bool {
$user = auth()->user();
/** @var \App\Models\User $user */
$user = Auth::user();
if (! $user->hasRole('Perusahaan')) {
return false;
@ -126,7 +128,7 @@ protected function setUp(): void
$cooperationMedia = $record->cooperationMedia()
->whereHas('partnerMedia', function (Builder $query): void {
$query->whereHas('company', function (Builder $subQuery): void {
$subQuery->where('user_id', auth()->id());
$subQuery->where('user_id', Auth::id());
});
})
->first();

View File

@ -3,8 +3,10 @@
namespace App\Filament\Resources\Manage\Cooperations\Pages;
use App\Filament\Resources\Manage\Cooperations\CooperationResource;
use App\Filament\Support\CheerfulNotification;
use App\Notifications\BroadcastNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Support\Facades\Storage;
@ -25,6 +27,11 @@ protected function getHeaderActions(): array
];
}
protected function getCreatedNotification(): ?Notification
{
return CheerfulNotification::create();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -3,8 +3,10 @@
namespace App\Filament\Resources\Manage\Cooperations\Pages;
use App\Filament\Resources\Manage\Cooperations\CooperationResource;
use App\Filament\Support\CheerfulNotification;
use App\Models\Cooperation;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Support\Facades\Storage;
@ -42,6 +44,11 @@ protected function getHeaderActions(): array
];
}
protected function getSavedNotification(): ?Notification
{
return CheerfulNotification::update();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -10,6 +10,7 @@
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\ViewAction;
use Filament\Infolists\Components\TextEntry;
use Filament\Notifications\Notification;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Schema;
@ -71,7 +72,13 @@ public function table(Table $table): Table
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
DeleteBulkAction::make()
->successNotification(
Notification::make()
->title('Proposal Dihapus! 🗑️')
->body('Semua proposal yang dipilih telah berhasil dihapus. 👋')
->success()
),
]),
]);
}

View File

@ -6,6 +6,7 @@
use App\Filament\Resources\Manage\Cooperations\Actions\Report\AcceptAction;
use App\Filament\Resources\Manage\Cooperations\Actions\Report\RejectAction;
use App\Filament\Resources\Manage\Cooperations\CooperationResource;
use App\Filament\Support\CheerfulNotification;
use App\Models\Report;
use App\Models\User;
use App\Notifications\BroadcastNotification;
@ -15,13 +16,13 @@
use Filament\Forms\Components\SpatieMediaLibraryFileUpload;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Schemas\Schema;
use Filament\Support\Enums\Width;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
class ReportRelationManager extends RelationManager
{
@ -127,17 +128,17 @@ public function table(Table $table): Table
return $data;
})
->after(function (Report $record): void {
Notification::make()
->title('Laporan Berhasil Terkirim! 🚀✨')
->body('Hore! Laporan Anda sudah masuk ke sistem. Admin akan segera memeriksanya. Terima kasih atas kerja kerasnya! 💪')
->success()
->send();
CheerfulNotification::success(
'Laporan Berhasil Terkirim! 🚀✨',
'Hore! Laporan Anda sudah masuk ke sistem. Admin akan segera memeriksanya. Terima kasih atas kerja kerasnya! 💪'
)->send();
// Notify Admins
User::superAdmin()
->get()
->each(function ($admin) use ($record): void {
$user = auth()->user();
/** @var \App\Models\User $user */
$user = Auth::user();
$admin->notify(new BroadcastNotification([
'title' => 'Ada Laporan Baru! 📝✨',
'body' => "Halo Admin! {$user->name} baru saja mengirimkan laporan \"{$record->title}\" untuk kerja sama \"{$this->getOwnerRecord()->title}\". Yuk, dicek! 😊",
@ -150,7 +151,8 @@ public function table(Table $table): Table
});
})
->visible(function (): bool {
$user = auth()->user();
/** @var \App\Models\User $user */
$user = Auth::user();
if (! $user || ! $user->hasRole('Perusahaan')) {
return false;

View File

@ -12,6 +12,7 @@
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
@ -107,16 +108,40 @@ public function table(Table $table): Table
$cooperation = $this->getOwnerRecord();
return $cooperation->proposals()->accepted()->exists();
}),
})
->successNotification(
Notification::make()
->title('Penugasan Dibuat! 🚀✨')
->body('Tugas baru berhasil ditetapkan. Media terkait akan segera mengetahuinya! 💪')
->success()
),
])
->recordActions([
EditAction::make(),
EditAction::make()
->successNotification(
Notification::make()
->title('Penugasan Diperbarui! ✅')
->body('Perubahan pada penugasan berhasil disimpan. 👍')
->success()
),
DeleteAction::make(),
DeleteAction::make()
->successNotification(
Notification::make()
->title('Penugasan Dihapus! 🗑️')
->body('Penugasan telah berhasil dihapus dari sistem. 👋')
->success()
),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
DeleteBulkAction::make()
->successNotification(
Notification::make()
->title('Banyak Penugasan Dihapus! 🗑️👋')
->body('Semua penugasan yang dipilih telah dihapus. 🧹')
->success()
),
]),
]);
}

View File

@ -3,7 +3,9 @@
namespace App\Filament\Resources\Manage\Journalists\Actions;
use App\Enums\VerificationStatus;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\DeleteAction;
use Illuminate\Support\Facades\Auth;
class DeleteJournalistAction extends DeleteAction
{
@ -11,8 +13,13 @@ protected function setUp(): void
{
parent::setUp();
$this->successNotification(
CheerfulNotification::delete()
);
$this->visible(function (): bool {
$user = auth()->user();
/** @var \App\Models\User $user */
$user = Auth::user();
if (! $user->hasRole('Perusahaan')) {
return true;

View File

@ -3,10 +3,12 @@
namespace App\Filament\Resources\Manage\Journalists\Actions;
use App\Enums\VerificationStatus;
use App\Filament\Support\CheerfulNotification;
use App\Models\Journalist;
use Filament\Actions\EditAction;
use Filament\Support\Enums\Width;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
class EditJournalistAction extends EditAction
@ -15,6 +17,10 @@ protected function setUp(): void
{
parent::setUp();
$this->successNotification(
CheerfulNotification::update()
);
$this->modalWidth(Width::Large)
->fillForm(function (Journalist $journalist): array {
$data = [
@ -89,7 +95,7 @@ protected function setUp(): void
})
->visible(function (): bool {
/** @var \App\Models\User $user */
$user = auth()->user();
$user = Auth::user();
if (! $user->hasRole('Perusahaan')) {
return true;

View File

@ -2,6 +2,8 @@
namespace App\Filament\Resources\Manage\Journalists;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Pages\Media;
use App\Filament\Resources\Manage\Journalists\Actions\DeleteJournalistAction;
@ -13,9 +15,7 @@
use Filament\Actions\Action;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreAction;
use Filament\Actions\RestoreBulkAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Manage\Journalists\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Manage\Journalists\JournalistResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;
use Illuminate\Database\Eloquent\Model;

View File

@ -2,14 +2,12 @@
namespace App\Filament\Resources\Manage\Partners;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Resources\Manage\Partners\Pages\ManagePartners;
use App\Filament\Resources\Manage\Partners\Pages\ViewPartner;
use App\Models\User;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreBulkAction;
use Filament\Actions\ViewAction;
use Filament\Infolists\Components\RepeatableEntry;
use Filament\Infolists\Components\TextEntry;
@ -315,11 +313,7 @@ public static function table(Table $table): Table
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
ForceDeleteBulkAction::make(),
RestoreBulkAction::make(),
...DefaultBulkActions::make('rekanan'),
]),
])
->emptyStateIcon(Heroicon::BuildingOffice2)

View File

@ -3,17 +3,15 @@
namespace App\Filament\Resources\Master\Categories;
use App\Enums\IsActive;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Master\Categories\Pages\ManageCategories;
use App\Filament\Support\CheerfulNotification;
use App\Models\Category;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Enums\Width;
@ -74,6 +72,8 @@ public static function table(Table $table): Table
->updateStateUsing(function (Category $record, bool $state): void {
$record->is_active = $state ? IsActive::ACTIVE : IsActive::INACTIVE;
$record->save();
CheerfulNotification::statusUpdated()->send();
}),
...TimestampColumns::make(),

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Master\Categories\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Master\Categories\CategoryResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -3,16 +3,17 @@
namespace App\Filament\Resources\Master\Classifications;
use App\Enums\IsActive;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Master\Classifications\Pages\ManageClassifications;
use App\Filament\Support\CheerfulNotification;
use App\Models\Classification;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
@ -74,6 +75,8 @@ public static function table(Table $table): Table
->updateStateUsing(function (Classification $record, bool $state): void {
$record->is_active = $state ? IsActive::ACTIVE : IsActive::INACTIVE;
$record->save();
CheerfulNotification::statusUpdated()->send();
}),
...TimestampColumns::make(),

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Master\Classifications\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Master\Classifications\ClassificationResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -3,16 +3,17 @@
namespace App\Filament\Resources\Master\Departments;
use App\Enums\IsActive;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Master\Departments\Pages\ManageDepartments;
use App\Filament\Support\CheerfulNotification;
use App\Models\Department;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
@ -84,6 +85,8 @@ public static function table(Table $table): Table
->updateStateUsing(function (Department $record, bool $state): void {
$record->is_active = $state ? IsActive::ACTIVE : IsActive::INACTIVE;
$record->save();
CheerfulNotification::statusUpdated()->send();
}),
...TimestampColumns::make(),

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Master\Departments\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Master\Departments\DepartmentResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -3,16 +3,17 @@
namespace App\Filament\Resources\Master\Locations;
use App\Enums\IsActive;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Master\Locations\Pages\ManageLocations;
use App\Filament\Support\CheerfulNotification;
use App\Models\Location;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
@ -74,6 +75,8 @@ public static function table(Table $table): Table
->updateStateUsing(function (Location $record, bool $state): void {
$record->is_active = $state ? IsActive::ACTIVE : IsActive::INACTIVE;
$record->save();
CheerfulNotification::statusUpdated()->send();
}),
...TimestampColumns::make(),

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Master\Locations\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Master\Locations\LocationResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Master\SubClassifications\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Master\SubClassifications\SubClassificationResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -3,6 +3,10 @@
namespace App\Filament\Resources\Master\SubClassifications;
use App\Enums\IsActive;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Master\SubClassifications\Pages\ManageSubClassifications;
@ -10,12 +14,9 @@
use App\Models\SubClassification;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Enums\Width;
@ -90,6 +91,12 @@ public static function table(Table $table): Table
->updateStateUsing(function (SubClassification $record, bool $state): void {
$record->is_active = $state ? IsActive::ACTIVE : IsActive::INACTIVE;
$record->save();
Notification::make()
->title('Status Berubah! 🔄✨')
->body('Status data berhasil diperbarui. Perubahan langsung aktif ya! 👍')
->success()
->send();
}),
...TimestampColumns::make(),

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Master\SubLocations\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Master\SubLocations\SubLocationResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -3,17 +3,18 @@
namespace App\Filament\Resources\Master\SubLocations;
use App\Enums\IsActive;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Master\SubLocations\Pages\ManageSubLocations;
use App\Filament\Support\CheerfulNotification;
use App\Models\Location;
use App\Models\SubLocation;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
@ -90,6 +91,8 @@ public static function table(Table $table): Table
->updateStateUsing(function (SubLocation $record, bool $state): void {
$record->is_active = $state ? IsActive::ACTIVE : IsActive::INACTIVE;
$record->save();
CheerfulNotification::statusUpdated()->send();
}),
...TimestampColumns::make(),

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Master\Themes\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Master\Themes\ThemeResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -3,16 +3,17 @@
namespace App\Filament\Resources\Master\Themes;
use App\Enums\IsActive;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Master\Themes\Pages\ManageThemes;
use App\Filament\Support\CheerfulNotification;
use App\Models\Theme;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
@ -74,6 +75,8 @@ public static function table(Table $table): Table
->updateStateUsing(function (Theme $record, bool $state): void {
$record->is_active = $state ? IsActive::ACTIVE : IsActive::INACTIVE;
$record->save();
CheerfulNotification::statusUpdated()->send();
}),
...TimestampColumns::make(),

View File

@ -2,8 +2,8 @@
namespace App\Filament\Resources\Master\Users\Pages;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Master\Users\UserResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -4,19 +4,20 @@
use App\Enums\IsActive;
use App\Enums\RoleEnum;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Master\Users\Pages\ManageUsers;
use App\Models\User;
use BackedEnum;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Enums\Width;
@ -127,6 +128,12 @@ public static function table(Table $table): Table
->where('user_id', $record->id)
->delete();
}
Notification::make()
->title($state ? 'Pengguna Diaktifkan! ✅' : 'Pengguna Dinonaktifkan ⛔')
->body($state ? 'Status akun pengguna berhasil diaktifkan kembali. Siap beraksi! 🚀' : 'Status akun pengguna berhasil dinonaktifkan. Istirahat dulu ya... 😴')
->success()
->send();
})
->disabled(fn (User $record): bool => $record->hasRole(RoleEnum::PERUSAHAAN->value)),

View File

@ -3,7 +3,9 @@
namespace App\Filament\Resources\Monitoring\ContentRecaps\Pages;
use App\Filament\Resources\Monitoring\ContentRecaps\ContentRecapResource;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
class CreateContentRecap extends CreateRecord
@ -23,6 +25,11 @@ protected function getHeaderActions(): array
];
}
protected function getCreatedNotification(): ?Notification
{
return CheerfulNotification::create();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -4,7 +4,9 @@
use App\Filament\Resources\Monitoring\ContentRecaps\ContentRecapResource;
use App\Filament\Resources\Monitoring\MediaMonitorings\Pages\ListMediaMonitorings;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
class EditContentRecap extends EditRecord
@ -22,6 +24,11 @@ protected function getHeaderActions(): array
];
}
protected function getSavedNotification(): ?Notification
{
return CheerfulNotification::update();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -2,13 +2,13 @@
namespace App\Filament\Resources\Monitoring\ContentRecaps\Tables;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\TrashedFilter;

View File

@ -3,7 +3,9 @@
namespace App\Filament\Resources\Monitoring\IssueManagements\Pages;
use App\Filament\Resources\Monitoring\IssueManagements\IssueManagementResource;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
class CreateIssueManagement extends CreateRecord
@ -23,6 +25,11 @@ protected function getHeaderActions(): array
];
}
protected function getCreatedNotification(): ?Notification
{
return CheerfulNotification::create();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -3,7 +3,9 @@
namespace App\Filament\Resources\Monitoring\IssueManagements\Pages;
use App\Filament\Resources\Monitoring\IssueManagements\IssueManagementResource;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
class EditIssueManagement extends EditRecord
@ -21,6 +23,11 @@ protected function getHeaderActions(): array
];
}
protected function getSavedNotification(): ?Notification
{
return CheerfulNotification::update();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -2,13 +2,13 @@
namespace App\Filament\Resources\Monitoring\IssueManagements\Tables;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\SelectFilter;

View File

@ -2,12 +2,12 @@
namespace App\Filament\Resources\Monitoring\MediaMonitorings\Actions;
use App\Filament\Support\CheerfulNotification;
use App\Models\Theme;
use App\Services\NewsCrawlerService;
use Filament\Actions\Action;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\Width;
use Filament\Support\Icons\Heroicon;
@ -48,17 +48,15 @@ protected function setUp(): void
$count = $service->crawlFromGoogleNews($data['keyword'], $data['limit'], (array) ($data['theme_id'] ?? []));
if ($count > 0) {
Notification::make()
->title('Crawl Selesai')
->body("Berhasil mengambil {$count} berita baru tentang '{$data['keyword']}' di Purwakarta.")
->success()
->send();
CheerfulNotification::success(
'Crawl Berhasil! 🕸️🚀',
"Mantap! Ada {$count} berita baru nih tentang '{$data['keyword']}' di Purwakarta. Databasenya makin kaya! 😎"
)->send();
} else {
Notification::make()
->title('Tidak Ada Berita Baru')
->body("Tidak ditemukan berita baru untuk '{$data['keyword']}' yang belum ada di database.")
->info()
->send();
CheerfulNotification::info(
'Belum Ada Berita Baru 🔍',
"Hmm, sepertinya belum ada update berita baru untuk '{$data['keyword']}'. Coba lagi nanti ya! 😉"
)->send();
}
})
->modalWidth(Width::Large);

View File

@ -3,8 +3,10 @@
namespace App\Filament\Resources\Monitoring\MediaMonitorings\Pages;
use App\Filament\Resources\Monitoring\MediaMonitorings\MediaMonitoringResource;
use App\Filament\Support\CheerfulNotification;
use App\Models\MediaMonitoring;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
class CreateMediaMonitoring extends CreateRecord
@ -24,6 +26,11 @@ protected function getHeaderActions(): array
];
}
protected function getCreatedNotification(): ?Notification
{
return CheerfulNotification::create();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -3,7 +3,9 @@
namespace App\Filament\Resources\Monitoring\MediaMonitorings\Pages;
use App\Filament\Resources\Monitoring\MediaMonitorings\MediaMonitoringResource;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
class EditMediaMonitoring extends EditRecord
@ -21,6 +23,11 @@ protected function getHeaderActions(): array
];
}
protected function getSavedNotification(): ?Notification
{
return CheerfulNotification::update();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -2,14 +2,14 @@
namespace App\Filament\Resources\Monitoring\MediaMonitorings\Tables;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Monitoring\MediaMonitorings\Actions\CrawlNewsAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\TrashedFilter;

View File

@ -3,6 +3,10 @@
namespace App\Filament\Resources\Publication\Announcements;
use App\Enums\AnnouncementType;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use App\Filament\Resources\Publication\Announcements\Pages\ManageAnnouncements;
@ -10,10 +14,6 @@
use BackedEnum;
use Filament\Actions\Action;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Radio;
use Filament\Forms\Components\RichEditor;

View File

@ -3,12 +3,12 @@
namespace App\Filament\Resources\Publication\Announcements\Pages;
use App\Enums\AnnouncementType;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Publication\Announcements\AnnouncementResource;
use App\Models\Company;
use App\Models\PartnerMedia;
use App\Models\User;
use App\Notifications\BroadcastNotification;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

View File

@ -3,9 +3,12 @@
namespace App\Filament\Resources\Publication\News\Pages;
use App\Filament\Resources\Publication\News\NewsResource;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
class CreateNews extends CreateRecord
{
@ -24,6 +27,11 @@ protected function getHeaderActions(): array
];
}
protected function getCreatedNotification(): ?Notification
{
return CheerfulNotification::create();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');
@ -31,7 +39,7 @@ protected function getRedirectUrl(): string
protected function handleRecordCreation(array $data): Model
{
$data['author_id'] = auth()->id();
$data['author_id'] = Auth::id();
return static::getModel()::create($data);
}

View File

@ -3,7 +3,9 @@
namespace App\Filament\Resources\Publication\News\Pages;
use App\Filament\Resources\Publication\News\NewsResource;
use App\Filament\Support\CheerfulNotification;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
class EditNews extends EditRecord
@ -21,6 +23,11 @@ protected function getHeaderActions(): array
];
}
protected function getSavedNotification(): ?Notification
{
return CheerfulNotification::update();
}
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');

View File

@ -72,8 +72,7 @@ public static function configure(Schema $schema): Schema
$component->state(
$record->tags->pluck('name')->toArray()
);
})
->autocomplete(false),
}),
Radio::make('status')
->label('Status')

View File

@ -2,13 +2,13 @@
namespace App\Filament\Resources\Publication\News\Tables;
use App\Filament\Actions\Cheerful\DeleteAction;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Actions\Cheerful\ForceDeleteAction;
use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\TrashedFilter;

View File

@ -0,0 +1,159 @@
<?php
namespace App\Filament\Support;
use Filament\Notifications\Notification;
class CheerfulNotification
{
/**
* Create a new notification instance.
*/
public static function make(): Notification
{
return Notification::make();
}
/**
* Notification for successful record creation.
*/
public static function create(): Notification
{
return self::make()
->title('Hore! Data Tersimpan 🎉✨')
->body('Data baru berhasil ditambahkan! Sistem sudah menyimpannya dengan aman. 🚀💪')
->success();
}
/**
* Notification for successful record update.
*/
public static function update(): Notification
{
return self::make()
->title('Mantap! Data Diperbarui ✅🔥')
->body('Perubahan berhasil disimpan! Data sekarang sudah up-to-date dan segar lagi. ✨👌')
->success();
}
/**
* Notification for successful record deletion (soft delete).
*/
public static function delete(): Notification
{
return self::make()
->title('Oke, Data Dihapus 🗑️👋')
->body('Data tersebut sudah berhasil dihapus dari sistem. Semuanya bersih dan rapi sekarang! 😊🚮')
->success();
}
/**
* Notification for successful permanent deletion.
*/
public static function forceDelete(): Notification
{
return self::make()
->title('Selamat Tinggal Selamanya 👋😢')
->body('Data telah dihapus permanen dan tidak bisa kembali. Semoga ini keputusan yang tepat! 🚮💨')
->success();
}
/**
* Notification for successful record restoration.
*/
public static function restore(): Notification
{
return self::make()
->title('Welcome Back! Data Pulih ♻️✨')
->body('Data berhasil dikembalikan! Hati-hati ya, jangan sampai terhapus lagi. 😉👍')
->success();
}
/**
* Notification for successful status change/toggle.
*/
public static function statusUpdated(?string $title = null, ?string $body = null): Notification
{
return self::make()
->title($title ?? 'Status Berubah! 🔄✨')
->body($body ?? 'Status data berhasil diperbarui. Perubahan langsung aktif ya! 👍')
->success();
}
/**
* Notification for successful bulk deletion.
*/
public static function bulkDelete(): Notification
{
return self::make()
->title('Oke, Banyak Data Dihapus 🗑️👋')
->body('Semua data yang dipilih berhasil dihapus. Sistem makin lega deh! 😊')
->success();
}
/**
* Notification for successful bulk permanent deletion.
*/
public static function bulkForceDelete(): Notification
{
return self::make()
->title('Bye Bye Semua! 👋🔥')
->body('Data yang dipilih sudah dihapus permanen. Bersih total! 🧹💨')
->success();
}
/**
* Notification for successful bulk restoration.
*/
public static function bulkRestore(): Notification
{
return self::make()
->title('Hore! Banyak Data Pulih ♻️🎉')
->body('Data-data tersebut sudah kembali aktif. Selamat bekerja kembali! 💪✨')
->success();
}
/**
* Custom cheerful success notification.
*/
public static function success(string $title, string $body): Notification
{
return self::make()
->title($title)
->body($body)
->success();
}
/**
* Custom cheerful info notification.
*/
public static function info(string $title, string $body): Notification
{
return self::make()
->title($title)
->body($body)
->info();
}
/**
* Custom cheerful warning notification.
*/
public static function warning(string $title, string $body): Notification
{
return self::make()
->title($title)
->body($body)
->warning();
}
/**
* Custom cheerful danger notification.
*/
public static function danger(string $title, string $body): Notification
{
return self::make()
->title($title)
->body($body)
->danger();
}
}