UNPKG

@junte/ui

Version:

Quality Angular UI components kit

169 lines 17.7 kB
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==