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; 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\Filament\Resources\Learning\ClassSessions\ClassSessionResource;
use App\Models\ClassSession; use App\Models\ClassSession;
use App\Models\Course; use App\Models\Course;
use App\Models\Student; use App\Models\Student;
use App\Settings\GeneralSettings; use App\Settings\GeneralSettings;
use Filament\Actions\Action;
use Filament\Actions\Concerns\InteractsWithActions; use Filament\Actions\Concerns\InteractsWithActions;
use Filament\Actions\Contracts\HasActions; use Filament\Actions\Contracts\HasActions;
use Filament\Forms\Components\TextInput; 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> </x-filament::section>
<!-- Today's Sessions Section --> <!-- Today's Sessions Section -->
@if ($this->todaySessions->isNotEmpty()) <x-filament::section icon="heroicon-o-bolt" icon-color="primary">
<x-filament::section icon="heroicon-o-bolt" icon-color="primary"> <x-slot name="heading">
<x-slot name="heading"> Sesi Hari Ini
Sesi Hari Ini </x-slot>
</x-slot> <x-slot name="description">
<x-slot name="description"> Sesi yang dijadwalkan pada {{ $this->today_date }}
Sesi yang dijadwalkan pada {{ $this->today_date }} </x-slot>
</x-slot>
@if ($this->todaySessions->isNotEmpty())
<div class="space-y-4"> <div class="space-y-4">
@foreach ($this->todaySessions as $session) @foreach ($this->todaySessions as $session)
<a href="{{ $session->url }}" class="{{ $session->card_classes }}"> <a href="{{ $session->url }}" class="{{ $session->card_classes }}">
@ -43,19 +43,21 @@
</div> </div>
<div class="flex gap-4"> <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" <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 }} })" wire:click="mountAction('viewMaterials', { session: {{ $session->id }} })"
onclick="event.stopPropagation()"> onclick="event.stopPropagation()">
<x-heroicon-o-document-text class="w-4 h-4 text-amber-500" /> <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"> <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> </span>
</div> </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" <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 }} })" wire:click="mountAction('viewAssignments', { session: {{ $session->id }} })"
onclick="event.stopPropagation()"> onclick="event.stopPropagation()">
<x-heroicon-o-pencil-square class="w-4 h-4 text-primary-500" /> <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"> <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> </span>
</div> </div>
</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 }}"> <div class="{{ $session->attendance_section_classes }}">
@if ($session->is_pending) @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" /> <x-heroicon-m-clock class="w-5 h-5" />
</div> </div>
@else @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" <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();" onclick="event.preventDefault(); event.stopPropagation();"
wire:click="mountAction('viewAttendance', { session: {{ $session->id }} })"> wire:click="mountAction('viewAttendance', { session: {{ $session->id }} })">
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<span class="text-lg font-bold text-primary-600 dark:text-primary-400 leading-none"> <span
{{ $session->attendances_count }}<span class="text-[10px] text-gray-400 font-normal ml-0.5">/{{ $session->total_students }}</span> class="text-lg font-bold text-primary-600 dark:text-primary-400 leading-none">
</span> {{ $session->attendances_count }}<span
<div class="mt-1.5 w-12 h-1 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"> class="text-[10px] text-gray-400 font-normal ml-0.5">/{{ $session->total_students }}</span>
<div class="h-full bg-primary-500 rounded-full transition-all duration-500" style="width: {{ $session->attendance_percentage }}%"></div> </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> </div>
<span class="text-[9px] uppercase font-bold text-gray-500 mt-1 leading-none tracking-wider">
{{ $session->attendance_percentage }}% Hadir
</span>
</div> </div>
</div>
@endif @endif
</div> </div>
</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> </a>
@endforeach @endforeach
</div> </div>
</x-filament::section> @else
@endif <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 --> <!-- All Courses Section -->
<x-filament::section icon="heroicon-o-academic-cap" icon-color="gray"> <x-filament::section icon="heroicon-o-academic-cap" icon-color="gray">