import { ReactNode, useEffect, useState } from "react"; import MainBtn from "../MainBtn"; const data1:{ name: string; email: string; status: string; location: string; }[] = []; type PaginatedListProps = { data: any, itemsPerPage: number, filterItem?: string[], titleClass?:string, children: (data:any) => ReactNode; } export default function TableWrapper({ data = data1, itemsPerPage = 5, filterItem, children, }:PaginatedListProps) { const [isLoading, setIsLoading] = useState(true) const [searchTerm, setSearchTerm] = useState(""); const [filteredData, setFilteredData] = useState(data); const [currentPage, setCurrentPage] = useState(0); const [newData, setNewData] = useState<{ name: string; email: string; status: string; location: string; }[]>([]); const numberOfSelection = itemsPerPage; const handlePrev = () => { if (currentPage != 0) { setCurrentPage((prev:any) => prev - numberOfSelection); } }; const handleNext = () => { if (currentPage < data.length) { setCurrentPage((prev:any) => prev + numberOfSelection); } }; const handleSearch = ({ target: { value } }:{target: {value:string}}, name:string) => { setSearchTerm(value); let newFilteredData:any = data.filter((item:any) => item[name].toLowerCase().startsWith(value.toLowerCase()) ); setFilteredData(newFilteredData); setCurrentPage(0); }; useEffect(() => { setIsLoading(true) setTimeout(()=>{ setNewData( filteredData?.slice(currentPage, numberOfSelection + currentPage) ); setIsLoading(false) },1000) }, [currentPage, filteredData]); useEffect(()=>{ setCurrentPage(0) },[itemsPerPage]) return (
{data.length > 0 && filterItem && (
{filterItem.map((item, index) => ( ))}
)}
{children({ data: newData })}
{/* PAGINATION BUTTON */} {(newData.length > 0 && data.length > itemsPerPage) &&
Showing {isLoading ? '----' : `${currentPage + 1}-${currentPage + numberOfSelection >= data.length ? data.length : (currentPage + numberOfSelection)}`} of {data.length}
= data.length ? 'bg-sky-600/50 pointer-events-none' : 'bg-sky-600'} text-white-light`} disabled={isLoading} />
}
{/* show prev and next button if data exist */} {/* {data.length > 0 && ( {data.length && data.map((item, index)=>{ item = item if(index%itemsPerPage == 0 && index >= currentPage && index <= currentPage+itemsPerPage){ return ( ) } })}
)} */} {isLoading && } ); } const TableIsLoading = () => { return (

Loading...

) }