angular-material-datatransfer-lib
Version:
A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.
192 lines • 16.1 kB
JavaScript
/**
* @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