UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

166 lines 20 kB
import * as tslib_1 from "tslib"; /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ import { Component, Input, Output, ElementRef, ViewChild, EventEmitter, Inject } from '@angular/core'; import { BaseComponent } from './base.component'; import { GridStateService } from './grid-state.service'; import { SortType } from '@true-directive/base'; import { Column } from '@true-directive/base'; var GridHeaderCellComponent = /** @class */ (function (_super) { tslib_1.__extends(GridHeaderCellComponent, _super); function GridHeaderCellComponent(state, elementRef) { var _this = _super.call(this) || this; _this.state = state; _this.elementRef = elementRef; _this.toggleCheckColumn = new EventEmitter(); _this.captionMouseDown = new EventEmitter(); _this.captionMouseUp = new EventEmitter(); _this.captionTouchStart = new EventEmitter(); return _this; } // Иконка фильтра // Если фильтр включен, то иконка кнопки показывается всегда и подсвечивается GridHeaderCellComponent.prototype.isFiltered = function () { return this.state.dataSource.getFilter(this.column) != null; }; GridHeaderCellComponent.prototype.setState = function (s) { if (s === 'btn-visible') this.caption.nativeElement.classList.toggle('true-grid-btn-visible', true); }; GridHeaderCellComponent.prototype.removeState = function (s) { if (s === 'btn-visible') this.caption.nativeElement.classList.toggle('true-grid-btn-visible', false); }; GridHeaderCellComponent.prototype.btnIconClass = function () { var classes = ''; if (this.isFiltered()) { classes += this.state.sta.filterBtnIconClass_active; } else { classes += this.state.sta.filterBtnIconClass; } return classes; }; // Отсортирована ли колонка GridHeaderCellComponent.prototype.isSorted = function (col) { return this.sorted !== null; }; Object.defineProperty(GridHeaderCellComponent.prototype, "sorted", { get: function () { var res = this.state.dataSource.sortedByField(this.column.fieldName); return !res ? null : res.sortType; }, enumerable: true, configurable: true }); Object.defineProperty(GridHeaderCellComponent.prototype, "sortedUp", { get: function () { return this.sorted === SortType.ASC; }, enumerable: true, configurable: true }); Object.defineProperty(GridHeaderCellComponent.prototype, "sortedDown", { get: function () { return this.sorted === SortType.DESC; }, enumerable: true, configurable: true }); // Если отсортирован, то как?.. GridHeaderCellComponent.prototype.sortIndicatorClass = function () { if (this.sortedUp) { return this.state.sta.sortedUpIconClass; } if (this.sortedDown) { return this.state.sta.sortedDownIconClass; } return ''; }; GridHeaderCellComponent.prototype.toggleCheck = function (e) { this.toggleCheckColumn.emit(e); e.preventDefault(); }; GridHeaderCellComponent.prototype.headerMouseDown = function (e) { e.stopPropagation(); }; GridHeaderCellComponent.prototype.mouseDown = function (e) { this.captionMouseDown.emit(e); }; GridHeaderCellComponent.prototype.mouseUp = function (e) { this.captionMouseUp.emit(e); }; GridHeaderCellComponent.prototype.touchStart = function (e) { this.captionTouchStart.emit(e); }; GridHeaderCellComponent.prototype.contextMenu = function (e) { this.state.headerContextMenu(e, this.column); }; // Клик по кнопке фильтра GridHeaderCellComponent.prototype.btnTouch = function (e) { this.state.showFilter(e, this.column); e.stopPropagation(); if (e.cancelable) { e.preventDefault(); } }; // Клик по кнопке фильтра GridHeaderCellComponent.prototype.btnClick = function (e) { this.state.showFilter(e, this.column); }; // Прерываем MouseDown, чтобы не произошло сортировки GridHeaderCellComponent.prototype.btnMouseDown = function (e) { e.stopPropagation(); e.preventDefault(); }; GridHeaderCellComponent.prototype.ngAfterContentInit = function () { this.addTouchListeners(this.caption.nativeElement); }; tslib_1.__decorate([ Input('column'), tslib_1.__metadata("design:type", Column) ], GridHeaderCellComponent.prototype, "column", void 0); tslib_1.__decorate([ Output('toggleCheckColumn'), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "toggleCheckColumn", void 0); tslib_1.__decorate([ Output('captionMouseDown'), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "captionMouseDown", void 0); tslib_1.__decorate([ Output('captionMouseUp'), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "captionMouseUp", void 0); tslib_1.__decorate([ Output('captionTouchStart'), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "captionTouchStart", void 0); tslib_1.__decorate([ ViewChild('caption', { static: true }), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "caption", void 0); tslib_1.__decorate([ ViewChild('btn', { static: true }), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "btn", void 0); GridHeaderCellComponent = tslib_1.__decorate([ Component({ selector: 'true-grid-header-cell', template: "<div #caption\r\n class=\"true-header-cell__caption\"\r\n [class.true-header-cell__checkbox]=\"column.isCheckbox\"\r\n [class.true-header-cell__filtered]=\"isFiltered()\"\r\n (contextmenu)=\"contextMenu($event)\"\r\n (touchstart)=\"touchStart($event)\"\r\n (mousedown)=\"mouseDown($event)\"\r\n (mouseup)=\"mouseUp($event)\">\r\n\r\n <div *ngIf=\"column.isCheckbox\"\r\n [ngClass]=\"state.settings.headerCheckboxClass(column.isChecked)\"\r\n (click)=\"toggleCheck($event)\"></div>\r\n <div *ngIf=\"isSorted(column)\"\r\n class=\"true-header-cell__sort-indicator\" [ngClass]=\"sortIndicatorClass()\"></div>\r\n <div *ngIf=\"!column.isCheckbox\"\r\n [class.true-header-cell__txt_nowrap]=\"!state.settings.headerWordWrap\"\r\n class=\"true-header-cell__txt\">\r\n {{column.caption | trueTranslate}}\r\n </div>\r\n\r\n <div #btn *ngIf=\"!column.isCheckbox && state.settings.allowFilter && (column.allowFilter || isFiltered())\"\r\n class=\"true-grid-btn\"\r\n (click)=\"btnClick($event)\"\r\n (touchstart)=\"btnTouch($event)\"\r\n (mousedown)=\"btnMouseDown($event)\">\r\n <span [ngClass]=\"btnIconClass()\"></span>\r\n </div>\r\n</div>\r\n", host: { 'class': 'true-header-cell' }, styles: [":host{cursor:default;display:block;height:100%}.true-header-cell__caption{height:100%;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:center;justify-content:center;-webkit-box-align:stretch;align-items:stretch;overflow-x:hidden}.true-header-cell__caption.true-header-cell__checkbox{-webkit-box-align:center;align-items:center;justify-content:space-around}.true-header-cell__caption .true-header-cell__sort-indicator{text-align:center;-ms-grid-row-align:center;align-self:center}.true-header-cell__caption .true-header-cell__txt{-ms-grid-row-align:center;align-self:center;overflow-x:hidden;-webkit-box-flex:1;flex-grow:1;overflow-y:hidden}.true-header-cell__caption .true-header-cell__txt_nowrap{white-space:nowrap;text-overflow:ellipsis}.true-grid-btn-visible .true-grid-btn,.true-header-cell__caption:hover .true-grid-btn{opacity:.2;visibility:visible}.true-header-cell__filtered .true-grid-btn{visibility:visible!important;opacity:1!important}"] }), tslib_1.__param(0, Inject('gridState')), tslib_1.__metadata("design:paramtypes", [GridStateService, ElementRef]) ], GridHeaderCellComponent); return GridHeaderCellComponent; }(BaseComponent)); export { GridHeaderCellComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9ncmlkLWhlYWRlci1jZWxsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7RUFJRTtBQUNGLE9BQU8sRUFBWSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBVTlDO0lBQTZDLG1EQUFhO0lBa0l4RCxpQ0FDOEIsS0FBdUIsRUFDNUMsVUFBc0I7UUFGL0IsWUFHSSxpQkFBTyxTQUNSO1FBSDJCLFdBQUssR0FBTCxLQUFLLENBQWtCO1FBQzVDLGdCQUFVLEdBQVYsVUFBVSxDQUFZO1FBOUgvQix1QkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRzVDLHNCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFHM0Msb0JBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBR3pDLHVCQUFpQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7O0lBdUgxQyxDQUFDO0lBL0dILGlCQUFpQjtJQUNqQiw2RUFBNkU7SUFDN0UsNENBQVUsR0FBVjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDOUQsQ0FBQztJQUVNLDBDQUFRLEdBQWYs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Q3hCO0lBckJFLHVCQUF1QjtRQVJuQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLDRyQ0FBZ0Q7WUFDaEQsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxrQkFBa0I7YUFDNUI7O1NBRUYsQ0FBQztRQW9JRyxtQkFBQSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7aURBQWUsZ0JBQWdCO1lBQ2hDLFVBQVU7T0FwSXBCLHVCQUF1QixDQXVJbkM7SUFBRCw4QkFBQztDQUFBLEFBdklELENBQTZDLGFBQWEsR0F1SXpEO1NBdklZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBBbGVrc2V5IE1lbG5pa292LCBUcnVlIERpcmVjdGl2ZSBDb21wYW55LlxyXG4gKiBAbGluayBodHRwczovL3RydWVkaXJlY3RpdmUuY29tL1xyXG4gKiBAbGljZW5zZSBNSVRcclxuKi9cclxuaW1wb3J0IHsgTmdNb2R1bGUsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLFxyXG4gICAgICAgICBFdmVudEVtaXR0ZXIsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHcmlkU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkUGFydCB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgU29ydFR5cGUgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1ZS1ncmlkLWhlYWRlci1jZWxsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1oZWFkZXItY2VsbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgaG9zdDoge1xyXG4gICAgJ2NsYXNzJzogJ3RydWUtaGVhZGVyLWNlbGwnXHJcbiAgfSxcclxuICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvZ3JpZC1oZWFkZXItY2VsbC5iZWhhdmlvci5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRIZWFkZXJDZWxsQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgnY29sdW1uJylcclxuICBwdWJsaWMgY29sdW1uOiBDb2x1bW47XHJcblxyXG4gIEBPdXRwdXQoJ3RvZ2dsZUNoZWNrQ29sdW1uJylcclxuICB0b2dnbGVDaGVja0NvbHVtbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCdjYXB0aW9uTW91c2VEb3duJylcclxuICBjYXB0aW9uTW91c2VEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoJ2NhcHRpb25Nb3VzZVVwJylcclxuICBjYXB0aW9uTW91c2VVcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCdjYXB0aW9uVG91Y2hTdGFydCcpXHJcbiAgY2FwdGlvblRvdWNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FwdGlvbicsIHtzdGF0aWM6IHRydWV9KVxyXG4gIGNhcHRpb246IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnYnRuJywge3N0YXRpYzogdHJ1ZX0pXHJcbiAgYnRuOiBhbnk7XHJcblxyXG4gIC8vINCY0LrQvtC90LrQsCDRhNC40LvRjNGC0YDQsFxyXG4gIC8vINCV0YHQu9C4INGE0LjQu9GM0YLRgCDQstC60LvRjtGH0LXQvSwg0YLQviDQuNC60L7QvdC60LAg0LrQvdC+0L/QutC4INC/0L7QutCw0LfRi9Cy0LDQtdGC0YHRjyDQstGB0LXQs9C00LAg0Lgg0L/QvtC00YHQstC10YfQuNCy0LDQtdGC0YHRj1xyXG4gIGlzRmlsdGVyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5kYXRhU291cmNlLmdldEZpbHRlcih0aGlzLmNvbHVtbikgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTdGF0ZShzOiBzdHJpbmcpIHtcclxuICAgIGlmIChzID09PSAnYnRuLXZpc2libGUnKVxyXG4gICAgICB0aGlzLmNhcHRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCd0cnVlLWdyaWQtYnRuLXZpc2libGUnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVTdGF0ZShzOiBzdHJpbmcpIHtcclxuICAgIGlmIChzID09PSAnYnRuLXZpc2libGUnKVxyXG4gICAgICB0aGlzLmNhcHRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCd0cnVlLWdyaWQtYnRuLXZpc2libGUnLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBidG5JY29uQ2xhc3MoKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCgpKSB7XHJcbiAgICAgIGNsYXNzZXMgKz0gdGhpcy5zdGF0ZS5zdGEuZmlsdGVyQnRuSWNvbkNsYXNzX2FjdGl2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXMgKz0gdGhpcy5zdGF0ZS5zdGEuZmlsdGVyQnRuSWNvbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsYXNzZXM7XHJcbiAgfVxyXG5cclxuICAvLyDQntGC0YHQvtGA0YLQuNGA0L7QstCw0L3QsCDQu9C4INC60L7Qu9C+0L3QutCwXHJcbiAgcHVibGljIGlzU29ydGVkKGNvbDogQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWQgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNvcnRlZCgpOiBTb3J0VHlwZSB7XHJcbiAgICBjb25zdCByZXMgPSB0aGlzLnN0YXRlLmRhdGFTb3VyY2Uuc29ydGVkQnlGaWVsZCh0aGlzLmNvbHVtbi5maWVsZE5hbWUpO1xyXG4gICAgcmV0dXJuICFyZXMgPyBudWxsIDogcmVzLnNvcnRUeXBlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzb3J0ZWRVcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZCA9PT0gU29ydFR5cGUuQVNDO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzb3J0ZWREb3duKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydGVkID09PSBTb3J0VHlwZS5ERVNDO1xyXG4gIH1cclxuXHJcbiAgLy8g0JXRgdC70Lgg0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNC9LCDRgtC+INC60LDQuj8uLlxyXG4gIHNvcnRJbmRpY2F0b3JDbGFzcygpIHtcclxuXHJcbiAgICBpZiAodGhpcy5zb3J0ZWRVcCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGEuc29ydGVkVXBJY29uQ2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydGVkRG93bikge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGEuc29ydGVkRG93bkljb25DbGFzcztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDaGVjayhlOiBhbnkpIHtcclxuICAgIHRoaXMudG9nZ2xlQ2hlY2tDb2x1bW4uZW1pdChlKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGhlYWRlck1vdXNlRG93bihlOiBhbnkpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBtb3VzZURvd24oZTogYW55KSB7XHJcbiAgICB0aGlzLmNhcHRpb25Nb3VzZURvd24uZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG1vdXNlVXAoZTogYW55KSB7XHJcbiAgICB0aGlzLmNhcHRpb25Nb3VzZVVwLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICB0b3VjaFN0YXJ0KGU6IGFueSkge1xyXG4gICAgdGhpcy5jYXB0aW9uVG91Y2hTdGFydC5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgY29udGV4dE1lbnUoZTogYW55KSB7XHJcbiAgICB0aGlzLnN0YXRlLmhlYWRlckNvbnRleHRNZW51KGUsIHRoaXMuY29sdW1uKTtcclxuICB9XHJcblxyXG4gIC8vINCa0LvQuNC6INC/0L4g0LrQvdC+0L/QutC1INGE0LjQu9GM0YLRgNCwXHJcbiAgYnRuVG91Y2goZTogYW55KSB7XHJcbiAgICB0aGlzLnN0YXRlLnNob3dGaWx0ZXIoZSwgdGhpcy5jb2x1bW4pO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChlLmNhbmNlbGFibGUpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g0JrQu9C40Log0L/QviDQutC90L7Qv9C60LUg0YTQuNC70YzRgtGA0LBcclxuICBidG5DbGljayhlOiBhbnkpIHtcclxuICAgIHRoaXMuc3RhdGUuc2hvd0ZpbHRlcihlLCB0aGlzLmNvbHVtbik7XHJcbiAgfVxyXG5cclxuICAvLyDQn9GA0LXRgNGL0LLQsNC10LwgTW91c2VEb3duLCDRh9GC0L7QsdGLINC90LUg0L/RgNC+0LjQt9C+0YjQu9C+INGB0L7RgNGC0LjRgNC+0LLQutC4XHJcbiAgYnRuTW91c2VEb3duKGU6IGFueSkge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuYWRkVG91Y2hMaXN0ZW5lcnModGhpcy5jYXB0aW9uLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdncmlkU3RhdGUnKSBwdWJsaWMgc3RhdGU6IEdyaWRTdGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==