From 3233043cf21bee04eeadc63fedfbadd65790570a Mon Sep 17 00:00:00 2001 From: "pramod.mahajan" Date: Fri, 26 Sep 2025 11:38:06 +0530 Subject: [PATCH] initial setup for assign emp to project --- .../Project/Team/TeamAssignToProject.jsx | 42 ++++++++ .../Project/Team/TeamEmployeeList.jsx | 12 +++ src/components/Project/{ => Team}/Teams.jsx | 98 ++++++++++++------- src/hooks/useProjectAccess.js | 15 +-- src/pages/project/ProjectDetails.jsx | 2 +- 5 files changed, 124 insertions(+), 45 deletions(-) create mode 100644 src/components/Project/Team/TeamAssignToProject.jsx create mode 100644 src/components/Project/Team/TeamEmployeeList.jsx rename src/components/Project/{ => Team}/Teams.jsx (85%) diff --git a/src/components/Project/Team/TeamAssignToProject.jsx b/src/components/Project/Team/TeamAssignToProject.jsx new file mode 100644 index 00000000..102b0be7 --- /dev/null +++ b/src/components/Project/Team/TeamAssignToProject.jsx @@ -0,0 +1,42 @@ +import React from "react"; + +const TeamAssignToProject = () => { + return ( +
+

Assign Employee To Project

+
+
+ + +
+ +
+ + +
+
+
+ + +
+ +
+ +
+
+ ); +}; + +export default TeamAssignToProject; diff --git a/src/components/Project/Team/TeamEmployeeList.jsx b/src/components/Project/Team/TeamEmployeeList.jsx new file mode 100644 index 00000000..da62ac91 --- /dev/null +++ b/src/components/Project/Team/TeamEmployeeList.jsx @@ -0,0 +1,12 @@ +import React from 'react' + +const TeamEmployeeList = ({serviceId,organizationId}) => { + const {} = use + return ( +
+ +
+ ) +} + +export default TeamEmployeeList diff --git a/src/components/Project/Teams.jsx b/src/components/Project/Team/Teams.jsx similarity index 85% rename from src/components/Project/Teams.jsx rename to src/components/Project/Team/Teams.jsx index 3e31c0cb..f684347a 100644 --- a/src/components/Project/Teams.jsx +++ b/src/components/Project/Team/Teams.jsx @@ -1,30 +1,32 @@ import React, { useState, useEffect, useCallback } from "react"; -import MapUsers from "./MapUsers"; +import MapUsers from "../MapUsers"; import { Link, NavLink, useNavigate, useParams } from "react-router-dom"; -import showToast from "../../services/toastService"; -import Avatar from "../common/Avatar"; +import showToast from "../../../services/toastService"; +import Avatar from "../../common/Avatar"; import moment from "moment"; -import ProjectRepository from "../../repositories/ProjectRepository"; +import ProjectRepository from "../../../repositories/ProjectRepository"; import { useDispatch, useSelector } 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 { 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, useProjectAssignedServices, -} from "../../hooks/useProjects"; -import { useSelectedProject } from "../../slices/apiDataManager"; +} from "../../../hooks/useProjects"; +import { useSelectedProject } from "../../../slices/apiDataManager"; +import GlobalModel from "../../common/GlobalModel"; +import TeamAssignToProject from "./TeamAssignToProject"; const Teams = () => { const projectId = useSelectedProject(); const dispatch = useDispatch(); - + const [AssigTeam,setAssignTeam] = useState(false) const { data, loading } = useMaster(); const [isModalOpen, setIsModelOpen] = useState(false); const [error, setError] = useState(""); @@ -38,9 +40,9 @@ const Teams = () => { const [searchTerm, setSearchTerm] = useState(""); // State for search term const [selectedService, setSelectedService] = useState(null); - const { data: assignedServices, isLoading: servicesLoading } = useProjectAssignedServices(projectId); - const handleToggleActive = e => setActiveEmployee(e.target.checked); - + const { data: assignedServices, isLoading: servicesLoading } = + useProjectAssignedServices(projectId); + const handleToggleActive = (e) => setActiveEmployee(e.target.checked); const handleServiceChange = (e) => { setSelectedService(e.target.value); @@ -167,7 +169,8 @@ const Teams = () => { const lowercasedSearchTerm = searchTerm.toLowerCase(); const searchedAndFiltered = statusFiltered.filter((item) => { - const fullName = `${item.firstName} ${item.middleName} ${item.lastName}`.toLowerCase(); + const fullName = + `${item.firstName} ${item.middleName} ${item.lastName}`.toLowerCase(); const roleName = getRole(item.jobRoleId).toLowerCase(); const orgName = (item.organizationName || "").toLowerCase(); const serviceName = (item.serviceName || "").toLowerCase(); @@ -183,7 +186,6 @@ const Teams = () => { setFilteredEmployees(searchedAndFiltered); }, [employees, activeEmployee, searchTerm, getRole]); - useEffect(() => { filterAndSearchEmployees(); }, [employees, activeEmployee, searchTerm, filterAndSearchEmployees]); @@ -252,6 +254,13 @@ const Teams = () => { > + + {AssigTeam && ( + setAssignTeam(false)}> + + + )} + {IsDeleteModal && ( {
- {!servicesLoading && assignedServices?.length > 0 && ( - assignedServices.length > 1 ? ( + {!servicesLoading && + assignedServices?.length > 0 && + (assignedServices.length > 1 ? (
+ {HasAssignUserPermission && ( + + className={`link-button btn-primary btn-sm `} + // data-bs-toggle="modal" + // data-bs-target="#user-model" + onClick={()=>setAssignTeam(true)} + > + + Assign Employee + + )}
@@ -387,7 +406,9 @@ const Teams = () => { {!activeEmployee && ( {item.reAllocationDate - ? moment(item.reAllocationDate).format("DD-MMM-YYYY") + ? moment(item.reAllocationDate).format( + "DD-MMM-YYYY" + ) : "Present"} )} @@ -410,7 +431,9 @@ const Teams = () => { className="spinner-border spinner-border-sm text-primary" role="status" > - Loading... + + Loading... +
) : ( @@ -424,7 +447,6 @@ const Teams = () => { ))} - )} {!employeeLodaing && filteredEmployees.length === 0 && (
diff --git a/src/hooks/useProjectAccess.js b/src/hooks/useProjectAccess.js index a3ff27ac..d932b157 100644 --- a/src/hooks/useProjectAccess.js +++ b/src/hooks/useProjectAccess.js @@ -6,21 +6,24 @@ import { VIEW_PROJECTS } from "../utils/constants"; import showToast from "../services/toastService"; export const useProjectAccess = (projectId) => { + const navigate = useNavigate(); + const { data: projectPermissions, isLoading, isFetched } = useAllProjectLevelPermissions(projectId); - const canView = useHasUserPermission(VIEW_PROJECTS); - const navigate = useNavigate(); + const canView = useHasUserPermission(VIEW_PROJECTS); + + const loading = isLoading || !isFetched; useEffect(() => { - if (projectId && isFetched && !isLoading && !canView) { + if (projectId && !loading && !canView) { showToast("You don't have permission to view project details", "warning"); navigate("/projects"); } - }, [projectId, isFetched, isLoading, canView, navigate]); + }, [projectId, loading, canView, navigate]); return { canView, - loading: isLoading || !isFetched, + loading, }; -}; +}; \ No newline at end of file diff --git a/src/pages/project/ProjectDetails.jsx b/src/pages/project/ProjectDetails.jsx index 7503f6ce..8d2f8277 100644 --- a/src/pages/project/ProjectDetails.jsx +++ b/src/pages/project/ProjectDetails.jsx @@ -5,7 +5,7 @@ import { useNavigate } from "react-router-dom"; import ProjectOverview from "../../components/Project/ProjectOverview"; import AboutProject from "../../components/Project/AboutProject"; import ProjectNav from "../../components/Project/ProjectNav"; -import Teams from "../../components/Project/Teams"; +import Teams from "../../components/Project/Team/Teams"; import ProjectInfra from "../../components/Project/ProjectInfra"; import Loader from "../../components/common/Loader"; import WorkPlan from "../../components/Project/WorkPlan";