UNPKG

angular-material-datatransfer-lib

Version:

A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.

192 lines 16.1 kB
/** * @fileoverview added by tsickle * Generated from: lib/services/pagination.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { PaginationContainer } from '../models/pagination-container.model'; import { DatatransferStore } from '../stores/datatransfer.store'; export class PaginationService { /** * @param {?} datatransferStore */ constructor(datatransferStore) { this.datatransferStore = datatransferStore; this.paginatedItems = []; this.pagination = new PaginationContainer(); } /** * @param {?} rppOptions * @return {?} */ setRppOptions(rppOptions) { this.pagination.rppOptions = rppOptions; this.setPaginationContainer(); } /** * @param {?} total * @return {?} */ update(total) { if (total <= 0) { this.paginatedItems.length = 0; } this.pagination.total = total; this.setPaginationContainer(); } /** * @return {?} */ setPaginationContainer() { /** @type {?} */ const pageCount = this.pageCount(); if (this.pagination.pages.length > pageCount) { this.pagination.pages.splice(pageCount); } else { for (let i = this.pagination.pages.length; i < pageCount; i++) { this.pagination.pages.push(i + 1); } } if (!this.pagination.pages.includes(this.pagination.page)) { this.pagination.page = 1; } if (!!this.pagination.rppOptions && this.pagination.rppOptions.length > 0 && !this.pagination.rppOptions.includes(this.pagination.rpp)) { this.pagination.rpp = this.pagination.rppOptions[0]; } this.onPaginationChange(); } /** * @return {?} */ max() { return this.hasNext() ? this.pagination.page * this.pagination.rpp : this.pagination.total; } /** * @return {?} */ min() { return this.pagination.total > 0 ? this.pagination.page * this.pagination.rpp - this.pagination.rpp + 1 : 0; } /** * @return {?} */ first() { this.pagination.page = 1; this.onPaginationChange(); } /** * @return {?} */ last() { this.pagination.page = this.pageCount(); this.onPaginationChange(); } /** * @return {?} */ hasNext() { return this.pagination.page * this.pagination.rpp < this.pagination.total; } /** * @return {?} */ hasPrevious() { return this.pagination.page > 1; } /** * @return {?} */ moveNext() { this.pagination.page++; this.onPaginationChange(); } /** * @return {?} */ movePrevious() { this.pagination.page--; this.onPaginationChange(); } /** * @param {?} page * @return {?} */ setPage(page) { this.pagination.page = page; this.onPageChange(); } /** * @return {?} */ onPageChange() { this.setPaginationContainer(); this.onPaginationChange(); } /** * @return {?} */ onRppChange() { this.setPaginationContainer(); this.pagination.page = 1; this.onPaginationChange(); } /** * @return {?} */ onPaginationChange() { /** @type {?} */ const startIndex = (this.pagination.page - 1) * this.pagination.rpp; /** @type {?} */ const endIndex = Math.min(startIndex + this.pagination.rpp, this.pagination.total); this.paginatedItems = this.datatransferStore.getItems().slice(startIndex, endIndex); } /** * @return {?} */ pageCount() { return this.pagination.total > 0 ? Math.ceil(this.pagination.total / (this.pagination.rpp > 0 ? this.pagination.rpp : 1)) : 1; } /** * @param {?} id * @return {?} */ getPageByItemId(id) { /** @type {?} */ const index = this.datatransferStore.getIndexById(id); if (index > -1) { return Math.ceil((index + 1) / this.pagination.rpp); } } /** * @param {?} id * @return {?} */ setPageByItemId(id) { /** @type {?} */ const page = this.getPageByItemId(id); if (this.pagination.page !== page) { this.setPage(page); } } } PaginationService.decorators = [ { type: Injectable } ]; /** @nocollapse */ PaginationService.ctorParameters = () => [ { type: DatatransferStore } ]; if (false) { /** @type {?} */ PaginationService.prototype.pagination; /** @type {?} */ PaginationService.prototype.paginatedItems; /** * @type {?} * @private */ PaginationService.prototype.datatransferStore; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tYXRlcmlhbC1kYXRhdHJhbnNmZXItbGliLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWpHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR2pFLE1BQU0sT0FBTyxpQkFBaUI7Ozs7SUFLMUIsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFGakQsbUJBQWMsR0FBd0IsRUFBRSxDQUFDO1FBRzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBQ2hELENBQUM7Ozs7O0lBRUQsYUFBYSxDQUFDLFVBQW9CO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs7OztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2hCLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs7O0lBRUQsc0JBQXNCOztjQUNaLFNBQVMsR0FBVyxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQzFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRTtZQUMxQyxJ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LElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkQ7SUFDTCxDQUFDOzs7OztJQUVELGVBQWUsQ0FBQyxFQUFVOztjQUNoQixJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QjtJQUNMLENBQUM7OztZQXBISixVQUFVOzs7O1lBRkYsaUJBQWlCOzs7O0lBS3RCLHVDQUF3Qzs7SUFDeEMsMkNBQWdEOzs7OztJQUVwQyw4Q0FBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElQYWdpbmF0aW9uQ29udGFpbmVyLCBQYWdpbmF0aW9uQ29udGFpbmVyIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2luYXRpb24tY29udGFpbmVyLm1vZGVsJztcclxuaW1wb3J0IHsgSURhdGF0cmFuc2Zlckl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvZGF0YXRyYW5zZmVyLWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBEYXRhdHJhbnNmZXJTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9kYXRhdHJhbnNmZXIuc3RvcmUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvblNlcnZpY2Uge1xyXG5cclxuICAgIHB1YmxpYyBwYWdpbmF0aW9uOiBJUGFnaW5hdGlvbkNvbnRhaW5lcjtcclxuICAgIHB1YmxpYyBwYWdpbmF0ZWRJdGVtczogSURhdGF0cmFuc2Zlckl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YXRyYW5zZmVyU3RvcmU6IERhdGF0cmFuc2ZlclN0b3JlKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0gbmV3IFBhZ2luYXRpb25Db250YWluZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRScHBPcHRpb25zKHJwcE9wdGlvbnM6IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnJwcE9wdGlvbnMgPSBycHBPcHRpb25zO1xyXG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkNvbnRhaW5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSh0b3RhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRvdGFsIDw9IDApIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBhZ2luYXRpb24udG90YWwgPSB0b3RhbDtcclxuICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25Db250YWluZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQYWdpbmF0aW9uQ29udGFpbmVyKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBhZ2VDb3VudDogbnVtYmVyID0gdGhpcy5wYWdlQ291bnQoKTtcclxuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uLnBhZ2VzLmxlbmd0aCA+IHBhZ2VDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ucGFnZXMuc3BsaWNlKHBhZ2VDb3VudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucGFnaW5hdGlvbi5wYWdlcy5sZW5ndGg7IGkgPCBwYWdlQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2VzLnB1c2goaSArIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uLnBhZ2VzLmluY2x1ZGVzKHRoaXMucGFnaW5hdGlvbi5wYWdlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ucGFnZSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIXRoaXMucGFnaW5hdGlvbi5ycHBPcHRpb25zICYmIHRoaXMucGFnaW5hdGlvbi5ycHBPcHRpb25zLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgJiYgIXRoaXMucGFnaW5hdGlvbi5ycHBPcHRpb25zLmluY2x1ZGVzKHRoaXMucGFnaW5hdGlvbi5ycHApKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbi5ycHAgPSB0aGlzLnBhZ2luYXRpb24ucnBwT3B0aW9uc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYXNOZXh0KCkgPyB0aGlzLnBhZ2luYXRpb24ucGFnZSAqIHRoaXMucGFnaW5hdGlvbi5ycHAgOiB0aGlzLnBhZ2luYXRpb24udG90YWw7XHJcbiAgICB9XHJcblxyXG4gICAgbWluKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbi50b3RhbCA+IDAgPyB0aGlzLnBhZ2luYXRpb24ucGFnZSAqIHRoaXMucGFnaW5hdGlvbi5ycHAgLSB0aGlzLnBhZ2luYXRpb24ucnBwICsgMSA6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZmlyc3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2UgPSAxO1xyXG4gICAgICAgIHRoaXMub25QYWdpbmF0aW9uQ2hhbmdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGFzdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb24ucGFnZSA9IHRoaXMucGFnZUNvdW50KCk7XHJcbiAgICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNOZXh0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24ucGFnZSAqIHRoaXMucGFnaW5hdGlvbi5ycHAgPCB0aGlzLnBhZ2luYXRpb24udG90YWw7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzUHJldmlvdXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbi5wYWdlID4gMTtcclxuICAgIH1cclxuXHJcbiAgICBtb3ZlTmV4dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb24ucGFnZSsrO1xyXG4gICAgICAgIHRoaXMub25QYWdpbmF0aW9uQ2hhbmdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW92ZVByZXZpb3VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlLS07XHJcbiAgICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlID0gcGFnZTtcclxuICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUGFnZUNoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25Db250YWluZXIoKTtcclxuICAgICAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUnBwQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkNvbnRhaW5lcigpO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlID0gMTtcclxuICAgICAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUGFnaW5hdGlvbkNoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gKHRoaXMucGFnaW5hdGlvbi5wYWdlIC0gMSkgKiB0aGlzLnBhZ2luYXRpb24ucnBwO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIHRoaXMucGFnaW5hdGlvbi5ycHAsIHRoaXMucGFnaW5hdGlvbi50b3RhbCk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0ZWRJdGVtcyA9IHRoaXMuZGF0YXRyYW5zZmVyU3RvcmUuZ2V0SXRlbXMoKS5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFnZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbi50b3RhbCA+IDAgPyBNYXRoLmNlaWwodGhpcy5wYWdpbmF0aW9uLnRvdGFsIC8gKHRoaXMucGFnaW5hdGlvbi5ycHAgPiAwID8gdGhpcy5wYWdpbmF0aW9uLnJwcCA6IDEpKSA6IDE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFnZUJ5SXRlbUlkKGlkOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLmRhdGF0cmFuc2ZlclN0b3JlLmdldEluZGV4QnlJZChpZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbCgoaW5kZXggKyAxKSAvIHRoaXMucGFnaW5hdGlvbi5ycHApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRQYWdlQnlJdGVtSWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VCeUl0ZW1JZChpZCk7XHJcbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbi5wYWdlICE9PSBwYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnZShwYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19