@junte/ui
Version:
Quality Angular UI components kit
169 lines • 17.7 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, forwardRef, HostBinding, HostListener, Input } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { NGXLogger } from 'ngx-logger';
import { PropertyApi } from '../../core/decorators/api';
import { UI } from '../../core/enums/ui';
import { PagerMode } from './enums';
export var DEFAULT_PAGE_SIZE = 10;
export var DEFAULT_PAGE = 1;
var PagerComponent = /** @class */ (function () {
function PagerComponent(logger) {
var _this = this;
this.logger = logger;
this.ui = UI;
this._pageSize = DEFAULT_PAGE_SIZE;
this._selectedPage = DEFAULT_PAGE;
this.size = 3;
this.host = 'jnt-pager-host';
this.mode = PagerMode.offset;
this.onChange = function () { return _this.logger.error('value accessor is not registered'); };
this.onTouched = function () { return _this.logger.error('value accessor is not registered'); };
this.registerOnChange = function (fn) { return _this.onChange = fn; };
this.registerOnTouched = function (fn) { return _this.onTouched = fn; };
this.onBlur = function () { return _this.onTouched(); };
}
PagerComponent_1 = PagerComponent;
Object.defineProperty(PagerComponent.prototype, "visible", {
get: function () {
return this.pagesCount > 1 ? 'visible' : 'collapse';
},
enumerable: true,
configurable: true
});
Object.defineProperty(PagerComponent.prototype, "count", {
set: function (count) {
this._count = count;
this.render();
},
enumerable: true,
configurable: true
});
Object.defineProperty(PagerComponent.prototype, "pagesCount", {
get: function () {
return Math.ceil(this._count / this.pageSize);
},
enumerable: true,
configurable: true
});
Object.defineProperty(PagerComponent.prototype, "pageSize", {
get: function () {
return this._pageSize;
},
set: function (pageSize) {
this._pageSize = pageSize;
this.render();
},
enumerable: true,
configurable: true
});
Object.defineProperty(PagerComponent.prototype, "selectedPage", {
get: function () {
return this._selectedPage;
},
set: function (page) {
this._selectedPage = page;
this.render();
},
enumerable: true,
configurable: true
});
PagerComponent.prototype.writeValue = function (value) {
switch (this.mode) {
case PagerMode.page:
this.logger.debug('set page ', value);
this.selectedPage = value;
break;
case PagerMode.offset:
var page = Math.ceil(value / this.pageSize) + 1;
this.logger.debug('set page ', page);
this.selectedPage = page;
break;
}
};
PagerComponent.prototype.setPage = function (page) {
if (page >= DEFAULT_PAGE && page <= this.pagesCount) {
switch (this.mode) {
case PagerMode.page:
this.onChange(page);
break;
case PagerMode.offset:
this.onChange((page - 1) * this.pageSize);
break;
}
this.selectedPage = page;
}
};
PagerComponent.prototype.render = function () {
var pages = [];
var shift = Math.max(this.size - this.selectedPage + 1, 0);
var end = Math.min(this.selectedPage + this.size + shift, this.pagesCount);
shift = Math.max(this.selectedPage + this.size - this.pagesCount, 0);
var start = Math.max(this.selectedPage - this.size - shift, 1);
for (var i = start; i <= end; i++) {
pages.push(i);
}
this.pages = pages;
};
var PagerComponent_1;
PagerComponent.ctorParameters = function () { return [
{ type: NGXLogger }
]; };
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], PagerComponent.prototype, "host", void 0);
__decorate([
HostBinding('style.visibility'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], PagerComponent.prototype, "visible", null);
__decorate([
PropertyApi({
description: 'Items count for pager',
type: 'number',
}),
Input(),
__metadata("design:type", Number),
__metadata("design:paramtypes", [Number])
], PagerComponent.prototype, "count", null);
__decorate([
PropertyApi({
description: 'Page size for pager',
type: 'number',
default: '10'
}),
Input(),
__metadata("design:type", Number),
__metadata("design:paramtypes", [Number])
], PagerComponent.prototype, "pageSize", null);
__decorate([
PropertyApi({
description: 'Mode for pager',
path: 'ui.pager.mode',
options: [PagerMode.offset, PagerMode.page],
default: PagerMode.offset
}),
Input(),
__metadata("design:type", String)
], PagerComponent.prototype, "mode", void 0);
__decorate([
HostListener('blur'),
__metadata("design:type", Object)
], PagerComponent.prototype, "onBlur", void 0);
PagerComponent = PagerComponent_1 = __decorate([
Component({
selector: 'jnt-pager',
template: "<jnt-stack child-of=\"jnt-pager-host\" [orientation]=\"ui.orientation.horizontal\"\n [gutter]=\"ui.gutter.small\"\n [justify]=\"ui.justify.center\">\n <a child-of=\"jnt-pager-host\" [attr.data-href]=\"'?page=' + 1\"\n [attr.disabled]=\"selectedPage === 1\"\n (click)=\"setPage(1)\"\n title=\"First\">\n <jnt-icon child-of=\"jnt-pager-host\" [icon]=\"ui.icons.first\"></jnt-icon>\n </a>\n <a child-of=\"jnt-pager-host\" title=\"Previous\"\n [attr.disabled]=\"selectedPage === 1\"\n (click)=\"setPage(selectedPage - 1)\"\n data-page=\"1\">\n <jnt-icon child-of=\"jnt-pager-host\" [icon]=\"ui.icons.chevronLeft\"></jnt-icon>\n </a>\n <a child-of=\"jnt-pager-host\" *ngFor=\"let page of pages\"\n (click)=\"setPage(page)\"\n [attr.active]=\"page === selectedPage\"\n tabindex=\"0\">{{page}}</a>\n <a child-of=\"jnt-pager-host\" title=\"Next\"\n [attr.disabled]=\"selectedPage >= pagesCount\"\n (click)=\"setPage(selectedPage + 1)\">\n <jnt-icon child-of=\"jnt-pager-host\" [icon]=\"ui.icons.chevronRight\"></jnt-icon>\n </a>\n <a child-of=\"jnt-pager-host\" title=\"Last\"\n (click)=\"setPage(pagesCount)\"\n [attr.disabled]=\"selectedPage >= pagesCount\">\n <jnt-icon child-of=\"jnt-pager-host\" [icon]=\"ui.icons.last\"></jnt-icon>\n </a>\n</jnt-stack>",
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return PagerComponent_1; }),
multi: true
}]
}),
__metadata("design:paramtypes", [NGXLogger])
], PagerComponent);
return PagerComponent;
}());
export { PagerComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL25hdmlnYXRpb24vcGFnZXIvcGFnZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFcEMsTUFBTSxDQUFDLElBQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxJQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFXOUI7SUF3RUUsd0JBQW9CLE1BQWlCO1FBQXJDLGlCQUNDO1FBRG1CLFdBQU0sR0FBTixNQUFNLENBQVc7UUF0RXJDLE9BQUUsR0FBRyxFQUFFLENBQUM7UUFHQSxjQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsa0JBQWEsR0FBRyxZQUFZLENBQUM7UUFDN0IsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUtSLFNBQUksR0FBRyxnQkFBZ0IsQ0FBQztRQTJDakMsU0FBSSxHQUFjLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFFbkMsYUFBUSxHQUF5QixjQUFNLE9BQUEsS0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsRUFBckQsQ0FBcUQsQ0FBQztRQUM3RixjQUFTLEdBQWUsY0FBTSxPQUFBLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxD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QUM7UUFDRCxLQUFLLEVBQUU7OztrREFJUDtJQWFEO1FBUEMsV0FBVyxDQUFDO1lBQ1gsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixJQUFJLEVBQUUsZUFBZTtZQUNyQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDM0MsT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1NBQzFCLENBQUM7UUFDRCxLQUFLLEVBQUU7O2dEQUMyQjtJQU1iO1FBQXJCLFlBQVksQ0FBQyxNQUFNLENBQUM7O2tEQUFpQztJQTdEM0MsY0FBYztRQVQxQixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsV0FBVztZQUNyQiwyMENBQXdDO1lBQ3hDLFNBQVMsRUFBRSxDQUFDO29CQUNWLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLGdCQUFjLEVBQWQsQ0FBYyxDQUFDO29CQUM3QyxLQUFLLEVBQUUsSUFBSTtpQkFDWixDQUFDO1NBQ0gsQ0FBQzt5Q0F5RTRCLFNBQVM7T0F4RTFCLGNBQWMsQ0FxSDFCO0lBQUQscUJBQUM7Q0FBQSxBQXJIRCxJQXFIQztTQXJIWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQgeyBQcm9wZXJ0eUFwaSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy9hcGknO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3VpJztcbmltcG9ydCB7IFBhZ2VyTW9kZSB9IGZyb20gJy4vZW51bXMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSAxMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0UgPSAxO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtcGFnZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFnZXIuZW5jYXBzdWxhdGVkLmh0bWwnLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGFnZXJDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHVpID0gVUk7XG5cbiAgcHJpdmF0ZSBfY291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcGFnZVNpemUgPSBERUZBVUxUX1BBR0VfU0laRTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRQYWdlID0gREVGQVVMVF9QQUdFO1xuICBwcml2YXRlIHNpemUgPSAzO1xuXG4gIHBhZ2VzOiBudW1iZXJbXTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaG9zdCcpXG4gIHJlYWRvbmx5IGhvc3QgPSAnam50LXBhZ2VyLWhvc3QnO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUudmlzaWJpbGl0eScpXG4gIGdldCB2aXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VzQ291bnQgPiAxID8gJ3Zpc2libGUnIDogJ2NvbGxhcHNlJztcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdJdGVtcyBjb3VudCBmb3IgcGFnZXInLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICB9KVxuICBASW5wdXQoKVxuICBzZXQgY291bnQoY291bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX2NvdW50ID0gY291bnQ7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGdldCBwYWdlc0NvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5fY291bnQgLyB0aGlzLnBhZ2VTaXplKTtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdQYWdlIHNpemUgZm9yIHBhZ2VyJyxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0OiAnMTAnXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBwYWdlU2l6ZShwYWdlU2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IHBhZ2VTaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZTtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdNb2RlIGZvciBwYWdlcicsXG4gICAgcGF0aDogJ3VpLnBhZ2VyLm1vZGUnLFxuICAgIG9wdGlvbnM6IFtQYWdlck1vZGUub2Zmc2V0LCBQYWdlck1vZGUucGFnZV0sXG4gICAgZGVmYXVsdDogUGFnZXJNb2RlLm9mZnNldFxuICB9KVxuICBASW5wdXQoKVxuICBtb2RlOiBQYWdlck1vZGUgPSBQYWdlck1vZGUub2Zmc2V0O1xuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHRoaXMubG9nZ2VyLmVycm9yKCd2YWx1ZSBhY2Nlc3NvciBpcyBub3QgcmVnaXN0ZXJlZCcpO1xuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB0aGlzLmxvZ2dlci5lcnJvcigndmFsdWUgYWNjZXNzb3IgaXMgbm90IHJlZ2lzdGVyZWQnKTtcbiAgcmVnaXN0ZXJPbkNoYW5nZSA9IGZuID0+IHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgcmVnaXN0ZXJPblRvdWNoZWQgPSBmbiA9PiB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICBASG9zdExpc3RlbmVyKCdibHVyJykgb25CbHVyID0gKCkgPT4gdGhpcy5vblRvdWNoZWQoKTtcblxuICBzZXQgc2VsZWN0ZWRQYWdlKHBhZ2U6IG51bWJlcikge1xuICAgIHRoaXMuX3NlbGVjdGVkUGFnZSA9IHBhZ2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUGFnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIpIHtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgICBjYXNlIFBhZ2VyTW9kZS5wYWdlOlxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnc2V0IHBhZ2UgJywgdmFsdWUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZSA9IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUGFnZXJNb2RlLm9mZnNldDpcbiAgICAgICAgY29uc3QgcGFnZSA9IE1hdGguY2VpbCh2YWx1ZSAvIHRoaXMucGFnZVNpemUpICsgMTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3NldCBwYWdlICcsIHBhZ2UpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZSA9IHBhZ2U7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldFBhZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgaWYgKHBhZ2UgPj0gREVGQVVMVF9QQUdFICYmIHBhZ2UgPD0gdGhpcy5wYWdlc0NvdW50KSB7XG4gICAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgICAgICBjYXNlIFBhZ2VyTW9kZS5wYWdlOlxuICAgICAgICAgIHRoaXMub25DaGFuZ2UocGFnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUGFnZXJNb2RlLm9mZnNldDpcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKChwYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlID0gcGFnZTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgcGFnZXM6IG51bWJlcltdID0gW107XG5cbiAgICBsZXQgc2hpZnQgPSBNYXRoLm1heCh0aGlzLnNpemUgLSB0aGlzLnNlbGVjdGVkUGFnZSArIDEsIDApO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRoaXMuc2VsZWN0ZWRQYWdlICsgdGhpcy5zaXplICsgc2hpZnQsIHRoaXMucGFnZXNDb3VudCk7XG5cbiAgICBzaGlmdCA9IE1hdGgubWF4KHRoaXMuc2VsZWN0ZWRQYWdlICsgdGhpcy5zaXplIC0gdGhpcy5wYWdlc0NvdW50LCAwKTtcbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KHRoaXMuc2VsZWN0ZWRQYWdlIC0gdGhpcy5zaXplIC0gc2hpZnQsIDEpO1xuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICBwYWdlcy5wdXNoKGkpO1xuICAgIH1cbiAgICB0aGlzLnBhZ2VzID0gcGFnZXM7XG4gIH1cbn1cbiJdfQ==