From e795881c799f27d748d6a38b72ed5450e0b35026 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Wed, 7 May 2025 16:04:38 +0530 Subject: [PATCH] Implemented date-wise grouping of the Attendance Log based on the selected date range. --- src/components/Activities/AttendcesLogs.jsx | 242 +++++++++++--------- src/pages/Activities/DailyTask.jsx | 1 - 2 files changed, 138 insertions(+), 105 deletions(-) diff --git a/src/components/Activities/AttendcesLogs.jsx b/src/components/Activities/AttendcesLogs.jsx index a62b4e7c..d9124dec 100644 --- a/src/components/Activities/AttendcesLogs.jsx +++ b/src/components/Activities/AttendcesLogs.jsx @@ -16,39 +16,54 @@ const AttendanceLog = ({ handleModalData, projectId }) => { const dispatch = useDispatch(); const { data, loading, error } = useSelector((store) => store.attendanceLogs); const [isRefreshing, setIsRefreshing] = useState(true); + const [dates, setDates] = useState([]); const today = new Date(); today.setHours(0, 0, 0, 0); // Strip time to compare dates only - + const isSameDay = (dateStr) => { if (!dateStr) return false; const d = new Date(dateStr); d.setHours(0, 0, 0, 0); return d.getTime() === today.getTime(); }; - + const isBeforeToday = (dateStr) => { if (!dateStr) return false; const d = new Date(dateStr); d.setHours(0, 0, 0, 0); return d.getTime() < today.getTime(); }; - + const sortByName = (a, b) => { const nameA = a.firstName.toLowerCase() + a.lastName.toLowerCase(); const nameB = b.firstName.toLowerCase() + b.lastName.toLowerCase(); return nameA.localeCompare(nameB); }; - - const group1 = data.filter(d => d.activity === 1 && isSameDay(d.checkInTime)).sort(sortByName); - const group2 = data.filter(d => d.activity === 4 && isSameDay(d.checkOutTime)).sort(sortByName); - const group3 = data.filter(d => d.activity === 1 && isBeforeToday(d.checkInTime)).sort(sortByName); - const group4 = data.filter(d => d.activity === 4 && isBeforeToday(d.checkOutTime)).sort(sortByName); - const group5 = data.filter(d => d.activity === 5).sort(sortByName); - - const sortedFinalList = [...group1, ...group2, ...group3, ...group4, ...group5]; - const currentDate = new Date().toLocaleDateString( "en-CA" ); + const group1 = data + .filter((d) => d.activity === 1 && isSameDay(d.checkInTime)) + .sort(sortByName); + const group2 = data + .filter((d) => d.activity === 4 && isSameDay(d.checkOutTime)) + .sort(sortByName); + const group3 = data + .filter((d) => d.activity === 1 && isBeforeToday(d.checkInTime)) + .sort(sortByName); + const group4 = data + .filter((d) => d.activity === 4 && isBeforeToday(d.checkOutTime)) + .sort(sortByName); + const group5 = data.filter((d) => d.activity === 5).sort(sortByName); + + const sortedFinalList = [ + ...group1, + ...group2, + ...group3, + ...group4, + ...group5, + ]; + + const currentDate = new Date().toLocaleDateString("en-CA"); const { currentPage, totalPages, currentItems, paginate } = usePagination( sortedFinalList, 5 @@ -65,9 +80,17 @@ const AttendanceLog = ({ handleModalData, projectId }) => { }) ); } - }, [ dateRange, projectId, isRefreshing ] ); - - + }, [dateRange, projectId, isRefreshing]); + + useEffect(() => { + const attendanceDate = [ + ...new Set(sortedFinalList.map((item) => item.checkInTime.split("T")[0])), + ].sort((a, b) => new Date(b) - new Date(a)); + if(attendanceDate != dates){ + setDates(attendanceDate); + } + }, [data]); + return ( <>
{
setIsRefreshing( !isRefreshing )} - + onClick={() => setIsRefreshing(!isRefreshing)} />
- {(data && data.length > 0 ) && ( + {data && data.length > 0 && ( @@ -109,95 +131,107 @@ const AttendanceLog = ({ handleModalData, projectId }) => { {loading && } - {currentItems?.map( ( attendance, index ) => ( - - - - - - - - ) )} + {dates.map((date, i) => { + return ( + + {currentItems.some(item => item.checkInTime.split("T")[0] === date) && + + } + {currentItems + ?.filter((item) => item.checkInTime.includes(date)) + .map((attendance, index) => ( + + + + + + + + ))} + + ); + })}
Loading...
- - - {" "} - {moment( attendance.checkInTime ).format( "DD-MMM-YYYY" )} - {convertShortTime( attendance.checkInTime )} - {attendance.checkOutTime - ? convertShortTime( attendance.checkOutTime ) - : "--"} - - -
+ {date} +
+ + + {" "} + {moment(attendance.checkInTime).format( + "DD-MMM-YYYY" + )} + {convertShortTime(attendance.checkInTime)} + {attendance.checkOutTime + ? convertShortTime(attendance.checkOutTime) + : "--"} + + +
- ) } - {(!loading && data.length === 0) && - No employee logs - } - {error && {error}} + )} + {!loading && data.length === 0 && No employee logs} + {error && {error}}
{!loading && ( - + )} ); diff --git a/src/pages/Activities/DailyTask.jsx b/src/pages/Activities/DailyTask.jsx index 2911c36c..78109a8f 100644 --- a/src/pages/Activities/DailyTask.jsx +++ b/src/pages/Activities/DailyTask.jsx @@ -87,7 +87,6 @@ const DailyTask = () => { useEffect(() => { popoverRefs.current.forEach((el) => { - console.log(el); if (el) { new bootstrap.Popover(el, { trigger: "focus",