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
->components([
Section::make('Akun')
->description('Kelola informasi detail akun Anda agar selalu terkini.')
->icon('heroicon-o-user')
Section::make(SystemNotification::getMessage('Akun Pengguna 👤✨', 'Akun'))
->description(SystemNotification::getMessage('Kelola informasi detail akun Anda di sini ya biar nggak kudet! 😉🚀', 'Kelola informasi detail akun Anda agar selalu terkini.'))
->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-face-smile' : 'heroicon-o-user')
->schema([
Grid::make(2)
->schema([
@ -63,9 +63,9 @@ public function form(Schema $schema): Schema
]),
]),
Section::make('Informasi Mahasiswa')
->description('Pastikan data akademik Anda sesuai dengan record sistem.')
->icon('heroicon-o-academic-cap')
Section::make(SystemNotification::getMessage('Data Mahasiswa 🎓📚', 'Informasi Mahasiswa'))
->description(SystemNotification::getMessage('Pastikan data akademikmu sesuai dengan yang di sistem, jangan sampai salah loh! 🤓📝', 'Pastikan data akademik Anda sesuai dengan record sistem.'))
->icon(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-academic-cap' : 'heroicon-o-identification')
->statePath('student')
->schema([
TextInput::make('full_name')
@ -132,9 +132,9 @@ public function form(Schema $schema): Schema
->columns(2)
->visible(fn () => auth()->user()?->student()->exists()),
Section::make('Keamanan Akun')
->description('Perbarui kata sandi Anda secara berkala untuk menjaga keamanan akun.')
->icon('heroicon-o-lock-closed')
Section::make(SystemNotification::getMessage('Keamanan Akun 🔐⚡', '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(SystemNotification::getNotifStyle() === NotifStyle::Cheerful ? 'heroicon-o-shield-check' : 'heroicon-o-lock-closed')
->schema([
Grid::make(2)
->schema([
@ -277,8 +277,10 @@ protected function handleRecordUpdate(Model $record, array $data): Model
protected function afterSave(): void
{
SystemNotification::success(
'Profil Berhasil Diperbarui ✅',
'Data profil Anda telah berhasil disimpan dan diperbarui di dalam sistem.'
'Profil Berhasil Diperbarui ✅✨',
'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();
if (filled($this->form->getState()['password'] ?? null)) {
@ -288,7 +290,9 @@ protected function afterSave(): void
SystemNotification::info(
'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();
$this->redirect(filament()->getLoginUrl());

View File

@ -5,6 +5,7 @@
use App\Filament\Support\SystemNotification;
use App\Models\AssignmentPin;
use Filament\Actions\Action;
use Illuminate\Support\Facades\Auth;
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')
->action(function (array $arguments, $livewire) {
$assignmentId = $arguments['record'];
$studentProfile = auth()->user()?->student;
/** @var \App\Models\User|null $user */
$user = Auth::user();
$studentProfile = $user?->student;
if (! $studentProfile) {
return;
@ -36,13 +39,24 @@ protected function setUp(): void
if ($existing) {
$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 {
AssignmentPin::create([
'student_id' => $studentProfile->id,
'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);

View File

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

View File

@ -3,7 +3,9 @@
namespace App\Filament\Resources\Learning\Assignments\Schemas;
use App\Enums\AssignmentType;
use App\Enums\NotifStyle;
use App\Filament\Resources\Learning\Assignments\Actions\SelectAllStudentsAction;
use App\Filament\Support\SystemNotification;
use App\Models\Assignment;
use App\Models\ClassSession;
use App\Models\Course;
@ -28,7 +30,9 @@ public static function configure(Schema $schema): Schema
{
return $schema
->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([
TextInput::make('title')
@ -125,7 +129,9 @@ public static function configure(Schema $schema): Schema
])
->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([
Select::make('student_ids')
->label('Mahasiswa')

View File

@ -20,6 +20,7 @@
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Computed;
class ManageAttendances extends Page implements HasForms, HasTable
@ -36,8 +37,8 @@ class ManageAttendances extends Page implements HasForms, HasTable
public function getSchedules()
{
/** @var User $user */
$user = auth()->user();
/** @var User|null $user */
$user = Auth::user();
$student = $user->student;
if (! $student) {
@ -132,8 +133,8 @@ public function scheduleCards()
public function attend(int $sessionId): void
{
/** @var User $user */
$user = auth()->user();
/** @var User|null $user */
$user = Auth::user();
$student = $user->student;
if (! $student) {
return;
@ -152,7 +153,9 @@ public function attend(int $sessionId): void
if ($existing) {
SystemNotification::warning(
'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();
return;
@ -162,8 +165,10 @@ public function attend(int $sessionId): void
$startTime = $session->start_time;
if (now()->lessThan($startTime)) {
SystemNotification::warning(
'Presensi Belum Dibuka ⏳',
'Waktu presensi untuk sesi perkuliahan ini belum dimulai.'
'Sabar Yaa! Belum Dibuka ⏳',
'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();
return;
@ -183,15 +188,17 @@ public function attend(int $sessionId): void
]);
SystemNotification::success(
'Presensi Berhasil Dicatat ✅',
'Kehadiran Anda telah berhasil direkam ke dalam sistem.'
'Mantap! Presensi Berhasil ✨🚀',
'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();
}
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
/** @var User|null $user */
$user = Auth::user();
return $table
->query(AttendanceResource::getEloquentQuery())

View File

@ -38,7 +38,12 @@ protected function setUp(): void
$schedule = $course->courseSchedules()->first();
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;
}
@ -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(
'Kata sandi berhasil diubah! 🔑',
"Kata sandi untuk mahasiswa {$record->full_name} telah diperbarui."
'Aha! Kata Sandi Baru Berhasil 🔑✨',
"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();
});
}

View File

@ -2,7 +2,9 @@
namespace App\Filament\Resources\Master\Students\Schemas;
use App\Enums\NotifStyle;
use App\Enums\Sex;
use App\Filament\Support\SystemNotification;
use Carbon\Carbon;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Radio;
@ -19,8 +21,12 @@ public static function configure(Schema $schema): Schema
{
return $schema
->components([
Section::make('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>'))
Section::make(SystemNotification::getMessage('Kredensial Akun 🔑✨', 'Akun'))
->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([
TextInput::make('email')
->label('Alamat Surel')
@ -44,7 +50,9 @@ public static function configure(Schema $schema): Schema
->columns(2)
->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([
TextInput::make('full_name')
->label('Nama Lengkap')

View File

@ -105,8 +105,10 @@ public static function configure(Table $table): Table
}
SystemNotification::success(
$state ? 'Pengguna Diaktifkan! ✅' : 'Pengguna Dinonaktifkan ⛔',
$state ? 'Status akun pengguna berhasil diaktifkan kembali. Siap beraksi! 🚀' : 'Status akun pengguna telah berhasil dinonaktifkan. Istirahat dulu ya... 😴'
$state ? 'Pengguna Diaktifkan! ✅✨' : 'Pengguna Dinonaktifkan ⛔👋',
$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();
})
->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()
->title(self::clean($finalTitle))
->body(self::clean($finalBody))
->success()
->success(),
'success'
);
}
@ -143,7 +144,8 @@ public static function info(string $title, string $body, ?string $formalTitle =
self::make()
->title(self::clean($finalTitle))
->body(self::clean($finalBody))
->info()
->info(),
'info'
);
}
@ -159,7 +161,8 @@ public static function warning(string $title, string $body, ?string $formalTitle
self::make()
->title(self::clean($finalTitle))
->body(self::clean($finalBody))
->warning()
->warning(),
'warning'
);
}
@ -175,17 +178,32 @@ public static function danger(string $title, string $body, ?string $formalTitle
self::make()
->title(self::clean($finalTitle))
->body(self::clean($finalBody))
->danger()
->danger(),
'danger'
);
}
/**
* 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) {
$notification->icon(null);
$isCheerful = self::getNotifStyle() === NotifStyle::Cheerful;
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;
@ -197,7 +215,7 @@ protected static function applyStyle(Notification $notification): Notification
public static function getNotifStyle(): NotifStyle
{
try {
/** @var \App\Models\User $user */
/** @var \App\Models\User|null $user */
$user = Auth::user();
return $user?->settings?->notif_style ?? NotifStyle::Cheerful;

View File

@ -1,7 +1,10 @@
<x-filament-panels::page>
<x-filament::section>
<x-slot name="heading">Tugas Saya</x-slot>
<x-slot name="description">Klik tugas untuk melihat detail dan mengumpulkan file.</x-slot>
<x-filament::section
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-pencil-square' : 'heroicon-o-briefcase' }}"
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">
@forelse ($this->assignmentCards as $card)

View File

@ -26,7 +26,10 @@
style="width: {{ $this->percentage }}%"></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="description">
{{ $this->assignmentSummary['course'] }}

View File

@ -45,10 +45,12 @@ class="block border-0"></iframe>
</x-filament::section>
@if ($this->isOverdue)
<x-filament::section>
<x-slot name="heading">Batas Waktu Telah Berakhir</x-slot>
<x-slot name="description">Proses pengumpulan tugas ini telah ditutup karena melewati batas
waktu.</x-slot>
<x-filament::section
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-exclamation-triangle' : 'heroicon-o-lock-closed' }}"
icon-color="danger"
>
<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
@ -98,8 +100,11 @@ class="block border-0"></iframe>
@endif
</x-filament::section>
@else
<x-filament::section>
<x-slot name="heading">{{ $this->isResubmit ? 'Perbarui Pengumpulan' : 'Kumpulkan Tugas' }}</x-slot>
<x-filament::section
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()))
<div class="mb-4">

View File

@ -1,7 +1,10 @@
<x-filament-panels::page>
<x-filament::section>
<x-slot name="heading">Sesi Kuliah</x-slot>
<x-slot name="description">Silakan melakukan presensi sesuai dengan waktu kelas.</x-slot>
<x-filament::section
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-hand-raised' : 'heroicon-o-clipboard-document-check' }}"
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))
<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-slot name="heading">Riwayat Presensi</x-slot>
<x-slot name="description">Berikut adalah riwayat kehadiran Anda pada sesi perkuliahan.</x-slot>
<x-filament::section
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-clock' : 'heroicon-o-archive-box' }}"
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 }}
</x-filament::section>

View File

@ -5,9 +5,12 @@
</div>
</x-filament::section>
<x-filament::section icon="heroicon-o-bolt" icon-color="primary">
<x-slot name="heading">Sesi Hari Ini</x-slot>
<x-slot name="description">Sesi yang dijadwalkan pada {{ $this->today_date }}</x-slot>
<x-filament::section
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-sparkles' : 'heroicon-o-bolt' }}"
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">
@forelse ($this->todaySessions as $session)
@ -98,9 +101,12 @@
</div>
</x-filament::section>
<x-filament::section icon="heroicon-o-academic-cap" icon-color="gray">
<x-slot name="heading">Daftar Mata Kuliah Semester Ini</x-slot>
<x-slot name="description">Pilih mata kuliah untuk melihat dan mengelola semua riwayat sesi.</x-slot>
<x-filament::section
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-book-open' : 'heroicon-o-academic-cap' }}"
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">
@forelse ($this->courses as $course)