UNPKG

@kre-form/ant

Version:

424 lines 34.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter } from "@angular/core"; /** * @record */ export function ITableQuery() { } if (false) { /** @type {?} */ ITableQuery.prototype.total; /** @type {?} */ ITableQuery.prototype.pageIndex; /** @type {?} */ ITableQuery.prototype.pageSize; /** @type {?|undefined} */ ITableQuery.prototype.sortName; /** @type {?|undefined} */ ITableQuery.prototype.sortValue; /** @type {?|undefined} */ ITableQuery.prototype.parameter; /** @type {?} */ ITableQuery.prototype.keyWord; } /** * @record */ export function ITableHeader() { } if (false) { /** @type {?|undefined} */ ITableHeader.prototype.key; /** @type {?|undefined} */ ITableHeader.prototype.name; /** @type {?|undefined} */ ITableHeader.prototype.width; /** @type {?|undefined} */ ITableHeader.prototype.minWidth; /** @type {?|undefined} */ ITableHeader.prototype.filterList; /** @type {?|undefined} */ ITableHeader.prototype.checkboxable; /** @type {?} */ ITableHeader.prototype.sortable; /** @type {?|undefined} */ ITableHeader.prototype.hiden; /** @type {?|undefined} */ ITableHeader.prototype.action; /* Skipping unhandled member: [additionalProperties: string]: any;*/ } /** * @record */ export function ITableButton() { } if (false) { /** @type {?|undefined} */ ITableButton.prototype.type; /** @type {?|undefined} */ ITableButton.prototype.text; } export class KreFormPrivateTable { constructor() { //tableId this.id = ""; //是否要多选 this.check = false; //是否有操作列0 没有操作列;1 多个操作按钮 2 选择 this.action = 0; //按钮列表 this.buttonlist = []; //选中事件 this.checkChangeEvent = new EventEmitter(); //翻页事件 this.pageIndexEvent = new EventEmitter(); //排序事件 this.orderChangeEvent = new EventEmitter(); //过滤事件 this.filterChangeEvent = new EventEmitter(); //操作事件 this.buttonAction = new EventEmitter(); this.checkIds = []; this._headerData = []; this.isAllChecked = false; this.isIndeterminate = false; this.listData = []; this.listDataCheckedId = {}; this.listDataSelectedList = []; this.query = { total: 0, pageIndex: 1, pageSize: 15, sortName: "", sortValue: "", keyWord: "" }; this.tableScroll = { y: '332px' }; } /** * @param {?} value * @return {?} */ set tableIndex(value) { this.query.pageIndex = value; } /** * @return {?} */ get tableIndex() { return this.query.pageIndex; } /** * @param {?} value * @return {?} */ set tableSize(value) { this.query.pageSize = value; } /** * @return {?} */ get tableSize() { return this.query.pageSize; } /** * @param {?} value * @return {?} */ set tableTotal(value) { this.query.total = value; } /** * @return {?} */ get tableTotal() { return this.query.total; } //table 头部信息 /** * @param {?} value * @return {?} */ set header(value) { if (value != null && value.length > 0) { value.forEach((/** * @param {?} item * @return {?} */ item => { item.prop = item.key; if (item.checkboxable) { item.name = ""; item.width = 50; item.canAutoResize = false; item.resizeable = false; item.frozenLeft = true; item.checkboxable = true; item.headerCheckboxable = true; } if (item.action) { item.frozenRight = true; item.canAutoResize = false; item.resizeable = false; } this._headerData.push(item); })); } } /** * @return {?} */ get header() { return this._headerData; } //table 行数据 /** * @param {?} value * @return {?} */ set body(value) { this.listData = value; if (this.listData == null || this.listData.length == 0) { this.tableScroll.y = "0px"; } else { this.tableScroll.y = "332px"; } } //默认选中Id /** * @param {?} value * @return {?} */ set checkid(value) { this.listDataSelectedList = []; if (value != null && value.length > 0) { value.forEach((/** * @param {?} item * @return {?} */ item => { this.listDataCheckedId[item.id] = true; this.listDataSelectedList.push(item); })); } } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { } /** * @return {?} */ ngOnInit() { } /** * @return {?} */ ngOnDestroy() { } //全选|全不选 /** * @param {?} value * @return {?} */ setCheckAll(value) { this.listData.forEach((/** * @param {?} item * @return {?} */ item => (this.listDataCheckedId[item.id] = value))); this.setCheckStatus(); } //设置某个选择|取消选中 /** * @return {?} */ setCheckStatus() { this.isAllChecked = this.listData.every((/** * @param {?} item * @return {?} */ item => this.listDataCheckedId[item.id])); this.isIndeterminate = this.listData.some((/** * @param {?} item * @return {?} */ item => this.listDataCheckedId[item.id])) && !this.isAllChecked; this.saveSelected(); } //点击查询 /** * @return {?} */ queryChange() { this.pageIndexEvent.emit(this.query); } //点击翻页 /** * @param {?} e * @return {?} */ pageIndexChange(e) { this.query.pageIndex = e; this.pageIndexEvent.emit(this.query); } //点击排序 /** * @param {?} sort * @return {?} */ tableSort(sort) { this.query.sortName = sort.key; this.query.sortValue = sort.value; this.orderChangeEvent.emit(this.query); } //单击选中 /** * @param {?} event * @return {?} */ itemSelectChange(event) { this.listDataSelectedList.shift(); this.listDataSelectedList.push({ "id": event.id, "name": event.name }); this.checkChangeEvent.emit(this.listDataSelectedList); } //保存选中 /** * @return {?} */ saveSelected() { Object.keys(this.listDataCheckedId).forEach((/** * @param {?} id * @return {?} */ id => { /** @type {?} */ let value = this.listDataCheckedId[id]; if (value) { if (!this.listDataSelectedList.some((/** * @param {?} item * @return {?} */ item => { return item.id == id; }))) { this.listData.forEach((/** * @param {?} item * @param {?} index * @param {?} object * @return {?} */ (item, index, object) => { if (item.id == id) { this.listDataSelectedList.push({ id: item.id, name: item.name }); } })); } } else { this.listDataSelectedList.forEach((/** * @param {?} item * @param {?} index * @param {?} object * @return {?} */ (item, index, object) => { if (item.id == id) { object.splice(index, 1); } })); } })); this.checkChangeEvent.emit(this.listDataSelectedList); } /** * @return {?} */ selectAllClear() { this.isAllChecked = false; this.isIndeterminate = false; this.listDataCheckedId = {}; this.listDataSelectedList = []; } /** * @param {?} id * @return {?} */ selectClearById(id) { this.listDataCheckedId[id] = false; this.setCheckStatus(); } } KreFormPrivateTable.decorators = [ { type: Component, args: [{ selector: "kreform-private-table", template: "<div class=\"kre-form-table\">\n <div class=\"kre-form-table-header\">\n <div class=\"header-button\">\n <nz-input-group nzSearch [nzAddOnAfter]=\"suffixIconButton\">\n <input type=\"text\" nz-input placeholder=\"\u8BF7\u8F93\u5165\u5173\u952E\u5B57\u641C\u7D22\" maxlength=\"50\" [(ngModel)]=\"query.keyWord\" />\n </nz-input-group>\n <ng-template #suffixIconButton>\n <button nz-button nzType=\"primary\" nzSearch (click)=\"queryChange()\"><i nz-icon nzType=\"search\"></i></button>\n </ng-template>\n <ng-content></ng-content>\n </div>\n <div class=\"header-pagination\">\n <nz-pagination [nzTotal]=\"query.total\" [nzPageIndex]=\"query.pageIndex\" [nzPageSize]=\"query.pageSize\" [nzSize]=\"'small'\" (nzPageIndexChange)=\"pageIndexChange($event)\"></nz-pagination>\n </div>\n </div>\n <div class=\"kre-form-table-content\">\n <nz-table [nzFrontPagination]=\"false\" nzShowPagination nzShowSizeChanger #rowSelectionTable [nzData]=\"listData\" [nzScroll]=\"tableScroll\">\n <thead>\n <tr>\n <ng-container *ngIf=\"check\">\n <th nzWidth=\"50px\" nzLeft=\"0px\" nzShowCheckbox [(nzChecked)]=\"isAllChecked\" [nzIndeterminate]=\"isIndeterminate\" (nzCheckedChange)=\"setCheckAll($event)\"></th>\n </ng-container>\n <ng-container *ngFor=\"let item of header\">\n <ng-container *ngIf=\"item.hiden!=true && item.action!=true\">\n <th [nzWidth]=\"item.width+'px'\">{{item.name}}</th>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"action!=0\">\n <th nzRight=\"0px\" [nzWidth]=\"'100px'\">\u64CD\u4F5C</th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of rowSelectionTable.data\">\n <ng-container *ngIf=\"check\">\n <td nzShowCheckbox [(nzChecked)]=\"listDataCheckedId[data.id]\" (nzCheckedChange)=\"setCheckStatus()\"></td>\n </ng-container>\n <ng-container *ngFor=\"let item of header\">\n <ng-container *ngIf=\"item.hiden!=true && item.action!=true\">\n <td>{{data[item.key]}}</td>\n </ng-container> \n </ng-container>\n <ng-container *ngIf=\"action==2\">\n <td><span class=\"itemSelect\" (click)=\"itemSelectChange(data)\">\u9009\u62E9</span></td>\n </ng-container>\n\n </tr>\n </tbody>\n </nz-table>\n </div>\n <div class=\"kre-form-table-footer\">\n <div class=\"tag-header\">\n <label>\u5DF2\u9009<span>{{listDataSelectedList.length}}</span></label>\n <label (click)=\"selectAllClear()\">\u6E05\u7A7A</label>\n </div>\n <div class=\"tag-content kreform-scrollbar \"> \n <ng-container *ngFor=\"let item of listDataSelectedList\">\n <nz-tag nzMode=\"closeable\" (nzOnClose)=\"selectClearById(item.id)\">{{item.name}}</nz-tag>\n </ng-container>\n </div>\n </div>\n</div>", styles: [":host ::ng-deep{width:100%}:host ::ng-deep .kre-form-table{background:#fff;display:flex;flex:1;flex-direction:column}:host ::ng-deep .kre-form-table-header{display:flex;flex-direction:row;padding:10px}:host ::ng-deep .kre-form-table-header .header-button{flex:1}:host ::ng-deep .kre-form-table-header .header-button nz-input-group{width:260px;margin-right:10px}:host ::ng-deep .kre-form-table-header .header-button .ant-input{font-size:12px}:host ::ng-deep .kre-form-table-header .hader-pagination{width:300px}:host ::ng-deep .kre-form-table-content{display:flex;flex-direction:row;flex:1;padding:0 10px}:host ::ng-deep .kre-form-table-content nz-table{flex:1}:host ::ng-deep .kre-form-table-content .ant-table{font-size:12px}:host ::ng-deep .kre-form-table-content .ant-table .ant-table-placeholder{border-bottom:0}:host ::ng-deep .kre-form-table-content .ant-table .ant-empty-normal{margin:115px 0}:host ::ng-deep .kre-form-table-content .ant-table-body{height:332px}:host ::ng-deep .kre-form-table-content .itemSelect{cursor:pointer}:host ::ng-deep .kre-form-table-footer{height:78px;margin:0 10px;padding:10px;background-color:#f6f7fb;display:flex;flex-direction:row}:host ::ng-deep .kre-form-table-footer .tag-header{font-size:12px;font-weight:700;color:#777d93;padding:0 0 20px}:host ::ng-deep .kre-form-table-footer .tag-header span{display:inline-block;padding:0 3px;color:#ff986b;font-weight:400}:host ::ng-deep .kre-form-table-footer .tag-header label:nth-child(1){display:inline-block;width:100%}:host ::ng-deep .kre-form-table-footer .tag-header label:nth-child(2){display:inline-block;width:100%;font-weight:400;color:#6375da;cursor:pointer;margin-top:5px}:host ::ng-deep .kre-form-table-footer .tag-content{flex:1}:host ::ng-deep .kre-form-table-footer .tag-content .ant-tag{color:#6375da;border:0;padding:3px 8px;margin:0 10px 10px 0;background:#fff}:host ::ng-deep .kre-form-table-footer .tag-content .ant-tag i{color:#6375da;font-weight:700}:host ::ng-deep .kre-form-table .ant-table-wrapper{border:1px solid #e8e8e8}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th{padding:6px 10px;background-color:#fff;border-right:1px solid #e8e8e8}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th:nth-last-child(1){border-right:0!important}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th.ant-table-column-has-actions.ant-table-column-has-sorters:hover{background:#fff}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-tbody tr td{border:0;padding:6px 10px}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-tbody tr:nth-child(odd){background-color:#f6f8fd}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body{scrollbar-color:transparent!important;overflow-y:overlay!important}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar{width:6px;height:6px}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar-track{box-shadow:inset 0 0 6px transparent}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar-thumb{background-color:#999;border-radius:6px;outline:#333 solid 1px}:host ::ng-deep .kre-form-table .ant-table-header{background:#fff;margin-bottom:0!important;overflow:hidden!important}:host ::ng-deep .kre-form-table .table-action{background:red;padding:3px 8px;border-radius:12px;color:#fff;font-size:12px;cursor:pointer}"] }] } ]; /** @nocollapse */ KreFormPrivateTable.ctorParameters = () => []; KreFormPrivateTable.propDecorators = { tableIndex: [{ type: Input }], tableSize: [{ type: Input }], tableTotal: [{ type: Input }], id: [{ type: Input }], check: [{ type: Input }], action: [{ type: Input }], header: [{ type: Input }], body: [{ type: Input }], buttonlist: [{ type: Input }], checkid: [{ type: Input }], checkChangeEvent: [{ type: Output }], pageIndexEvent: [{ type: Output }], orderChangeEvent: [{ type: Output }], filterChangeEvent: [{ type: Output }], buttonAction: [{ type: Output }] }; if (false) { /** @type {?} */ KreFormPrivateTable.prototype.id; /** @type {?} */ KreFormPrivateTable.prototype.check; /** @type {?} */ KreFormPrivateTable.prototype.action; /** @type {?} */ KreFormPrivateTable.prototype.buttonlist; /** @type {?} */ KreFormPrivateTable.prototype.checkChangeEvent; /** @type {?} */ KreFormPrivateTable.prototype.pageIndexEvent; /** @type {?} */ KreFormPrivateTable.prototype.orderChangeEvent; /** @type {?} */ KreFormPrivateTable.prototype.filterChangeEvent; /** @type {?} */ KreFormPrivateTable.prototype.buttonAction; /** @type {?} */ KreFormPrivateTable.prototype.checkIds; /** @type {?} */ KreFormPrivateTable.prototype._headerData; /** @type {?} */ KreFormPrivateTable.prototype.isAllChecked; /** @type {?} */ KreFormPrivateTable.prototype.isIndeterminate; /** @type {?} */ KreFormPrivateTable.prototype.listData; /** @type {?} */ KreFormPrivateTable.prototype.listDataCheckedId; /** @type {?} */ KreFormPrivateTable.prototype.listDataSelectedList; /** @type {?} */ KreFormPrivateTable.prototype.query; /** @type {?} */ KreFormPrivateTable.prototype.tableScroll; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL2FudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ByaXZhdGUvdGFibGUvaW5kZXguY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQU1iLE1BQU0sZUFBZSxDQUFDOzs7O0FBRXZCLGlDQVFDOzs7SUFQQyw0QkFBYzs7SUFDZCxnQ0FBa0I7O0lBQ2xCLCtCQUFpQjs7SUFDakIsK0JBQWtCOztJQUNsQixnQ0FBbUI7O0lBQ25CLGdDQUFnQjs7SUFDaEIsOEJBQWU7Ozs7O0FBRWpCLGtDQVlDOzs7SUFYQywyQkFBVTs7SUFDViw0QkFBYzs7SUFFZCw2QkFBZTs7SUFDZixnQ0FBa0I7O0lBQ2xCLGtDQUFpQjs7SUFDakIsb0NBQXVCOztJQUN2QixnQ0FBa0I7O0lBQ2xCLDZCQUFnQjs7SUFDaEIsOEJBQWlCOzs7Ozs7QUFJbkIsa0NBR0M7OztJQUZDLDRCQUFjOztJQUNkLDRCQUFjOztBQVVoQixNQUFNLE9BQU8sbUJBQW1CO0lBd0g5Qjs7UUFoR1MsT0FBRSxHQUFTLEVBQUUsQ0FBQzs7UUFHZCxVQUFLLEdBQUcsS0FBSyxDQUFDOztRQUdkLFdBQU0sR0FBRyxDQUFDLENBQUM7O1FBMENYLGVBQVUsR0FBbUIsRUFBRSxDQUFDOztRQWUvQixxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFFekQsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFFdkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7O1FBRXpELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDOztRQUUxRCxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRy9ELGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FB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R0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFDLEVBQUUsQ0FBQztJQUMvQixDQUFDOzs7OztJQUVELGVBQWUsQ0FBQyxFQUFNO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7OztZQTVORixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMseTJHQUFxQzs7YUFFdEM7Ozs7O3lCQUdFLEtBQUs7d0JBT0wsS0FBSzt5QkFPTCxLQUFLO2lCQVFMLEtBQUs7b0JBR0wsS0FBSztxQkFHTCxLQUFLO3FCQUdMLEtBQUs7bUJBNEJMLEtBQUs7eUJBV0wsS0FBSztzQkFHTCxLQUFLOytCQVlMLE1BQU07NkJBRU4sTUFBTTsrQkFFTixNQUFNO2dDQUVOLE1BQU07MkJBRU4sTUFBTTs7OztJQXZFUCxpQ0FBdUI7O0lBR3ZCLG9DQUF1Qjs7SUFHdkIscUNBQW9COztJQTBDcEIseUNBQXlDOztJQWV6QywrQ0FBbUU7O0lBRW5FLDZDQUFpRTs7SUFFakUsK0NBQW1FOztJQUVuRSxnREFBb0U7O0lBRXBFLDJDQUErRDs7SUFHL0QsdUNBQXdCOztJQUN4QiwwQ0FBdUI7O0lBRXZCLDJDQUFxQjs7SUFDckIsOENBQXdCOztJQUV4Qix1Q0FBcUI7O0lBQ3JCLGdEQUFtRDs7SUFDbkQsbURBQWlDOztJQUVqQyxvQ0FPQzs7SUFDRCwwQ0FFRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlUXVlcnkge1xuICB0b3RhbDogbnVtYmVyO1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgc29ydE5hbWU/OiBzdHJpbmc7XG4gIHNvcnRWYWx1ZT86IHN0cmluZztcbiAgcGFyYW1ldGVyPzogYW55O1xuICBrZXlXb3JkOnN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlSGVhZGVyIHtcbiAga2V5PzogYW55O1xuICBuYW1lPzogc3RyaW5nO1xuICAvL3BvcD86IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXI7XG4gIG1pbldpZHRoPzogbnVtYmVyO1xuICBmaWx0ZXJMaXN0PzogYW55O1xuICBjaGVja2JveGFibGU/OiBib29sZWFuO1xuICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgaGlkZW4/OiBib29sZWFuLFxuICBhY3Rpb24/OiBib29sZWFuO1xuICBbYWRkaXRpb25hbFByb3BlcnRpZXM6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVCdXR0b24ge1xuICB0eXBlPzogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nO1xufVxuXG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImtyZWZvcm0tcHJpdmF0ZS10YWJsZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9pbmRleC5jb21wb25lbnQubGVzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBLcmVGb3JtUHJpdmF0ZVRhYmxlICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgXG4gIEBJbnB1dCgpIHNldCB0YWJsZUluZGV4KHZhbHVlOm51bWJlcil7XG4gICAgdGhpcy5xdWVyeS5wYWdlSW5kZXg9dmFsdWU7XG4gIH1cbiAgZ2V0IHRhYmxlSW5kZXgoKXtcbiAgICByZXR1cm4gdGhpcy5xdWVyeS5wYWdlSW5kZXg7XG4gIH1cbiAgXG4gIEBJbnB1dCgpIHNldCB0YWJsZVNpemUodmFsdWU6bnVtYmVyKXtcbiAgICB0aGlzLnF1ZXJ5LnBhZ2VTaXplPXZhbHVlO1xuICB9XG4gIGdldCB0YWJsZVNpemUoKXtcbiAgICByZXR1cm4gdGhpcy5xdWVyeS5wYWdlU2l6ZTtcbiAgfVxuICBcbiAgQElucHV0KCkgc2V0IHRhYmxlVG90YWwodmFsdWU6bnVtYmVyKXtcbiAgICB0aGlzLnF1ZXJ5LnRvdGFsPXZhbHVlO1xuICB9XG4gIGdldCB0YWJsZVRvdGFsKCl7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkudG90YWw7XG4gIH1cblxuICAvL3RhYmxlSWRcbiAgQElucHV0KCkgaWQ6IHN0cmluZz1cIlwiO1xuXG4gIC8v5piv5ZCm6KaB5aSa6YCJXG4gIEBJbnB1dCgpIGNoZWNrID0gZmFsc2U7XG5cbiAgLy/mmK/lkKbmnInmk43kvZzliJcwIOayoeacieaTjeS9nOWIl++8mzEg5aSa5Liq5pON5L2c5oyJ6ZKuIDIg6YCJ5oupXG4gIEBJbnB1dCgpIGFjdGlvbiA9IDA7XG5cbiAgLy90YWJsZSDlpLTpg6jkv6Hmga9cbiAgQElucHV0KClcbiAgc2V0IGhlYWRlcih2YWx1ZTogSVRhYmxlSGVhZGVyW10pIHtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnByb3AgPSBpdGVtLmtleTtcbiAgICAgICAgaWYgKGl0ZW0uY2hlY2tib3hhYmxlKSB7XG4gICAgICAgICAgaXRlbS5uYW1lPVwiXCI7XG4gICAgICAgICAgaXRlbS53aWR0aD01MDtcbiAgICAgICAgICBpdGVtLmNhbkF1dG9SZXNpemUgPSBmYWxzZTtcbiAgICAgICAgICBpdGVtLnJlc2l6ZWFibGUgPSBmYWxzZTtcbiAgICAgICAgICBpdGVtLmZyb3plbkxlZnQgPSB0cnVlO1xuICAgICAgICAgIGl0ZW0uY2hlY2tib3hhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBpdGVtLmhlYWRlckNoZWNrYm94YWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXRlbS5hY3Rpb24peyBcbiAgICAgICAgICBpdGVtLmZyb3plblJpZ2h0PXRydWU7XG4gICAgICAgICAgaXRlbS5jYW5BdXRvUmVzaXplPWZhbHNlO1xuICAgICAgICAgIGl0ZW0ucmVzaXplYWJsZT1mYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oZWFkZXJEYXRhLnB1c2goaXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0IGhlYWRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyRGF0YTtcbiAgfVxuXG4gIC8vdGFibGUg6KGM5pWw5o2uXG4gIEBJbnB1dCgpXG4gIHNldCBib2R5KHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMubGlzdERhdGEgPSB2YWx1ZTtcbiAgICBpZih0aGlzLmxpc3REYXRhPT1udWxsIHx8IHRoaXMubGlzdERhdGEubGVuZ3RoPT0wKXtcbiAgICAgIHRoaXMudGFibGVTY3JvbGwueT1cIjBweFwiO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy50YWJsZVNjcm9sbC55PVwiMzMycHhcIjtcbiAgICB9XG4gIH1cblxuICAvL+aMiemSruWIl+ihqFxuICBASW5wdXQoKSBidXR0b25saXN0OiBJVGFibGVCdXR0b25bXSA9IFtdO1xuXG4gIC8v6buY6K6k6YCJ5LitSWRcbiAgQElucHV0KClcbiAgc2V0IGNoZWNraWQodmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdD1bXTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0aGlzLmxpc3REYXRhQ2hlY2tlZElkW2l0ZW0uaWRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy/pgInkuK3kuovku7ZcbiAgQE91dHB1dCgpIGNoZWNrQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvL+e/u+mhteS6i+S7tlxuICBAT3V0cHV0KCkgcGFnZUluZGV4RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvL+aOkuW6j+S6i+S7tlxuICBAT3V0cHV0KCkgb3JkZXJDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8v6L+H5ruk5LqL5Lu2XG4gIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8v5pON5L2c5LqL5Lu2XG4gIEBPdXRwdXQoKSBidXR0b25BY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgY2hlY2tJZHM6IHN0cmluZ1tdID0gW107XG4gIF9oZWFkZXJEYXRhOmFueVtdID0gW107XG5cbiAgaXNBbGxDaGVja2VkID0gZmFsc2U7XG4gIGlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlOyBcblxuICBsaXN0RGF0YTogYW55W10gPSBbXTtcbiAgbGlzdERhdGFDaGVja2VkSWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIGxpc3REYXRhU2VsZWN0ZWRMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIHF1ZXJ5OiBJVGFibGVRdWVyeSA9IHtcbiAgICB0b3RhbDogMCxcbiAgICBwYWdlSW5kZXg6MSxcbiAgICBwYWdlU2l6ZTogMTUsXG4gICAgc29ydE5hbWU6IFwiXCIsXG4gICAgc29ydFZhbHVlOiBcIlwiLFxuICAgIGtleVdvcmQ6XCJcIlxuICB9XG4gIHRhYmxlU2Nyb2xsID0ge1xuICAgIHk6ICczMzJweCdcbiAgfTtcbiBcbiAgY29uc3RydWN0b3IoKSB7fVxuIFxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHt9XG4gXG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuXG4gIH1cblxuICAvL+WFqOmAiXzlhajkuI3pgIlcbiAgc2V0Q2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3REYXRhLmZvckVhY2goaXRlbSA9PiAodGhpcy5saXN0RGF0YUNoZWNrZWRJZFtpdGVtLmlkXSA9IHZhbHVlKSk7XG4gICAgdGhpcy5zZXRDaGVja1N0YXR1cygpO1xuICB9XG5cbiAgLy/orr7nva7mn5DkuKrpgInmi6l85Y+W5raI6YCJ5LitXG4gIHNldENoZWNrU3RhdHVzKCk6IHZvaWQgeyBcbiAgICB0aGlzLmlzQWxsQ2hlY2tlZCA9IHRoaXMubGlzdERhdGEuZXZlcnkoaXRlbSA9PiB0aGlzLmxpc3REYXRhQ2hlY2tlZElkW2l0ZW0uaWRdKTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMubGlzdERhdGEuc29tZShpdGVtID0+IHRoaXMubGlzdERhdGFDaGVja2VkSWRbaXRlbS5pZF0pICYmICF0aGlzLmlzQWxsQ2hlY2tlZDtcbiAgICB0aGlzLnNhdmVTZWxlY3RlZCgpO1xuICB9XG4gIFxuIFxuICAvL+eCueWHu+afpeivolxuICBxdWVyeUNoYW5nZSgpXG4gIHtcbiAgICB0aGlzLnBhZ2VJbmRleEV2ZW50LmVtaXQodGhpcy5xdWVyeSk7ICBcbiAgfVxuXG4gIC8v54K55Ye757+76aG1XG4gIHBhZ2VJbmRleENoYW5nZShlOm51bWJlcikge1xuICAgIHRoaXMucXVlcnkucGFnZUluZGV4ID0gZTtcbiAgICB0aGlzLnBhZ2VJbmRleEV2ZW50LmVtaXQodGhpcy5xdWVyeSk7XG4gIH1cblxuICAvL+eCueWHu+aOkuW6j1xuICB0YWJsZVNvcnQoc29ydDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeS5zb3J0TmFtZSA9IHNvcnQua2V5O1xuICAgIHRoaXMucXVlcnkuc29ydFZhbHVlID0gc29ydC52YWx1ZTtcbiAgICB0aGlzLm9yZGVyQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnF1ZXJ5KTtcbiAgfSBcblxuICAvL+WNleWHu+mAieS4rVxuICBpdGVtU2VsZWN0Q2hhbmdlKGV2ZW50OmFueSl7XG4gICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5zaGlmdCgpO1xuICAgIHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3QucHVzaCh7XG4gICAgICBcImlkXCI6ZXZlbnQuaWQsXG4gICAgICBcIm5hbWVcIjpldmVudC5uYW1lXG4gICAgfSk7XG4gICAgdGhpcy5jaGVja0NoYW5nZUV2ZW50LmVtaXQodGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdCk7XG4gIH1cbiBcbiAgLy/kv53lrZjpgInkuK1cbiAgc2F2ZVNlbGVjdGVkKCl7IFxuICAgIE9iamVjdC5rZXlzKHRoaXMubGlzdERhdGFDaGVja2VkSWQpLmZvckVhY2goaWQgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5saXN0RGF0YUNoZWNrZWRJZFtpZF07XG4gICAgICAgIGlmKHZhbHVlKXtcbiAgICAgICAgIGlmKCF0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0LnNvbWUoaXRlbT0+e3JldHVybiBpdGVtLmlkPT1pZH0pKXtcbiAgICAgICAgICB0aGlzLmxpc3REYXRhLmZvckVhY2goKGl0ZW0saW5kZXgsb2JqZWN0KT0+e1xuICAgICAgICAgICAgaWYoaXRlbS5pZD09aWQpe1xuICAgICAgICAgICAgICB0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOml0ZW0uaWQsXG4gICAgICAgICAgICAgICAgbmFtZTppdGVtLm5hbWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0LmZvckVhY2goKGl0ZW0saW5kZXgsb2JqZWN0KT0+e1xuICAgICAgICAgICAgaWYoaXRlbS5pZD09aWQpe1xuICAgICAgICAgICAgICBvYmplY3Quc3BsaWNlKGluZGV4LDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jaGVja0NoYW5nZUV2ZW50LmVtaXQodGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdCk7IFxuICB9XG4gIFxuICBzZWxlY3RBbGxDbGVhcigpe1xuICAgIHRoaXMuaXNBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTsgXG4gICAgdGhpcy5saXN0RGF0YUNoZWNrZWRJZD17fTtcbiAgICB0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0PVtdOyBcbiAgfVxuXG4gIHNlbGVjdENsZWFyQnlJZChpZDphbnkpe1xuICAgIHRoaXMubGlzdERhdGFDaGVja2VkSWRbaWRdPWZhbHNlO1xuICAgIHRoaXMuc2V0Q2hlY2tTdGF0dXMoKTtcbiAgfVxufVxuIl19