import { useRef, useEffect, useState } from "react"; import { X } from "lucide-react"; import { LuUserPlus, LuUser, LuFolderOpen } from "react-icons/lu"; import { useAssignMember, useProjects } from "../../../../hooks/useProjects"; import { useAssignableInterns } from "../../../../hooks/useProjects"; interface AddInternsModalProps { isOpen: boolean; onClose: () => void; userId: number | null; } export default function AddInternsModal({ isOpen, onClose, userId }: AddInternsModalProps) { const dialogRef = useRef(null); // Form States const [selectedUserId, setSelectedUserId] = useState(""); const [selectedProjectId, setSelectedProjectId] = useState(""); // Hooks const { assign, loading: assigning, error: assignError } = useAssignMember(); const { projects, loading: loadingProjects } = useProjects("active"); const { interns, loading: loadingInterns } = useAssignableInterns(); useEffect(() => { const dialog = dialogRef.current; if (!dialog) return; if (isOpen) { dialog.showModal(); document.body.style.overflow = "hidden"; } else { dialog.close(); document.body.style.overflow = "unset"; } const handleCancel = (e: Event) => { e.preventDefault(); onClose(); }; dialog.addEventListener("cancel", handleCancel); return () => { dialog.removeEventListener("cancel", handleCancel); document.body.style.overflow = "unset"; }; }, [isOpen, onClose]); // Reset form saat modal dibuka kembali. // Kalau userId diberikan, dropdown langsung ter-select ke intern tsb. useEffect(() => { if (isOpen) { setSelectedUserId(userId !== null ? String(userId) : ""); setSelectedProjectId(""); } }, [isOpen, userId]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedUserId) return; const res = await assign({ id_project: Number(selectedProjectId), id_user: Number(selectedUserId), }); if (res !== null) { onClose(); } }; return ( {/* Header */}

Add Project Member

Assign a new intern to an active engineering squad.

{/* Form Body */}
{/* Intern Selection */}
{/* Project Selection */}
{assignError && (

{assignError}

)}
{/* Action Buttons */}
); }