easy-paginator
TypeScript icon, indicating that this package has built-in type declarations

2.1.0 • Public • Published

EasyPaginator

EasyPaginator is a JavaScript library that makes it easy to create and manage pagination.

😕 Problem

When creating a project that requires pagination, it can be tempting to start from scratch, which often results in several problems such as:

  • Duplicate code: across different screens that require pagination
  • Modules with multiple responsibilities: their own and pagination
  • Unexpected behaviors: due to not handling edge cases While these problems may not always surface, as they depend on individual implementation, they are commonly seen even in production-level code.

🙂 Solution

EasyPaginator is a package that aims to abstract the internal logic and state of a paginator from the client code through different methods that make its interaction and handling easy, with features such as moving forward and backward between pages, getting the limits of the paginator, and defining segments among others, without having to worry about internal calculations, page limits, and other edge cases, resulting in less coupling, fewer unexpected behaviors, and modules with fewer responsibilities in your client code.

⌨️ Get started

Install

npm install EasyPaginator

import and use

    import { EasyPaginator } from  "./easy-paginator/easy-paginator";
    
    const  paginator = new  EasyPaginator({
        offset:  0,
        limit:  10,
        count:  1000
    })

    console.log(paginator.page) // 1

Usage

Create an instance

    import { EasyPaginator } from  "./easy-paginator/easy-paginator";
    
    const  paginator = new  EasyPaginator({
        offset:  0, //quantity of items viewed items and start point for the new ones
        limit:  10, //quantity of items to show per page
        count:  1000, //all items count
        segmentLength: 7 // define a segment for paginator limits, doesnt affect te behaviour just add more information, if not provided the segment is all the pages
    })

Get the current page

Returns a number. If the provided offset when creating the object is invalid, the page will be set to the closest valid page.
Get the next page

    paginator.page

Get the expected page

When the offset its greater than the count of elements EasyPaginator cut it to fit into the limits, but in certain cases we need to know the expected page if the count were bigger

    paginator.expectedPage

Get the next page

Returns the next page number if possible, or undefined if not.

    paginator.nextPage

Get the previous page

Returns the previous page number if possible, or undefined if not.

    paginator.prevPage

Get the last page

Returns the last page of paginator instance

    paginator.lastPage

Results

show the count of items loaded for the current page, usally correspond with the limit provided, but may be less in certain cases

    paginator.results

Get segment limits

If segment length was provided then the segment limits will be the pages for show in the paginator with the current page in the middle, if segment length wasn't provided the segment will be since 1 to lastPage

    paginator.firstSegmentLimit
    paginator.lastSegmentLimit

Get elements

Return an array of elements that can be used for render a paginator, delimited by a segment

paginator.elements

the structure of the elements its

    [{
        text: "<" // the text of button can be '<' '<<' '1', '2' ... 'Infinity', '>' '>>'
        target: 1 // the page to navigate
        enabled: true // show what buttons are enabled for this page, used mostly for the arrows
        active: false // if the page its the active page
    }]

Navigate to pages

We can navigate between pages in the paginator with this 3 methods, the methos not modify the internal state of the paginator, instead returns a new instance with the new page data

    const paginatorForNextPage = paginator.buildNext()
    const paginatorForPrevPage = paginator.buildPrev()
    const paginatorForPage5 = paginator.buildTo(5)

Set new count

We may need to increase the count of items, we can use this method, we need to be aware that new instance will be created instead of altering the existing one,

paginator.withCount(50) // return a new instance with the new offset

all previous validations of offset still remain, offset 50 with count 30 returns page 3, if we add more count with the method withCount(100) for example the page still will be 3

    let paginator = new EasyPaginator({offset: 50, limit: 10, count: 30})
	paginator.page === 3 // true
	paginator.lastPage ===  3 // true

	paginator = paginator.withCount(100)
	paginator.page === 3 // true due the limit constraints were applied before
	paginator.lastPage === 10 // true due the new count

Set new count without taking into account previous validations

If we want to attempt to go to expected page and we want try it with new count we must use

    let paginator = new EasyPaginator({offset: 50, limit: 10, count: 30})
	paginator.page === 3 // true
	paginator.lastPage ===  3 // true

	paginator = paginator.expectedWithCount(100)
	paginator.page === 6 // true due the limit constraints were recalculated against datasource whe we call the method
	paginator.lastPage === 10 // true due the new count

Raw data

We can access to raw data provided for the EasyPaginator instance

    paginator.offset //this its not the raw, its the fix version
    paginator.limit
    paginator.count
    paginator.segmentLimit

Demo

You can see an example in this codepen that use the pokeapi codepen

License

EasyPaginator is MIT Licensed

Readme

Keywords

none

Package Sidebar

Install

npm i easy-paginator

Weekly Downloads

0

Version

2.1.0

License

MIT

Unpacked Size

14.7 kB

Total Files

7

Last publish

Collaborators

  • matazazin