From 97111442360525a55dc112ada542c3130ae29296 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Sat, 20 Sep 2025 15:40:17 +0530 Subject: [PATCH 1/4] Adding a new Grid in Teams Grid. --- src/components/Project/Teams.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/Project/Teams.jsx b/src/components/Project/Teams.jsx index ab048c89..6c51de55 100644 --- a/src/components/Project/Teams.jsx +++ b/src/components/Project/Teams.jsx @@ -357,6 +357,7 @@ const Teams = () => {
Name
+ Services Organization Assigned Date {!activeEmployee && Release Date} @@ -392,6 +393,7 @@ const Teams = () => { + {item.services || "N/A"} {item.organizationName || "N/A"} From fa7dc2860c8803abd276fae31cb3ecd55ec0b574 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Sat, 20 Sep 2025 19:30:47 +0530 Subject: [PATCH 2/4] Changes in the Teams Services dropdown will reflect the Services data. --- src/components/Project/Teams.jsx | 73 +++++++++++--------------- src/hooks/useProjects.js | 22 +++++--- src/repositories/ProjectRepository.jsx | 34 ++++++++---- 3 files changed, 69 insertions(+), 60 deletions(-) diff --git a/src/components/Project/Teams.jsx b/src/components/Project/Teams.jsx index 6c51de55..fd3815d4 100644 --- a/src/components/Project/Teams.jsx +++ b/src/components/Project/Teams.jsx @@ -36,10 +36,11 @@ const Teams = () => { const [activeEmployee, setActiveEmployee] = useState(true); const [deleteEmployee, setDeleteEmplyee] = useState(null); 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 [selectedService, setSelectedService] = useState(""); const handleServiceChange = (e) => { setSelectedService(e.target.value); @@ -53,7 +54,7 @@ const Teams = () => { projectEmployees, loading: employeeLodaing, refetch, - } = useEmployeesByProjectAllocated(projectId); + } = useEmployeesByProjectAllocated(projectId,selectedService); const { mutate: submitAllocations, isPending, @@ -264,50 +265,38 @@ const Teams = () => {
- {servicesLoading ? ( - - ) : assignedServices?.length > 1 ? ( - + {servicesLoading ? null : assignedServices && assignedServices.length > 0 ? ( + assignedServices.length > 1 ? ( + + ) : ( +
+
{assignedServices[0].name}
+
+ ) ) : ( -
- {/* fier fitting */} - {assignedServices?.length === 1 - ?
{ assignedServices[0].name}
- : "No service available"} +
+
No Services Assigned
)}
- {/*
- -
*/}
@@ -393,7 +382,7 @@ const Teams = () => {
- {item.services || "N/A"} + {item.serviceName || "N/A"} {item.organizationName || "N/A"} diff --git a/src/hooks/useProjects.js b/src/hooks/useProjects.js index c2f3f9d8..cee9217f 100644 --- a/src/hooks/useProjects.js +++ b/src/hooks/useProjects.js @@ -41,22 +41,30 @@ export const useProjects = () => { }; }; -export const useEmployeesByProjectAllocated = (selectedProject) => { +export const useEmployeesByProjectAllocated = ( + projectId, + serviceId, + organizationId, +) => { const { data = [], isLoading, refetch, error, } = useQuery({ - queryKey: ["empListByProjectAllocated", selectedProject], + queryKey: ["empListByProjectAllocated", projectId, serviceId,organizationId], queryFn: async () => { - const res = await ProjectRepository.getProjectAllocation(selectedProject); - return res.data || res; + const res = await ProjectRepository.getProjectAllocation( + projectId, + organizationId, + serviceId + ); + return res?.data || res; }, - enabled: !!selectedProject, + enabled: !!projectId, onError: (error) => { showToast( - error.message || "Error while Fetching project Allocated Employees", + error.message || "Error while fetching project allocated employees", "error" ); }, @@ -270,7 +278,7 @@ export const useProjectLevelEmployeePermission = (employeeId, projectId) => { export const useProjectAssignedOrganizations =(projectId)=>{ return useQuery({ - queryKey: ["projectAssignedServices", projectId], + queryKey: ["projectAssignedOrganization", projectId], queryFn: async () => { const resp = await ProjectRepository.getProjectAssignedOrganizations(projectId); return resp.data; diff --git a/src/repositories/ProjectRepository.jsx b/src/repositories/ProjectRepository.jsx index d9a9ada3..113bd627 100644 --- a/src/repositories/ProjectRepository.jsx +++ b/src/repositories/ProjectRepository.jsx @@ -5,8 +5,20 @@ const ProjectRepository = { getProjectByprojectId: (projetid) => api.get(`/api/project/details/${projetid}`), - getProjectAllocation: (projetid) => - api.get(`api/project/allocation/${projetid}`), + getProjectAllocation: (projectId, organizationId, serviceId) => { + let url = `/api/project/allocation/${projectId}`; + + const params = []; + if (organizationId) params.push(`organizationId=${organizationId}`); + if (serviceId) params.push(`serviceId=${serviceId}`); + + if (params.length > 0) { + url += `?${params.join("&")}`; + } + + return api.get(url); + }, + getEmployeesByProject: (projectId) => api.get(`/api/Project/employees/get/${projectId}`), @@ -39,18 +51,18 @@ const ProjectRepository = { ), - // Permission Managment for Employee at Project Level + // Permission Managment for Employee at Project Level - getProjectLevelEmployeeList:(projectId)=>api.get(`/api/Project/get/proejct-level/employees/${projectId}`), - getProjectLevelModules:()=>api.get(`/api/Project/get/proejct-level/modules`), - getProjectLevelEmployeePermissions:(employeeId,projectId)=>api.get(`/api/Project/get/project-level-permission/employee/${employeeId}/project/${projectId}`), - updateProjectLevelEmployeePermission:(data)=>api.post(`/api/Project/assign/project-level-permission`,data), - getAllProjectLevelPermission:(projectId)=>api.get(`/api/Project/get/all/project-level-permission/${projectId}`), + getProjectLevelEmployeeList: (projectId) => api.get(`/api/Project/get/proejct-level/employees/${projectId}`), + getProjectLevelModules: () => api.get(`/api/Project/get/proejct-level/modules`), + getProjectLevelEmployeePermissions: (employeeId, projectId) => api.get(`/api/Project/get/project-level-permission/employee/${employeeId}/project/${projectId}`), + updateProjectLevelEmployeePermission: (data) => api.post(`/api/Project/assign/project-level-permission`, data), + getAllProjectLevelPermission: (projectId) => api.get(`/api/Project/get/all/project-level-permission/${projectId}`), - // Services - getProjectAssignedServices:(projectId)=>api.get(`/api/Project/get/assigned/services/${projectId}`), - getProjectAssignedOrganizations:(projectId)=>api.get(`/api/Project/get/assigned/organization/${projectId}`) + // Services + getProjectAssignedServices: (projectId) => api.get(`/api/Project/get/assigned/services/${projectId}`), + getProjectAssignedOrganizations: (projectId) => api.get(`/api/Project/get/assigned/organization/${projectId}`) }; export const TasksRepository = { From b2d7349fc968022fffc27d8a2ec9f1881c3a0693 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Sat, 20 Sep 2025 19:37:47 +0530 Subject: [PATCH 3/4] Adding search funcionality in Teams for Organization and Services. --- src/components/Project/Teams.jsx | 46 +++++++++++++++++--------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/components/Project/Teams.jsx b/src/components/Project/Teams.jsx index fd3815d4..42a219a7 100644 --- a/src/components/Project/Teams.jsx +++ b/src/components/Project/Teams.jsx @@ -154,31 +154,35 @@ const Teams = () => { setEmpJobRoles(data); } }, [data]); +const filterAndSearchEmployees = useCallback(() => { + const statusFiltered = employees.filter((emp) => + activeEmployee ? emp.isActive : !emp.isActive + ); - const filterAndSearchEmployees = useCallback(() => { - const statusFiltered = employees.filter((emp) => - activeEmployee ? emp.isActive : !emp.isActive + if (searchTerm === "") { + setFilteredEmployees(statusFiltered); + return; + } + + const lowercasedSearchTerm = searchTerm.toLowerCase(); + + const searchedAndFiltered = statusFiltered.filter((item) => { + 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(); + + return ( + fullName.includes(lowercasedSearchTerm) || + roleName.includes(lowercasedSearchTerm) || + orgName.includes(lowercasedSearchTerm) || + serviceName.includes(lowercasedSearchTerm) ); + }); - if (searchTerm === "") { - setFilteredEmployees(statusFiltered); - return; - } + setFilteredEmployees(searchedAndFiltered); +}, [employees, activeEmployee, searchTerm, getRole]); - const lowercasedSearchTerm = searchTerm.toLowerCase(); - const searchedAndFiltered = statusFiltered.filter((item) => { - const fullName = - `${item.firstName} ${item.middleName} ${item.lastName}`.toLowerCase(); - const roleName = getRole(item.jobRoleId).toLowerCase(); - - return ( - fullName.includes(lowercasedSearchTerm) || - roleName.includes(lowercasedSearchTerm) - ); - }); - - setFilteredEmployees(searchedAndFiltered); - }, [employees, activeEmployee, searchTerm, getRole]); useEffect(() => { filterAndSearchEmployees(); From 70acf5726616eb530e271d0b787b0f738a7356a9 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Sat, 20 Sep 2025 20:05:25 +0530 Subject: [PATCH 4/4] Remove message from Services dropdwon. --- src/components/Project/Teams.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Project/Teams.jsx b/src/components/Project/Teams.jsx index 42a219a7..f65d90dd 100644 --- a/src/components/Project/Teams.jsx +++ b/src/components/Project/Teams.jsx @@ -296,7 +296,7 @@ const filterAndSearchEmployees = useCallback(() => { ) ) : (
-
No Services Assigned
+
)}