has('academic_term_id'); $academicTermId = $academicTermSelected ? ((int) $request->validated('academic_term_id') ?: null) : $this->academicTermService->getActive()?->id; return Inertia::render('admin/academic-classes/materials/index', [ 'materials' => Inertia::scroll(fn () => $this->service->paginated( $request->user(), ...$request->validatedWithDefaults(), courseClassId: $request->validated('course_class_id'), academicTermId: $academicTermId, )), 'courseClasses' => $this->courseClassService->getAllForSelect($request->user()), 'filterCourseClasses' => Inertia::always($this->courseClassService->getAllForSelectByAcademicTerm($request->user(), $academicTermId)), 'academicTerms' => $this->academicTermService->getAllForSelect(), 'filters' => Inertia::always([ 'course_class_id' => $request->validated('course_class_id'), 'academic_term_id' => $academicTermSelected ? (string) ($academicTermId ?? 0) : ($academicTermId ? (string) $academicTermId : null), ]), ]); } public function store(MaterialRequest $request): RedirectResponse { $this->service->create($request->validated(), $request->file('file')); Inertia::flash('toast', ['type' => 'success', 'message' => 'Materi berhasil ditambahkan.']); return to_route('admin.academic-classes.materials.index'); } public function update(MaterialRequest $request, Material $material): RedirectResponse { $this->service->update($material, $request->validated(), $request->file('file')); Inertia::flash('toast', ['type' => 'success', 'message' => 'Materi berhasil diperbarui.']); return to_route('admin.academic-classes.materials.index'); } public function destroy(Material $material): RedirectResponse { abort_unless(request()->user()->canManageMaterial($material), 403); $this->service->delete($material); return Inertia::flash('toast', ['type' => 'success', 'message' => 'Materi berhasil dihapus.'])->back(); } }