@cloukit/pagination
Version:
87 lines • 9.19 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
/*!
* @license MIT
* Copyright (c) 2017 Bernhard Grünewaldt - codeclou.io
* https://github.com/cloukit/legal
*/
import { PaginationItem } from '../pagination.model';
//
// HELPER FUNCTIONS
//
/** @type {?} */
const createFiller = () => new PaginationItem(-1, false, true, '...');
const ɵ0 = createFiller;
/** @type {?} */
const createAnItem = (page, active) => new PaginationItem(page, active, false, `${page}`);
const ɵ1 = createAnItem;
/**
* Provides the pages with a total of seven. See Unit Test.
* Examples:
* CASE 1: 1 2 3 *4* 5 6 7
* 1 2 3 *4* 5
* CASE 2: 1 2 3 *4* 5 .. 50
* CASE 3: 1 .. 46 *47* 48 49 50
* CASE 4: 1 .. 49 *50* 51 .. 90
* @type {?}
*/
const calculatePaginationItems = (total, current) => {
/** @type {?} */
const paginationItems = [];
if (total === undefined || total === null || current === undefined || current === null) {
return paginationItems;
}
//
// CASE 1: Total is smaller or equal seven
//
if (total <= 7) {
for (let i = 1; i <= total; i++) {
paginationItems.push(new PaginationItem(i, current === i, false, `${i}`));
}
}
else
//
// CASE 2: Total is greater than seven AND page is in range of [1-4]
//
if (total > 7 && current <= 4) {
for (let i = 1; i <= 5; i++) {
paginationItems.push(createAnItem(i, current === i));
}
paginationItems.push(createFiller());
paginationItems.push(createAnItem(total, false));
}
else
//
// CASE 3: Total is greater than seven AND page is greater than four AND page is near total
//
if (total > 7 && current > 4 && current + 3 >= total) {
paginationItems.push(createAnItem(1, false));
paginationItems.push(createFiller());
for (let i = total - 4; i <= total; i++) {
paginationItems.push(createAnItem(i, current === i));
}
}
else
//
// CASE 4: Total is greater than seven AND page is greater than four
//
if (total > 7 && current > 4) {
paginationItems.push(createAnItem(1, false));
paginationItems.push(createFiller());
paginationItems.push(createAnItem(current - 1, false));
paginationItems.push(createAnItem(current, true));
paginationItems.push(createAnItem(current + 1, false));
paginationItems.push(createFiller());
paginationItems.push(createAnItem(total, false));
}
//
// END
//
return paginationItems;
};
const ɵ2 = calculatePaginationItems;
export { calculatePaginationItems, createFiller };
export { ɵ0, ɵ1, ɵ2 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1oZWxwZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2xvdWtpdC9wYWdpbmF0aW9uLyIsInNvdXJjZXMiOlsibGliL2xvZ2ljL3BhZ2luYXRpb24taGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUtBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7TUFLL0MsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDOzs7TUFDL0QsWUFBWSxHQUFHLENBQUMsSUFBWSxFQUFFLE1BQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7O01BV3BHLHdCQUF3QixHQUFHLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRSxFQUFFOztVQUM1RCxlQUFlLEdBQXFCLEVBQUU7SUFDNUMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO1FBQ3RGLE9BQU8sZUFBZSxDQUFDO0tBQ3hCO0lBQ0QsRUFBRTtJQUNGLDBDQUEwQztJQUMxQyxFQUFFO0lBQ0YsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzRTtLQUNGOztJQUNELEVBQUU7SUFDRixvRUFBb0U7SUFDcEUsRUFBRTtJQUNGLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2xEOztJQUNELEVBQUU7SUFDRiwyRkFBMkY7SUFDM0YsRUFBRTtJQUNGLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFO1FBQ3BELGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7S0FDRjs7SUFDRCxFQUFFO0lBQ0Ysb0VBQW9FO0lBQ3BFLEVBQUU7SUFDRixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtRQUM1QixlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3QyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDckMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xELGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2RCxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDckMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDbEQ7SUFDRCxFQUFFO0lBQ0YsTUFBTTtJQUNOLEVBQUU7SUFDRixPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDOztBQUVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2UgTUlUXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcgQmVybmhhcmQgR3LDvG5ld2FsZHQgLSBjb2RlY2xvdS5pb1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VraXQvbGVnYWxcbiAqL1xuaW1wb3J0IHsgUGFnaW5hdGlvbkl0ZW0gfSBmcm9tICcuLi9wYWdpbmF0aW9uLm1vZGVsJztcblxuLy9cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vXG5jb25zdCBjcmVhdGVGaWxsZXIgPSAoKSA9PiBuZXcgUGFnaW5hdGlvbkl0ZW0oLTEsIGZhbHNlLCB0cnVlLCAnLi4uJyk7XG5jb25zdCBjcmVhdGVBbkl0ZW0gPSAocGFnZTogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4pID0+IG5ldyBQYWdpbmF0aW9uSXRlbShwYWdlLCBhY3RpdmUsIGZhbHNlLCBgJHtwYWdlfWApO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBwYWdlcyB3aXRoIGEgdG90YWwgb2Ygc2V2ZW4uIFNlZSBVbml0IFRlc3QuXG4gKiBFeGFtcGxlczpcbiAqICAgQ0FTRSAxOiAgMSAgIDIgICAzICAgKjQqICAgNSAgIDYgICA3XG4gKiAgICAgICAgICAgIDEgICAyICAgMyAgICo0KiAgIDVcbiAqICAgQ0FTRSAyOiAgMSAgIDIgICAzICAgKjQqICAgNSAgIC4uICA1MFxuICogICBDQVNFIDM6ICAxICAgLi4gIDQ2ICAqNDcqICA0OCAgNDkgIDUwXG4gKiAgIENBU0UgNDogIDEgICAuLiAgNDkgICo1MCogIDUxICAuLiAgOTBcbiAqL1xuY29uc3QgY2FsY3VsYXRlUGFnaW5hdGlvbkl0ZW1zID0gKHRvdGFsOiBudW1iZXIsIGN1cnJlbnQ6IG51bWJlcikgPT4ge1xuICBjb25zdCBwYWdpbmF0aW9uSXRlbXM6IFBhZ2luYXRpb25JdGVtW10gPSBbXTtcbiAgaWYgKHRvdGFsID09PSB1bmRlZmluZWQgfHwgdG90YWwgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gcGFnaW5hdGlvbkl0ZW1zO1xuICB9XG4gIC8vXG4gIC8vIENBU0UgMTogVG90YWwgaXMgc21hbGxlciBvciBlcXVhbCBzZXZlblxuICAvL1xuICBpZiAodG90YWwgPD0gNykge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsOyBpKyspIHtcbiAgICAgIHBhZ2luYXRpb25JdGVtcy5wdXNoKG5ldyBQYWdpbmF0aW9uSXRlbShpLCBjdXJyZW50ID09PSBpLCBmYWxzZSwgYCR7aX1gKSk7XG4gICAgfVxuICB9IGVsc2VcbiAgLy9cbiAgLy8gQ0FTRSAyOiBUb3RhbCBpcyBncmVhdGVyIHRoYW4gc2V2ZW4gQU5EIHBhZ2UgaXMgaW4gcmFuZ2Ugb2YgWzEtNF1cbiAgLy9cbiAgaWYgKHRvdGFsID4gNyAmJiBjdXJyZW50IDw9IDQpIHtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA1OyBpKyspIHtcbiAgICAgIHBhZ2luYXRpb25JdGVtcy5wdXNoKGNyZWF0ZUFuSXRlbShpLCBjdXJyZW50ID09PSBpKSk7XG4gICAgfVxuICAgIHBhZ2luYXRpb25JdGVtcy5wdXNoKGNyZWF0ZUZpbGxlcigpKTtcbiAgICBwYWdpbmF0aW9uSXRlbXMucHVzaChjcmVhdGVBbkl0ZW0odG90YWwsIGZhbHNlKSk7XG4gIH0gZWxzZVxuICAvL1xuICAvLyBDQVNFIDM6IFRvdGFsIGlzIGdyZWF0ZXIgdGhhbiBzZXZlbiBBTkQgcGFnZSBpcyBncmVhdGVyIHRoYW4gZm91ciBBTkQgcGFnZSBpcyBuZWFyIHRvdGFsXG4gIC8vXG4gIGlmICh0b3RhbCA+IDcgJiYgY3VycmVudCA+IDQgJiYgY3VycmVudCArIDMgPj0gdG90YWwpIHtcbiAgICBwYWdpbmF0aW9uSXRlbXMucHVzaChjcmVhdGVBbkl0ZW0oMSwgZmFsc2UpKTtcbiAgICBwYWdpbmF0aW9uSXRlbXMucHVzaChjcmVhdGVGaWxsZXIoKSk7XG4gICAgZm9yIChsZXQgaSA9IHRvdGFsIC0gNDsgaSA8PSB0b3RhbDsgaSsrKSB7XG4gICAgICBwYWdpbmF0aW9uSXRlbXMucHVzaChjcmVhdGVBbkl0ZW0oaSwgY3VycmVudCA9PT0gaSkpO1xuICAgIH1cbiAgfSBlbHNlXG4gIC8vXG4gIC8vIENBU0UgNDogVG90YWwgaXMgZ3JlYXRlciB0aGFuIHNldmVuIEFORCBwYWdlIGlzIGdyZWF0ZXIgdGhhbiBmb3VyXG4gIC8vXG4gIGlmICh0b3RhbCA+IDcgJiYgY3VycmVudCA+IDQpIHtcbiAgICBwYWdpbmF0aW9uSXRlbXMucHVzaChjcmVhdGVBbkl0ZW0oMSwgZmFsc2UpKTtcbiAgICBwYWdpbmF0aW9uSXRlbXMucHVzaChjcmVhdGVGaWxsZXIoKSk7XG4gICAgcGFnaW5hdGlvbkl0ZW1zLnB1c2goY3JlYXRlQW5JdGVtKGN1cnJlbnQgLSAxLCBmYWxzZSkpO1xuICAgIHBhZ2luYXRpb25JdGVtcy5wdXNoKGNyZWF0ZUFuSXRlbShjdXJyZW50LCB0cnVlKSk7XG4gICAgcGFnaW5hdGlvbkl0ZW1zLnB1c2goY3JlYXRlQW5JdGVtKGN1cnJlbnQgKyAxLCBmYWxzZSkpO1xuICAgIHBhZ2luYXRpb25JdGVtcy5wdXNoKGNyZWF0ZUZpbGxlcigpKTtcbiAgICBwYWdpbmF0aW9uSXRlbXMucHVzaChjcmVhdGVBbkl0ZW0odG90YWwsIGZhbHNlKSk7XG4gIH1cbiAgLy9cbiAgLy8gRU5EXG4gIC8vXG4gIHJldHVybiBwYWdpbmF0aW9uSXRlbXM7XG59O1xuXG5leHBvcnQgeyBjYWxjdWxhdGVQYWdpbmF0aW9uSXRlbXMsIGNyZWF0ZUZpbGxlciB9O1xuIl19