diff --git a/app/Filament/Resources/Learning/Assignments/Actions/CreateAssignmentAction.php b/app/Filament/Resources/Learning/Assignments/Actions/CreateAssignmentAction.php new file mode 100644 index 0000000..51a8fc0 --- /dev/null +++ b/app/Filament/Resources/Learning/Assignments/Actions/CreateAssignmentAction.php @@ -0,0 +1,20 @@ +label('Tambah'); + } +} diff --git a/app/Filament/Resources/Learning/Assignments/Pages/ListAssignments.php b/app/Filament/Resources/Learning/Assignments/Pages/ListAssignments.php index eb01deb..1f537f5 100644 --- a/app/Filament/Resources/Learning/Assignments/Pages/ListAssignments.php +++ b/app/Filament/Resources/Learning/Assignments/Pages/ListAssignments.php @@ -3,7 +3,7 @@ namespace App\Filament\Resources\Learning\Assignments\Pages; use App\Enums\AssignmentType; -use App\Filament\Actions\Cheerful\CreateAction; +use App\Filament\Resources\Learning\Assignments\Actions\CreateAssignmentAction; use App\Filament\Resources\Learning\Assignments\Actions\DeleteAssignmentAction; use App\Filament\Resources\Learning\Assignments\Actions\EditAssignmentAction; use App\Filament\Resources\Learning\Assignments\Actions\PinAction; @@ -30,8 +30,7 @@ class ListAssignments extends Page protected function getHeaderActions(): array { return [ - CreateAction::make() - ->label('Tambah'), + CreateAssignmentAction::make(), ]; } diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/CreateSessionAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/CreateSessionAction.php new file mode 100644 index 0000000..c7906ab --- /dev/null +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/CreateSessionAction.php @@ -0,0 +1,37 @@ +label('Tambah') + ->modalHeading('Tambah Sesi') + ->modalSubmitActionLabel('Simpan') + ->modalCancelActionLabel('Batal') + ->schema(function ($schema, $livewire) { + return $livewire->form($schema); + }) + ->mutateDataUsing(function (array $data, $livewire): array { + $data['course_id'] = $livewire->courseId; + + return $data; + }) + ->extraModalFooterActions(fn (CreateAction $action): array => [ + $action->makeModalSubmitAction('createAnother', arguments: ['another' => true]) + ->label('Simpan dan Tambah Lagi'), + ]) + ->modalWidth(Width::TwoExtraLarge); + } +} diff --git a/app/Filament/Resources/Learning/Materials/Actions/CreateMaterialAction.php b/app/Filament/Resources/Learning/Materials/Actions/CreateMaterialAction.php new file mode 100644 index 0000000..0996aeb --- /dev/null +++ b/app/Filament/Resources/Learning/Materials/Actions/CreateMaterialAction.php @@ -0,0 +1,51 @@ +label('Tambah') + ->modalHeading('Tambah Materi') + ->modalSubmitActionLabel('Simpan') + ->modalCancelActionLabel('Batal') + ->extraModalFooterActions(fn (CreateAction $action): array => [ + $action->makeModalSubmitAction('createAnother', arguments: ['another' => true]) + ->label('Simpan dan Tambah Lagi'), + ]) + ->using(function (array $data): Material { + $pdf = $data['pdf'] ?? []; + unset($data['pdf']); + + $record = Material::create($data); + + if (! empty($pdf)) { + foreach ($pdf as $filePath) { + $record->addMediaFromDisk($filePath, config('filesystems.default')) + ->preservingOriginal() + ->withCustomProperties([ + 'feature' => 'materials', + 'date' => now()->toDateString(), + 'doc_type' => 'pdf', + ]) + ->toMediaCollection('materials'); + } + } + + return $record; + }) + ->modalWidth(Width::FourExtraLarge); + } +} diff --git a/app/Filament/Resources/Learning/Materials/Actions/EditMaterialAction.php b/app/Filament/Resources/Learning/Materials/Actions/EditMaterialAction.php new file mode 100644 index 0000000..9d08b0d --- /dev/null +++ b/app/Filament/Resources/Learning/Materials/Actions/EditMaterialAction.php @@ -0,0 +1,71 @@ +modalWidth(Width::FourExtraLarge) + ->fillForm(function (Material $record): array { + $data = $record->toArray(); + + $data['pdf'] = $record->getMedia('materials') + ->map(fn ($media) => $media->getPathRelativeToRoot()) + ->toArray(); + + return $data; + }) + ->using(function (Material $record, array $data): Material { + $pdf = $data['pdf'] ?? []; + unset($data['pdf']); + + $record->update($data); + + $existingMedia = $record->getMedia('materials'); + $mediaMap = []; + + foreach ($existingMedia as $media) { + if (in_array($media->getPathRelativeToRoot(), $pdf)) { + $mediaMap[$media->getPathRelativeToRoot()] = $media; + } else { + $media->delete(); + } + } + + foreach ($pdf as $path) { + if (! isset($mediaMap[$path])) { + $newMedia = $record->addMediaFromDisk($path, config('filesystems.default')) + ->preservingOriginal() + ->withCustomProperties([ + 'feature' => 'materials', + 'date' => now()->toDateString(), + 'doc_type' => 'pdf', + ]) + ->toMediaCollection('materials'); + $mediaMap[$path] = $newMedia; + } + } + + foreach ($pdf as $index => $path) { + if (isset($mediaMap[$path])) { + $mediaMap[$path]->order_column = $index + 1; + $mediaMap[$path]->save(); + } + } + + return $record; + }); + } +} diff --git a/app/Filament/Resources/Learning/Materials/Actions/ViewMaterialAction.php b/app/Filament/Resources/Learning/Materials/Actions/ViewMaterialAction.php new file mode 100644 index 0000000..fedf1a2 --- /dev/null +++ b/app/Filament/Resources/Learning/Materials/Actions/ViewMaterialAction.php @@ -0,0 +1,32 @@ +modalWidth(Width::FourExtraLarge) + ->schema(function (Material $record) { + return $record->getMedia('materials')->map(function ($item, $index) { + return PdfViewerEntry::make('pdf_'.$index) + ->hiddenLabel() + ->fileUrl($item->getUrl()) + ->columnSpanFull(); + })->toArray(); + }) + ->visible(fn (Material $record) => $record->hasMedia('materials')); + } +} diff --git a/app/Filament/Resources/Learning/Materials/MaterialResource.php b/app/Filament/Resources/Learning/Materials/MaterialResource.php index 38b37ff..11c5275 100644 --- a/app/Filament/Resources/Learning/Materials/MaterialResource.php +++ b/app/Filament/Resources/Learning/Materials/MaterialResource.php @@ -4,11 +4,12 @@ use App\Enums\RoleEnum; use App\Filament\Actions\Cheerful\DeleteAction; -use App\Filament\Actions\Cheerful\EditAction; use App\Filament\Actions\Cheerful\ForceDeleteAction; use App\Filament\Actions\Cheerful\RestoreAction; use App\Filament\Actions\DefaultBulkActions; use App\Filament\Columns\TimestampColumns; +use App\Filament\Resources\Learning\Materials\Actions\EditMaterialAction; +use App\Filament\Resources\Learning\Materials\Actions\ViewMaterialAction; use App\Filament\Resources\Learning\Materials\Pages\ManageMaterials; use App\Models\ClassSession; use App\Models\Course; @@ -18,7 +19,6 @@ use Asmit\FilamentUpload\Forms\Components\AdvancedFileUpload; use BackedEnum; use Filament\Actions\BulkActionGroup; -use Filament\Actions\ViewAction; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Select; use Filament\Forms\Components\Textarea; @@ -26,7 +26,6 @@ use Filament\Resources\Resource; use Filament\Schemas\Components\Grid; use Filament\Schemas\Schema; -use Filament\Support\Enums\Width; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\Filter; @@ -35,7 +34,6 @@ use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Joaopaulolndev\FilamentPdfViewer\Infolists\Components\PdfViewerEntry; use UnitEnum; class MaterialResource extends Resource @@ -178,69 +176,9 @@ public static function table(Table $table): Table ->visible(fn () => auth()->user()->hasRole(RoleEnum::Developer)), ]) ->recordActions([ - ViewAction::make() - ->modalWidth(Width::FourExtraLarge) - ->schema(function (Material $record) { - return $record->getMedia('materials')->map(function ($item, $index) { - return PdfViewerEntry::make('pdf_'.$index) - ->hiddenLabel() - ->fileUrl($item->getUrl()) - ->columnSpanFull(); - })->toArray(); - }) - ->visible(fn (Material $record) => $record->hasMedia('materials')), + ViewMaterialAction::make(), - EditAction::make() - ->modalWidth(Width::FourExtraLarge) - ->fillForm(function (Material $record): array { - $data = $record->toArray(); - - $data['pdf'] = $record->getMedia('materials') - ->map(fn ($media) => $media->getPathRelativeToRoot()) - ->toArray(); - - return $data; - }) - ->using(function (Material $record, array $data): Material { - $pdf = $data['pdf'] ?? []; - unset($data['pdf']); - - $record->update($data); - - $existingMedia = $record->getMedia('materials'); - $mediaMap = []; - - foreach ($existingMedia as $media) { - if (in_array($media->getPathRelativeToRoot(), $pdf)) { - $mediaMap[$media->getPathRelativeToRoot()] = $media; - } else { - $media->delete(); - } - } - - foreach ($pdf as $path) { - if (! isset($mediaMap[$path])) { - $newMedia = $record->addMediaFromDisk($path, config('filesystems.default')) - ->preservingOriginal() - ->withCustomProperties([ - 'feature' => 'materials', - 'date' => now()->toDateString(), - 'doc_type' => 'pdf', - ]) - ->toMediaCollection('materials'); - $mediaMap[$path] = $newMedia; - } - } - - foreach ($pdf as $index => $path) { - if (isset($mediaMap[$path])) { - $mediaMap[$path]->order_column = $index + 1; - $mediaMap[$path]->save(); - } - } - - return $record; - }), + EditMaterialAction::make(), DeleteAction::make(), diff --git a/app/Filament/Resources/Learning/Materials/Pages/ManageMaterials.php b/app/Filament/Resources/Learning/Materials/Pages/ManageMaterials.php index 7b9aa10..b330633 100644 --- a/app/Filament/Resources/Learning/Materials/Pages/ManageMaterials.php +++ b/app/Filament/Resources/Learning/Materials/Pages/ManageMaterials.php @@ -2,11 +2,9 @@ namespace App\Filament\Resources\Learning\Materials\Pages; -use App\Filament\Actions\Cheerful\CreateAction; +use App\Filament\Resources\Learning\Materials\Actions\CreateMaterialAction; use App\Filament\Resources\Learning\Materials\MaterialResource; -use App\Models\Material; use Filament\Resources\Pages\ManageRecords; -use Filament\Support\Enums\Width; class ManageMaterials extends ManageRecords { @@ -17,37 +15,7 @@ class ManageMaterials extends ManageRecords protected function getHeaderActions(): array { return [ - CreateAction::make() - ->label('Tambah') - ->modalHeading('Tambah Materi') - ->modalSubmitActionLabel('Simpan') - ->modalCancelActionLabel('Batal') - ->extraModalFooterActions(fn (CreateAction $action): array => [ - $action->makeModalSubmitAction('createAnother', arguments: ['another' => true]) - ->label('Simpan dan Tambah Lagi'), - ]) - ->using(function (array $data): Material { - $pdf = $data['pdf'] ?? []; - unset($data['pdf']); - - $record = Material::create($data); - - if (! empty($pdf)) { - foreach ($pdf as $filePath) { - $record->addMediaFromDisk($filePath, config('filesystems.default')) - ->preservingOriginal() - ->withCustomProperties([ - 'feature' => 'materials', - 'date' => now()->toDateString(), - 'doc_type' => 'pdf', - ]) - ->toMediaCollection('materials'); - } - } - - return $record; - }) - ->modalWidth(Width::FourExtraLarge), + CreateMaterialAction::make(), ]; } } diff --git a/app/Filament/Resources/Master/Courses/Actions/CreateCourseAction.php b/app/Filament/Resources/Master/Courses/Actions/CreateCourseAction.php new file mode 100644 index 0000000..978d9d0 --- /dev/null +++ b/app/Filament/Resources/Master/Courses/Actions/CreateCourseAction.php @@ -0,0 +1,29 @@ +label('Tambah') + ->modalHeading('Tambah Mata Kuliah') + ->modalSubmitActionLabel('Simpan') + ->modalCancelActionLabel('Batal') + ->extraModalFooterActions(fn (CreateAction $action): array => [ + $action->makeModalSubmitAction('createAnother', arguments: ['another' => true]) + ->label('Simpan dan Tambah Lagi'), + ]) + ->modalWidth(Width::Large); + } +} diff --git a/app/Filament/Resources/Master/Courses/Actions/EditCourseAction.php b/app/Filament/Resources/Master/Courses/Actions/EditCourseAction.php new file mode 100644 index 0000000..88fb91e --- /dev/null +++ b/app/Filament/Resources/Master/Courses/Actions/EditCourseAction.php @@ -0,0 +1,21 @@ +modalWidth(Width::Large); + } +} diff --git a/app/Filament/Resources/Master/Courses/CourseResource.php b/app/Filament/Resources/Master/Courses/CourseResource.php index f74154a..f51f951 100644 --- a/app/Filament/Resources/Master/Courses/CourseResource.php +++ b/app/Filament/Resources/Master/Courses/CourseResource.php @@ -4,11 +4,11 @@ use App\Enums\RoleEnum; use App\Filament\Actions\Cheerful\DeleteAction; -use App\Filament\Actions\Cheerful\EditAction; use App\Filament\Actions\Cheerful\ForceDeleteAction; use App\Filament\Actions\Cheerful\RestoreAction; use App\Filament\Actions\DefaultBulkActions; use App\Filament\Columns\TimestampColumns; +use App\Filament\Resources\Master\Courses\Actions\EditCourseAction; use App\Filament\Resources\Master\Courses\Pages\ManageCourses; use App\Models\Course; use BackedEnum; @@ -16,7 +16,6 @@ use Filament\Forms\Components\TextInput; use Filament\Resources\Resource; use Filament\Schemas\Schema; -use Filament\Support\Enums\Width; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\TrashedFilter; @@ -122,8 +121,7 @@ public static function table(Table $table): Table ->visible(fn () => auth()->user()->hasRole(RoleEnum::Developer)), ]) ->recordActions([ - EditAction::make() - ->modalWidth(Width::Large), + EditCourseAction::make(), DeleteAction::make(), diff --git a/app/Filament/Resources/Master/Courses/Pages/ManageCourses.php b/app/Filament/Resources/Master/Courses/Pages/ManageCourses.php index c811bcd..ed9f68b 100644 --- a/app/Filament/Resources/Master/Courses/Pages/ManageCourses.php +++ b/app/Filament/Resources/Master/Courses/Pages/ManageCourses.php @@ -2,10 +2,9 @@ namespace App\Filament\Resources\Master\Courses\Pages; -use App\Filament\Actions\Cheerful\CreateAction; +use App\Filament\Resources\Master\Courses\Actions\CreateCourseAction; use App\Filament\Resources\Master\Courses\CourseResource; use Filament\Resources\Pages\ManageRecords; -use Filament\Support\Enums\Width; class ManageCourses extends ManageRecords { @@ -16,16 +15,7 @@ class ManageCourses extends ManageRecords protected function getHeaderActions(): array { return [ - CreateAction::make() - ->label('Tambah') - ->modalHeading('Tambah Mata Kuliah') - ->modalSubmitActionLabel('Simpan') - ->modalCancelActionLabel('Batal') - ->extraModalFooterActions(fn (CreateAction $action): array => [ - $action->makeModalSubmitAction('createAnother', arguments: ['another' => true]) - ->label('Simpan dan Tambah Lagi'), - ]) - ->modalWidth(Width::Large), + CreateCourseAction::make(), ]; } } diff --git a/app/Filament/Resources/Master/Students/Actions/CreateStudentAction.php b/app/Filament/Resources/Master/Students/Actions/CreateStudentAction.php new file mode 100644 index 0000000..a256c11 --- /dev/null +++ b/app/Filament/Resources/Master/Students/Actions/CreateStudentAction.php @@ -0,0 +1,20 @@ +label('Tambah'); + } +} diff --git a/app/Filament/Resources/Master/Students/Actions/EditStudentAction.php b/app/Filament/Resources/Master/Students/Actions/EditStudentAction.php new file mode 100644 index 0000000..29a6699 --- /dev/null +++ b/app/Filament/Resources/Master/Students/Actions/EditStudentAction.php @@ -0,0 +1,21 @@ +modalWidth(Width::Large); + } +} diff --git a/app/Filament/Resources/Master/Students/Pages/ListStudents.php b/app/Filament/Resources/Master/Students/Pages/ListStudents.php index 7b0c9b3..8638508 100644 --- a/app/Filament/Resources/Master/Students/Pages/ListStudents.php +++ b/app/Filament/Resources/Master/Students/Pages/ListStudents.php @@ -2,7 +2,7 @@ namespace App\Filament\Resources\Master\Students\Pages; -use App\Filament\Actions\Cheerful\CreateAction; +use App\Filament\Resources\Master\Students\Actions\CreateStudentAction; use App\Filament\Resources\Master\Students\StudentResource; use Filament\Resources\Pages\ListRecords; @@ -15,8 +15,7 @@ class ListStudents extends ListRecords protected function getHeaderActions(): array { return [ - CreateAction::make() - ->label('Tambah'), + CreateStudentAction::make(), ]; } } diff --git a/app/Filament/Resources/Master/Students/Tables/StudentsTable.php b/app/Filament/Resources/Master/Students/Tables/StudentsTable.php index d30fdd7..d899aa6 100644 --- a/app/Filament/Resources/Master/Students/Tables/StudentsTable.php +++ b/app/Filament/Resources/Master/Students/Tables/StudentsTable.php @@ -6,16 +6,15 @@ use App\Enums\RoleEnum; use App\Enums\Sex; use App\Filament\Actions\Cheerful\DeleteAction; -use App\Filament\Actions\Cheerful\EditAction; use App\Filament\Actions\Cheerful\ForceDeleteAction; use App\Filament\Actions\Cheerful\RestoreAction; use App\Filament\Actions\DefaultBulkActions; use App\Filament\Columns\TimestampColumns; use App\Filament\Resources\Master\Students\Actions\ChangePasswordAction; +use App\Filament\Resources\Master\Students\Actions\EditStudentAction; use App\Filament\Support\SystemNotification; use App\Models\Student; use Filament\Actions\BulkActionGroup; -use Filament\Support\Enums\Width; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; @@ -131,8 +130,7 @@ public static function configure(Table $table): Table ->recordActions([ ChangePasswordAction::make('changePassword'), - EditAction::make() - ->modalWidth(Width::Large), + EditStudentAction::make(), DeleteAction::make(),