Skip to content

Commit

Permalink
Merge pull request #13 from rundef/master
Browse files Browse the repository at this point in the history
Add PaginatorMeta class
  • Loading branch information
MathieuDoyon committed Dec 15, 2016
2 parents 3bbb121 + f5d22e5 commit f0b4066
Show file tree
Hide file tree
Showing 15 changed files with 432 additions and 276 deletions.
85 changes: 47 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,53 +17,62 @@ Paginator library in NodeJS to facilitate REST pagination

### Installation

$ npm install --save @ssense/node-paginator
```bash
npm install --save @ssense/node-paginator
```

### Usage

import { Paginator } from '@ssense/node-paginator';

const items = ['item1', 'item2', 'item3']; // from your DB returned collection...
const perPage = 1;
const currentPage = 2;
const paginator: Paginator = new Paginator(items, items.length, perPage, currentPage);

// Transform paginator to object, use this as rour REST response
const paginated = paginator.transform();

console.log(paginated);
/*
output
{
total: 3,
per_page: 1,
current_page: 2,
last_page: 3,
from: 2,
to: 4,
links:{
previous: '/?page=1&foo=bar#foobar',
current: '/?page=2&foo=bar#foobar',
next: '/?page=3&foo=bar#foobar'
},
data: [ 'item1', 'item2', 'item3' ]
}
*/
```js
import { Paginator } from '@ssense/node-paginator';

const items = ['item1', 'item2', 'item3']; // from your DB returned collection...
const perPage = 1;
const currentPage = 2;
const paginator: Paginator = new Paginator(items, items.length, perPage, currentPage);

// Transform paginator to object, use this as rour REST response
const paginated = paginator.transform();

console.log(paginated);
/*
output
{
total: 3,
per_page: 1,
current_page: 2,
last_page: 3,
from: 2,
to: 4,
links:{
previous: '/?page=1&foo=bar#foobar',
current: '/?page=2&foo=bar#foobar',
next: '/?page=3&foo=bar#foobar'
},
data: [ 'item1', 'item2', 'item3' ]
}
*/
```

### Tips and tricks
#### Append queries string to URL
// Append one query string to URL
paginator.append('key', 'value');

// Appends multiple queries to URL
paginator.appends({
foo: 'bar'
});

```js
// Append one query string to URL
paginator.append('key', 'value');

// Appends multiple queries to URL
paginator.appends({
foo: 'bar'
});
```

#### Add fragment to URL
// Add foobar fragment to URL
paginator.fragment('foobar');

```js
// Add foobar fragment to URL
paginator.fragment('foobar');
```

### License

Expand Down
21 changes: 2 additions & 19 deletions src/Paginator.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { PaginatorMeta } from './PaginatorMeta';
export declare type PaginatorInterface = {
total: number;
per_page: number;
Expand All @@ -19,13 +20,8 @@ export declare type PaginatorOptions = {
fragment?: string;
pageName?: string;
};
export declare class Paginator {
protected _hasMore: boolean;
export declare class Paginator extends PaginatorMeta {
protected _items: any[];
protected _total: number;
protected _lastPage: number;
protected _perPage: number;
protected _currentPage: number;
protected _options: PaginatorOptions;
protected _defaultOptions: PaginatorOptions;
protected _pageName: string;
Expand All @@ -36,22 +32,9 @@ export declare class Paginator {
fragment(fragment?: string): Paginator | string;
protected buildFragment(): string;
items(): any[];
total(): number;
lastPage(): number;
firstItem(): number;
lastItem(): number;
perPage(): number;
onFirstPage(): boolean;
currentPage(): number;
hasPages(): boolean;
hasMorePages(): boolean;
isEmpty(): boolean;
count(): number;
url(page?: number): string;
previousPageUrl(): string;
nextPageUrl(): string;
protected setCurrentPage(currentPage: number): number;
protected isValidPageNumber(page: number): boolean;
getPageName(): string;
setPageName(name: string): Paginator;
transform(): PaginatorInterface;
Expand Down
54 changes: 3 additions & 51 deletions src/Paginator.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Paginator.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions src/PaginatorMeta.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
export declare type MetaPaginatorInterface = {
total: number;
per_page: number;
current_page: number;
last_page: number;
from: number;
to: number;
};
export declare class PaginatorMeta {
protected _hasMore: boolean;
protected _total: number;
protected _lastPage: number;
protected _perPage: number;
protected _currentPage: number;
constructor(total: number, perPage: number, currentPage: number);
total(): number;
lastPage(): number;
firstItem(): number | void;
lastItem(): number;
perPage(): number;
isEmpty(): boolean;
onFirstPage(): boolean;
currentPage(): number;
hasPages(): boolean;
hasMorePages(): boolean;
count(): number;
protected setCurrentPage(currentPage: number): number;
protected isValidPageNumber(page: number): boolean;
transform(): MetaPaginatorInterface;
}
69 changes: 69 additions & 0 deletions src/PaginatorMeta.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/PaginatorMeta.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/index.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './PaginatorMeta';
export * from './Paginator';
1 change: 1 addition & 0 deletions src/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/index.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

File renamed without changes.
Loading

0 comments on commit f0b4066

Please sign in to comment.