(
+ editing?.current_leader
+ ? new Date(editing.current_leader.started_at)
+ : undefined,
+ );
+
+ const availableLecturers = editing
+ ? lecturers.filter((l) =>
+ l.departments.some((d) => d.id === editing.id),
+ )
+ : [];
+
+ return (
+ <>
+
+
+
+ {
+ setLecturer(value);
+
+ if (value && !startedAt) {
+ setStartedAt(new Date());
+ }
+ }}
+ itemToStringLabel={(l) => lecturerLabel(l)}
+ isItemEqualToValue={(a, b) => a.id === b.id}
+ >
+
+
+
+ {editing
+ ? 'Belum ada dosen di jurusan ini.'
+ : 'Simpan jurusan terlebih dahulu, lalu tambahkan dosen ke jurusan ini.'}
+
+
+ {(l: DepartmentLecturer) => (
+
+ {lecturerLabel(l)}
+
+ )}
+
+
+
+
+
+ {lecturer && (
+
+
+
+
+
+
+ )}
+ >
+ );
+}
+
function CreateForm({
open,
onOpenChange,
+ lecturers,
}: {
open: boolean;
onOpenChange: (open: boolean) => void;
+ lecturers: DepartmentLecturer[];
}) {
return (
+
)}
@@ -232,10 +358,12 @@ function EditForm({
open,
onOpenChange,
editing,
+ lecturers,
}: {
open: boolean;
onOpenChange: (open: boolean) => void;
editing: Department | null;
+ lecturers: DepartmentLecturer[];
}) {
return (
+
)
}
diff --git a/resources/js/types/department.ts b/resources/js/types/department.ts
index e555475..537a796 100644
--- a/resources/js/types/department.ts
+++ b/resources/js/types/department.ts
@@ -2,11 +2,27 @@ export const DegreeLevels = ['D3', 'D4', 'S1', 'S2', 'S3'] as const;
export type DegreeLevel = (typeof DegreeLevels)[number];
+export type DepartmentLecturer = {
+ id: number;
+ lecturer_number: string;
+ user: { profile: { full_name: string } | null } | null;
+ departments: { id: number }[];
+};
+
+export type DepartmentLeadership = {
+ id: number;
+ lecturer_id: number;
+ started_at: string;
+ ended_at: string | null;
+ lecturer: DepartmentLecturer | null;
+};
+
export type Department = {
id: number;
code: string;
name: string;
degree_level: DegreeLevel | null;
+ current_leader: DepartmentLeadership | null;
created_at: string;
updated_at: string;
};