From a6f5c131a3d1aa839b5dfa8fb6e9e4d8209d8e8c Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 24 Jul 2025 12:03:38 +0530 Subject: [PATCH 1/3] Attendance Log Page Resets to First Page After Performing Action on Other Pages. --- src/components/Activities/AttendcesLogs.jsx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/components/Activities/AttendcesLogs.jsx b/src/components/Activities/AttendcesLogs.jsx index 505c7c61..a1ea5a22 100644 --- a/src/components/Activities/AttendcesLogs.jsx +++ b/src/components/Activities/AttendcesLogs.jsx @@ -146,12 +146,7 @@ const AttendanceLog = ({ resetPage, } = usePagination(processedData, 20); - // Reset to the first page whenever processedData changes (due to switch on/off) - useEffect(() => { - resetPage(); - }, [processedData, resetPage]); - - const handler = useCallback( +const handler = useCallback( (msg) => { const { startDate, endDate } = dateRange; const checkIn = msg.response.checkInTime.substring(0, 10); @@ -167,10 +162,9 @@ const AttendanceLog = ({ ); filtering(updatedAttendance); - resetPage(); } }, - [projectId, dateRange, data, filtering, resetPage] + [projectId, dateRange, data, filtering] // ✅ removed resetPage from deps ); useEffect(() => { From 4f64a230897ec2d120fe20c46eafa0349a68a294 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 24 Jul 2025 12:03:38 +0530 Subject: [PATCH 2/3] Attendance Log Page Resets to First Page After Performing Action on Other Pages. --- src/components/Activities/AttendcesLogs.jsx | 45 +++++++++------------ 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/src/components/Activities/AttendcesLogs.jsx b/src/components/Activities/AttendcesLogs.jsx index 268115fe..263b1e86 100644 --- a/src/components/Activities/AttendcesLogs.jsx +++ b/src/components/Activities/AttendcesLogs.jsx @@ -173,33 +173,26 @@ const AttendanceLog = ({ resetPage, // Destructure resetPage here } = usePagination(processedData, 20); - // Reset page when processedData changes (due to filters/search) - useEffect(() => { - resetPage(); - }, [processedData, resetPage]); // Add resetPage to dependency array +const handler = useCallback( + (msg) => { + const { startDate, endDate } = dateRange; + const checkIn = msg.response.checkInTime.substring(0, 10); + if ( + projectId === msg.projectId && + startDate <= checkIn && + checkIn <= endDate + ) { + const updatedAttendance = data.map((item) => + item.id === msg.response.id + ? { ...item, ...msg.response } + : item + ); - const handler = useCallback( - (msg) => { - const { startDate, endDate } = dateRange; - const checkIn = msg.response.checkInTime ? msg.response.checkInTime.substring(0, 10) : null; - - if ( - projectId === msg.projectId && - checkIn && - startDate <= checkIn && - checkIn <= endDate - ) { - dispatch( - fetchAttendanceData({ - projectId, - fromDate: startDate, - toDate: endDate, - }) - ); - } - }, - [projectId, dateRange, dispatch] - ); + filtering(updatedAttendance); + } + }, + [projectId, dateRange, data, filtering] // ✅ removed resetPage from deps +); useEffect(() => { eventBus.on("attendance_log", handler); From 85bdc270acbc065f815c96c2b7018d8399353bc7 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 24 Jul 2025 17:40:03 +0530 Subject: [PATCH 3/3] Attendance page search functionality and Attendance Log Page Resets to First Page After Performing Action on Other Pages. --- src/components/Activities/AttendcesLogs.jsx | 52 +++++++++++---------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/src/components/Activities/AttendcesLogs.jsx b/src/components/Activities/AttendcesLogs.jsx index 263b1e86..213897ed 100644 --- a/src/components/Activities/AttendcesLogs.jsx +++ b/src/components/Activities/AttendcesLogs.jsx @@ -4,7 +4,7 @@ import Avatar from "../common/Avatar"; import { convertShortTime } from "../../utils/dateUtils"; import RenderAttendanceStatus from "./RenderAttendanceStatus"; import { useSelector, useDispatch } from "react-redux"; -import { fetchAttendanceData } from "../../slices/apiSlice/attedanceLogsSlice"; +import { fetchAttendanceData, setAttendanceData } from "../../slices/apiSlice/attedanceLogsSlice"; import DateRangePicker from "../common/DateRangePicker"; import eventBus from "../../services/eventBus"; @@ -28,14 +28,15 @@ const usePagination = (data, itemsPerPage) => { } }, [maxPage]); - const resetPage = useCallback(() => setCurrentPage(1), []); // This is returned by the hook + // Ensure resetPage is returned by the hook + const resetPage = useCallback(() => setCurrentPage(1), []); return { currentPage, totalPages: maxPage, currentItems, paginate, - resetPage, // Ensure resetPage is returned here + resetPage, }; }; @@ -173,26 +174,30 @@ const AttendanceLog = ({ resetPage, // Destructure resetPage here } = usePagination(processedData, 20); -const handler = useCallback( - (msg) => { - const { startDate, endDate } = dateRange; - const checkIn = msg.response.checkInTime.substring(0, 10); - if ( - projectId === msg.projectId && - startDate <= checkIn && - checkIn <= endDate - ) { - const updatedAttendance = data.map((item) => - item.id === msg.response.id - ? { ...item, ...msg.response } - : item - ); + // Effect to reset pagination when search query changes + useEffect(() => { + resetPage(); + }, [searchQuery, resetPage]); // Add resetPage to dependencies - filtering(updatedAttendance); - } - }, - [projectId, dateRange, data, filtering] // ✅ removed resetPage from deps -); + const handler = useCallback( + (msg) => { + const { startDate, endDate } = dateRange; + const checkIn = msg.response.checkInTime.substring(0, 10); + if ( + projectId === msg.projectId && + startDate <= checkIn && + checkIn <= endDate + ) { + const updatedAttendance = data.map((item) => + item.id === msg.response.id + ? { ...item, ...msg.response } + : item + ); + dispatch(setAttendanceData(updatedAttendance)); // Update Redux store + } + }, + [projectId, dateRange, data, dispatch] + ); useEffect(() => { eventBus.on("attendance_log", handler); @@ -360,8 +365,7 @@ const handler = useCallback( No employee logs. ) - ) - } + )} {!loading && !isRefreshing && processedData.length > 20 && (