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(); parent::setUp();
$this->label('Bagikan') $this->label('Bagikan Presensi')
->icon('heroicon-o-share') ->icon('heroicon-o-share')
->color(Color::Teal) ->color(Color::Teal)
->link() ->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\GenerateSessionsAction;
use App\Filament\Resources\Learning\ClassSessions\Actions\ShareAssignmentAction; use App\Filament\Resources\Learning\ClassSessions\Actions\ShareAssignmentAction;
use App\Filament\Resources\Learning\ClassSessions\Actions\ShareAttendanceAction; 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\Filament\Resources\Learning\ClassSessions\ClassSessionResource;
use App\Models\ClassSession;
use App\Models\Course; use App\Models\Course;
use App\Models\Material;
use App\Models\Student; use App\Models\Student;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Actions\Concerns\InteractsWithActions; use Filament\Actions\Concerns\InteractsWithActions;
@ -28,6 +25,7 @@
use Filament\Resources\Pages\Page; use Filament\Resources\Pages\Page;
use Filament\Schemas\Components\Grid; use Filament\Schemas\Components\Grid;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Enums\Width;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Livewire\Attributes\Computed; use Livewire\Attributes\Computed;
@ -152,7 +150,6 @@ protected function getActions(): array
$this->editSessionAction(), $this->editSessionAction(),
$this->deleteSessionAction(), $this->deleteSessionAction(),
$this->viewMaterialDetailAction(), $this->viewMaterialDetailAction(),
$this->viewAssignmentDetailAction(),
]; ];
} }
@ -168,17 +165,65 @@ public function shareAssignmentAction(): Action
public function viewAttendanceAction(): 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 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 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 public function editSessionAction(): Action
@ -193,11 +238,14 @@ public function deleteSessionAction(): Action
public function viewMaterialDetailAction(): Action public function viewMaterialDetailAction(): Action
{ {
return ViewMaterialDetailAction::make(); return Action::make('viewMaterialDetail')
} ->record(fn (array $arguments) => Material::find($arguments['record'] ?? null, ['*']))
->modalHeading('Detail Materi')
public function viewAssignmentDetailAction(): Action ->modalSubmitAction(false)
{ ->modalCancelActionLabel('Tutup')
return ViewAssignmentDetailAction::make(); ->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"> <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->shareAttendanceAction)(['session' => $session->id]) }}
{{ ($this->shareAssignmentAction)(['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->editSessionAction)(['session' => $session->id]) }}
{{ ($this->deleteSessionAction)(['session' => $session->id]) }} {{ ($this->deleteSessionAction)(['session' => $session->id]) }}
</div> </div>