import React, { useCallback, useEffect, useState, useMemo } from "react"; import Avatar from "../common/Avatar"; import { convertShortTime } from "../../utils/dateUtils"; import RegularizationActions from "./RegularizationActions"; import { useSelector } from "react-redux"; import { useRegularizationRequests } from "../../hooks/useAttendance"; import moment from "moment"; import usePagination from "../../hooks/usePagination"; import eventBus from "../../services/eventBus"; import { cacheData, clearCacheKey, useSelectedProject, } from "../../slices/apiDataManager"; import { useQueryClient } from "@tanstack/react-query"; import Pagination from "../../components/common/Pagination"; const Regularization = ({ handleRequest, searchTerm, projectId, organizationId, IncludeInActive, }) => { const queryClient = useQueryClient(); // var selectedProject = useSelector((store) => store.localVariables.projectId); const selectedProject = useSelectedProject(); const [regularizesList, setregularizedList] = useState([]); const { regularizes, loading, error, refetch } = useRegularizationRequests( selectedProject, organizationId, IncludeInActive ); useEffect(() => { setregularizedList(regularizes); }, [regularizes]); 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 handler = useCallback( (msg) => { if (selectedProject == msg.projectId) { queryClient.setQueryData( ["regularizedList", selectedProject], (oldData) => { if (!oldData) { queryClient.invalidateQueries({ queryKey: ["regularizedList"] }); } return oldData.filter((record) => record.id !== msg.response.id); } ), queryClient.invalidateQueries({ queryKey: ["attendanceLogs"] }); } }, [selectedProject, regularizes] ); // Filter the data based on the search term and sort it const filteredSearchData = useMemo(() => { const sortedList = [...regularizesList].sort(sortByName); if (!searchTerm) { return sortedList; } const lowercasedSearchTerm = searchTerm.toLowerCase(); return sortedList.filter((item) => { const fullName = `${item?.firstName} ${item?.lastName}`.toLowerCase(); return fullName.includes(lowercasedSearchTerm); }); }, [regularizesList, searchTerm]); const { currentPage, totalPages, currentItems, paginate } = usePagination( filteredSearchData, 20 ); useEffect(() => { eventBus.on("regularization", handler); return () => eventBus.off("regularization", handler); }, [handler]); const employeeHandler = useCallback( (msg) => { if (regularizes.some((item) => item.employeeId == msg.employeeId)) { refetch(); } }, [regularizes] ); useEffect(() => { eventBus.on("employee", employeeHandler); return () => eventBus.off("employee", employeeHandler); }, [employeeHandler]); return (
{loading ? (

Loading...

) : currentItems?.length > 0 ? ( {currentItems?.map((att, index) => ( ))}
Name Date Organization Check-In Check-Out Action
{moment(att.checkOutTime).format("DD-MMM-YYYY")} {att.organizationName || "--"} {convertShortTime(att.checkInTime)} {att.checkOutTime ? convertShortTime(att.checkOutTime) : "--"}
) : (
{searchTerm ? "No results found for your search." : "No Requests Found !"}
)} {/* {!loading && totalPages > 1 && ( )} */} {totalPages > 0 && ( )}
); }; export default Regularization;