Last active
July 27, 2023 01:39
-
-
Save abedzantout/9b1e32ad0b4b7323c9b6bd42dfaadfad to your computer and use it in GitHub Desktop.
Paginator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import React, {FunctionComponent, Fragment, useState, useEffect} from 'react'; | |
| import './styles.css'; | |
| type Props = { | |
| skip?: number; | |
| range: number[]; | |
| handlePaginationChange: Function; | |
| } | |
| const PaginatorComponent: FunctionComponent<Props> = ({skip, range, handlePaginationChange}) => { | |
| skip = !!skip ? skip : 0; | |
| const [page, setPageNumber] = useState(1); | |
| useEffect(() => { | |
| return setPageNumber(skip); | |
| }, [skip]); | |
| const moveToNextPage = () => { | |
| if (page > 1) { | |
| handlePaginationChange(page - 1); | |
| return setPageNumber(page - 1); | |
| } | |
| return null; | |
| }; | |
| const moveToPreviousPage = () => { | |
| if (page < range[range.length - 1]) { | |
| handlePaginationChange(page + 1); | |
| return setPageNumber(page + 1); | |
| } | |
| return null; | |
| }; | |
| const moveToPage = (pageNumber: number) => { | |
| handlePaginationChange(pageNumber); | |
| return setPageNumber(pageNumber); | |
| }; | |
| const renderPageIndicators = (num, index) => ( | |
| <span | |
| className={`paginator__page-number ${num === page ? 'paginator__page-number--selected' : ''}`} | |
| key={index} onClick={() => moveToPage(num)}> | |
| {num} | |
| </span> | |
| ); | |
| return ( | |
| <Fragment> | |
| <div className="paginator"> | |
| {range.length > 1 ? | |
| <button className="paginator__button" | |
| onClick={moveToNextPage}> | |
| <span className="paginator__button__indicator left"> | |
| {'<'}</span> <span className="paginator__button__label"> Previous </span> | |
| </button> : null} | |
| {range.map(renderPageIndicators)} | |
| {range.length > 1 ? | |
| <button className="paginator__button" | |
| onClick={moveToPreviousPage}> | |
| <span className="paginator__button__label"> Next</span> <span | |
| className="paginator__button__indicator right">{'>'}</span> | |
| </button> : null} | |
| </div> | |
| </Fragment> | |
| ) | |
| }; | |
| export default PaginatorComponent; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment