This repo contains a set of tools for pagination.
It is build with:
- node:
v14.x.x
( ~lts/fermium
) - npm:
6.14.11
For a complete list of packages and their version check out the package.json
file.
You can install this package by doing:
$ npm install @studiohyperdrive/pagination
or if you use Yarn:
$ yarn add @studiohyperdrive/pagination
In your code, you can use this package and it's interfaces like this:
import { Pagination, IPagination } from '@studiohyperdrive/pagination';
class ItemController {
public async findAll(page: number, size: number, query: Record<string, unknown>): Promise<IPagination<IItem>> {
const [items, total]: [IItem[], number] = await this.itemRepository.findAndCount(page, size);
return Pagination<IItem>({
items,
page,
path,
query,
size,
total,
});
}
}
This will transform your items and total to a formatted pagination response which you can return to the client. Adding a path
and query
is optional. If specified, links to the current, first, last, next and previous page are added to the response.
This package exposes the following functions:
calculateTotalPages
: Calculate the total amount of pages based on the total amount of elements and the page sizeformatQuerystring
: Format the querystring based on the page, the size and the current request querystringformatLink
: Format a link based on the path, the page, the size and the current request querystringPagination
: This function is the main one which will use the above and your input to transform your input to a pagination object
And the following interfaces:
IPagination
: An interface for the formatted pagination object
To setup this project, clone the repo and run yarn
to install the dependencies.
The available commands for building the project are:
command | runs |
---|---|
build | This script runs rollup to compile your code (target to the dist folder) |
The available commands for testing the project are:
command | runs |
---|---|
lint | This script will run linting |
lint:fix | This script will run linting and fix what it can |
test | This script will run your Jest tests for the library and create a coverage report |
test:watch | This script will run your Jest tests but with the --watch flag. It does not create a coverage report |
This project can be published to the npm registry. To do so follow these steps:
- Run
npm version <major | minor | patch>
to create a new version and commit + tag it. - Open a Merge Request on Github.
- Once your changes have been commited to the main-branch, you can publish to the repo.
- Run
npm publish
.
Due to historic reasons v2.0.0 has been unpublished, meaning this version cannot be used for a new release. Make sure to bump to at least v2.0.1 to continue development.
This project has been created by:
- Niels Bril: [email protected]
It is currently maintained by:
- Niels Bril: [email protected]