feat: enhance user experience with cheerful notification styles and improved messaging across various sections

This commit is contained in:
Yoga Pangestu 2026-03-30 19:39:57 +07:00
parent ae52c75bd3
commit bb8f41079f
15 changed files with 185 additions and 77 deletions

View File

@ -33,9 +33,9 @@ public function form(Schema $schema): Schema
{ {
return $schema return $schema
->components([ ->components([
Section::make('Akun') Section::make(SystemNotification::getMessage('Akun Pengguna 👤✨', 'Akun'))
->description('Kelola informasi detail akun Anda agar selalu terkini.') ->description(SystemNotification::getMessage('Kelola informasi detail akun Anda di sini ya biar nggak kudet! 😉🚀', 'Kelola informasi detail akun Anda agar selalu terkini.'))
->icon('heroicon-o-user') ->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-face-smile' : 'heroicon-o-user')
->schema([ ->schema([
Grid::make(2) Grid::make(2)
->schema([ ->schema([
@ -63,9 +63,9 @@ public function form(Schema $schema): Schema
]), ]),
]), ]),
Section::make('Informasi Mahasiswa') Section::make(SystemNotification::getMessage('Data Mahasiswa 🎓📚', 'Informasi Mahasiswa'))
->description('Pastikan data akademik Anda sesuai dengan record sistem.') ->description(SystemNotification::getMessage('Pastikan data akademikmu sesuai dengan yang di sistem, jangan sampai salah loh! 🤓📝', 'Pastikan data akademik Anda sesuai dengan record sistem.'))
->icon('heroicon-o-academic-cap') ->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-academic-cap' : 'heroicon-o-identification')
->statePath('student') ->statePath('student')
->schema([ ->schema([
TextInput::make('full_name') TextInput::make('full_name')
@ -132,9 +132,9 @@ public function form(Schema $schema): Schema
->columns(2) ->columns(2)
->visible(fn () => auth()->user()?->student()->exists()), ->visible(fn () => auth()->user()?->student()->exists()),
Section::make('Keamanan Akun') Section::make(SystemNotification::getMessage('Keamanan Akun 🔐⚡', 'Keamanan Akun'))
->description('Perbarui kata sandi Anda secara berkala untuk menjaga keamanan akun.') ->description(SystemNotification::getMessage('Rajin-rajin ganti password ya, biar akunmu aman dan nggak dibobol orang! 🕵️‍♂️🛡️', 'Perbarui kata sandi Anda secara berkala untuk menjaga keamanan akun.'))
->icon('heroicon-o-lock-closed') ->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-shield-check' : 'heroicon-o-lock-closed')
->schema([ ->schema([
Grid::make(2) Grid::make(2)
->schema([ ->schema([
@ -277,8 +277,10 @@ protected function handleRecordUpdate(Model $record, array $data): Model
protected function afterSave(): void protected function afterSave(): void
{ {
SystemNotification::success( SystemNotification::success(
'Profil Berhasil Diperbarui ✅', 'Profil Berhasil Diperbarui ✅✨',
'Data profil Anda telah berhasil disimpan dan diperbarui di dalam sistem.' 'Data profil Anda telah berhasil disimpan dan diperbarui. Makin keren deh! 😎🌈',
'Pembaharuan Profil Berhasil',
'Seluruh data profil Anda telah berhasil sinkronisasi dan disimpan dalam database.'
)->send(); )->send();
if (filled($this->form->getState()['password'] ?? null)) { if (filled($this->form->getState()['password'] ?? null)) {
@ -288,7 +290,9 @@ protected function afterSave(): void
SystemNotification::info( SystemNotification::info(
'Keamanan Akun Diperbarui 🔐', 'Keamanan Akun Diperbarui 🔐',
'Anda telah mengubah kata sandi. Untuk alasan keamanan, silakan masuk kembali dengan kata sandi baru Anda.' 'Anda telah mengubah kata sandi. Demi keamanan, silakan masuk kembali ya! 🚪🔑',
'Pembaruan Kredensial',
'Kata sandi Anda telah berhasil diubah. Harap lakukan otentikasi ulang untuk melanjutkan sesi.'
)->send(); )->send();
$this->redirect(filament()->getLoginUrl()); $this->redirect(filament()->getLoginUrl());

View File

@ -5,6 +5,7 @@
use App\Filament\Support\SystemNotification; use App\Filament\Support\SystemNotification;
use App\Models\AssignmentPin; use App\Models\AssignmentPin;
use Filament\Actions\Action; use Filament\Actions\Action;
use Illuminate\Support\Facades\Auth;
class PinAction extends Action class PinAction extends Action
{ {
@ -24,7 +25,9 @@ protected function setUp(): void
->tooltip(fn (array $arguments, $livewire) => in_array($arguments['record'], $livewire->pinnedIds) ? 'Lepas pin' : 'Pin tugas ini') ->tooltip(fn (array $arguments, $livewire) => in_array($arguments['record'], $livewire->pinnedIds) ? 'Lepas pin' : 'Pin tugas ini')
->action(function (array $arguments, $livewire) { ->action(function (array $arguments, $livewire) {
$assignmentId = $arguments['record']; $assignmentId = $arguments['record'];
$studentProfile = auth()->user()?->student; /** @var \App\Models\User|null $user */
$user = Auth::user();
$studentProfile = $user?->student;
if (! $studentProfile) { if (! $studentProfile) {
return; return;
@ -36,13 +39,24 @@ protected function setUp(): void
if ($existing) { if ($existing) {
$existing->delete(); $existing->delete();
SystemNotification::success('Pin Tugas Dilepas 📌', 'Pin pada tugas ini telah berhasil dilepas dari daftar prioritas Anda.')->send(); SystemNotification::success(
'Pin Dilepas! Bye 📌',
'Pin pada tugas ini sukses dilepas dari daftar prioritas kamu. Semangat! 👋',
'Pembatalan Prioritas Berhasil',
'Penanda prioritas pada tugas ini telah berhasil dihapus dari daftar akun Anda.'
)->send();
} else { } else {
AssignmentPin::create([ AssignmentPin::create([
'student_id' => $studentProfile->id, 'student_id' => $studentProfile->id,
'assignment_id' => $assignmentId, 'assignment_id' => $assignmentId,
]); ]);
SystemNotification::success('Tugas Berhasil Di-pin 📍', 'Tugas ini sekarang berada di posisi teratas daftar prioritas Anda.')->send();
SystemNotification::success(
'Keren! Tugas Jadi Utama 📍',
'Tugas ini sekarang nangkring di posisi teratas daftar prioritas kamu. Sikat! 🚀',
'Penandaan Prioritas Berhasil',
'Tugas ini telah berhasil ditandai sebagai prioritas utama dalam daftar tugas Anda.'
)->send();
} }
unset($livewire->assignments, $livewire->pinnedIds); unset($livewire->assignments, $livewire->pinnedIds);

View File

@ -12,6 +12,7 @@
use App\Models\StudyGroup; use App\Models\StudyGroup;
use Filament\Resources\Pages\Page; use Filament\Resources\Pages\Page;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Computed; use Livewire\Attributes\Computed;
use Livewire\WithFileUploads; use Livewire\WithFileUploads;
@ -63,7 +64,10 @@ public function statusCards(): array
#[Computed] #[Computed]
public function student(): Student public function student(): Student
{ {
return auth()->user()->student; /** @var \App\Models\User|null $user */
$user = Auth::user();
return $user?->student;
} }
#[Computed] #[Computed]
@ -154,7 +158,9 @@ public function submit(): void
if ($assignment->type === AssignmentType::Group && ! $this->currentGroup) { if ($assignment->type === AssignmentType::Group && ! $this->currentGroup) {
SystemNotification::danger( SystemNotification::danger(
'Gagal Mengumpulkan 🚫', 'Gagal Mengumpulkan 🚫',
'Anda tidak terdaftar dalam kelompok manapun yang ditugaskan untuk tugas ini.' 'Anda tidak terdaftar dalam kelompok manapun yang ditugaskan untuk tugas ini. 😟',
'Kesalahan Pengumpulan Tugas',
'Data akun Anda tidak ditemukan dalam daftar kelompok yang ditugaskan untuk tugas ini.'
)->send(); )->send();
return; return;
@ -162,8 +168,10 @@ public function submit(): void
if (! $this->canSubmit) { if (! $this->canSubmit) {
SystemNotification::danger( SystemNotification::danger(
'Gagal Mengumpulkan 🚫', 'Akses Ditolak 🚫',
'Hanya ketua kelompok yang diizinkan untuk mengumpulkan atau memperbarui tugas kelompok.' 'Hanya ketua kelompok yang diizinkan untuk mengumpulkan atau memperbarui tugas kelompok. 👑',
'Batasan Otoritas Pengumpulan',
'Hanya ketua kelompok yang memiliki otoritas untuk memperbarui atau mengumpulkan tugas kelompok.'
)->send(); )->send();
return; return;
@ -173,8 +181,10 @@ public function submit(): void
if (! $existingSubmission && ! $this->file) { if (! $existingSubmission && ! $this->file) {
SystemNotification::warning( SystemNotification::warning(
'File Diperlukan', 'Pilih File Dulu Dong! 📁',
'Silakan pilih file untuk dikumpulkan.' 'Silakan pilih file untuk dikumpulkan agar sistem bisa menyimpannya ya! 😊',
'Kelengkapan Berkas Diperlukan',
'Mohon sertakan lampiran berkas sebelum melanjutkan proses pengumpulan tugas.'
)->send(); )->send();
return; return;
@ -206,8 +216,10 @@ public function submit(): void
]); ]);
SystemNotification::success( SystemNotification::success(
'Tugas Diperbarui ✅', 'Keren! Tugas Sudah Update ✨',
'File tugas Anda telah berhasil diunggah ulang dan diperbarui.' 'File tugas Anda telah berhasil diunggah ulang dan diperbarui di sistem. 📤',
'Pembaruan Berkas Berhasil',
'Berkas tugas telah berhasil diunggah ulang dan divalidasi oleh sistem.'
)->send(); )->send();
} else { } else {
$submission = AssignmentSubmission::create([ $submission = AssignmentSubmission::create([
@ -223,8 +235,10 @@ public function submit(): void
->toMediaCollection('submission'); ->toMediaCollection('submission');
SystemNotification::success( SystemNotification::success(
'Tugas Dikumpulkan 🚀', 'Yeay! Tugas Terkumpul! 🎉',
'Berhasil! Tugas Anda telah tercatat di sistem.' 'Berhasil! Tugas Anda telah tercatat dengan aman di sistem. Semangat! 🎈',
'Konfirmasi Pengumpulan Berhasil',
'Seluruh berkas tugas Anda telah berhasil diverifikasi dan disimpan oleh sistem.'
)->send(); )->send();
} }

View File

@ -3,7 +3,9 @@
namespace App\Filament\Resources\Learning\Assignments\Schemas; namespace App\Filament\Resources\Learning\Assignments\Schemas;
use App\Enums\AssignmentType; use App\Enums\AssignmentType;
use App\Enums\NotifStyle;
use App\Filament\Resources\Learning\Assignments\Actions\SelectAllStudentsAction; use App\Filament\Resources\Learning\Assignments\Actions\SelectAllStudentsAction;
use App\Filament\Support\SystemNotification;
use App\Models\Assignment; use App\Models\Assignment;
use App\Models\ClassSession; use App\Models\ClassSession;
use App\Models\Course; use App\Models\Course;
@ -28,7 +30,9 @@ public static function configure(Schema $schema): Schema
{ {
return $schema return $schema
->components([ ->components([
Section::make('Informasi Tugas') Section::make(SystemNotification::getMessage('Informasi Tugas 📝✨', 'Informasi Tugas'))
->description(SystemNotification::getMessage('Jelaskan tugasnya apa, kapan deadline-nya, dan buat sesi berapa. Semangat! 💪', 'Lengkapi informasi detail penugasan.'))
->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-document-text' : 'heroicon-o-information-circle')
->schema([ ->schema([
TextInput::make('title') TextInput::make('title')
@ -125,7 +129,9 @@ public static function configure(Schema $schema): Schema
]) ])
->columns(2), ->columns(2),
Section::make('Target Penugasan') Section::make(SystemNotification::getMessage('Target Penugasan 🎯🧑‍🎓', 'Target Penugasan'))
->description(SystemNotification::getMessage('Pilih siapa saja yang bakal ngerjain tugas ini. Jangan sampai salah sasaran ya! 🏹', 'Tentukan sasaran penerima penugasan ini.'))
->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-users' : 'heroicon-o-user-group')
->schema([ ->schema([
Select::make('student_ids') Select::make('student_ids')
->label('Mahasiswa') ->label('Mahasiswa')

View File

@ -20,6 +20,7 @@
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Computed; use Livewire\Attributes\Computed;
class ManageAttendances extends Page implements HasForms, HasTable class ManageAttendances extends Page implements HasForms, HasTable
@ -36,8 +37,8 @@ class ManageAttendances extends Page implements HasForms, HasTable
public function getSchedules() public function getSchedules()
{ {
/** @var User $user */ /** @var User|null $user */
$user = auth()->user(); $user = Auth::user();
$student = $user->student; $student = $user->student;
if (! $student) { if (! $student) {
@ -132,8 +133,8 @@ public function scheduleCards()
public function attend(int $sessionId): void public function attend(int $sessionId): void
{ {
/** @var User $user */ /** @var User|null $user */
$user = auth()->user(); $user = Auth::user();
$student = $user->student; $student = $user->student;
if (! $student) { if (! $student) {
return; return;
@ -152,7 +153,9 @@ public function attend(int $sessionId): void
if ($existing) { if ($existing) {
SystemNotification::warning( SystemNotification::warning(
'Presensi Sudah Tercatat ⚠️', 'Presensi Sudah Tercatat ⚠️',
'Anda telah melakukan presensi untuk sesi perkuliahan ini.' 'Anda telah melakukan presensi untuk sesi perkuliahan ini. Jangan lupa belajar yang rajin ya! 📚✨',
'Pemberitahuan Presensi',
'Status kehadiran Anda untuk sesi perkuliahan ini telah tercatat sebelumnya dalam sistem.'
)->send(); )->send();
return; return;
@ -162,8 +165,10 @@ public function attend(int $sessionId): void
$startTime = $session->start_time; $startTime = $session->start_time;
if (now()->lessThan($startTime)) { if (now()->lessThan($startTime)) {
SystemNotification::warning( SystemNotification::warning(
'Presensi Belum Dibuka ⏳', 'Sabar Yaa! Belum Dibuka ⏳',
'Waktu presensi untuk sesi perkuliahan ini belum dimulai.' 'Waktu presensi untuk sesi perkuliahan ini belum dimulai nih. Tunggu sebentar lagi, ya! ☕😊',
'Sesi Presensi Belum Dimulai',
'Akses pengisian presensi untuk sesi ini belum diaktifkan sesuai dengan jadwal yang ditentukan.'
)->send(); )->send();
return; return;
@ -183,15 +188,17 @@ public function attend(int $sessionId): void
]); ]);
SystemNotification::success( SystemNotification::success(
'Presensi Berhasil Dicatat ✅', 'Mantap! Presensi Berhasil ✨🚀',
'Kehadiran Anda telah berhasil direkam ke dalam sistem.' 'Kehadiran Anda telah berhasil direkam. Semangat belajarnya hari ini! 💪✅',
'Konfirmasi Presensi Berhasil',
'Informasi kehadiran Anda telah berhasil diverifikasi dan disimpan secara resmi ke dalam sistem.'
)->send(); )->send();
} }
public function table(Table $table): Table public function table(Table $table): Table
{ {
/** @var User $user */ /** @var User|null $user */
$user = auth()->user(); $user = Auth::user();
return $table return $table
->query(AttendanceResource::getEloquentQuery()) ->query(AttendanceResource::getEloquentQuery())

View File

@ -38,7 +38,12 @@ protected function setUp(): void
$schedule = $course->courseSchedules()->first(); $schedule = $course->courseSchedules()->first();
if (! $schedule) { if (! $schedule) {
SystemNotification::danger('Batal!', 'Jadwal belum ditentukan untuk mata kuliah ini.')->send(); SystemNotification::danger(
'Oops! Gagal Generate 🚫',
'Jadwal belum ditentukan untuk mata kuliah ini, jadi sistem bingung mau buat sesi kapan. 😟',
'Eksekusi Dibatalkan',
'Penjadwalan resmi belum dikonfigurasi untuk mata kuliah ini. Proses pembuatan sesi otomatis tidak dapat dilanjutkan.'
)->send();
return; return;
} }
@ -59,7 +64,12 @@ protected function setUp(): void
); );
} }
SystemNotification::success('Selesai!', '16 Sesi berhasil digenerate/diperbarui.')->send(); SystemNotification::success(
'Hore! Sesi Siap ✨🚀',
'16 Sesi berhasil digenerate dan diperbarui. Selamat mengajar! 🎉',
'Verifikasi Sesi Berhasil',
'Seluruh 16 sesi pembelajaran telah berhasil dikonfigurasi secara otomatis ke dalam sistem.'
)->send();
}); });
} }
} }

View File

@ -34,8 +34,10 @@ protected function setUp(): void
]); ]);
SystemNotification::success( SystemNotification::success(
'Kata sandi berhasil diubah! 🔑', 'Aha! Kata Sandi Baru Berhasil 🔑✨',
"Kata sandi untuk mahasiswa {$record->full_name} telah diperbarui." "Kata sandi untuk {$record->full_name} sudah update nih. Jangan lupa ingatkan mereka ya! 😉",
'Perubahan Kata Sandi Berhasil',
"Kredensial keamanan untuk mahasiswa {$record->full_name} telah diperbarui sesuai dengan entri sistem."
)->send(); )->send();
}); });
} }

View File

@ -2,7 +2,9 @@
namespace App\Filament\Resources\Master\Students\Schemas; namespace App\Filament\Resources\Master\Students\Schemas;
use App\Enums\NotifStyle;
use App\Enums\Sex; use App\Enums\Sex;
use App\Filament\Support\SystemNotification;
use Carbon\Carbon; use Carbon\Carbon;
use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Radio; use Filament\Forms\Components\Radio;
@ -19,8 +21,12 @@ public static function configure(Schema $schema): Schema
{ {
return $schema return $schema
->components([ ->components([
Section::make('Akun') Section::make(SystemNotification::getMessage('Kredensial Akun 🔑✨', 'Akun'))
->description(new HtmlString('Alamat Surel dan Nama Pengguna akan digunakan untuk masuk ke dalam sistem. Kata sandi bawaan adalah <code class="text-sm bg-gray-100 text-red-400 px-1.5 py-0.5 rounded font-mono">Minimal8@</code>')) ->description(new HtmlString(SystemNotification::getMessage(
'Pake email dan username ini buat login ya. Oh iya, password awalnya <code class="text-sm bg-gray-100 text-red-400 px-1.5 py-0.5 rounded font-mono">Minimal8@</code> 🥳',
'Alamat Surel dan Nama Pengguna akan digunakan untuk masuk ke dalam sistem. Kata sandi bawaan adalah <code class="text-sm bg-gray-100 text-red-400 px-1.5 py-0.5 rounded font-mono">Minimal8@</code>'
)))
->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-key' : 'heroicon-o-user')
->schema([ ->schema([
TextInput::make('email') TextInput::make('email')
->label('Alamat Surel') ->label('Alamat Surel')
@ -44,7 +50,9 @@ public static function configure(Schema $schema): Schema
->columns(2) ->columns(2)
->hiddenOn('edit'), ->hiddenOn('edit'),
Section::make('Informasi Mahasiswa') Section::make(SystemNotification::getMessage('Data Mahasiswa 🎓📚', 'Informasi Mahasiswa'))
->description(SystemNotification::getMessage('Lengkapi data mahasiswa di bawah ini dengan benar ya! 🤓📝', 'Masukkan seluruh informasi akademik dan personal mahasiswa dengan benar.'))
->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-academic-cap' : 'heroicon-o-identification')
->schema([ ->schema([
TextInput::make('full_name') TextInput::make('full_name')
->label('Nama Lengkap') ->label('Nama Lengkap')

View File

@ -105,8 +105,10 @@ public static function configure(Table $table): Table
} }
SystemNotification::success( SystemNotification::success(
$state ? 'Pengguna Diaktifkan! ✅' : 'Pengguna Dinonaktifkan ⛔', $state ? 'Pengguna Diaktifkan! ✅✨' : 'Pengguna Dinonaktifkan ⛔👋',
$state ? 'Status akun pengguna berhasil diaktifkan kembali. Siap beraksi! 🚀' : 'Status akun pengguna telah berhasil dinonaktifkan. Istirahat dulu ya... 😴' $state ? 'Status akun pengguna berhasil diaktifkan kembali. Siap beraksi! 🚀' : 'Status akun pengguna telah berhasil dinonaktifkan. Istirahat dulu ya... 😴',
$state ? 'Aktivasi Akun Berhasil' : 'Penonaktifan Akun Berhasil',
$state ? 'Status akun pengguna terpilih telah diubah menjadi aktif.' : 'Status akun pengguna terpilih telah diubah menjadi tidak aktif.'
)->send(); )->send();
}) })
->visible(fn () => auth()->user()->hasRole([RoleEnum::Kosma, RoleEnum::Developer])), ->visible(fn () => auth()->user()->hasRole([RoleEnum::Kosma, RoleEnum::Developer])),

View File

@ -127,7 +127,8 @@ public static function success(string $title, string $body, ?string $formalTitle
self::make() self::make()
->title(self::clean($finalTitle)) ->title(self::clean($finalTitle))
->body(self::clean($finalBody)) ->body(self::clean($finalBody))
->success() ->success(),
'success'
); );
} }
@ -143,7 +144,8 @@ public static function info(string $title, string $body, ?string $formalTitle =
self::make() self::make()
->title(self::clean($finalTitle)) ->title(self::clean($finalTitle))
->body(self::clean($finalBody)) ->body(self::clean($finalBody))
->info() ->info(),
'info'
); );
} }
@ -159,7 +161,8 @@ public static function warning(string $title, string $body, ?string $formalTitle
self::make() self::make()
->title(self::clean($finalTitle)) ->title(self::clean($finalTitle))
->body(self::clean($finalBody)) ->body(self::clean($finalBody))
->warning() ->warning(),
'warning'
); );
} }
@ -175,17 +178,32 @@ public static function danger(string $title, string $body, ?string $formalTitle
self::make() self::make()
->title(self::clean($finalTitle)) ->title(self::clean($finalTitle))
->body(self::clean($finalBody)) ->body(self::clean($finalBody))
->danger() ->danger(),
'danger'
); );
} }
/** /**
* Apply the user's selected style to the notification. * Apply the user's selected style to the notification.
*/ */
protected static function applyStyle(Notification $notification): Notification protected static function applyStyle(Notification $notification, string $status): Notification
{ {
if (self::getNotifStyle() === NotifStyle::Formal) { $isCheerful = self::getNotifStyle() === NotifStyle::Cheerful;
$notification->icon(null);
if ($isCheerful) {
$notification
->duration(6000)
->icon(match ($status) {
'success' => 'heroicon-o-sparkles',
'danger' => 'heroicon-o-fire',
'warning' => 'heroicon-o-bolt',
'info' => 'heroicon-o-megaphone',
default => null,
});
} else {
$notification
->icon(null)
->duration(4000);
} }
return $notification; return $notification;
@ -197,7 +215,7 @@ protected static function applyStyle(Notification $notification): Notification
public static function getNotifStyle(): NotifStyle public static function getNotifStyle(): NotifStyle
{ {
try { try {
/** @var \App\Models\User $user */ /** @var \App\Models\User|null $user */
$user = Auth::user(); $user = Auth::user();
return $user?->settings?->notif_style ?? NotifStyle::Cheerful; return $user?->settings?->notif_style ?? NotifStyle::Cheerful;

View File

@ -1,7 +1,10 @@
<x-filament-panels::page> <x-filament-panels::page>
<x-filament::section> <x-filament::section
<x-slot name="heading">Tugas Saya</x-slot> icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-pencil-square' : 'heroicon-o-briefcase' }}"
<x-slot name="description">Klik tugas untuk melihat detail dan mengumpulkan file.</x-slot> icon-color="primary"
>
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Daftar Tugas Bikin Lemes! 🤣📒', 'Tugas Saya') }}</x-slot>
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Yuk, cek dan kumpulin tugasmu biar tenang hidupnya! Klik aja di tugasnya ya. 🚀👨‍💻', 'Klik pada tugas untuk melihat detail dan mengumpulkan file.') }}</x-slot>
<div class="space-y-4"> <div class="space-y-4">
@forelse ($this->assignmentCards as $card) @forelse ($this->assignmentCards as $card)

View File

@ -26,7 +26,10 @@
style="width: {{ $this->percentage }}%"></div> style="width: {{ $this->percentage }}%"></div>
</div> </div>
<x-filament::section> <x-filament::section
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-document-magnifying-glass' : 'heroicon-o-document-text' }}"
icon-color="primary"
>
<x-slot name="heading">{{ $this->assignmentSummary['title'] }}</x-slot> <x-slot name="heading">{{ $this->assignmentSummary['title'] }}</x-slot>
<x-slot name="description"> <x-slot name="description">
{{ $this->assignmentSummary['course'] }} {{ $this->assignmentSummary['course'] }}

View File

@ -45,10 +45,12 @@ class="block border-0"></iframe>
</x-filament::section> </x-filament::section>
@if ($this->isOverdue) @if ($this->isOverdue)
<x-filament::section> <x-filament::section
<x-slot name="heading">Batas Waktu Telah Berakhir</x-slot> icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-exclamation-triangle' : 'heroicon-o-lock-closed' }}"
<x-slot name="description">Proses pengumpulan tugas ini telah ditutup karena melewati batas icon-color="danger"
waktu.</x-slot> >
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Yah, Batas Waktu Udah Habis! 😭⏳', 'Batas Waktu Telah Berakhir') }}</x-slot>
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Maaf ya, kamu udah nggak bisa kumpulin tugas ini lagi karena waktunya udah lewat. Tetap semangat buat tugas selanjutnya! 💪', 'Proses pengumpulan tugas ini telah ditutup karena melewati batas waktu.') }}</x-slot>
<div class="flex items-center gap-3 mb-5"> <div class="flex items-center gap-3 mb-5">
<div <div
@ -98,8 +100,11 @@ class="block border-0"></iframe>
@endif @endif
</x-filament::section> </x-filament::section>
@else @else
<x-filament::section> <x-filament::section
<x-slot name="heading">{{ $this->isResubmit ? 'Perbarui Pengumpulan' : 'Kumpulkan Tugas' }}</x-slot> icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-paper-airplane' : 'heroicon-o-document-arrow-up' }}"
icon-color="primary"
>
<x-slot name="heading">{{ $this->isResubmit ? \App\Filament\Support\SystemNotification::getMessage('Kuy Perbarui Tugasmu! 🔄✨', 'Perbarui Pengumpulan') : \App\Filament\Support\SystemNotification::getMessage('Kumpulkan Tugas Sekarang! 🚀📚', 'Kumpulkan Tugas') }}</x-slot>
@if ($this->isResubmit && ($url = $this->getSubmissionFileUrl())) @if ($this->isResubmit && ($url = $this->getSubmissionFileUrl()))
<div class="mb-4"> <div class="mb-4">

View File

@ -1,7 +1,10 @@
<x-filament-panels::page> <x-filament-panels::page>
<x-filament::section> <x-filament::section
<x-slot name="heading">Sesi Kuliah</x-slot> icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-hand-raised' : 'heroicon-o-clipboard-document-check' }}"
<x-slot name="description">Silakan melakukan presensi sesuai dengan waktu kelas.</x-slot> icon-color="primary"
>
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Ayo Presensi Dulu! 🙋‍♂️✨', 'Sesi Kuliah') }}</x-slot>
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Jangan lupa absen ya kalau kelasnya udah mulai! Biar tercatat hadir. 💪', 'Silakan melakukan presensi sesuai dengan waktu kelas.') }}</x-slot>
@if (count($this->scheduleCards)) @if (count($this->scheduleCards))
<div class="columns-1 md:columns-2 lg:columns-3 xl:columns-4 gap-6 space-y-6"> <div class="columns-1 md:columns-2 lg:columns-3 xl:columns-4 gap-6 space-y-6">
@ -107,9 +110,12 @@ class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-non
</x-filament::section> </x-filament::section>
<x-filament::section> <x-filament::section
<x-slot name="heading">Riwayat Presensi</x-slot> icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-clock' : 'heroicon-o-archive-box' }}"
<x-slot name="description">Berikut adalah riwayat kehadiran Anda pada sesi perkuliahan.</x-slot> icon-color="gray"
>
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Jejak Presensimu 🕰️📜', 'Riwayat Presensi') }}</x-slot>
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Di sini kamu bisa ngecek semua histori kehadiranmu sebelumnya. Rajin-rajin ya! 🎓', 'Berikut adalah riwayat kehadiran Anda pada sesi perkuliahan.') }}</x-slot>
{{ $this->table }} {{ $this->table }}
</x-filament::section> </x-filament::section>

View File

@ -5,9 +5,12 @@
</div> </div>
</x-filament::section> </x-filament::section>
<x-filament::section icon="heroicon-o-bolt" icon-color="primary"> <x-filament::section
<x-slot name="heading">Sesi Hari Ini</x-slot> icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-sparkles' : 'heroicon-o-bolt' }}"
<x-slot name="description">Sesi yang dijadwalkan pada {{ $this->today_date }}</x-slot> icon-color="primary"
>
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Sesi Kelas Hari Ini ✨🚀', 'Sesi Hari Ini') }}</x-slot>
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Daftar sesi seru yang udah dijadwalkan buat hari ini (' . $this->today_date . '). Semangat belajar! 💪', 'Sesi yang dijadwalkan pada ' . $this->today_date) }}</x-slot>
<div class="space-y-4"> <div class="space-y-4">
@forelse ($this->todaySessions as $session) @forelse ($this->todaySessions as $session)
@ -98,9 +101,12 @@
</div> </div>
</x-filament::section> </x-filament::section>
<x-filament::section icon="heroicon-o-academic-cap" icon-color="gray"> <x-filament::section
<x-slot name="heading">Daftar Mata Kuliah Semester Ini</x-slot> icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-book-open' : 'heroicon-o-academic-cap' }}"
<x-slot name="description">Pilih mata kuliah untuk melihat dan mengelola semua riwayat sesi.</x-slot> icon-color="gray"
>
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Daftar Mata Kuliah Semester Ini 📚🎓', 'Daftar Mata Kuliah Semester Ini') }}</x-slot>
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Pilih aja mata kuliahnya buat ngecek materi sama tugas-tugas seru lainnya! 🧐✨', 'Pilih mata kuliah untuk melihat dan mengelola semua riwayat sesi.') }}</x-slot>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6">
@forelse ($this->courses as $course) @forelse ($this->courses as $course)