import React, { useCallback, useMemo, useState } from 'react' import { Button } from './Button' import { HStack, VStack } from './LayoutPrimitives' type PaginationProps = { items: T[] itemsPerPage: number loadMoreButtonText?: string render: (item: T) => React.ReactNode } const Pagination = ({ items, itemsPerPage, loadMoreButtonText, render, }: PaginationProps) => { const [currentPage, setCurrentPage] = useState(1) const maxPage = Math.ceil(items.length / itemsPerPage) const incrementCurrentPage = useCallback(() => { setCurrentPage(currentPage + 1) }, [currentPage, setCurrentPage]) const itemsToShow = useMemo(() => { const count = currentPage * itemsPerPage return items.slice(0, count) }, [items, currentPage, itemsPerPage]) return ( {itemsToShow.map(render)} {currentPage < maxPage && ( )} ) } export default Pagination