refactor: remove unused class session actions and implement empty state for today's sessions view

This commit is contained in:
Yoga Pangestu 2026-03-30 08:28:25 +07:00
parent c15f429032
commit d09ef22945
2 changed files with 41 additions and 71 deletions

View File

@ -2,17 +2,11 @@
namespace App\Filament\Resources\Learning\ClassSessions\Pages;
use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAssignmentDetailAction;
use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAssignmentsAction;
use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAttendanceAction;
use App\Filament\Resources\Learning\ClassSessions\Actions\ViewMaterialDetailAction;
use App\Filament\Resources\Learning\ClassSessions\Actions\ViewMaterialsAction;
use App\Filament\Resources\Learning\ClassSessions\ClassSessionResource;
use App\Models\ClassSession;
use App\Models\Course;
use App\Models\Student;
use App\Settings\GeneralSettings;
use Filament\Actions\Action;
use Filament\Actions\Concerns\InteractsWithActions;
use Filament\Actions\Contracts\HasActions;
use Filament\Forms\Components\TextInput;
@ -135,40 +129,4 @@ public function courses(): Collection
];
});
}
protected function getActions(): array
{
return [
$this->viewAttendanceAction(),
$this->viewMaterialsAction(),
$this->viewAssignmentsAction(),
$this->viewMaterialDetailAction(),
$this->viewAssignmentDetailAction(),
];
}
public function viewAttendanceAction(): Action
{
return ViewAttendanceAction::make();
}
public function viewMaterialsAction(): Action
{
return ViewMaterialsAction::make();
}
public function viewAssignmentsAction(): Action
{
return ViewAssignmentsAction::make();
}
public function viewMaterialDetailAction(): Action
{
return ViewMaterialDetailAction::make();
}
public function viewAssignmentDetailAction(): Action
{
return ViewAssignmentDetailAction::make();
}
}

View File

@ -9,15 +9,15 @@
</x-filament::section>
<!-- Today's Sessions Section -->
@if ($this->todaySessions->isNotEmpty())
<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="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>
@if ($this->todaySessions->isNotEmpty())
<div class="space-y-4">
@foreach ($this->todaySessions as $session)
<a href="{{ $session->url }}" class="{{ $session->card_classes }}">
@ -43,19 +43,21 @@
</div>
<div class="flex gap-4">
<div class="flex items-center gap-1.5 px-2 py-0.5 rounded-lg hover:bg-amber-50 dark:hover:bg-amber-900/10 cursor-pointer transition-colors"
wire:click="mountAction('viewMaterials', { session: {{ $session->id }} })"
onclick="event.stopPropagation()">
wire:click="mountAction('viewMaterials', { session: {{ $session->id }} })"
onclick="event.stopPropagation()">
<x-heroicon-o-document-text class="w-4 h-4 text-amber-500" />
<span class="text-xs font-bold text-gray-600 dark:text-gray-400">
{{ $session->materials_count }}<span class="ml-1 font-medium text-gray-400">Materi</span>
{{ $session->materials_count }}<span
class="ml-1 font-medium text-gray-400">Materi</span>
</span>
</div>
<div class="flex items-center gap-1.5 px-2 py-0.5 rounded-lg hover:bg-primary-50 dark:hover:bg-primary-900/10 cursor-pointer transition-colors"
wire:click="mountAction('viewAssignments', { session: {{ $session->id }} })"
onclick="event.stopPropagation()">
wire:click="mountAction('viewAssignments', { session: {{ $session->id }} })"
onclick="event.stopPropagation()">
<x-heroicon-o-pencil-square class="w-4 h-4 text-primary-500" />
<span class="text-xs font-bold text-gray-600 dark:text-gray-400">
{{ $session->assignments_count }}<span class="ml-1 font-medium text-gray-400">Tugas</span>
{{ $session->assignments_count }}<span
class="ml-1 font-medium text-gray-400">Tugas</span>
</span>
</div>
</div>
@ -71,25 +73,31 @@ class="mt-2 flex items-center gap-1.5 text-[10px] text-gray-400 dark:text-gray-5
<div class="{{ $session->attendance_section_classes }}">
@if ($session->is_pending)
<div class="flex items-center gap-2 text-gray-400 dark:text-gray-500 p-2 opacity-50">
<div
class="flex items-center gap-2 text-gray-400 dark:text-gray-500 p-2 opacity-50">
<x-heroicon-m-clock class="w-5 h-5" />
</div>
@else
<div class="flex flex-col items-center justify-center min-w-[80px] p-2 hover:bg-white/50 dark:hover:bg-white/5 rounded-lg transition-colors cursor-pointer"
onclick="event.preventDefault(); event.stopPropagation();"
wire:click="mountAction('viewAttendance', { session: {{ $session->id }} })">
<div class="flex flex-col items-center">
<span class="text-lg font-bold text-primary-600 dark:text-primary-400 leading-none">
{{ $session->attendances_count }}<span class="text-[10px] text-gray-400 font-normal ml-0.5">/{{ $session->total_students }}</span>
</span>
<div class="mt-1.5 w-12 h-1 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
<div class="h-full bg-primary-500 rounded-full transition-all duration-500" style="width: {{ $session->attendance_percentage }}%"></div>
onclick="event.preventDefault(); event.stopPropagation();"
wire:click="mountAction('viewAttendance', { session: {{ $session->id }} })">
<div class="flex flex-col items-center">
<span
class="text-lg font-bold text-primary-600 dark:text-primary-400 leading-none">
{{ $session->attendances_count }}<span
class="text-[10px] text-gray-400 font-normal ml-0.5">/{{ $session->total_students }}</span>
</span>
<div
class="mt-1.5 w-12 h-1 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
<div class="h-full bg-primary-500 rounded-full transition-all duration-500"
style="width: {{ $session->attendance_percentage }}%"></div>
</div>
<span
class="text-[9px] uppercase font-bold text-gray-500 mt-1 leading-none tracking-wider">
{{ $session->attendance_percentage }}% Hadir
</span>
</div>
<span class="text-[9px] uppercase font-bold text-gray-500 mt-1 leading-none tracking-wider">
{{ $session->attendance_percentage }}% Hadir
</span>
</div>
</div>
@endif
</div>
</div>
@ -97,8 +105,12 @@ class="mt-2 flex items-center gap-1.5 text-[10px] text-gray-400 dark:text-gray-5
</a>
@endforeach
</div>
</x-filament::section>
@endif
@else
<x-filament::empty-state icon="heroicon-o-calendar-days" heading="Tidak ada data yang ditemukan"
description="Tidak ada jadwal hari ini." iconColor="gray">
</x-filament::empty-state>
@endif
</x-filament::section>
<!-- All Courses Section -->
<x-filament::section icon="heroicon-o-academic-cap" icon-color="gray">