refactor: update attendance and assignment actions to inline definitions and remove unused actions

This commit is contained in:
Yoga Pangestu 2026-03-30 14:45:32 +07:00
parent 69fde94108
commit f75f43fb2e
8 changed files with 64 additions and 214 deletions

View File

@ -17,7 +17,7 @@ protected function setUp(): void
{
parent::setUp();
$this->label('Bagikan')
$this->label('Bagikan Presensi')
->icon('heroicon-o-share')
->color(Color::Teal)
->link()

View File

@ -1,53 +0,0 @@
<?php
namespace App\Filament\Resources\Learning\ClassSessions\Actions;
use App\Models\Assignment;
use Filament\Actions\Action;
use Filament\Infolists\Components\TextEntry;
use Filament\Support\Enums\Width;
use Joaopaulolndev\FilamentPdfViewer\Infolists\Components\PdfViewerEntry;
class ViewAssignmentDetailAction extends Action
{
public static function getDefaultName(): ?string
{
return 'viewAssignmentDetail';
}
protected function setUp(): void
{
parent::setUp();
$this->modalHeading('Detail Tugas')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::FourExtraLarge)
->infolist(function (array $arguments) {
$record = Assignment::find($arguments['record'], ['*']);
if (! $record) {
return [];
}
$entries = [
TextEntry::make('description')
->label('Deskripsi')
->html()
->columnSpanFull(),
TextEntry::make('due_date')
->label('Batas Waktu')
->dateTime('l, d F Y, H:i')
->columnSpanFull(),
];
$mediaEntries = $record->getMedia('assignments')->map(function ($item, $index) {
return PdfViewerEntry::make('pdf_'.$index)
->label('Lampiran PDF')
->fileUrl($item->getUrl())
->columnSpanFull();
})->toArray();
return array_merge($entries, $mediaEntries);
});
}
}

View File

@ -1,41 +0,0 @@
<?php
namespace App\Filament\Resources\Learning\ClassSessions\Actions;
use App\Models\ClassSession;
use Filament\Actions\Action;
use Filament\Support\Colors\Color;
use Filament\Support\Enums\Width;
class ViewAssignmentsAction extends Action
{
public static function getDefaultName(): ?string
{
return 'viewAssignments';
}
protected function setUp(): void
{
parent::setUp();
$this->label('Tugas')
->color(Color::Sky)
->icon('heroicon-o-clipboard-document-list')
->link()
->modalHeading('Tugas Sesi')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::TwoExtraLarge)
->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.assignments-modal', [
'assignments' => ClassSession::find($arguments['session'] ?? null, ['*'])?->assignments()
->latest()
->get()
->map(fn ($a) => (object) [
'id' => $a->id,
'title' => $a->title,
'type_label' => $a->type?->getLabel() ?? 'Tugas',
'due_date_formatted' => $a->due_date?->translatedFormat('d F Y, H:i') ?? '-',
]) ?? collect(),
]));
}
}

View File

@ -1,32 +0,0 @@
<?php
namespace App\Filament\Resources\Learning\ClassSessions\Actions;
use App\Models\ClassSession;
use Filament\Actions\Action;
use Filament\Support\Enums\Width;
class ViewAttendanceAction extends Action
{
public static function getDefaultName(): ?string
{
return 'viewAttendance';
}
protected function setUp(): void
{
parent::setUp();
$this->label('Presensi')
->color('success')
->icon('heroicon-o-check-circle')
->link()
->modalHeading('Daftar Presensi')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::TwoExtraLarge)
->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.attendance-modal', [
'attendances' => ClassSession::find($arguments['session'] ?? null, ['*'])?->attendances()->with('student')->latest('attended_at')->get() ?? collect(),
]));
}
}

View File

@ -1,29 +0,0 @@
<?php
namespace App\Filament\Resources\Learning\ClassSessions\Actions;
use App\Models\Material;
use Filament\Actions\Action;
use Filament\Support\Enums\Width;
class ViewMaterialDetailAction extends Action
{
public static function getDefaultName(): ?string
{
return 'viewMaterialDetail';
}
protected function setUp(): void
{
parent::setUp();
$this->record(fn (array $arguments) => Material::find($arguments['record'] ?? null, ['*']))
->modalHeading('Detail Materi')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::FourExtraLarge)
->modalContent(fn (?Material $record) => $record ? view('filament.resources.learning.class-sessions.material-detail-modal', [
'record' => $record,
]) : null);
}
}

View File

