refactor: enhance layout and conditional rendering for study group and attendance cards to improve user experience and responsiveness
This commit is contained in:
parent
2e2fc2cc20
commit
47c1cb51ab
@ -6,148 +6,151 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="columns-1 md:columns-2 lg:columns-3 xl:columns-4 gap-6 space-y-6">
|
||||
@forelse ($this->studyGroups as $record)
|
||||
<div class="break-inside-avoid mb-6">
|
||||
<div class="{{ $record->card_classes }}">
|
||||
@if (count($this->studyGroups))
|
||||
<div class="columns-1 md:columns-2 lg:columns-3 xl:columns-4 gap-6 space-y-6">
|
||||
@foreach ($this->studyGroups as $record)
|
||||
<div class="break-inside-avoid mb-6">
|
||||
<div class="{{ $record->card_classes }}">
|
||||
|
||||
@if ($record->is_my_group)
|
||||
<div class="absolute top-0 right-0 -translate-x-1 -translate-y-1/2 z-10">
|
||||
<span
|
||||
class="inline-flex items-center gap-1 rounded-full bg-primary-600 px-3 py-1 text-[10px] font-bold text-white dark:text-gray-900 shadow-lg ring-2 ring-white dark:ring-gray-900 uppercase tracking-widest">
|
||||
<x-heroicon-m-check-badge class="w-3.5 h-3.5" />
|
||||
Kelompok Saya
|
||||
</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="p-6 space-y-4 flex-1">
|
||||
<div class="flex flex-wrap items-center gap-1.5">
|
||||
@forelse ($record->courses as $course)
|
||||
<span @class([
|
||||
'inline-flex items-center rounded-md px-2.5 py-1 text-[10px] font-bold ring-1 ring-inset uppercase tracking-tight',
|
||||
'bg-primary-50 dark:bg-primary-500/10 text-primary-700 dark:text-primary-300 ring-primary-600/20' => !$record->is_my_group,
|
||||
'bg-white dark:bg-primary-800/40 text-primary-700 dark:text-primary-200 ring-primary-500/30' => $record->is_my_group,
|
||||
])>
|
||||
{{ $course->name }}
|
||||
</span>
|
||||
@empty
|
||||
@if ($record->is_my_group)
|
||||
<div class="absolute top-0 right-0 -translate-x-1 -translate-y-1/2 z-10">
|
||||
<span
|
||||
class="inline-flex items-center rounded-md bg-gray-50 dark:bg-gray-500/10 px-2 py-0.5 text-[10px] font-bold text-gray-500 dark:text-gray-400 ring-1 ring-inset ring-gray-600/20 uppercase tracking-tight italic">
|
||||
Tanpa Mata Kuliah
|
||||
class="inline-flex items-center gap-1 rounded-full bg-primary-600 px-3 py-1 text-[10px] font-bold text-white dark:text-gray-900 shadow-lg ring-2 ring-white dark:ring-gray-900 uppercase tracking-widest">
|
||||
<x-heroicon-m-check-badge class="w-3.5 h-3.5" />
|
||||
Kelompok Saya
|
||||
</span>
|
||||
@endforelse
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="space-y-1">
|
||||
<h3 @class([
|
||||
'text-lg font-bold leading-tight flex items-center gap-2 transition-colors',
|
||||
'text-gray-950 dark:text-white group-hover:text-primary-600 dark:group-hover:text-primary-400' => !$record->is_my_group,
|
||||
'text-primary-900 dark:text-primary-100' => $record->is_my_group,
|
||||
])>
|
||||
<x-heroicon-o-users @class([
|
||||
'w-5 h-5 shrink-0',
|
||||
'opacity-40' => !$record->is_my_group,
|
||||
'text-primary-500' => $record->is_my_group,
|
||||
]) />
|
||||
{{ $record->name }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center text-sm text-gray-600 dark:text-gray-400">
|
||||
<div @class([
|
||||
'w-8 h-8 rounded-full flex items-center justify-center mr-3 shrink-0 border',
|
||||
'bg-primary-100 dark:bg-primary-900/40 border-primary-200 dark:border-primary-800' => !$record->is_my_group,
|
||||
'bg-white dark:bg-primary-800 border-primary-300 dark:border-primary-600' => $record->is_my_group,
|
||||
])>
|
||||
@if ($record->leader_avatar)
|
||||
<img src="{{ $record->leader_avatar }}"
|
||||
alt="User avatar" class="w-full h-full rounded-full object-cover" />
|
||||
@else
|
||||
<x-heroicon-m-user @class([
|
||||
'w-4 h-4',
|
||||
'text-primary-600 dark:text-primary-300' => !$record->is_my_group,
|
||||
'text-primary-700 dark:text-primary-200' => $record->is_my_group,
|
||||
]) />
|
||||
@endif
|
||||
</div>
|
||||
<div class="flex flex-col min-w-0">
|
||||
<span
|
||||
class="text-[10px] font-bold uppercase text-gray-400 tracking-widest leading-none mb-1">Ketua
|
||||
Kelompok</span>
|
||||
<div class="p-6 space-y-4 flex-1">
|
||||
<div class="flex flex-wrap items-center gap-1.5">
|
||||
@forelse ($record->courses as $course)
|
||||
<span @class([
|
||||
'truncate font-medium',
|
||||
'text-gray-900 dark:text-gray-200' => !$record->is_my_group,
|
||||
'text-primary-900 dark:text-primary-50' => $record->is_my_group,
|
||||
'inline-flex items-center rounded-md px-2.5 py-1 text-[10px] font-bold ring-1 ring-inset uppercase tracking-tight',
|
||||
'bg-primary-50 dark:bg-primary-500/10 text-primary-700 dark:text-primary-300 ring-primary-600/20' => !$record->is_my_group,
|
||||
'bg-white dark:bg-primary-800/40 text-primary-700 dark:text-primary-200 ring-primary-500/30' =>
|
||||
$record->is_my_group,
|
||||
])>
|
||||
{{ $record->leader_name }}
|
||||
@if ($record->is_leader)
|
||||
<span
|
||||
class="text-[10px] text-primary-600 font-bold ml-1">(Anda)</span>
|
||||
@endif
|
||||
{{ $course->name }}
|
||||
</span>
|
||||
</div>
|
||||
@empty
|
||||
<span
|
||||
class="inline-flex items-center rounded-md bg-gray-50 dark:bg-gray-500/10 px-2 py-0.5 text-[10px] font-bold text-gray-500 dark:text-gray-400 ring-1 ring-inset ring-gray-600/20 uppercase tracking-tight italic">
|
||||
Tanpa Mata Kuliah
|
||||
</span>
|
||||
@endforelse
|
||||
</div>
|
||||
|
||||
<div @class([
|
||||
'pt-4 border-t',
|
||||
'border-gray-100 dark:border-gray-800' => !$record->is_my_group,
|
||||
'border-primary-200 dark:border-primary-800' => $record->is_my_group,
|
||||
])>
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<span
|
||||
class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-none">Anggota
|
||||
Kelompok</span>
|
||||
<span
|
||||
class="text-[10px] font-bold px-1.5 py-0.5 rounded bg-violet-50 dark:bg-violet-500/10 text-violet-600 dark:text-violet-400 ring-1 ring-inset ring-violet-600/20">
|
||||
{{ $record->students_count }} orang
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-1.5">
|
||||
@forelse ($record->students as $student)
|
||||
<div class="space-y-1">
|
||||
<h3 @class([
|
||||
'text-lg font-bold leading-tight flex items-center gap-2 transition-colors',
|
||||
'text-gray-950 dark:text-white group-hover:text-primary-600 dark:group-hover:text-primary-400' => !$record->is_my_group,
|
||||
'text-primary-900 dark:text-primary-100' => $record->is_my_group,
|
||||
])>
|
||||
<x-heroicon-o-users @class([
|
||||
'w-5 h-5 shrink-0',
|
||||
'opacity-40' => !$record->is_my_group,
|
||||
'text-primary-500' => $record->is_my_group,
|
||||
]) />
|
||||
{{ $record->name }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center text-sm text-gray-600 dark:text-gray-400">
|
||||
<div @class([
|
||||
'w-8 h-8 rounded-full flex items-center justify-center mr-3 shrink-0 border',
|
||||
'bg-primary-100 dark:bg-primary-900/40 border-primary-200 dark:border-primary-800' => !$record->is_my_group,
|
||||
'bg-white dark:bg-primary-800 border-primary-300 dark:border-primary-600' =>
|
||||
$record->is_my_group,
|
||||
])>
|
||||
@if ($record->leader_avatar)
|
||||
<img src="{{ $record->leader_avatar }}" alt="User avatar"
|
||||
class="w-full h-full rounded-full object-cover" />
|
||||
@else
|
||||
<x-heroicon-m-user @class([
|
||||
'w-4 h-4',
|
||||
'text-primary-600 dark:text-primary-300' => !$record->is_my_group,
|
||||
'text-primary-700 dark:text-primary-200' => $record->is_my_group,
|
||||
]) />
|
||||
@endif
|
||||
</div>
|
||||
<div class="flex flex-col min-w-0">
|
||||
<span
|
||||
class="text-[10px] font-bold uppercase text-gray-400 tracking-widest leading-none mb-1">Ketua
|
||||
Kelompok</span>
|
||||
<span @class([
|
||||
'inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-[10px] font-medium ring-1 ring-inset',
|
||||
'bg-gray-50 dark:bg-gray-800/50 text-gray-700 dark:text-gray-300 ring-gray-200 dark:ring-gray-700' =>
|
||||
!$student->is_me,
|
||||
'bg-primary-600 text-white dark:text-gray-900 ring-primary-700 font-bold shadow-sm' =>
|
||||
$student->is_me,
|
||||
'truncate font-medium',
|
||||
'text-gray-900 dark:text-gray-200' => !$record->is_my_group,
|
||||
'text-primary-900 dark:text-primary-50' => $record->is_my_group,
|
||||
])>
|
||||
{{ $student->full_name }}
|
||||
@if ($student->is_me)
|
||||
(Anda)
|
||||
{{ $record->leader_name }}
|
||||
@if ($record->is_leader)
|
||||
<span class="text-[10px] text-primary-600 font-bold ml-1">(Anda)</span>
|
||||
@endif
|
||||
</span>
|
||||
@empty
|
||||
<span class="text-xs text-gray-400 italic">Belum ada anggota</span>
|
||||
@endforelse
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div @class([
|
||||
'pt-4 border-t',
|
||||
'border-gray-100 dark:border-gray-800' => !$record->is_my_group,
|
||||
'border-primary-200 dark:border-primary-800' => $record->is_my_group,
|
||||
])>
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<span
|
||||
class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-none">Anggota
|
||||
Kelompok</span>
|
||||
<span
|
||||
class="text-[10px] font-bold px-1.5 py-0.5 rounded bg-violet-50 dark:bg-violet-500/10 text-violet-600 dark:text-violet-400 ring-1 ring-inset ring-violet-600/20">
|
||||
{{ $record->students_count }} orang
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-1.5">
|
||||
@forelse ($record->students as $student)
|
||||
<span @class([
|
||||
'inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-[10px] font-medium ring-1 ring-inset',
|
||||
'bg-gray-50 dark:bg-gray-800/50 text-gray-700 dark:text-gray-300 ring-gray-200 dark:ring-gray-700' => !$student->is_me,
|
||||
'bg-primary-600 text-white dark:text-gray-900 ring-primary-700 font-bold shadow-sm' =>
|
||||
$student->is_me,
|
||||
])>
|
||||
{{ $student->full_name }}
|
||||
@if ($student->is_me)
|
||||
(Anda)
|
||||
@endif
|
||||
</span>
|
||||
@empty
|
||||
<span class="text-xs text-gray-400 italic">Belum ada anggota</span>
|
||||
@endforelse
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@canAny(['Update:StudyGroup', 'Delete:StudyGroup'])
|
||||
<div @class([
|
||||
'rounded-b-xl',
|
||||
'bg-primary-100/30 dark:bg-primary-900/10' => $record->is_my_group,
|
||||
])>
|
||||
@canAny(['Update:StudyGroup', 'Delete:StudyGroup'])
|
||||
<div @class([
|
||||
'mx-6 border-t flex items-center justify-end gap-2 py-4',
|
||||
'border-gray-100 dark:border-gray-800' => !$record->is_my_group,
|
||||
'border-primary-200 dark:border-primary-800' => $record->is_my_group,
|
||||
'rounded-b-xl',
|
||||
'bg-primary-100/30 dark:bg-primary-900/10' => $record->is_my_group,
|
||||
])>
|
||||
{{ ($this->editStudyGroupAction)(['studyGroup' => $record->id]) }}
|
||||
<div @class([
|
||||
'mx-6 border-t flex items-center justify-end gap-2 py-4',
|
||||
'border-gray-100 dark:border-gray-800' => !$record->is_my_group,
|
||||
'border-primary-200 dark:border-primary-800' => $record->is_my_group,
|
||||
])>
|
||||
{{ ($this->editStudyGroupAction)(['studyGroup' => $record->id]) }}
|
||||
|
||||
{{ ($this->deleteStudyGroupAction)(['studyGroup' => $record->id]) }}
|
||||
{{ ($this->deleteStudyGroupAction)(['studyGroup' => $record->id]) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endcanAny
|
||||
@endcanAny
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<x-filament::empty-state icon="heroicon-o-users" heading="Tidak ada data yang ditemukan"
|
||||
description="Anda belum terdaftar dalam kelompok belajar apapun untuk saat ini." iconColor="gray">
|
||||
</x-filament::empty-state>
|
||||
@endforelse
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@else
|
||||
<x-filament::empty-state icon="heroicon-o-users" heading="Tidak ada data yang ditemukan"
|
||||
description="Anda belum terdaftar dalam kelompok belajar apapun untuk saat ini." iconColor="gray">
|
||||
</x-filament::empty-state>
|
||||
@endif
|
||||
|
||||
</x-filament::section>
|
||||
</x-filament-panels::page>
|
||||
|
||||
@ -3,105 +3,108 @@
|
||||
<x-slot name="heading">Sesi Kuliah</x-slot>
|
||||
<x-slot name="description">Silakan melakukan presensi sesuai dengan waktu kelas.</x-slot>
|
||||
|
||||
<div class="columns-1 md:columns-2 lg:columns-3 xl:columns-4 gap-6 space-y-6">
|
||||
@forelse ($this->scheduleCards as $card)
|
||||
<div class="break-inside-avoid mb-6">
|
||||
<div class="{{ $card->card_classes }}">
|
||||
@if (count($this->scheduleCards))
|
||||
<div class="columns-1 md:columns-2 lg:columns-3 xl:columns-4 gap-6 space-y-6">
|
||||
@foreach ($this->scheduleCards as $card)
|
||||
<div class="break-inside-avoid mb-6">
|
||||
<div class="{{ $card->card_classes }}">
|
||||
|
||||
<div class="p-6 space-y-4 flex-1">
|
||||
<div class="space-y-1">
|
||||
<h3 class="{{ $card->title_classes }}">
|
||||
<x-heroicon-o-book-open @class([
|
||||
'w-5 h-5 shrink-0',
|
||||
'opacity-40' => !$card->is_attended,
|
||||
'text-primary-500' => $card->is_attended,
|
||||
]) />
|
||||
{{ $card->course_name }}
|
||||
</h3>
|
||||
<div class="{{ $card->lecturer_wrapper_classes }}">
|
||||
<x-heroicon-m-user @class(['w-3.5 h-3.5 shrink-0', 'opacity-50' => !$card->is_attended]) />
|
||||
<span class="text-[11px] font-medium leading-none">
|
||||
{{ $card->lecturer_name }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center text-sm text-gray-600 dark:text-gray-400 pt-4">
|
||||
<div class="{{ $card->icon_wrapper_classes }}">
|
||||
<x-heroicon-m-clock @class([
|
||||
'w-4 h-4',
|
||||
'text-primary-600 dark:text-primary-300' => !$card->is_attended,
|
||||
'text-primary-700 dark:text-primary-200' => $card->is_attended,
|
||||
<div class="p-6 space-y-4 flex-1">
|
||||
<div class="space-y-1">
|
||||
<h3 class="{{ $card->title_classes }}">
|
||||
<x-heroicon-o-book-open @class([
|
||||
'w-5 h-5 shrink-0',
|
||||
'opacity-40' => !$card->is_attended,
|
||||
'text-primary-500' => $card->is_attended,
|
||||
]) />
|
||||
</div>
|
||||
<div class="flex flex-col min-w-0">
|
||||
<span
|
||||
class="text-[10px] font-bold uppercase text-gray-400 tracking-widest leading-none mb-1">Waktu
|
||||
Kuliah</span>
|
||||
<span class="{{ $card->time_label_classes }}">
|
||||
{{ $card->time_range }}
|
||||
{{ $card->course_name }}
|
||||
</h3>
|
||||
<div class="{{ $card->lecturer_wrapper_classes }}">
|
||||
<x-heroicon-m-user @class(['w-3.5 h-3.5 shrink-0', 'opacity-50' => !$card->is_attended]) />
|
||||
<span class="text-[11px] font-medium leading-none">
|
||||
{{ $card->lecturer_name }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div @class([
|
||||
'pt-4 border-t',
|
||||
'border-gray-100 dark:border-gray-700' => !$card->is_attended,
|
||||
'border-primary-200 dark:border-primary-800' => $card->is_attended,
|
||||
])>
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<span
|
||||
class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-none">Status</span>
|
||||
<span class="{{ $card->status_badge_classes }}">
|
||||
{{ $card->status_label }}
|
||||
</span>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center text-sm text-gray-600 dark:text-gray-400 pt-4">
|
||||
<div class="{{ $card->icon_wrapper_classes }}">
|
||||
<x-heroicon-m-clock @class([
|
||||
'w-4 h-4',
|
||||
'text-primary-600 dark:text-primary-300' => !$card->is_attended,
|
||||
'text-primary-700 dark:text-primary-200' => $card->is_attended,
|
||||
]) />
|
||||
</div>
|
||||
<div class="flex flex-col min-w-0">
|
||||
<span
|
||||
class="text-[10px] font-bold uppercase text-gray-400 tracking-widest leading-none mb-1">Waktu
|
||||
Kuliah</span>
|
||||
<span class="{{ $card->time_label_classes }}">
|
||||
{{ $card->time_range }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div @class([
|
||||
'pt-4 border-t',
|
||||
'border-gray-100 dark:border-gray-700' => !$card->is_attended,
|
||||
'border-primary-200 dark:border-primary-800' => $card->is_attended,
|
||||
])>
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<span
|
||||
class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-none">Status</span>
|
||||
<span class="{{ $card->status_badge_classes }}">
|
||||
{{ $card->status_label }}
|
||||
</span>
|
||||
</div>
|
||||
@if ($card->is_attended)
|
||||
<span
|
||||
class="text-[10px] font-bold uppercase text-gray-400 tracking-widest leading-none">
|
||||
Tercatat: <span
|
||||
class="text-primary-600 dark:text-primary-200">{{ $card->attended_at }}</span>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
@if ($card->is_attended)
|
||||
<span
|
||||
class="text-[10px] font-bold uppercase text-gray-400 tracking-widest leading-none">
|
||||
Tercatat: <span
|
||||
class="text-primary-600 dark:text-primary-200">{{ $card->attended_at }}</span>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="{{ $card->footer_classes }}">
|
||||
@if ($card->can_attend)
|
||||
<x-filament::button wire:click="attend({{ $card->id }})" color="primary"
|
||||
size="xs"
|
||||
class="rounded-lg shadow-sm font-bold uppercase tracking-tight text-[10px]">
|
||||
Presensi Sekarang
|
||||
</x-filament::button>
|
||||
@elseif ($card->is_attended)
|
||||
<div
|
||||
class="flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-white dark:bg-primary-800 border border-primary-300 dark:border-primary-600 shadow-sm">
|
||||
<x-heroicon-m-hand-thumb-up
|
||||
class="w-3.5 h-3.5 text-primary-600 dark:text-primary-200" />
|
||||
<span
|
||||
class="text-[10px] font-bold text-primary-700 dark:text-primary-200 uppercase tracking-tight">
|
||||
Selesai
|
||||
</span>
|
||||
</div>
|
||||
@else
|
||||
<div class="px-2 py-1">
|
||||
<span
|
||||
class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-none italic">Belum
|
||||
Dibuka</span>
|
||||
</div>
|
||||
@endif
|
||||
<div class="{{ $card->footer_classes }}">
|
||||
@if ($card->can_attend)
|
||||
<x-filament::button wire:click="attend({{ $card->id }})" color="primary"
|
||||
size="xs"
|
||||
class="rounded-lg shadow-sm font-bold uppercase tracking-tight text-[10px]">
|
||||
Presensi Sekarang
|
||||
</x-filament::button>
|
||||
@elseif ($card->is_attended)
|
||||
<div
|
||||
class="flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-white dark:bg-primary-800 border border-primary-300 dark:border-primary-600 shadow-sm">
|
||||
<x-heroicon-m-hand-thumb-up
|
||||
class="w-3.5 h-3.5 text-primary-600 dark:text-primary-200" />
|
||||
<span
|
||||
class="text-[10px] font-bold text-primary-700 dark:text-primary-200 uppercase tracking-tight">
|
||||
Selesai
|
||||
</span>
|
||||
</div>
|
||||
@else
|
||||
<div class="px-2 py-1">
|
||||
<span
|
||||
class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-none italic">Belum
|
||||
Dibuka</span>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<x-filament::empty-state icon="heroicon-o-finger-print" heading="Tidak ada data yang ditemukan"
|
||||
description="Setelah jadwal Anda muncul, Anda dapat melakukan presensi di sini. Pastikan Anda mengecek kembali pada jam perkuliahan."
|
||||
iconColor="gray">
|
||||
</x-filament::empty-state>
|
||||
@endforelse
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@else
|
||||
<x-filament::empty-state icon="heroicon-o-finger-print" heading="Tidak ada data yang ditemukan"
|
||||
description="Setelah jadwal Anda muncul, Anda dapat melakukan presensi di sini. Pastikan Anda mengecek kembali pada jam perkuliahan."
|
||||
iconColor="gray">
|
||||
</x-filament::empty-state>
|
||||
@endif
|
||||
|
||||
</x-filament::section>
|
||||
|
||||
<x-filament::section>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user