refactor: Update modal headings and descriptions for clarity, enhance date formatting, and improve user notifications in verification processes.

This commit is contained in:
Yoga Pangestu 2026-01-19 09:40:46 +07:00
parent 87b0275151
commit 6574684f46
6 changed files with 24 additions and 33 deletions

View File

@ -5,6 +5,7 @@
use App\Enums\DecisionAdmin;
use App\Enums\VerificationStatus;
use App\Filament\Resources\Manage\Partners\Pages\ViewPartner;
use App\Filament\Support\CheerfulNotification;
use App\Models\User;
use App\Models\VerificationRequest;
use App\Notifications\BroadcastNotification;
@ -161,8 +162,8 @@ public function approveAction(): Action
->icon('heroicon-o-check')
->size('sm')
->requiresConfirmation()
->modalHeading('Setujui Verifikasi Lengkap')
->modalDescription('Apakah Anda yakin ingin menyetujui verifikasi ini? Status akan diterapkan pada Perusahaan, Media, dan semua Jurnalis sekaligus.')
->modalHeading('Setujui Verifikasi')
->modalDescription('Apakah Anda yakin ingin menyetujui verifikasi ini? Pastikan data sudah benar dan lengkap.')
->modalSubmitActionLabel('Ya, Setujui')
->action(function (array $arguments, array $data): void {
$this->processReview($arguments['id'], DecisionAdmin::APPROVED, $data['note'] ?? null);
@ -180,13 +181,12 @@ public function revisionAction(): Action
->icon('heroicon-o-pencil-square')
->size('sm')
->modalHeading('Minta Revisi')
->modalDescription('User akan diminta untuk memperbaiki data sesuai catatan yang diberikan.')
->modalDescription('Pengguna akan diminta untuk memperbaiki data sesuai catatan yang diberikan.')
->schema([
Textarea::make('note')
->label('Catatan Revisi')
->required()
->placeholder('Jelaskan bagian yang perlu diperbaiki (Perusahaan, Media, atau Jurnalis)...')
->helperText('Catatan ini akan ditampilkan kepada user.')
->autocomplete(false)
->autofocus(),
])
@ -206,15 +206,14 @@ public function rejectAction(): Action
->icon('heroicon-o-x-mark')
->size('sm')
->requiresConfirmation()
->modalHeading('Tolak Verifikasi Lengkap')
->modalDescription('Pengajuan akan ditolak secara permanen. Status REJECTED akan diterapkan pada Perusahaan, Media, dan semua Jurnalis. User tidak dapat mengajukan ulang untuk data ini.')
->modalHeading('Tolak Verifikasi')
->modalDescription('Pengajuan akan ditolak secara permanen. Pengguna tidak dapat mengajukan ulang untuk data ini.')
->modalSubmitActionLabel('Ya, Tolak')
->schema([
Textarea::make('note')
->label('Alasan Penolakan')
->required()
->placeholder('Jelaskan alasan pengajuan ditolak...')
->helperText('Alasan ini akan ditampilkan kepada user.')
->autocomplete(false)
->autofocus(),
])
@ -249,16 +248,10 @@ protected function processReview(int $requestId, DecisionAdmin $decision, ?strin
DecisionAdmin::REJECTED => 'ditolak',
};
$color = match ($decision) {
DecisionAdmin::APPROVED => 'success',
DecisionAdmin::NEED_REVISION => 'info',
DecisionAdmin::REJECTED => 'danger',
};
Notification::make()
->title('Berhasil Diproses! ✨')
->body("Mantap! Verifikasi telah {$actionLabel} dan notifikasi sudah dikirim ke user. Kerja bagus, Admin! 💪")
->color($color)
CheerfulNotification::success(
'Berhasil Diproses! ✨',
"Mantap! Verifikasi telah {$actionLabel} dan notifikasi sudah dikirim ke user. Kerja bagus, Admin! 💪"
)
->send();
// Notify User
@ -271,7 +264,7 @@ protected function processReview(int $requestId, DecisionAdmin $decision, ?strin
};
$body = match ($decision) {
DecisionAdmin::APPROVED => 'Yeay! Pengajuan verifikasi perusahaan Anda telah disetujui. Sekarang Anda sudah resmi terverifikasi! 🎊',
DecisionAdmin::APPROVED => 'Yeay! Pengajuan verifikasi perusahaan Anda telah disetujui. Sekarang Anda sudah resmi terverifikasi dan bekerja sama dengan kami! 🎊',
DecisionAdmin::NEED_REVISION => 'Ayo sedikit lagi! Admin meminta beberapa perbaikan pada pengajuan Anda agar bisa segera disetujui. 💪',
DecisionAdmin::REJECTED => 'Yah, maaf banget... pengajuan verifikasi perusahaan Anda belum bisa kami terima saat ini. 💔',
};

View File

@ -77,7 +77,7 @@ public function getVerificationProgress(): array
// Add additional data for view
$progress['missingDataButtons'] = $this->verificationService->getMissingDataButtons($this->company);
$progress['alert'] = $this->verificationService->getAlertData($this->verificationRequest);
$progress['lastSubmittedAt'] = $this->verificationRequest?->updated_at?->format('d M Y, H:i');
$progress['lastSubmittedAt'] = $this->verificationRequest?->updated_at?->translatedFormat('l, d M Y H:i');
return $progress;
}
@ -96,13 +96,13 @@ public function submitVerificationAction(): Action
->icon('heroicon-o-paper-airplane')
->color('primary')
->requiresConfirmation()
->modalHeading('Ajukan Verifikasi Lengkap')
->modalHeading('Ajukan Verifikasi')
->modalDescription(function () use ($progress): string {
if (! $progress['isDataComplete']) {
return 'Data belum lengkap. Silakan lengkapi terlebih dahulu: '.implode(', ', $progress['missingData']);
}
return 'Apakah Anda yakin ingin mengajukan verifikasi untuk Perusahaan, Media, dan Jurnalis? Pastikan semua data sudah benar dan lengkap.';
return 'Apakah Anda yakin ingin mengajukan verifikasi? Pastikan semua data sudah benar dan lengkap.';
})
->modalSubmitActionLabel('Ya, Ajukan')
->visible(fn (): bool => $progress['canSubmit'])

View File

@ -335,7 +335,7 @@ public function getAlertData(?VerificationRequest $verificationRequest): ?array
'type' => 'approved',
'icon' => 'check-circle',
'title' => 'Verifikasi Diterima',
'message' => 'Verifikasi lengkap Anda telah diterima dan disetujui oleh admin. Seluruh data (Perusahaan, Media, dan Jurnalis) telah terverifikasi.',
'message' => 'Verifikasi Anda telah diterima dan disetujui oleh admin. Sekarang Anda sudah resmi terverifikasi dan bekerja sama dengan kami!',
'color' => 'success',
];
}

