From 1b68cf6125316b0fe2bb40aa2c880fa666880981 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Wed, 2 Sep 2026 18:01:19 +0700 Subject: [PATCH] feat: enhance CourseClass pagination and UI by adding academic term and semester number details --- app/Services/Admin/Manage/CourseClassService.php | 14 +++++++++----- .../pages/admin/manage/course-classes/columns.tsx | 10 ---------- .../js/pages/admin/manage/course-classes/index.tsx | 3 +++ resources/js/types/course-class.ts | 1 + 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/app/Services/Admin/Manage/CourseClassService.php b/app/Services/Admin/Manage/CourseClassService.php index 88a6f22..5958016 100644 --- a/app/Services/Admin/Manage/CourseClassService.php +++ b/app/Services/Admin/Manage/CourseClassService.php @@ -19,13 +19,17 @@ public function getAllForSelect(): Collection public function paginated(int $perPage = 25, string $search = '', ?int $academicTermId = null, ?string $method = null): LengthAwarePaginator { return CourseClass::query() - ->select(['id', 'course_id', 'lecturer_id', 'academic_term_id', 'method']) + ->select(['course_classes.id', 'course_classes.course_id', 'course_classes.lecturer_id', 'course_classes.academic_term_id', 'course_classes.method']) + ->join('academic_terms', 'academic_terms.id', '=', 'course_classes.academic_term_id') + ->join('courses', 'courses.id', '=', 'course_classes.course_id') ->withCount('enrollments') - ->with(['course:id,code,name,department_id', 'lecturer.user.profile', 'academicTerm:id,academic_year,semester,start_date,end_date']) + ->with(['course:id,code,name,department_id,semester_number', 'lecturer.user.profile', 'academicTerm:id,academic_year,semester,start_date,end_date']) ->when($search, fn ($q) => $q->whereHas('course', fn ($q) => $q->where('name', 'like', "%{$search}%")->orWhere('code', 'like', "%{$search}%"))) - ->when($academicTermId, fn ($q) => $q->where('academic_term_id', $academicTermId)) - ->when($method, fn ($q) => $q->where('method', $method)) - ->latest() + ->when($academicTermId, fn ($q) => $q->where('course_classes.academic_term_id', $academicTermId)) + ->when($method, fn ($q) => $q->where('course_classes.method', $method)) + ->orderByDesc('academic_terms.start_date') + ->orderBy('courses.semester_number') + ->orderBy('courses.name') ->paginate($perPage); } diff --git a/resources/js/pages/admin/manage/course-classes/columns.tsx b/resources/js/pages/admin/manage/course-classes/columns.tsx index 49d4752..e66ffc1 100644 --- a/resources/js/pages/admin/manage/course-classes/columns.tsx +++ b/resources/js/pages/admin/manage/course-classes/columns.tsx @@ -3,7 +3,6 @@ import { Pencil, Trash2, Users } from 'lucide-react'; import { RowActions } from '@/components/row-actions'; import { Badge } from '@/components/ui/badge'; import { index as enrollmentsIndex } from '@/routes/admin/manage/course-classes/enrollments'; -import { formatAcademicTermLabel } from '@/types/academic-term'; import { ClassMethodLabels } from '@/types/course-class'; import type { CourseClass } from '@/types/course-class'; @@ -44,15 +43,6 @@ export function createCourseClassColumns( cell: ({ row }) => row.original.lecturer?.user?.profile?.full_name ?? '-', }, - { - accessorKey: 'academic_term.academic_year', - header: () => Periode, - cell: ({ row }) => { - const term = row.original.academic_term; - - return term ? formatAcademicTermLabel(term) : '-'; - }, - }, { accessorKey: 'method', header: () => Metode, diff --git a/resources/js/pages/admin/manage/course-classes/index.tsx b/resources/js/pages/admin/manage/course-classes/index.tsx index 99c3786..a583226 100644 --- a/resources/js/pages/admin/manage/course-classes/index.tsx +++ b/resources/js/pages/admin/manage/course-classes/index.tsx @@ -290,6 +290,9 @@ export default function CourseClassIndex({ onPerPageChange={handlePerPageChange} onSearchChange={handleSearchChange} searchValue={search} + groupBy={(courseClass) => + `${courseClass.academic_term ? formatAcademicTermLabel(courseClass.academic_term) : 'Tanpa Periode'} — Semester ${courseClass.course?.semester_number ?? 'Tidak ditentukan'}` + } toolbar={