Spaces:
Runtime error
Runtime error
import './Pagination.scss'; | |
import ChevronIcon from '@assets/images/chevron.svg?react'; | |
import ChevronDoubleIcon from '@assets/images/chevron-double.svg?react'; | |
import { FunctionComponent, HTMLProps } from 'react'; | |
import { Button } from '../Button/Button'; | |
import { Dropdown } from '../Dropdown/Dropdown'; | |
const rotateIconHOC = ( | |
WrappedComponent: FunctionComponent<HTMLProps<SVGSVGElement>>, | |
value: number | |
): FunctionComponent => { | |
return function RotatedComponent(props) { | |
return <WrappedComponent {...props} style={{ transform: `rotate(${value}deg)` }}></WrappedComponent>; | |
}; | |
}; | |
type PaginationProps = { | |
itemsPerPageOptions: number[]; | |
itemsPerPage: number; | |
page: number; | |
totalPages: number; | |
onChangePage: (value: number) => void; | |
onChangeItemsPerPage: (value: number) => void; | |
className?: string; | |
}; | |
export const Pagination = ({ | |
itemsPerPageOptions, | |
itemsPerPage, | |
onChangePage, | |
onChangeItemsPerPage, | |
page, | |
totalPages, | |
className = '', | |
}: PaginationProps): JSX.Element => { | |
return ( | |
<div className={`pagination ${className}`}> | |
<div className="pagination-control"> | |
<span className="spark-font-75">Items per page</span> | |
<Dropdown | |
className="items-per-page-dropdown" | |
direction="top" | |
options={itemsPerPageOptions.map((v) => v.toString())} | |
selectedOption={itemsPerPage.toString()} | |
onSelect={(v) => { | |
onChangeItemsPerPage(Number(v)); | |
onChangePage(1); | |
}} | |
/> | |
</div> | |
<div className="pagination-list"> | |
<Button | |
variant="secondary" | |
icon={rotateIconHOC(ChevronDoubleIcon, 90)} | |
disabled={page === 1} | |
onClick={() => onChangePage(1)} | |
></Button> | |
<Button | |
variant="secondary" | |
icon={rotateIconHOC(ChevronIcon, 90)} | |
disabled={page === 1} | |
onClick={() => onChangePage(page - 1)} | |
></Button> | |
<span className="spark-font-75"> | |
Page {page} of {totalPages} | |
</span> | |
<Button | |
variant="secondary" | |
icon={rotateIconHOC(ChevronIcon, -90)} | |
disabled={page === totalPages} | |
onClick={() => onChangePage(page + 1)} | |
></Button> | |
<Button | |
variant="secondary" | |
icon={rotateIconHOC(ChevronDoubleIcon, -90)} | |
onClick={() => onChangePage(totalPages)} | |
disabled={page === totalPages} | |
></Button> | |
</div> | |
</div> | |
); | |
}; | |