From fca3f03a44e9cd1ce5e81fcf4e74d3223e740ae7 Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Wed, 9 Jul 2025 14:33:21 +0530 Subject: [PATCH] fixed searching for employee --- src/hooks/useEmployees.js | 3 +- src/pages/employee/EmployeeList.jsx | 134 ++++++++++++++++------------ 2 files changed, 80 insertions(+), 57 deletions(-) diff --git a/src/hooks/useEmployees.js b/src/hooks/useEmployees.js index 4334d88d..4839d36c 100644 --- a/src/hooks/useEmployees.js +++ b/src/hooks/useEmployees.js @@ -190,8 +190,9 @@ export const useUpdateEmployee = () => onSuccess: (_, variables) => { const id = variables.id || variables.employeeId; const isAllEmployee = variables.IsAllEmployee; + // Cache invalidation - queryClient.invalidateQueries( {queryKey:[ 'allEmployee', isAllEmployee ] }); + queryClient.invalidateQueries( {queryKey:[ 'allEmployees'] }); // queryClient.invalidateQueries(['employeeProfile', id]); queryClient.invalidateQueries( {queryKey: [ 'projectEmployees' ]} ); queryClient.removeQueries( {queryKey: [ "empListByProjectAllocated" ]} ); diff --git a/src/pages/employee/EmployeeList.jsx b/src/pages/employee/EmployeeList.jsx index e0802208..ef470979 100644 --- a/src/pages/employee/EmployeeList.jsx +++ b/src/pages/employee/EmployeeList.jsx @@ -70,37 +70,45 @@ const EmployeeList = () => { const applySearchFilter = (data, text) => { - if (!text) { - return data; - } - const lowercasedText = text.toLowerCase().trim(); + if (!text) { + return data; + } - return data.filter((item) => { - const firstName = item.firstName || ""; - const middleName = item.middleName || ""; - const lastName = item.lastName || ""; + const lowercasedText = text.toLowerCase().trim(); - const fullName = `${firstName} ${middleName} ${lastName}`.toLowerCase().trim().replace(/\s+/g, ' '); + return data.filter((item) => { + const firstName = item.firstName || ""; + const middleName = item.middleName || ""; + const lastName = item.lastName || ""; - const email = item.email ? item.email.toLowerCase() : ""; - const phoneNumber = item.phoneNumber ? item.phoneNumber.toLowerCase() : ""; - const jobRole = item.jobRole ? item.jobRole.toLowerCase() : ""; + const fullName = `${firstName} ${middleName} ${lastName}` + .toLowerCase() + .trim() + .replace(/\s+/g, " "); + + const email = item.email?.toLowerCase() || ""; + const phoneNumber = item.phoneNumber?.toLowerCase() || ""; + const jobRole = item.jobRole?.toLowerCase() || ""; + + return ( + fullName.includes(lowercasedText) || + email.includes(lowercasedText) || + phoneNumber.includes(lowercasedText) || + jobRole.includes(lowercasedText) + ); + }); +}; - return ( - fullName.includes(value) || - email.includes(value) || - phoneNumber.includes(value) || - jobRole.includes(value) - ); - }); - }; const handleSearch = (e) => { const value = e.target.value; setSearchText(value); setCurrentPage(1); }; - +useEffect(() => { + const filtered = applySearchFilter(employeeList, searchText); + setFilteredData(filtered); +}, [searchText, employeeList]); const displayData = searchText ? filteredData : employeeList; @@ -112,40 +120,54 @@ const EmployeeList = () => { setIsCreateModalOpen(true); }; - const closeModal = () => { - setIsCreateModalOpen(false); + // const closeModal = () => { + // setIsCreateModalOpen(false); - const modalElement = document.getElementById("managerole-modal"); - if (modalElement && !showModal) { - modalElement.classList.remove("show"); - modalElement.style.display = "none"; - document.body.classList.remove("modal-open"); - document.querySelector(".modal-backdrop")?.remove(); - } - setShowModal(false); - clearCacheKey("employeeProfile"); - recallEmployeeData(showInactive, showAllEmployees ? null : selectedProjectId); // Use selectedProjectId here - }; - const handleShow = () => setShowModal(true); - const handleClose = () => setShowModal( false ); + // const modalElement = document.getElementById("managerole-modal"); + // if (modalElement && !showModal) { + // modalElement.classList.remove("show"); + // modalElement.style.display = "none"; + // document.body.classList.remove("modal-open"); + // document.querySelector(".modal-backdrop")?.remove(); + // } + // setShowModal(false); + // clearCacheKey("employeeProfile"); + // recallEmployeeData(showInactive, showAllEmployees ? null : selectedProjectId); // Use selectedProjectId here + // }; + // const handleShow = () => setShowModal(true); + // const handleClose = () => setShowModal( false ); - useEffect(() => { - setCurrentPage(1) +useEffect(() => { + if (!loading && Array.isArray(employees)) { + const sorted = [...employees].sort((a, b) => { + const nameA = `${a.firstName || ""}${a.middleName || ""}${a.lastName || ""}`.toLowerCase(); + const nameB = `${b.firstName || ""}${b.middleName || ""}${b.lastName || ""}`.toLowerCase(); + return nameA?.localeCompare(nameB); + }); - if (!loading && Array.isArray(employees)) { - // Sort by full name (firstName + lastName) - const sorted = [...employees].sort((a, b) => { - const nameA = `${a.firstName || ""}${a.middleName || ""}${b.lastName || "" - }`.toLowerCase(); - const nameB = `${b.firstName || ""}${b.middleName || ""}${b.lastName || "" - }`.toLowerCase(); - return nameA?.localeCompare(nameB); - }); + setEmployeeList((prevList) => { + const prevJSON = JSON.stringify(prevList); + const nextJSON = JSON.stringify(sorted); + if (prevJSON !== nextJSON) { + return sorted; + } + return prevList; + }); + + setFilteredData((prev) => { + const prevJSON = JSON.stringify(prev); + const nextJSON = JSON.stringify(sorted); + if (prevJSON !== nextJSON) { + return sorted; + } + return prev; + }); + + // set currentPage to 1 only if needed + setCurrentPage((prevPage) => (prevPage !== 1 ? 1 : prevPage)); + } +}, [loading, employees, selectedProjectId, showAllEmployees]); - setEmployeeList(sorted); - setFilteredData(sorted); - } - }, [loading, employees, selectedProjectId, showAllEmployees]); @@ -153,11 +175,11 @@ const EmployeeList = () => { setModelConfig(config); }; - useEffect(() => { - if (modelConfig !== null) { - openModal(); - } - }, [modelConfig, isCreateModalOpen]); + // useEffect(() => { + // if (modelConfig !== null) { + // openModal(); + // } + // }, [modelConfig, isCreateModalOpen]); const tableRef = useRef(null); const handleExport = (type) => {