Spaces:
Build error
Build error
| import React from 'react'; | |
| type PaginationProps = { | |
| currentPage: number; | |
| totalPages: number; | |
| onPageChange: (page: number) => void; | |
| }; | |
| export default function Pagination({ currentPage, totalPages, onPageChange }: PaginationProps) { | |
| return ( | |
| <div className="mt-4 flex items-center justify-between"> | |
| <button | |
| onClick={() => onPageChange(Math.max(currentPage - 1, 1))} | |
| disabled={currentPage === 1} | |
| className={`px-4 py-2 rounded-md mr-2 ${ | |
| currentPage === 1 | |
| ? 'bg-gray-200 dark:bg-gray-700 text-gray-500 dark:text-gray-500 cursor-not-allowed' | |
| : 'bg-blue-500 dark:bg-blue-600 text-white' | |
| }`} | |
| > | |
| < | |
| </button> | |
| <div className="flex items-center space-x-2"> | |
| {currentPage > 1 && ( | |
| <> | |
| <button | |
| onClick={() => onPageChange(1)} | |
| className="px-2 py-1 bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-200 rounded-md" | |
| > | |
| 1 | |
| </button> | |
| {currentPage > 2 && <span className="text-gray-500">...</span>} | |
| </> | |
| )} | |
| {[...Array(5)].map((_, i) => { | |
| const page = currentPage + i - 2; | |
| if (page >= 1 && page <= totalPages) { | |
| return ( | |
| <button | |
| key={page} | |
| onClick={() => onPageChange(page)} | |
| className={`px-2 py-1 rounded-md ${ | |
| page === currentPage | |
| ? 'bg-blue-500 dark:bg-blue-600 text-white' | |
| : 'bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-200' | |
| }`} | |
| > | |
| {page} | |
| </button> | |
| ); | |
| } | |
| return null; | |
| })} | |
| {currentPage < totalPages && ( | |
| <> | |
| {currentPage < totalPages - 1 && <span className="text-gray-500">...</span>} | |
| <button | |
| onClick={() => onPageChange(totalPages)} | |
| className="px-2 py-1 bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-200 rounded-md" | |
| > | |
| {totalPages} | |
| </button> | |
| </> | |
| )} | |
| </div> | |
| <button | |
| onClick={() => onPageChange(Math.min(currentPage + 1, totalPages))} | |
| disabled={currentPage === totalPages} | |
| className={`px-4 py-2 rounded-md ${ | |
| currentPage === totalPages | |
| ? 'bg-gray-200 dark:bg-gray-700 text-gray-500 dark:text-gray-500 cursor-not-allowed' | |
| : 'bg-blue-500 dark:bg-blue-600 text-white' | |
| }`} | |
| > | |
| > | |
| </button> | |
| </div> | |
| ); | |
| } | |