diff --git a/src/components/Activities/AttendcesLogs.jsx b/src/components/Activities/AttendcesLogs.jsx index 71bc74b3..c42ce1ab 100644 --- a/src/components/Activities/AttendcesLogs.jsx +++ b/src/components/Activities/AttendcesLogs.jsx @@ -10,16 +10,17 @@ import { getCachedData } from "../../slices/apiDataManager"; import usePagination from "../../hooks/usePagination"; const AttendanceLog = ({ handleModalData, projectId }) => { - const [attendances, setAttendnaces] = useState([]); - const [selectedDate, setSelectedDate] = useState(""); const [dateRange, setDateRange] = useState({ startDate: "", endDate: "" }); const dispatch = useDispatch(); const { data, loading, error } = useSelector((store) => store.attendanceLogs); const [isRefreshing, setIsRefreshing] = useState(true); - const [dates, setDates] = useState([]); + const [processedData, setProcessedData] = useState([]); const today = new Date(); - today.setHours(0, 0, 0, 0); // Strip time to compare dates only + today.setHours(0, 0, 0, 0); + + const yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); const isSameDay = (dateStr) => { if (!dateStr) return false; @@ -41,38 +42,6 @@ const AttendanceLog = ({ handleModalData, projectId }) => { 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 ) ) - - const group5 = data - .filter((d) => d.activity === 2 && isBeforeToday(d.checkOutTime)) - .sort(sortByName); - const group6 = data.filter((d) => d.activity === 5).sort(sortByName); - - const sortedFinalList = [ - ...group1, - ...group2, - ...group3, - ...group4, - ...group5, - ...group6, - ]; - - const currentDate = new Date().toLocaleDateString("en-CA"); - const { currentPage, totalPages, currentItems, paginate } = usePagination( - sortedFinalList, - 10 - ); - useEffect(() => { const { startDate, endDate } = dateRange; if (startDate && endDate) { @@ -87,14 +56,47 @@ const AttendanceLog = ({ handleModalData, projectId }) => { }, [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); - } + 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)); + const group5 = data + .filter((d) => d.activity === 2 && isBeforeToday(d.checkOutTime)) + .sort(sortByName); + const group6 = data.filter((d) => d.activity === 5).sort(sortByName); + + const sortedList = [...group1, ...group2, ...group3, ...group4, ...group5, ...group6]; + + // Group by date + const groupedByDate = sortedList.reduce((acc, item) => { + const date = (item.checkInTime || item.checkOutTime)?.split("T")[0]; + if (date) { + acc[date] = acc[date] || []; + acc[date].push(item); + } + return acc; + }, {}); + + // Sort dates in descending order + const sortedDates = Object.keys(groupedByDate).sort((a, b) => new Date(b) - new Date(a)); + + // Create the final sorted array + const finalData = sortedDates.flatMap((date) => groupedByDate[date]); + setProcessedData(finalData); }, [data]); + const { currentPage, totalPages, currentItems: paginatedAttendances, paginate } = usePagination( + processedData, + 10 + ); + return ( <>