@ -1,40 +0,0 @@
<?php
namespace App\Filament\Resources\Learning\ClassSessions\Actions;
use App\Models\ClassSession;
use Filament\Actions\Action;
use Filament\Support\Colors\Color;
use Filament\Support\Enums\Width;
class ViewMaterialsAction extends Action
{
public static function getDefaultName(): ?string
{
return 'viewMaterials';
}
protected function setUp(): void
{
parent::setUp();
$this->label('Materi')
->color(Color::Purple)
->icon('heroicon-o-book-open')
->link()
->modalHeading('Materi Sesi')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::TwoExtraLarge)
->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.materials-modal', [
'materials' => ClassSession::find($arguments['session'] ?? null, ['*'])?->materials()
->latest()
->get()
->map(fn ($m) => (object) [
'id' => $m->id,
'title' => $m->title,
'created_at_formatted' => $m->created_at?->translatedFormat('d F Y') ?? '-',
]) ?? collect(),
]));
}
}

View File

@ -9,13 +9,10 @@
use App\Filament\Resources\Learning\ClassSessions\Actions\GenerateSessionsAction;
use App\Filament\Resources\Learning\ClassSessions\Actions\ShareAssignmentAction;
use App\Filament\Resources\Learning\ClassSessions\Actions\ShareAttendanceAction;
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\Material;
use App\Models\Student;
use Filament\Actions\Action;
use Filament\Actions\Concerns\InteractsWithActions;
@ -28,6 +25,7 @@
use Filament\Resources\Pages\Page;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Schema;
use Filament\Support\Enums\Width;
use Illuminate\Support\Collection;
use Livewire\Attributes\Computed;
@ -152,7 +150,6 @@ protected function getActions(): array
$this->editSessionAction(),
$this->deleteSessionAction(),
$this->viewMaterialDetailAction(),
$this->viewAssignmentDetailAction(),
];
}
@ -168,17 +165,65 @@ public function shareAssignmentAction(): Action
public function viewAttendanceAction(): Action
{
return ViewAttendanceAction::make();
return Action::make('viewAttendance')
->label('Presensi')
->color('success')
->icon('heroicon-o-check-circle')
->link()
->modalHeading('Daftar Presensi')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::TwoExtraLarge)
->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.attendance-modal', [
'attendances' => ClassSession::find($arguments['session'] ?? null, ['*'])?->attendances()->with('student')->latest('attended_at')->get() ?? collect(),
]));
}
public function viewMaterialsAction(): Action
{
return ViewMaterialsAction::make();
return Action::make('viewMaterials')
->label('Materi')
->color('purple')
->icon('heroicon-o-book-open')
->link()
->modalHeading('Materi Sesi')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::TwoExtraLarge)
->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.materials-modal', [
'materials' => ClassSession::find($arguments['session'] ?? null, ['*'])?->materials()
->latest()
->get()
->map(fn ($m) => (object) [
'id' => $m->id,
'title' => $m->title,
'created_at_formatted' => $m->created_at?->translatedFormat('d F Y') ?? '-',
]) ?? collect(),
]));
}
public function viewAssignmentsAction(): Action
{
return ViewAssignmentsAction::make();
return Action::make('viewAssignments')
->label('Tugas')
->color('sky')
->icon('heroicon-o-clipboard-document-list')
->link()
->modalHeading('Tugas Sesi')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::TwoExtraLarge)
->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.assignments-modal', [
'assignments' => ClassSession::find($arguments['session'] ?? null, ['*'])?->assignments()
->latest()
->get()
->map(fn ($a) => (object) [
'id' => $a->id,
'title' => $a->title,
'type_label' => $a->type?->getLabel() ?? 'Tugas',
'due_date_formatted' => $a->due_date?->translatedFormat('d F Y, H:i') ?? '-',
]) ?? collect(),
]));
}
public function editSessionAction(): Action
@ -193,11 +238,14 @@ public function deleteSessionAction(): Action
public function viewMaterialDetailAction(): Action
{
return ViewMaterialDetailAction::make();
}
public function viewAssignmentDetailAction(): Action
{
return ViewAssignmentDetailAction::make();
return Action::make('viewMaterialDetail')
->record(fn (array $arguments) => Material::find($arguments['record'] ?? null, ['*']))
->modalHeading('Detail Materi')
->modalSubmitAction(false)
->modalCancelActionLabel('Tutup')
->modalWidth(Width::FourExtraLarge)
->modalContent(fn (?Material $record) => $record ? view('filament.resources.learning.class-sessions.material-detail-modal', [
'record' => $record,
]) : null);
}
}

View File

@ -56,9 +56,6 @@
<div class="flex flex-wrap items-center gap-3 px-4 py-3 border-t border-gray-100 dark:border-gray-700">
{{ ($this->shareAttendanceAction)(['session' => $session->id]) }}
{{ ($this->shareAssignmentAction)(['session' => $session->id]) }}
{{ ($this->viewAttendanceAction)(['session' => $session->id]) }}
{{ ($this->viewMaterialsAction)(['session' => $session->id]) }}
{{ ($this->viewAssignmentsAction)(['session' => $session->id]) }}
{{ ($this->editSessionAction)(['session' => $session->id]) }}
{{ ($this->deleteSessionAction)(['session' => $session->id]) }}
</div>