From 926c0e39db3040fa836f44a571b2155b085b8a7a Mon Sep 17 00:00:00 2001 From: Christian Knecht <christian.knecht@iao.fraunhofer.de> Date: Sat, 10 Apr 2021 23:33:45 +0200 Subject: [PATCH] feature: add pagination filter utility --- package-lock.json | 32 +++++++++++++------------- package.json | 6 ++--- src/index.ts | 1 + src/utilities/index.ts | 1 + src/utilities/pagination.ts | 8 +++++++ test/unit/utilities/pagination.spec.ts | 21 +++++++++++++++++ 6 files changed, 50 insertions(+), 19 deletions(-) create mode 100644 src/utilities/pagination.ts create mode 100644 test/unit/utilities/pagination.spec.ts diff --git a/package-lock.json b/package-lock.json index 76ed78f..9687e80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { "name": "value-converters", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "1.0.0", + "version": "1.1.0", "license": "BSD-3-Clause-Clear", "dependencies": { "lodash": "^4.17.21", @@ -17,11 +17,11 @@ "@types/traverse": "^0.6.32", "@typescript-eslint/eslint-plugin": "^4.21.0", "@typescript-eslint/parser": "^4.21.0", - "eslint": "^7.23.0", + "eslint": "^7.24.0", "jest": "^26.6.3", "rimraf": "^3.0.2", "ts-jest": "^26.5.4", - "typescript": "^4.2.3" + "typescript": "^4.2.4" } }, "node_modules/@babel/code-frame": { @@ -2408,9 +2408,9 @@ } }, "node_modules/eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", @@ -6963,9 +6963,9 @@ } }, "node_modules/typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -9280,9 +9280,9 @@ } }, "eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", @@ -12816,9 +12816,9 @@ } }, "typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true }, "union-value": { diff --git a/package.json b/package.json index 53d3e28..a23cb37 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "value-converters", - "version": "1.0.0", + "version": "1.1.0", "description": "extended filtering function, sorting, localization, dissolving urls and reusable validators", "main": "dist/index.js", "scripts": { @@ -28,11 +28,11 @@ "@types/traverse": "^0.6.32", "@typescript-eslint/eslint-plugin": "^4.21.0", "@typescript-eslint/parser": "^4.21.0", - "eslint": "^7.23.0", + "eslint": "^7.24.0", "jest": "^26.6.3", "rimraf": "^3.0.2", "ts-jest": "^26.5.4", - "typescript": "^4.2.3" + "typescript": "^4.2.4" }, "dependencies": { "lodash": "^4.17.21", diff --git a/src/index.ts b/src/index.ts index 3c54a00..fe6157e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,7 @@ export * as utilities from './utilities'; export {dissolveUrl} from './utilities/dissolveUrl'; export {filter} from './utilities/filter'; export {localize} from './utilities/localize'; +export {pagination} from './utilities/pagination'; export {sort} from './utilities/sort'; export * as validators from './validators'; export * as arrayValidators from './validators/arrayValidators'; diff --git a/src/utilities/index.ts b/src/utilities/index.ts index 7867e34..dc9fea7 100644 --- a/src/utilities/index.ts +++ b/src/utilities/index.ts @@ -1,4 +1,5 @@ export {dissolveUrl} from './dissolveUrl'; export {filter} from './filter'; export {localize} from './localize'; +export {pagination} from './pagination'; export {sort} from './sort'; diff --git a/src/utilities/pagination.ts b/src/utilities/pagination.ts new file mode 100644 index 0000000..db11422 --- /dev/null +++ b/src/utilities/pagination.ts @@ -0,0 +1,8 @@ +'use strict'; + +export function pagination(array: any[], skip: number, limit: number): any[] { + if (!array || !limit || limit > array.length || skip * limit > array.length) { + return array; + } + return array.slice(skip * limit, (skip * limit) + limit); +} diff --git a/test/unit/utilities/pagination.spec.ts b/test/unit/utilities/pagination.spec.ts new file mode 100644 index 0000000..b380b8e --- /dev/null +++ b/test/unit/utilities/pagination.spec.ts @@ -0,0 +1,21 @@ +import {pagination} from '../../../src/utilities/pagination'; + +const array1 = [...Array(56).keys()].slice(1); + +test.each([ + [array1, 0, 10, [...Array(11).keys()].slice(1)], + [array1, 1, 10, [...Array(21).keys()].slice(11)], + [array1, 2, 10, [...Array(31).keys()].slice(21)], + [array1, 3, 10, [...Array(41).keys()].slice(31)], + [array1, 4, 10, [...Array(51).keys()].slice(41)], + [array1, 5, 10, [...Array(56).keys()].slice(51)], + [array1, 0, 20, [...Array(21).keys()].slice(1)], + [array1, 1, 20, [...Array(41).keys()].slice(21)], + [array1, 2, 20, [...Array(56).keys()].slice(41)], + [array1, 3, 20, array1] +])( + 'filter pagination %p, skip %d and limit %d = %p', + (array:any[], skip, limit, expected) => { + expect(pagination(array, skip, limit)).toEqual(expected); + } +); -- GitLab