'use client' import { useState } from 'react' import styles from './Pagination.module.css' import { Button, Icon } from '../../atoms' import { getGlobalStyle } from '../../../helpers' interface PaginationProps { currentPage: number isVisableButtonLeft: boolean isVisableButtonRight: boolean isVisableButtons: boolean items: Array handleNextPage?: () => void handleOnClick: (pageNumber: number) => void handlePrevPage?: () => void } /** * Pagination component * * @param {PaginationProps} props - Properties passed to the component * @returns {JSX.Element} Pagination component */ export const Pagination: React.FC = ({ currentPage = 1, items = [], handleOnClick, isVisableButtonLeft, isVisableButtonRight, isVisableButtons, handlePrevPage, handleNextPage }) => { if (items.length === 0) return null const [pageNumber, setPageNumber] = useState('') if (currentPage < 1 || !Array.isArray(items) || items.some(item => typeof item === 'number' && item < 0)) { return

Invalid numbers provided

} const handlePageInputChange = (event: React.ChangeEvent) => { const value = event.target.value.trim() setPageNumber(value) } const handleGoToPage = () => { const pageNumberInt = parseInt(pageNumber, 10) if (!isNaN(pageNumberInt) && pageNumberInt >= 1 && pageNumberInt <= items.length) { handleOnClick(pageNumberInt) } setPageNumber('') } const visibleItems = items.slice(Math.max(0, currentPage - 3), Math.min(items.length, currentPage + 3)) return (
{isVisableButtons && isVisableButtonLeft && ( )} {currentPage > 4 && ( )} {currentPage > 5 && } {visibleItems.map((item, index) => { if (typeof item === 'number') { return ( ) } else { return ( ) } })} {currentPage < items.length - 4 && ( )} {currentPage < items.length - 3 && ( )} {isVisableButtons && isVisableButtonRight && ( )} {items.length >= 10 &&
{(pageNumber.length > 0) && }
}
) }