From a59f2d650613060777c115a2c77f7cc3cb9908ef Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Fri, 1 Aug 2025 18:52:46 +0530 Subject: [PATCH] Revert "Merge pull request 'Refactor_Expenses' (#321) from Refactor_Expenses into hotfix/MasterActivity" This reverts commit 5a11d0a9ef732fa753e0ef8ec0c546f3867a942b, reversing changes made to de86544a7ddef94bfd8d5cf5a80d91a7d8848dfe. --- index.html | 1 - public/assets/css/skeleton.css | 32 - src/Context/FabContext.jsx | 23 +- src/components/Activities/Attendance.jsx | 81 +- src/components/Activities/AttendcesLogs.jsx | 348 ++++---- .../Activities/CheckCheckOutForm.jsx | 101 +-- src/components/Activities/Regularization.jsx | 170 ++-- src/components/Dashboard/Dashboard.jsx | 11 +- src/components/Dashboard/Tasks.jsx | 1 + .../Directory/CardViewDirectory.jsx | 14 +- src/components/Directory/DirectorySchema.js | 1 - .../Directory/ListViewDirectory.jsx | 45 +- src/components/Directory/ManageDirectory.jsx | 89 +- .../Directory/NoteCardDirectoryEditable.jsx | 2 +- src/components/Directory/NotesDirectory.jsx | 225 +++-- .../Directory/ProfileContactDirectory.jsx | 304 +++---- src/components/Directory/UpdateContact.jsx | 199 ++--- src/components/Employee/ManageEmployee.jsx | 2 +- .../Expenses/ExpenseFilterPanel.jsx | 197 ----- src/components/Expenses/ExpenseList.jsx | 321 ------- src/components/Expenses/ExpenseSchema.js | 164 ---- src/components/Expenses/ExpenseSkeleton.jsx | 283 ------- src/components/Expenses/ManageExpense.jsx | 561 ------------- src/components/Expenses/PreviewDocument.jsx | 28 - src/components/Expenses/ViewExpense.jsx | 547 ------------ src/components/Layout/Header.jsx | 129 ++- src/components/Project/AboutProject.jsx | 205 +++-- src/components/Project/AssignTask.jsx | 794 ++++++++---------- src/components/Project/ProjectInfra.jsx | 4 +- src/components/Project/ProjectNav.jsx | 29 +- src/components/Project/Teams.jsx | 6 +- src/components/common/DatePicker.jsx | 92 +- src/components/common/DateRangePicker.jsx | 158 +--- src/components/common/EmployeeSearchInput.jsx | 85 -- src/components/common/Error.jsx | 20 - src/components/common/GlobalModel.jsx | 17 +- src/components/common/GlobalOffcanvas .jsx | 52 -- src/components/common/OffcanvasTrigger.jsx | 26 - src/components/common/Pagination.jsx | 84 -- src/components/common/SelectMultiple.jsx | 202 ++--- src/components/master/CreateRole.jsx | 129 ++- src/components/master/EditRole.jsx | 385 +++++---- src/components/master/ManageExpenseStatus.jsx | 165 ---- src/components/master/ManageExpenseType.jsx | 113 --- src/components/master/ManagePaymentMode.jsx | 95 --- src/components/master/MasterModal.jsx | 156 ++-- src/data/masters.js | 296 ++++--- src/data/menuData.json | 6 - src/hooks/masterHook/useMaster.js | 417 +++++---- src/hooks/useDashboard_Data.jsx | 6 +- src/hooks/useDirectory.js | 33 - src/hooks/useEmployees.js | 146 ++-- src/hooks/useExpense.js | 254 ------ src/layouts/HomeLayout.jsx | 4 - src/pages/Activities/AttendancePage.jsx | 378 ++++----- src/pages/Directory/DirectoryPageHeader.jsx | 23 +- src/pages/Expense/ExpensePage.jsx | 195 ----- src/pages/Gallary/ImageGallary.jsx | 4 +- src/pages/employee/EmployeeList.jsx | 2 +- src/pages/employee/EmployeeProfile.jsx | 32 +- src/pages/master/MasterTable.jsx | 5 - src/pages/project/ProjectDetails.jsx | 19 +- src/pages/project/ProjectList.jsx | 10 +- src/repositories/DirectoryRepository.jsx | 1 - src/repositories/EmployeeRepository.jsx | 19 +- src/repositories/ExpsenseRepository.jsx | 24 - src/repositories/MastersRepository.jsx | 91 +- src/router/AppRoutes.jsx | 2 - src/slices/apiDataManager.jsx | 16 +- src/slices/localVariablesSlice.jsx | 2 - src/utils/appUtils.js | 49 -- src/utils/axiosClient.jsx | 2 +- src/utils/constants.jsx | 23 - src/utils/dateUtils.jsx | 10 +- 74 files changed, 2277 insertions(+), 6488 deletions(-) delete mode 100644 public/assets/css/skeleton.css delete mode 100644 src/components/Expenses/ExpenseFilterPanel.jsx delete mode 100644 src/components/Expenses/ExpenseList.jsx delete mode 100644 src/components/Expenses/ExpenseSchema.js delete mode 100644 src/components/Expenses/ExpenseSkeleton.jsx delete mode 100644 src/components/Expenses/ManageExpense.jsx delete mode 100644 src/components/Expenses/PreviewDocument.jsx delete mode 100644 src/components/Expenses/ViewExpense.jsx delete mode 100644 src/components/common/EmployeeSearchInput.jsx delete mode 100644 src/components/common/Error.jsx delete mode 100644 src/components/common/GlobalOffcanvas .jsx delete mode 100644 src/components/common/OffcanvasTrigger.jsx delete mode 100644 src/components/common/Pagination.jsx delete mode 100644 src/components/master/ManageExpenseStatus.jsx delete mode 100644 src/components/master/ManageExpenseType.jsx delete mode 100644 src/components/master/ManagePaymentMode.jsx delete mode 100644 src/hooks/useExpense.js delete mode 100644 src/pages/Expense/ExpensePage.jsx delete mode 100644 src/repositories/ExpsenseRepository.jsx delete mode 100644 src/utils/appUtils.js diff --git a/index.html b/index.html index 1b2b7575..5bc1c55b 100644 --- a/index.html +++ b/index.html @@ -27,7 +27,6 @@ - diff --git a/public/assets/css/skeleton.css b/public/assets/css/skeleton.css deleted file mode 100644 index 2ee909d2..00000000 --- a/public/assets/css/skeleton.css +++ /dev/null @@ -1,32 +0,0 @@ -/* skeleton.css */ -.skeleton { - background-color: #e2e8f0; /* Tailwind's gray-300 */ - border-radius: 0.25rem; /* Tailwind's rounded */ - position: relative; - overflow: hidden; -} - -.skeleton::after { - content: ''; - display: block; - position: absolute; - top: 0; left: -150px; - height: 100%; - width: 150px; - background: linear-gradient( - 90deg, - transparent, - rgba(255, 255, 255, 0.4), - transparent - ); - animation: pulse 1.5s infinite; -} - -@keyframes pulse { - 0% { - left: -150px; - } - 100% { - left: 100%; - } -} \ No newline at end of file diff --git a/src/Context/FabContext.jsx b/src/Context/FabContext.jsx index d78d4078..7151e6d7 100644 --- a/src/Context/FabContext.jsx +++ b/src/Context/FabContext.jsx @@ -4,30 +4,9 @@ const FabContext = createContext(); export const FabProvider = ({ children }) => { const [actions, setActions] = useState([]); - const [showTrigger, setShowTrigger] = useState(true); - const [isOffcanvasOpen, setIsOffcanvasOpen] = useState(false); - const [offcanvas, setOffcanvas] = useState({ - isOpen: false, - title: "", - content: null, - }); - - const openOffcanvas = (title, content) => { - setOffcanvas({ isOpen: true, title, content }); - setTimeout(() => { - const offcanvasElement = document.getElementById("globalOffcanvas"); - if (offcanvasElement) { - const bsOffcanvas = new window.bootstrap.Offcanvas(offcanvasElement); - bsOffcanvas.show(); - } - }, 100); - }; -const setOffcanvasContent = (title, content) => { - setOffcanvas(prev => ({ ...prev, title, content })); -}; return ( - + {children} ); diff --git a/src/components/Activities/Attendance.jsx b/src/components/Activities/Attendance.jsx index 16315099..75979e7b 100644 --- a/src/components/Activities/Attendance.jsx +++ b/src/components/Activities/Attendance.jsx @@ -6,27 +6,34 @@ import RenderAttendanceStatus from "./RenderAttendanceStatus"; import usePagination from "../../hooks/usePagination"; import { useNavigate } from "react-router-dom"; import { ITEMS_PER_PAGE } from "../../utils/constants"; -import { useAttendance } from "../../hooks/useAttendance"; // This hook is already providing data +import { useAttendance } from "../../hooks/useAttendance"; import { useSelector } from "react-redux"; import { useQueryClient } from "@tanstack/react-query"; import eventBus from "../../services/eventBus"; -const Attendance = ({ getRole, handleModalData, attendance: filteredAndSearchedAttendanceFromParent, showOnlyCheckout, setshowOnlyCheckout }) => { +const Attendance = ({ getRole, handleModalData }) => { const queryClient = useQueryClient(); + const [loading, setLoading] = useState(false); const navigate = useNavigate(); const [todayDate, setTodayDate] = useState(new Date()); - + const [ShowPending, setShowPending] = useState(false); const selectedProject = useSelector( (store) => store.localVariables.projectId ); const { + attendance, loading: attLoading, recall: attrecall, isFetching - } = useAttendance(selectedProject); // Keep this hook to manage recall and fetching status + } = useAttendance(selectedProject); + const filteredAttendance = ShowPending + ? attendance?.filter( + (att) => att?.checkInTime !== null && att?.checkOutTime === null + ) + : attendance; - const attendanceList = Array.isArray(filteredAndSearchedAttendanceFromParent) - ? filteredAndSearchedAttendanceFromParent + const attendanceList = Array.isArray(filteredAttendance) + ? filteredAttendance : []; const sortByName = (a, b) => { @@ -34,7 +41,6 @@ const Attendance = ({ getRole, handleModalData, attendance: filteredAndSearchedA const nameB = (b.firstName + b.lastName).toLowerCase(); return nameA?.localeCompare(nameB); }; - const group1 = attendanceList .filter((d) => d.activity === 1 || d.activity === 4) .sort(sortByName); @@ -42,39 +48,41 @@ const Attendance = ({ getRole, handleModalData, attendance: filteredAndSearchedA .filter((d) => d.activity === 0) .sort(sortByName); - const finalFilteredDataForPagination = [...group1, ...group2]; - + const filteredData = [...group1, ...group2]; const { currentPage, totalPages, currentItems, paginate } = usePagination( - finalFilteredDataForPagination, // Use the data that's already been searched and grouped + filteredData, ITEMS_PER_PAGE ); const handler = useCallback( (msg) => { - if (selectedProject === msg.projectId) { + if (selectedProject == msg.projectId) { + // const updatedAttendance = attendances.map((item) => + // item.employeeId === msg.response.employeeId + // ? { ...item, ...msg.response } + // : item + // ); queryClient.setQueryData(["attendance", selectedProject], (oldData) => { if (!oldData) { - queryClient.invalidateQueries({ queryKey: ["attendance"] }); - return; // Exit to avoid mapping on undefined oldData - } + queryClient.invalidateQueries({queryKey:["attendance"]}) + }; return oldData.map((record) => record.employeeId === msg.response.employeeId ? { ...record, ...msg.response } : record ); }); } }, - [selectedProject, queryClient] // Added queryClient to dependencies + [selectedProject, attrecall] ); const employeeHandler = useCallback( (msg) => { - if (attrecall) { // Check if attrecall function exists + if (attendances.some((item) => item.employeeId == msg.employeeId)) { attrecall(); } }, - [attrecall] // Dependency should be attrecall, not `selectedProject` or `attendance` here + [selectedProject, attendance] ); - useEffect(() => { eventBus.on("attendance", handler); return () => eventBus.off("attendance", handler); @@ -97,14 +105,13 @@ const Attendance = ({ getRole, handleModalData, attendance: filteredAndSearchedA role="switch" id="inactiveEmployeesCheckbox" disabled={isFetching} - checked={showOnlyCheckout} // Use prop for checked state - onChange={(e) => setshowOnlyCheckout(e.target.checked)} // Use prop for onChange + checked={ShowPending} + onChange={(e) => setShowPending(e.target.checked)} /> - {/* Use `filteredAndSearchedAttendanceFromParent` for the initial check of data presence */} - {Array.isArray(filteredAndSearchedAttendanceFromParent) && filteredAndSearchedAttendanceFromParent.length > 0 ? ( + {Array.isArray(attendance) && attendance.length > 0 ? ( <> @@ -122,7 +129,7 @@ const Attendance = ({ getRole, handleModalData, attendance: filteredAndSearchedA - {currentItems && currentItems.length > 0 ? ( // Check currentItems length before mapping + {currentItems && currentItems .sort((a, b) => { const checkInA = a?.checkInTime @@ -179,22 +186,18 @@ const Attendance = ({ getRole, handleModalData, attendance: filteredAndSearchedA /> - )) - ) : ( - - - + ))} + {!attendance && ( + No employees assigned to the project! )}
- No matching records found. -
- {!attLoading && finalFilteredDataForPagination.length > ITEMS_PER_PAGE && ( // Use the data before pagination for total count check + {!loading && filteredData.length > 20 && (