From b522b4ff6f8970e17659dafd4ab848a9cf33f07e Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 19 Jan 2026 10:34:07 +0700 Subject: [PATCH] feat: Implement CheerfulNotification for login, registration, and email verification processes to enhance user experience and feedback. --- app/Filament/Pages/Auth/EmailVerification.php | 70 +++++++++++++++++++ app/Filament/Pages/Auth/Login.php | 20 +++--- app/Filament/Pages/Auth/Registration.php | 4 +- .../Filament/DashboardPanelProvider.php | 3 +- 4 files changed, 83 insertions(+), 14 deletions(-) create mode 100644 app/Filament/Pages/Auth/EmailVerification.php diff --git a/app/Filament/Pages/Auth/EmailVerification.php b/app/Filament/Pages/Auth/EmailVerification.php new file mode 100644 index 0000000..87cbd7d --- /dev/null +++ b/app/Filament/Pages/Auth/EmailVerification.php @@ -0,0 +1,70 @@ +rateLimit(2); + // } catch (TooManyRequestsException $exception) { + // $this->getRateLimitedNotification($exception)?->send(); + + // return; + // } + + // if (! $user->hasVerifiedEmail()) { + // $user->sendEmailVerificationNotification(); + + // CheerfulNotification::success( + // 'Mail Meluncur! 📧🚀', + // 'Tautan verifikasi baru sudah dikirim ke alamat surelmu. Cek inbox (atau spam) ya! 😉✨' + // )->send(); + // } else { + // CheerfulNotification::success( + // 'Sudah Aman Kok! ✅', + // 'Alamat surel sudah terverifikasi sebelumnya. Langsung lanjut aja! 🏎️💨' + // )->send(); + // } + // } + + public function resendNotificationAction(): Action + { + return Action::make('resendNotification') + ->link() + ->label(__('filament-panels::auth/pages/email-verification/email-verification-prompt.actions.resend_notification.label').'.') + ->size('sm') + ->action(function (): void { + try { + $this->rateLimit(2); + } catch (TooManyRequestsException $exception) { + $this->getRateLimitedNotification($exception)?->send(); + + return; + } + + $this->sendEmailVerificationNotification($this->getVerifiable()); + + CheerfulNotification::success( + 'Mail Meluncur! 📧🚀', + 'Tautan verifikasi baru sudah dikirim ke alamat surelmu. Cek inbox (atau spam) ya! 😉✨' + )->send(); + }); + } + + protected function getRateLimitedNotification(TooManyRequestsException $exception): ?Notification + { + return CheerfulNotification::danger( + 'Pelan-pelan ya ⏳', + 'Permintaan terlalu sering. Tunggu sebentar lalu coba lagi dalam '.$exception->secondsUntilAvailable.' detik.' + )->send(); + } +} diff --git a/app/Filament/Pages/Auth/Login.php b/app/Filament/Pages/Auth/Login.php index 8007a43..6c6d64f 100644 --- a/app/Filament/Pages/Auth/Login.php +++ b/app/Filament/Pages/Auth/Login.php @@ -2,6 +2,7 @@ namespace App\Filament\Pages\Auth; +use App\Filament\Support\CheerfulNotification; use DanHarrin\LivewireRateLimiting\Exceptions\TooManyRequestsException; use Filament\Auth\Http\Responses\Contracts\LoginResponse; use Filament\Auth\MultiFactor\Contracts\HasBeforeChallengeHook; @@ -9,7 +10,6 @@ use Filament\Facades\Filament; use Filament\Forms\Components\TextInput; use Filament\Models\Contracts\FilamentUser; -use Filament\Notifications\Notification; use Filament\Schemas\Schema; use Illuminate\Auth\SessionGuard; use Illuminate\Contracts\Auth\Authenticatable; @@ -131,22 +131,20 @@ public function authenticate(): ?LoginResponse session()->regenerate(); - Notification::make() - ->title('Berhasil Masuk') - ->body('Selamat datang, '.$user->name.'!') - ->success() - ->send(); + CheerfulNotification::success( + 'Hore! Berhasil Masuk 🎉', + 'Selamat datang kembali, '.$user->name.'! Siap untuk beraksi hari ini? 🚀✨' + )->send(); return app(LoginResponse::class); } protected function throwFailureValidationException(): never { - Notification::make() - ->title('Gagal Masuk') - ->body('Alamat surel, nama pengguna atau kata sandi salah. Silakan coba lagi.') - ->danger() - ->send(); + CheerfulNotification::danger( + 'Ups! Gagal Masuk 😅', + 'Sepertinya ada yang salah nih. Coba cek email atau kata sandi mu lagi ya! 🤔🔐' + )->send(); throw ValidationException::withMessages([]); } diff --git a/app/Filament/Pages/Auth/Registration.php b/app/Filament/Pages/Auth/Registration.php index b9708e1..3e0a879 100644 --- a/app/Filament/Pages/Auth/Registration.php +++ b/app/Filament/Pages/Auth/Registration.php @@ -72,8 +72,8 @@ protected function handleRegistration(array $data): Model $user->assignRole('Perusahaan'); CheerfulNotification::success( - 'Warga Baru Nih! 👋🎉', - "{$user->name} baru saja mendaftar. Yuk cek kelengkapannya! 🚀" + 'Selamat Datang! 👋🎉', + "Halooo, {$user->name}!, terima kasih sudah bergabung! Akunmu berhasil dibuat. Silakan verifikasi alamat surelmu! 🚀✨" ) ->send(); diff --git a/app/Providers/Filament/DashboardPanelProvider.php b/app/Providers/Filament/DashboardPanelProvider.php index 6134c95..bb948c2 100644 --- a/app/Providers/Filament/DashboardPanelProvider.php +++ b/app/Providers/Filament/DashboardPanelProvider.php @@ -2,6 +2,7 @@ namespace App\Providers\Filament; +use App\Filament\Pages\Auth\EmailVerification; use App\Filament\Pages\Auth\Login; use App\Filament\Pages\Auth\Registration; use BezhanSalleh\FilamentShield\FilamentShieldPlugin; @@ -49,7 +50,7 @@ public function panel(Panel $panel): Panel ->path('dashboard') ->login(Login::class) ->registration(Registration::class) - ->emailVerification() + ->emailVerification(EmailVerification::class) ->colors([ 'primary' => Color::Blue, ])