import React, { useState, useEffect } from "react"; import { useProjects, useProjectsByEmployee } from "../../hooks/useProjects"; import EmployeeList from "./EmployeeList"; import showToast from "../../services/toastService"; import ProjectRepository from "../../repositories/ProjectRepository"; const AssignToProject = ({ employee, onClose }) => { const { projects, loading } = useProjects(); const { projectList,loading:selectedProjectLoding ,refetch} = useProjectsByEmployee(employee?.id); const [isSubmitting,setSubmitting] = useState(false) const [searchTerm, setSearchTerm] = useState(""); const [checkedProjects, setCheckedProjects] = useState({}); const [selectedEmployees, setSelectedEmployees] = useState([]); useEffect(() => { if (projectList && projectList.length > 0) { const initialChecked = {}; const initialSelected = []; projectList.forEach((project) => { initialChecked[project.id] = true; initialSelected.push({ jobRoleId: employee.jobRoleId, projectId: project.id, status: true, }); }); setCheckedProjects(initialChecked); setSelectedEmployees(initialSelected); } else { setCheckedProjects({}); setSelectedEmployees([]); } }, [projectList, employee?.id]); const handleSearchChange = (e) => { setSearchTerm(e.target.value.toLowerCase()); }; const handleCheckboxChange = (projectId) => { const isChecked = !checkedProjects[projectId]; setCheckedProjects((prev) => ({ ...prev, [projectId]: isChecked, })); }; const handleSubmit = async () => { const initiallyAssigned = new Set(projectList.map((p) => p.id.toString())); const changes = []; Object.entries(checkedProjects).forEach(([projectId, isChecked]) => { const wasAssigned = initiallyAssigned.has(projectId); if (wasAssigned && !isChecked) { changes.push({ projectId: projectId, jobRoleId: employee.jobRoleId, status: false, }); } if (!wasAssigned && isChecked) { changes.push({ projectId: projectId, jobRoleId: employee.jobRoleId, status: true, }); } }); if (changes.length === 0) { showToast("Make change before.", "info"); return; } try { setSubmitting(true) await ProjectRepository.updateProjectsByEmployee(employee.id, changes) showToast( "Project assignments updated.", "success" ); setSubmitting(false) onClose(); refetch(employee.id) } catch (error) { const msg = error.response?.data?.message || error.message || "Error during API call."; showToast( msg, "error" ); setSubmitting(false) } }; const handleClosedModal = () => { onClose(); }; const filteredProjects = projects.filter((project) => project.name.toLowerCase().includes(searchTerm) ); return (
Assign to Project
Loading projects...
| Select Project |
|---|
|
handleCheckboxChange( project.id )}
disabled={selectedProjectLoding}
/>
|
| No projects found. |