Guest User

Untitled

a guest
Jul 16th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. const noop = v => v;
  2.  
  3. /*
  4. * @params {Integer} current
  5. * @params {Integer} totalPages
  6. * @params {Integer} delta
  7. * @returns {Integer[]}
  8. */
  9. export default ({current, totalPages, delta = 2, render = noop}) => {
  10. const left = Math.max(current - delta, 0),
  11. right = Math.min(current + delta, totalPages);
  12.  
  13. const pagesToShow = Math.min(right - left + delta, totalPages);
  14.  
  15. const {pages} = Array.from({ length: pagesToShow }).reduce(({prevPage, pages}, _, v) => {
  16. let page;
  17. if (v === 0) { page = 1; } // always show first page
  18. else if (v === pagesToShow - 1) { page = totalPages; } // always show last page
  19. else if (current > pagesToShow - delta && pagesToShow !== totalPages) { page = v + current - delta - 1; }
  20. else { page = v + 1 };
  21.  
  22. // If page is 10, and prev page is 8, just fill in 9
  23. if(page - prevPage === 2) {
  24. return {prevPage: page, pages: pages.concat(render(page - 1), render(page))}
  25. } else if (page - prevPage > 2) {
  26. return {prevPage: page, pages: pages.concat(render('...'), render(page))}
  27. } else {
  28. return {prevPage: page, pages: pages.concat(render(page))}
  29. }
  30. }, { prevPage: 1, pages: [] });
  31.  
  32. return pages;
  33. }
Add Comment
Please, Sign In to add comment