import React from 'react'; import styled from 'styled-components'; import { FaArrowLeft, FaArrowRight } from 'react-icons/fa'; const PaginationContainer = styled.nav` margin: 20px 0px 36px; align-items: center; .reviews-pagination { display:inline-flex; list-style: none; padding: 0px 0px 0px 0px; } .reviews-page-link { list-style: none; font-size: 13px; line-height: 18.2px; color: #222222; padding: 10px 15px; margin-right:4px; border-radius: 50%; border: none; outline:none; cursor: pointer; } .reviews-page-period { align-self:flex-end; } .reviews-page-link-current { list-style: none; font-size: 13px; line-height: 18.2px; background: rgba(34, 34, 34, 0.4); padding: 10px 15px; margin-right:4px; border:none; border-radius: 50%; outline:none; cursor:pointer; } `; const Pagination = (props) => { const { reviewsPerPage, totalReviews, paginate, currentPage } = props; const pageNumbers = []; for (let i = 1; i <= Math.ceil(totalReviews / reviewsPerPage); i += 1) { pageNumbers.push(i); } const previous = currentPage - 1; const next = currentPage + 1; const firstPage = 1; const secondPage = 2; const lastPage = pageNumbers.length; if (currentPage === 1) { return ( <PaginationContainer className="PaginationContainer"> <ul className="reviews-pagination"> <li className="reviews-page-item"> <button type="button" className="reviews-page-link"><FaArrowLeft /></button> </li> <li className="reviews-page-item"> <button type="button" className="reviews-page-link-current">1</button> </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(secondPage)} className="reviews-page-link">2</button> </li> <li className="reviews-page-period">... </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(lastPage)} className="reviews-page-link">{lastPage}</button> </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(next)} className="reviews-page-link"><FaArrowRight /></button> </li> </ul> </PaginationContainer> ); } if (currentPage === 2) { return ( <PaginationContainer className="PaginationContainer"> <ul className="reviews-pagination"> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(firstPage)} className="reviews-page-link"><FaArrowLeft /></button> </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(firstPage)} className="reviews-page-link">1</button> </li> <li className="reviews-page-item"> <button type="button" className="reviews-page-link-current">2</button> </li> <li className="reviews-page-period">... </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(lastPage)} className="reviews-page-link">{lastPage}</button> </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(next)} className="reviews-page-link"><FaArrowRight /></button> </li> </ul> </PaginationContainer> ); } if (currentPage === lastPage - 1) { return ( <PaginationContainer className="PaginationContainer"> <ul className="reviews-pagination"> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(previous)} className="reviews-page-link"><FaArrowLeft /></button> </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(firstPage)} className="reviews-page-link">1</button> </li> <li className="reviews-page-period">... </li> <li className="reviews-page-item"> <button type="button" className="reviews-page-link-current">{currentPage}</button> </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(lastPage)} className="reviews-page-link">{lastPage}</button> </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(lastPage)} className="reviews-page-link"><FaArrowRight /></button> </li> </ul> </PaginationContainer> ); } if (currentPage === lastPage) { return ( <PaginationContainer className="PaginationContainer"> <ul className="reviews-pagination"> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(previous)} className="reviews-page-link"><FaArrowLeft /></button> </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(firstPage)} className="reviews-page-link">1</button> </li> <li className="reviews-page-period">... </li> <li className="reviews-page-item"> <button type="button" onClick={() => paginate(lastPage - 1)} className="reviews-page-link">{currentPage - 1}</button> </li> <li className="reviews-page-item"> <button type="button" className="reviews-page-link-current">{lastPage}</button> </li> <li className="reviews-page-item"> <button type="button" className="reviews-page-link"><FaArrowRight /></button> </li> </ul> </PaginationContainer> ); } return ( <PaginationContainer className="PaginationContainer"> <ul className="reviews-pagination"> <li className="reviews-page-item"> <button className="reviews-page-link" type="button" onClick={() => paginate(previous)}><FaArrowLeft /></button> </li> <li className="reviews-page-item"> <button className="reviews-page-link" type="button" onClick={() => paginate(firstPage)}>1</button> </li> <li className="reviews-page-period">... </li> <li className="reviews-page-item"> <button className="reviews-page-link-current" type="button">{currentPage}</button> </li> <li className="reviews-page-period">... </li> <li className="reviews-page-item"> <button className="reviews-page-link" type="button" onClick={() => paginate(lastPage)}>{lastPage}</button> </li> <li className="reviews-page-item"> <button className="reviews-page-link" type="button" onClick={() => paginate(next)} ><FaArrowRight /></button> </li> </ul> </PaginationContainer> ); }; export default Pagination;