Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const _pipe = require('../helpers/pipe')
- // query default setting
- const { conditionConfig, _get } = require('./../../config/')
- const sort_default = _get("sort.default", conditionConfig)
- const limit_default = _get("limit", conditionConfig)
- /*
- * @param String limit, path, sort for generating link
- * @param Number page
- * if page === 1, return base link or/and limit or/and sort
- * @return link pagination
- */
- const getPaginationPath = (sort, limit, path) => {
- let url = []
- if(sort !== sort_default) {
- url = [...url, 'sort=' + sort]
- }
- if(limit !== limit_default) {
- url = [...url, 'limit=' + limit]
- }
- path += url.length ? '?' + url.join('&') : ''
- return page => page !== 1 ?
- path + (url.length ? '&' : '?') + 'page=' + page :
- path
- }
- /*
- * @param Number limit, limit items for page
- * @param Number total, total items
- * @return max page number pagination
- */
- const getLastPageNumber = ({limit, total}) => Math.ceil(total / limit)
- /*
- * @param Number current page
- * @param Number max page pagination
- * @return Array pages - example - [1,2,3,4,'...',7] etc
- */
- const getRange = page => last => {
- let range = [1],
- delta = 2,
- left = page - delta,
- right = page + delta
- for (let i = 2; i <= last; i++) {
- if (i == last || i >= left && i <= right) {
- range.push(i)
- }
- }
- return range
- }
- /*
- * @param Number `page` - current page
- * @param Function `getPaginationLink` - this function include limit & sort
- * @param Array `range` - page number for pagination generate
- * @return `html pagination template`
- */
- const getHtml = (page, getPaginationLink) => range => {
- let htmlTemplateStart = '<nav aria-label="Page navigation"><ul class="pagination pagination-sm mb-0">',
- htmlTemplate = '',
- htmlTemplateFinish = '</ul></nav>',
- l
- for (let i of range) {
- if (l) {
- if (i - l === 2) {
- htmlTemplate += `<li class="page-item ${(page === l + i) ? 'active' : ''}"><a class="page-link" href="${getPaginationLink(l + 1)}">${l + 1}</a></li>`
- } else if (i - l !== 1) {
- htmlTemplate += `<li class="page-item" disabled><a class="page-link" href="#">...</a></li>`
- }
- }
- htmlTemplate += `<li class="page-item ${(page === i) ? 'active' : ''}"><a class="page-link" href="${getPaginationLink(i)}">${i}</a></li>`
- l = i
- }
- return htmlTemplateStart + htmlTemplate + htmlTemplateFinish
- }
- /*
- *
- */
- const Pagination = (sort = '', page = 1, limit = 15, total = 45, path = '') => {
- if(total > 0) {
- let getPaginationLink = getPaginationPath(sort, limit, path)
- let htmlTemplateLinks = () =>
- _pipe(
- getLastPageNumber,
- getRange(page),
- getHtml(page, getPaginationLink)
- )({limit, total})
- return htmlTemplateLinks()
- }
- return ''
- }
- module.exports = Pagination
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement