import React, { useState, useEffect } from "react"; import EmployeeRepository from "../../repositories/EmployeeRepository"; import { useAllEmployees } from "../../hooks/useEmployees"; import useSearch from "../../hooks/useSearch"; import AssignEmployeeTable from "./AssignEmployeeTable"; import showToast from "../../services/toastService"; const MapUsers = ({ projectId, onClose, empJobRoles, onSubmit, allocation, assignedLoading, setAssignedLoading, }) => { const { employeesList, loading: employeeLoading, error } = useAllEmployees(false); const [selectedEmployees, setSelectedEmployees] = useState([]); const [ searchText, setSearchText ] = useState( "" ); const handleAllocationData = Array.isArray(allocation) ? allocation : []; const allocationEmployees = employeesList.map((employee) => { const allocationItem = handleAllocationData.find( (alloc) => alloc.employeeId === employee.id ); return { ...employee, isActive: allocationItem ? allocationItem.isActive : false, jobRoleId: allocationItem ? allocationItem.jobRoleId : employee.jobRoleId, }; }); function parseDate(dateStr) { return new Date(dateStr.split(".")[0]); } const latestAllocations = handleAllocationData.reduce((acc, alloc) => { const existingAlloc = acc[alloc.employeeId]; if (!existingAlloc) { acc[alloc.employeeId] = alloc; } else { const existingDate = parseDate( existingAlloc.reAllocationDate || existingAlloc.allocationDate ); const newDate = parseDate(alloc.reAllocationDate || alloc.allocationDate); if (newDate > existingDate) { acc[alloc.employeeId] = alloc; } } return acc; }, {}); const allocationEmployeesData = employeesList .map((employee) => { const allocationItem = latestAllocations[employee.id]; return { ...employee, isActive: allocationItem ? allocationItem.isActive : false, }; }) .filter((employee) => employee.isActive === false); const { filteredData, setSearchQuery } = useSearch( allocationEmployeesData, searchText ); const handleRoleChange = (employeeId, newRoleId) => { setSelectedEmployees((prevSelectedEmployees) => prevSelectedEmployees.map((emp) => emp.id === employeeId ? { ...emp, jobRoleId: newRoleId } : emp ) ); }; const handleCheckboxChange = (employeeId) => { setSelectedEmployees((prevSelectedEmployees) => { const updatedEmployees = [...prevSelectedEmployees]; const employeeIndex = updatedEmployees.findIndex( (emp) => emp.id === employeeId ); if (employeeIndex !== -1) { const isSelected = !updatedEmployees[employeeIndex].isSelected; updatedEmployees[employeeIndex].isSelected = isSelected; } else { updatedEmployees.push({ id: employeeId, isSelected: true, }); } return updatedEmployees; }); }; const handleSubmit = () => { setAssignedLoading(true) const selected = selectedEmployees .filter((emp) => emp.isSelected) .map((emp) => ({ empID: emp.id, jobRoleId: emp.jobRoleId })); if (selected.length > 0) { onSubmit(selected); setSelectedEmployees([]); } else { showToast("Please select Employee", "error"); } }; return ( <>
Loading.. |
All employee assigned to Project. |
No matching employees found. |