import React, { useState, useEffect } from "react"; import MapUsers from "./MapUsers"; import showToast from "../../services/toastService"; import Avatar from "../common/Avatar"; import moment from "moment"; import ProjectRepository from "../../repositories/ProjectRepository"; import { useDispatch } from "react-redux"; import { changeMaster } from "../../slices/localVariablesSlice"; import useMaster from "../../hooks/masterHook/useMaster"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { ASSIGN_TO_PROJECT } from "../../utils/constants"; const Teams = ({ project }) => { const dispatch = useDispatch(); dispatch(changeMaster("Job Role")); const { data, loading } = useMaster(); const [isModalOpen, setIsModelOpen] = useState(false); const [error, setError] = useState(""); const [empJobRoles, setEmpJobRoles] = useState(null); const [clearFormTrigger, setClearFormTrigger] = useState(false); const [employees, setEmployees] = useState([]); const [filteredEmployees, setFilteredEmployees] = useState([]); const HasAssignUserPermission = useHasUserPermission(ASSIGN_TO_PROJECT); const fetchEmployees = async () => { try { // if (!empRoles) { ProjectRepository.getProjectAllocation(project.id) .then((response) => { setEmployees(response.data); setFilteredEmployees(response.data.filter((emp) => emp.isActive)); }) .catch((error) => { console.error(error); setError("Failed to fetch data."); }); } catch (err) { setError("Failed to fetch activities."); } }; const submitAllocations = (items) => { ProjectRepository.manageProjectAllocation(items) .then((response) => { showToast("Details updated successfully.", "success"); setClearFormTrigger(true); fetchEmployees(); }) .catch((error) => { showToast(error.message, "error"); }); }; const removeAllocation = (item) => { submitAllocations([ { empID: item.employeeId, jobRoleId: item.jobRoleId, projectId: project.id, status: false, }, ]); }; const handleEmpAlicationFormSubmit = (allocaionObj) => { let items = allocaionObj.map((item) => { return { empID: item.empID, jobRoleId: item.jobRoleId, projectId: project.id, status: true, }; }); submitAllocations(items); }; const getRole = (jobRoleId) => { if (loading) return "Loading..."; if (!Array.isArray(empJobRoles)) return "Unassigned"; if (!jobRoleId) return "Unassigned"; const role = empJobRoles.find((b) => b.id == jobRoleId); return role ? role.name : "Unassigned"; }; const openModel = () => { setIsModelOpen(true); }; const onModelClose = () => { setIsModelOpen(false); const modalElement = document.getElementById("user-model"); if (modalElement) { modalElement.classList.remove("show"); modalElement.style.display = "none"; document.body.classList.remove("modal-open"); document.querySelector(".modal-backdrop").remove(); } const modalBackdropElement = document.querySelector(".modal-backdrop"); if (modalBackdropElement) { modalBackdropElement.remove(); } document.body.style.overflow = "auto"; }; useEffect(() => { fetchEmployees(); }, []); useEffect(() => { if (data) { setEmpJobRoles(data); } }, [data]); const handleFilterEmployee = (e) => { const filterValue = e.target.value; if (filterValue === "true") { setFilteredEmployees(employees.filter((emp) => emp.isActive)); } else { setFilteredEmployees(employees.filter((emp) => !emp.isActive)); } }; return ( <>
{employees && employees.length > 0 ? ( {filteredEmployees && filteredEmployees.map((item) => ( ))}
Name Assigned Date Release Date Role Actions
{" "} {moment(item.allocationDate).format( "DD-MMM-YYYY" )}{" "} {item.reAllocationDate ? moment(item.reAllocationDate).format( "DD-MMM-YYYY" ) : "Present"} {getRole(item.jobRoleId)} {item.isActive && ( )} {!item.isActive && Not in project}
) : ( No employees assigned to the project )}
); }; export default Teams;