import React, { useEffect, useState } from "react"; import { useModal } from "../../../hooks/useAuth"; import Modal from "../../common/Modal"; import Label from "../../common/Label"; import { useTeamRole } from "../../../hooks/masterHook/useMaster"; import SelectField from "../../common/Forms/SelectField"; import SelectFieldServerSide from "../../common/Forms/SelectFieldServerSide"; import SelectEmployeeServerSide from "../../common/Forms/SelectFieldServerSide"; import Avatar from "../../common/Avatar"; import { useParams } from "react-router-dom"; import { EmployeeChip } from "../../common/Chips"; import { useAllocationServiceProjectTeam, useServiceProjectTeam, } from "../../../hooks/useServiceProject"; import { SpinnerLoader } from "../../common/Loader"; import showToast from "../../../services/toastService"; import ConfirmModal from "../../common/ConfirmModal"; const ServiceProjectTeamAllocation = () => { const { isOpen, onClose, data: Project } = useModal("ServiceTeamAllocation"); const [deletingEmp, setSeletingEmp] = useState({ employee: null, isOpen: false, }); const { data: Team, isLoading: isTeamLoading, isError: isTeamError, error: teamError, } = useServiceProjectTeam(Project?.projectId, true); const [isAddEmployee, setIsAddEmployee] = useState(false); const [nonDuplicateEmployee, setNonDuplicateEmployee] = useState([]); const [selectedTeam, setSelectTeam] = useState(null); const [selectedEmployees, setSelectedEmployees] = useState([]); const { data, isLoading } = useTeamRole(); const TeamAllocationColumns = [ { key: "team", label: "Role", getValue: (e) => e?.teamName || "-", }, ]; const handleRemove = (id) => { setSelectedEmployees((prev) => prev.filter((e) => e.id !== id)); }; const { mutate: AllocationTeam, isPending } = useAllocationServiceProjectTeam( () => { setSelectedEmployees([]); setSeletingEmp({ employee: null, isOpen: false, }); } ); const AssignEmployee = () => { let payload = selectedEmployees.map((e) => { return { projectId: Project?.projectId, employeeId: e.id, teamRoleId: selectedTeam, isActive: true, }; }); AllocationTeam({ payload, isActive: true }); }; const handleDeAllocation = (emp) => { let payload = [ { projectId: Project?.projectId, employeeId: emp.employee.id, teamRoleId: emp.teamRole.id, isActive: false, }, ]; AllocationTeam({ payload: payload, isActive: false }); }; useEffect(() => { if (selectedEmployees?.length > 0 && !selectedTeam) { handleRemove(selectedEmployees[0]?.id); showToast(`Please select a role`, "warning"); } if (Team?.length > 0 && selectedEmployees?.length > 0) { setNonDuplicateEmployee((prev) => { let updated = [...prev]; selectedEmployees.forEach((selectedEmployee) => { const alreadyAllocated = Team.some( (e) => e?.employee?.id === selectedEmployee?.id && e?.teamRole?.id === selectedTeam ); if (alreadyAllocated) { handleRemove(selectedEmployee?.id); showToast( `${selectedEmployee.firstName} ${selectedEmployee.lastName} already allocated with same role`, "warning" ); } }); return updated; }); } }, [Team, selectedEmployees, selectedTeam]); const TeamAllocationBody = ( <> setSeletingEmp({ employee: null, isOpen: false })} loading={isPending} paramData={deletingEmp.employee} isOpen={deletingEmp.isOpen} />
{!isAddEmployee && ( )}
{isAddEmployee && ( <>
{ setSelectedEmployees([]); setSelectTeam(e); }} isLoading={isLoading} />
{selectedEmployees.map((e) => ( ))}
)}
{isAddEmployee && (
{" "}
)}
{Team?.length > 0 ? ( Team?.map((emp) => ( )) ) : ( )}
Name Role Action
{emp?.employee?.firstName} {emp?.employee?.lastName}
{emp?.teamRole?.name} {deletingEmp?.employee?.id === emp.id && isPending ? (
) : ( setSeletingEmp({ employee: emp, isOpen: true }) } > )}
{isTeamLoading ? ( ) : (

No Records Found

)}
); return ( ); }; export default ServiceProjectTeamAllocation;