View File

@ -28,7 +28,7 @@ public function definition(): array
'email' => fake()->unique()->safeEmail(),
'username' => $this->faker->unique()->bothify('?????#####'),
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'password' => static::$password ??= Hash::make(config('auth.password_default')),
'remember_token' => Str::random(10),
];
}

View File

@ -113,9 +113,6 @@
title="{{ $card['companyName'] }}">
{{ $card['companyName'] }}
</h3>
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">
Perusahaan, Media & Jurnalis
</p>
</div>
{{-- Status Badge --}}
@ -194,17 +191,18 @@ class="w-10 h-10 rounded-full bg-primary-100 dark:bg-primary-500/20 flex items-c
<div>
<p class="text-xs text-gray-500 dark:text-gray-400 uppercase font-semibold">Diajukan</p>
<p class="text-gray-700 dark:text-gray-300">
{{ $verification->created_at->format('d M Y') }}
{{ $verification->created_at->translatedFormat('l, d M Y H:i') }}
</p>
<p class="text-xs text-gray-500">
{{ $verification->created_at->format('H:i') }}
{{ $verification->created_at->diffForHumans() }}
</p>
</div>
<div>
<p class="text-xs text-gray-500 dark:text-gray-400 uppercase font-semibold">Update Terakhir
<p class="text-xs text-gray-500 dark:text-gray-400 uppercase font-semibold">Pembaruan
Terakhir
</p>
<p class="text-gray-700 dark:text-gray-300">
{{ $verification->updated_at->format('d M Y') }}
{{ $verification->updated_at->translatedFormat('l, d M Y H:i') }}
</p>
<p class="text-xs text-gray-500">
{{ $verification->updated_at->diffForHumans() }}
@ -284,7 +282,7 @@ class="w-4 h-4 text-gray-500 transition-transform duration-200"
@endif
</div>
<div class="shrink-0 text-xs text-gray-400">
{{ $review->created_at->format('d M Y, H:i') }}
{{ $review->created_at->translatedFormat('l, d M Y H:i') }}
</div>
</div>
</div>
@ -314,7 +312,7 @@ class="w-4 h-4 text-gray-500 transition-transform duration-200"
<span
class="flex items-center gap-1 text-xs text-warning-600 dark:text-warning-400 font-medium italic">
<x-heroicon-s-clock class="w-3 h-3 animate-pulse" />
Menunggu revisi dari user...
Menunggu revisi dari pengguna...
</span>
@elseif($card['isApproved'])
<span

View File

@ -173,7 +173,7 @@ class="w-full flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-800
@endif
</div>
<div class="shrink-0 text-xs text-gray-400">
{{ $review->created_at->format('d M Y, H:i') }}
{{ $review->created_at->translatedFormat('l, d M Y H:i') }}
</div>
</div>
</div>