From cdd81caf2206c71b6890a12c38f4000b93258a00 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Wed, 2 Sep 2026 18:04:14 +0700 Subject: [PATCH] feat: update CreateForm and EditForm to filter courses and lecturers based on selected lecturer, enhancing user experience --- .../admin/manage/course-classes/index.tsx | 335 +++++++++--------- 1 file changed, 162 insertions(+), 173 deletions(-) diff --git a/resources/js/pages/admin/manage/course-classes/index.tsx b/resources/js/pages/admin/manage/course-classes/index.tsx index a583226..ca3a6d4 100644 --- a/resources/js/pages/admin/manage/course-classes/index.tsx +++ b/resources/js/pages/admin/manage/course-classes/index.tsx @@ -349,26 +349,19 @@ function CreateForm({ .map((a) => a.course_id), ); const selectedCourseIds = new Set(selectedCourses.map((c) => c.id)); - const availableCourses = courses.filter( - (c) => - !takenCourseIds.has(c.id) && - !selectedCourseIds.has(c.id) && - courseMatchesTermParity(c, selectedTerm), + const lecturerDepartmentIds = new Set( + lecturer ? lecturer.departments.map((d) => d.id) : [], ); + const availableCourses = lecturer + ? courses.filter( + (c) => + lecturerDepartmentIds.has(c.department_id) && + !takenCourseIds.has(c.id) && + !selectedCourseIds.has(c.id) && + courseMatchesTermParity(c, selectedTerm), + ) + : []; const courseGroups = groupCoursesByDepartmentAndSemester(availableCourses); - const selectedDepartmentIds = new Set( - selectedCourses.map((c) => c.department_id), - ); - const availableLecturers = - selectedCourses.length > 0 - ? lecturers.filter((l) => - [...selectedDepartmentIds].every((departmentId) => - l.departments.some( - (department) => department.id === departmentId, - ), - ), - ) - : lecturers; function reset() { setAcademicTermId(''); @@ -405,7 +398,6 @@ function CreateForm({ onValueChange={(value) => { setAcademicTermId(value); setSelectedCourses([]); - setLecturer(null); }} > @@ -424,6 +416,52 @@ function CreateForm({ +
+ + + { + setLecturer(value); + setSelectedCourses([]); + }} + itemToStringLabel={(lect) => + `${lect.user?.profile?.full_name ?? 'N/A'} - ${lect.lecturer_number}` + } + isItemEqualToValue={(a, b) => a.id === b.id} + > + + + + Dosen tidak ditemukan. + + + {(lect: Lecturer) => ( + + {lect.user?.profile?.full_name ?? + 'N/A'}{' '} + - {lect.lecturer_number} + + )} + + + + +
-
- - - - `${lect.user?.profile?.full_name ?? 'N/A'} - ${lect.lecturer_number}` - } - isItemEqualToValue={(a, b) => a.id === b.id} - disabled={selectedCourses.length === 0} - > - 0 - ? 'Pilih dosen pengampu' - : 'Pilih mata kuliah terlebih dahulu' - } - className="w-full" - /> - - - Dosen tidak ditemukan. - - - {(lect: Lecturer) => ( - - {lect.user?.profile?.full_name ?? - 'N/A'}{' '} - - {lect.lecturer_number} - - )} - - - - -
@@ -610,18 +600,18 @@ function EditForm({ ) .map((a) => a.course_id), ); - const availableCourses = courses.filter( - (c) => - !takenCourseIds.has(c.id) && courseMatchesTermParity(c, selectedTerm), + const lecturerDepartmentIds = new Set( + lecturer ? lecturer.departments.map((d) => d.id) : [], ); - const courseGroups = groupCoursesByDepartmentAndSemester(availableCourses); - const availableLecturers = course - ? lecturers.filter((l) => - l.departments.some( - (department) => department.id === course.department_id, - ), + const availableCourses = lecturer + ? courses.filter( + (c) => + lecturerDepartmentIds.has(c.department_id) && + !takenCourseIds.has(c.id) && + courseMatchesTermParity(c, selectedTerm), ) - : lecturers; + : []; + const courseGroups = groupCoursesByDepartmentAndSemester(availableCourses); return ( editing && (
+
+ + + + +
+
+ + + { + setLecturer(value); + setCourse(null); + }} + itemToStringLabel={(lect) => + `${lect.user?.profile?.full_name ?? 'N/A'} - ${lect.lecturer_number}` + } + isItemEqualToValue={(a, b) => a.id === b.id} + > + + + + Dosen tidak ditemukan. + + + {(lect: Lecturer) => ( + + {lect.user?.profile + ?.full_name ?? 'N/A'}{' '} + - {lect.lecturer_number} + + )} + + + + +
-
- - - - `${lect.user?.profile?.full_name ?? 'N/A'} - ${lect.lecturer_number}` - } - isItemEqualToValue={(a, b) => a.id === b.id} - disabled={!course} - > - - - - Dosen tidak ditemukan. - - - {(lect: Lecturer) => ( - - {lect.user?.profile - ?.full_name ?? 'N/A'}{' '} - - {lect.lecturer_number} - - )} - - - - -
-
- - - - -