import React, { useState, useEffect, useCallback } from "react"; import MapUsers from "./MapUsers"; import { Link, NavLink, useNavigate, useParams } from "react-router-dom"; 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"; import ConfirmModal from "../common/ConfirmModal"; import eventBus from "../../services/eventBus"; import {useEmployeesByProjectAllocated, useManageProjectAllocation} from "../../hooks/useProjects"; const Teams = () => { const {projectId} = useParams() const dispatch = useDispatch(); const { data, loading } = useMaster(); const [isModalOpen, setIsModelOpen] = useState(false); const [error, setError] = useState(""); const [empJobRoles, setEmpJobRoles] = useState(null); const [employees, setEmployees] = useState([]); const [filteredEmployees, setFilteredEmployees] = useState([]); const [removingEmployeeId, setRemovingEmployeeId] = useState(null); const [assignedLoading, setAssignedLoading] = useState(false); const [ activeEmployee, setActiveEmployee ] = useState( true ) const [deleteEmployee,setDeleteEmplyee] = useState(null) const navigate = useNavigate(); const HasAssignUserPermission = useHasUserPermission( ASSIGN_TO_PROJECT ); const [ IsDeleteModal, setIsDeleteModal ] = useState( false ) const {projectEmployees, loading:employeeLodaing, refetch} = useEmployeesByProjectAllocated( projectId ) const { mutate: submitAllocations, isPending, isSuccess, isError, } = useManageProjectAllocation({ onSuccessCallback: () => { setRemovingEmployeeId(null); setAssignedLoading(false); setDeleteEmplyee(null); closeDeleteModal(); }, onErrorCallback: () => { closeDeleteModal(); }, }); const removeAllocation = (item) => { setRemovingEmployeeId(item.id); submitAllocations({ items: [ { empID: item.employeeId, jobRoleId: item.jobRoleId, projectId: projectId, status: false, }, ], added: false, }); }; const handleEmpAlicationFormSubmit = (allocaionObj) => { let items = allocaionObj.map((item) => { return { empID: item.empID, jobRoleId: item.jobRoleId, projectId: projectId, status: true, }; }); submitAllocations({ items, added: true }); setActiveEmployee(true); setFilteredEmployees(employees.filter((emp) => emp.isActive)); const dropdown = document.querySelector('select[name="DataTables_Table_0_length"]'); if (dropdown) dropdown.value = "true"; }; 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(() => { dispatch(changeMaster("Job Role")); }, [dispatch]); useEffect(() => { if ( projectEmployees ) { setEmployees(projectEmployees); setFilteredEmployees( projectEmployees?.filter( ( emp ) => emp.isActive ) ); } }, [projectEmployees,employeeLodaing]); useEffect(() => { if (data) { setEmpJobRoles(data); } }, [data]); const handleFilterEmployee = (e) => { const filterValue = e.target.value; if ( filterValue === "true" ) { setActiveEmployee(true) setFilteredEmployees(employees.filter((emp) => emp.isActive)); } else { setFilteredEmployees( employees.filter( ( emp ) => !emp.isActive ) ); setActiveEmployee(false) } }; const deleteModalOpen = (item) => { setDeleteEmplyee(item) setIsDeleteModal(true) } const closeDeleteModal = ()=> setIsDeleteModal(false) const handler = useCallback( (msg) => { if (msg.projectIds.some((item) => item === projectId)) { refetch(); } }, [projectId, refetch] ); useEffect(() => { eventBus.on("assign_project_all", handler); return () => eventBus.off("assign_project_all", handler); }, [handler]); const employeeHandler = useCallback( (msg) => { if(filteredEmployees.some((item) => item.employeeId == msg.employeeId)){ refetch(); } },[filteredEmployees, refetch] ); useEffect(() => { eventBus.on("employee",employeeHandler); return () => eventBus.off("employee",employeeHandler) },[employeeHandler]) return ( <>
{IsDeleteModal && (Loading..
} {!employeeLodaing && employees && employees.length > 0 && (Name | Assigned Date | {!activeEmployee &&Release Date | }Project Role | Actions |
---|---|---|---|---|
{" "} {moment(item.allocationDate).format( "DD-MMM-YYYY" )}{" "} | {!activeEmployee &&{item.reAllocationDate ? moment(item.reAllocationDate).format( "DD-MMM-YYYY" ) : "Present"} | }{getRole(item.jobRoleId)} | {item.isActive && ( )} {!item.isActive && Not in project} |