From 3157a309482506ac58cbf5967bbcd846df58b428 Mon Sep 17 00:00:00 2001 From: "kartik.sharma" Date: Thu, 22 May 2025 16:39:42 +0530 Subject: [PATCH] Adding Switch button in attendence component. --- src/components/Activities/AttendcesLogs.jsx | 25 +++++++---- src/pages/Activities/AttendancePage.jsx | 48 +++++++++++++++++---- 2 files changed, 56 insertions(+), 17 deletions(-) diff --git a/src/components/Activities/AttendcesLogs.jsx b/src/components/Activities/AttendcesLogs.jsx index c42ce1ab..5c62c912 100644 --- a/src/components/Activities/AttendcesLogs.jsx +++ b/src/components/Activities/AttendcesLogs.jsx @@ -9,7 +9,7 @@ import DateRangePicker from "../common/DateRangePicker"; import { getCachedData } from "../../slices/apiDataManager"; import usePagination from "../../hooks/usePagination"; -const AttendanceLog = ({ handleModalData, projectId }) => { +const AttendanceLog = ({ handleModalData, projectId, showOnlyCheckout }) => { const [dateRange, setDateRange] = useState({ startDate: "", endDate: "" }); const dispatch = useDispatch(); const { data, loading, error } = useSelector((store) => store.attendanceLogs); @@ -56,21 +56,26 @@ const AttendanceLog = ({ handleModalData, projectId }) => { }, [dateRange, projectId, isRefreshing]); useEffect(() => { - const group1 = data + // Filter the raw data based on showOnlyCheckout + const filteredData = showOnlyCheckout + ? data.filter((item) => item.checkInTime && item.checkOutTime) + : data; + + const group1 = filteredData .filter((d) => d.activity === 1 && isSameDay(d.checkInTime)) .sort(sortByName); - const group2 = data + const group2 = filteredData .filter((d) => d.activity === 4 && isSameDay(d.checkOutTime)) .sort(sortByName); - const group3 = data + const group3 = filteredData .filter((d) => d.activity === 1 && isBeforeToday(d.checkInTime)) .sort(sortByName); - const group4 = data + const group4 = filteredData .filter((d) => d.activity === 4 && isBeforeToday(d.checkOutTime)); - const group5 = data + const group5 = filteredData .filter((d) => d.activity === 2 && isBeforeToday(d.checkOutTime)) .sort(sortByName); - const group6 = data.filter((d) => d.activity === 5).sort(sortByName); + const group6 = filteredData.filter((d) => d.activity === 5).sort(sortByName); const sortedList = [...group1, ...group2, ...group3, ...group4, ...group5, ...group6]; @@ -90,7 +95,7 @@ const AttendanceLog = ({ handleModalData, projectId }) => { // Create the final sorted array const finalData = sortedDates.flatMap((date) => groupedByDate[date]); setProcessedData(finalData); - }, [data]); + }, [data, showOnlyCheckout]); // Re-run this effect when data or showOnlyCheckout changes const { currentPage, totalPages, currentItems: paginatedAttendances, paginate } = usePagination( processedData, @@ -226,4 +231,6 @@ const AttendanceLog = ({ handleModalData, projectId }) => { ); }; -export default AttendanceLog; \ No newline at end of file +export default AttendanceLog; + + diff --git a/src/pages/Activities/AttendancePage.jsx b/src/pages/Activities/AttendancePage.jsx index 85ec52fe..6f4c6c0b 100644 --- a/src/pages/Activities/AttendancePage.jsx +++ b/src/pages/Activities/AttendancePage.jsx @@ -21,7 +21,7 @@ import { REGULARIZE_ATTENDANCE } from "../../utils/constants"; const AttendancePage = () => { const [activeTab, setActiveTab] = useState("all"); - + const [showOnlyCheckout, setShowOnlyCheckout] = useState(false); const loginUser = getCachedProfileData(); var selectedProject = useSelector((store) => store.localVariables.projectId); const { projects, loading: projectLoading } = useProjects(); @@ -86,6 +86,10 @@ const AttendancePage = () => { }); }; + const handleToggle = (event) => { + setShowOnlyCheckout(event.target.checked); + }; + useEffect(() => { if (modelConfig !== null) { openModel(); @@ -100,6 +104,16 @@ const AttendancePage = () => { dispatch(setProjectId(loginUser?.projects[0])); } }, [selectedProject, loginUser?.projects]); + + + // Filter attendance data based on the toggle + const filteredAttendance = showOnlyCheckout + ? attendances?.filter( + (att) => att?.checkOutTime !== null && att?.checkInTime !== null + ) + : attendances; + + return ( <> {isCreateModalOpen && modelConfig && ( @@ -161,7 +175,7 @@ const AttendancePage = () => { )} - +
{projectLoading && Loading..} @@ -205,25 +236,26 @@ const AttendancePage = () => { {activeTab === "all" && ( <> - {!projectLoading && attendances.length === 0 && ( + {!projectLoading && filteredAttendance?.length === 0 && (

No Employee assigned yet.

)}
)} - + {activeTab === "logs" && (
)}