UNPKG

ngx-mat-cdk

Version:

Extra Components for Angular Material including Filters,Drag Drop File, MatSelect Mobile Version

180 lines 24.7 kB
import { fromEvent } from "rxjs"; import { Directive, ElementRef, Injector } from "@angular/core"; import { GetObjectByValueMemberPipe } from "../pipes/get-object-by-value-member.pipe"; import { NgxMatSelectService } from "../services/ngx-mat-select.service"; import { debounceTime, distinctUntilChanged, map } from "rxjs/operators"; import { MatSelectAttr } from "./mat-select-attr"; export class MatSelectBase extends MatSelectAttr { constructor(injector) { super(); this.injectorM = injector; this.matSelectService = injector.get(NgxMatSelectService); this.getObjectByValueMemberPipe = injector.get(GetObjectByValueMemberPipe); } onSearch() { if (!this.isLazy) { let filteredSource = []; if (this.isStringArray) { filteredSource = this.initSource .filter(x => x === null || x === void 0 ? void 0 : x.toString().includes(this.searchValue)); } else { filteredSource = this.initSource .filter(x => { var _a; return (_a = x[this.displayMember]) === null || _a === void 0 ? void 0 : _a.toString().includes(this.searchValue); }); } this.filterSource = filteredSource.slice(0, this.matSelectService.getMaxSize(filteredSource, this.maximumCount)); this.filterSourceChange.emit(this.filterSource); this._loading(false); } else { if (this.searcher && typeof (this.searcher) === 'function') { this.searcher(this.searchValue).toPromise().then(res => { this.filterSource = res; this.filterSourceChange.emit(this.filterSource); this._loading(false); }).catch(() => { this._loading(false); }); } else { this._loading(false); } } } ngAfterViewInit() { var _a; if (this.hostInp) { this.host = this.hostInp.searchSelectInput; this.value = this.hostInp.matSelect.value; } else { this.host = this.injectorM.get(ElementRef, null); if (this.host) this.value = this.host['value']; else return; } const el = (_a = this.host) === null || _a === void 0 ? void 0 : _a.nativeElement; if (el) { const terms$ = fromEvent(el, 'keyup') .pipe(map(event => { return event.target.value; // if (this.matSelectService.validInputSearch(event.keyCode)) { // return event.target.value // } // return null; }), debounceTime(this.isLazy ? 400 : 0), distinctUntilChanged()); if (terms$) { this.subscription = terms$ === null || terms$ === void 0 ? void 0 : terms$.subscribe((content) => { if (content !== undefined && content !== null) { this._loading(true); this.searchValue = content; this.onSearch(); } }); } } } ngOnChanges(changes) { if (changes.initSource && changes.initSource.currentValue) { setTimeout(() => { this._init(); }); } } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } _init() { if (this.initSource && this.initSource.length > 0) { this.filterSource = this.initSource.slice(0, this.matSelectService.getMaxSize(this.initSource, this.maximumCount)); } else { this.filterSource = []; } this.filterSourceChange.emit(this.filterSource); this.changeDetected(); } _loading(loading) { if (this.loadingFunc && typeof (this.loadingFunc) == 'function') { this.loadingFunc(loading); } } changeDetected() { if (this.hostInp) { this.value = this.hostInp.matSelect.value; } else { if (this.host) this.value = this.host['value']; else return; } if (this.value) { const val = this.value; if (Array.isArray(val)) { if (val.length > 0) { if (val[0][this.valueMember] !== undefined && val[0][this.valueMember] !== null) { if (this.filterSource.length > 0) { val.forEach(v => { const item = this.filterSource.find(w => w[this.valueMember] == v[this.valueMember]); if (!item) { this.filterSource.unshift(v); } }); } else { this.filterSource = val; } } else { val.forEach(v => { let item = this.filterSource.find(w => w[this.valueMember] == v); if (!item) { item = this.initSource.find(w => w[this.valueMember] == v); if (item) { this.filterSource.unshift(item); } } }); } } } else { if (typeof (val) === 'object' && val[this.valueMember] !== undefined && val[this.valueMember] !== null) { if (this.filterSource.length > 0) { const item = this.filterSource.find(w => w[this.valueMember] == val[this.valueMember]); if (!item) { this.filterSource.unshift(val); } } else { this.filterSource = [val]; } } else { let item = this.filterSource.find(w => w[this.valueMember] == val); if (!item) { item = this.initSource.find(w => w[this.valueMember] == val); if (item) { this.filterSource.unshift(item); } } } } } this.filterSourceChange.emit(this.filterSource); } getObject(value) { return this.getObjectByValueMemberPipe.transform(value, [this.filterSource, this.valueMember]); } } MatSelectBase.decorators = [ { type: Directive, args: [{},] } ]; MatSelectBase.ctorParameters = () => [ { type: Injector } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXNlbGVjdC1iYXNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL0FsaXJlemEgTW9oYW1tYWRpL3NvdXJjZS9yZXBvcy9NeUxpYnJhcnkvQW5ndWxhci5MaWJyYXJ5L2xpYnMvcHJvamVjdHMvbmd4LW1hdC1jZGsvc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9kaXJlY3RpdmVzL21hdC1zZWxlY3QtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUEyQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFFVixRQUFRLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDcEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJaEQsTUFBTSxPQUFnQixhQUFjLFNBQVEsYUFBYTtJQUt2RCxZQUFzQixRQUFrQjtRQUV0QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBVUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RCLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVTtxQkFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDMUQ7aUJBQU07Z0JBQ0wsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVO3FCQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsd0JBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsMENBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFDLENBQUMsQ0FBQzthQUM5RTtZQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO1lBQ3RFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FFdEI7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZTs7UUFDYixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQzNDO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLElBQUksQ0FBQyxJQUFJO2dCQUNYLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7Z0JBQzdCLE9BQU87U0FDYjtRQUVELE1BQU0sRUFBRSxHQUFHLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsYUFBaUMsQ0FBQztRQUN4RCxJQUFJLEVBQUUsRUFBRTtZQUNOLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBTSxFQUFFLEVBQUUsT0FBTyxDQUFDO2lCQUN2QyxJQUFJLENBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNWLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBRTFCLCtEQUErRDtnQkFDL0QsOEJBQThCO2dCQUM5QixJQUFJO2dCQUNKLGVBQWU7WUFDakIsQ0FBQyxDQUFDLEVBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ25DLG9CQUFvQixFQUFFLENBQ3ZCLENBQUM7WUFDSixJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxTQUFTLENBQ25DLENBQUMsT0FBZSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO3dCQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUNqQjtnQkFDSCxDQUFDLENBQ0YsQ0FBQzthQUNIO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRTtZQUN6RCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLEtBQUs7UUFDWCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDekU7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxRQUFRLENBQUMsT0FBZ0I7UUFFL0IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxFQUFFO1lBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztTQUMzQzthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsSUFBSTtnQkFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7O2dCQUM3QixPQUFPO1NBQ2I7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRTt3QkFDL0UsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2hDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0NBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQ0FDckYsSUFBSSxDQUFDLElBQUksRUFBRTtvQ0FDVCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztpQ0FDOUI7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7eUJBQ0o7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7eUJBQ3pCO3FCQUNGO3lCQUFNO3dCQUNMLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ2QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNqRSxJQUFJLENBQUMsSUFBSSxFQUFFO2dDQUNULElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0NBQzNELElBQUksSUFBSSxFQUFFO29DQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2lDQUNqQzs2QkFDRjt3QkFDSCxDQUFDLENBQUMsQ0FBQztxQkFDSjtpQkFDRjthQUNGO2lCQUFNO2dCQUNMLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDdEcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZGLElBQUksQ0FBQyxJQUFJLEVBQUU7NEJBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQ2hDO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDM0I7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNULElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7d0JBQzdELElBQUksSUFBSSxFQUFFOzRCQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNqQztxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQUs7UUFDYixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDOzs7WUExTEYsU0FBUyxTQUFDLEVBQUU7OztZQVRYLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1xyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RvcixcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtHZXRPYmplY3RCeVZhbHVlTWVtYmVyUGlwZX0gZnJvbSBcIi4uL3BpcGVzL2dldC1vYmplY3QtYnktdmFsdWUtbWVtYmVyLnBpcGVcIjtcclxuaW1wb3J0IHtOZ3hNYXRTZWxlY3RTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvbmd4LW1hdC1zZWxlY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7TWF0U2VsZWN0QXR0cn0gZnJvbSBcIi4vbWF0LXNlbGVjdC1hdHRyXCI7XHJcbmltcG9ydCB7TWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50fSBmcm9tIFwibmd4LW1hdC1zZWxlY3Qtc2VhcmNoXCI7XHJcblxyXG5ARGlyZWN0aXZlKHt9KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWF0U2VsZWN0QmFzZSBleHRlbmRzIE1hdFNlbGVjdEF0dHIge1xyXG4gIHB1YmxpYyBtYXRTZWxlY3RTZXJ2aWNlOiBOZ3hNYXRTZWxlY3RTZXJ2aWNlO1xyXG4gIHB1YmxpYyBnZXRPYmplY3RCeVZhbHVlTWVtYmVyUGlwZTogR2V0T2JqZWN0QnlWYWx1ZU1lbWJlclBpcGU7XHJcbiAgcHVibGljIGluamVjdG9yTTogSW5qZWN0b3I7XHJcblxyXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmluamVjdG9yTSA9IGluamVjdG9yO1xyXG4gICAgdGhpcy5tYXRTZWxlY3RTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5neE1hdFNlbGVjdFNlcnZpY2UpO1xyXG4gICAgdGhpcy5nZXRPYmplY3RCeVZhbHVlTWVtYmVyUGlwZSA9IGluamVjdG9yLmdldChHZXRPYmplY3RCeVZhbHVlTWVtYmVyUGlwZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHZhbHVlOiBhbnk7XHJcbiAgc2VhcmNoVmFsdWU6IHN0cmluZztcclxuICBob3N0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIHNlbGVjdGVkOiBhbnlbXSB8IGFueTtcclxuICBhYnN0cmFjdCBsb2FkaW5nRnVuYzogKGxvYWRpbmc6IGJvb2xlYW4pID0+IHZvaWQ7XHJcbiAgcHVibGljIGhvc3RJbnA6IE1hdFNlbGVjdFNlYXJjaENvbXBvbmVudDtcclxuXHJcbiAgb25TZWFyY2goKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNMYXp5KSB7XHJcbiAgICAgIGxldCBmaWx0ZXJlZFNvdXJjZSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5pc1N0cmluZ0FycmF5KSB7XHJcbiAgICAgICAgZmlsdGVyZWRTb3VyY2UgPSB0aGlzLmluaXRTb3VyY2VcclxuICAgICAgICAgIC5maWx0ZXIoeCA9PiB4Py50b1N0cmluZygpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVmFsdWUpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaWx0ZXJlZFNvdXJjZSA9IHRoaXMuaW5pdFNvdXJjZVxyXG4gICAgICAgICAgLmZpbHRlcih4ID0+IHhbdGhpcy5kaXNwbGF5TWVtYmVyXT8udG9TdHJpbmcoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFZhbHVlKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5maWx0ZXJTb3VyY2UgPSBmaWx0ZXJlZFNvdXJjZS5zbGljZSgwLFxyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0U2VydmljZS5nZXRNYXhTaXplKGZpbHRlcmVkU291cmNlLCB0aGlzLm1heGltdW1Db3VudCkpXHJcbiAgICAgIHRoaXMuZmlsdGVyU291cmNlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJTb3VyY2UpO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nKGZhbHNlKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hlciAmJiB0eXBlb2YgKHRoaXMuc2VhcmNoZXIpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hlcih0aGlzLnNlYXJjaFZhbHVlKS50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclNvdXJjZSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZmlsdGVyU291cmNlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJTb3VyY2UpO1xyXG4gICAgICAgICAgdGhpcy5fbG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZGluZyhmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmhvc3RJbnApIHtcclxuICAgICAgdGhpcy5ob3N0ID0gdGhpcy5ob3N0SW5wLnNlYXJjaFNlbGVjdElucHV0O1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5ob3N0SW5wLm1hdFNlbGVjdC52YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaG9zdCA9IHRoaXMuaW5qZWN0b3JNLmdldChFbGVtZW50UmVmLCBudWxsKTtcclxuICAgICAgaWYgKHRoaXMuaG9zdClcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5ob3N0Wyd2YWx1ZSddO1xyXG4gICAgICBlbHNlIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbCA9IHRoaXMuaG9zdD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIGNvbnN0IHRlcm1zJCA9IGZyb21FdmVudDxhbnk+KGVsLCAna2V5dXAnKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbWFwKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLm1hdFNlbGVjdFNlcnZpY2UudmFsaWRJbnB1dFNlYXJjaChldmVudC5rZXlDb2RlKSkge1xyXG4gICAgICAgICAgICAvLyAgIHJldHVybiBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAvLyByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuaXNMYXp5ID8gNDAwIDogMCksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKHRlcm1zJCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGVybXMkPy5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoY29udGVudDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQgJiYgY29udGVudCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMuaW5pdFNvdXJjZSAmJiBjaGFuZ2VzLmluaXRTb3VyY2UuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2luaXQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmluaXRTb3VyY2UgJiYgdGhpcy5pbml0U291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5maWx0ZXJTb3VyY2UgPSB0aGlzLmluaXRTb3VyY2Uuc2xpY2UoMCxcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdFNlcnZpY2UuZ2V0TWF4U2l6ZSh0aGlzLmluaXRTb3VyY2UsIHRoaXMubWF4aW11bUNvdW50KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlclNvdXJjZSA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maWx0ZXJTb3VyY2VDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlclNvdXJjZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5sb2FkaW5nRnVuYyAmJiB0eXBlb2YgKHRoaXMubG9hZGluZ0Z1bmMpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nRnVuYyhsb2FkaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZURldGVjdGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaG9zdElucCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5ob3N0SW5wLm1hdFNlbGVjdC52YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmhvc3QpXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaG9zdFsndmFsdWUnXTtcclxuICAgICAgZWxzZSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgaWYgKHZhbFswXVt0aGlzLnZhbHVlTWVtYmVyXSAhPT0gdW5kZWZpbmVkICYmIHZhbFswXVt0aGlzLnZhbHVlTWVtYmVyXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHZhbC5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZmlsdGVyU291cmNlLmZpbmQodyA9PiB3W3RoaXMudmFsdWVNZW1iZXJdID09IHZbdGhpcy52YWx1ZU1lbWJlcl0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyU291cmNlLnVuc2hpZnQodik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTb3VyY2UgPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbC5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5maWx0ZXJTb3VyY2UuZmluZCh3ID0+IHdbdGhpcy52YWx1ZU1lbWJlcl0gPT0gdik7XHJcbiAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5pbml0U291cmNlLmZpbmQodyA9PiB3W3RoaXMudmFsdWVNZW1iZXJdID09IHYpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTb3VyY2UudW5zaGlmdChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHlwZW9mICh2YWwpID09PSAnb2JqZWN0JyAmJiB2YWxbdGhpcy52YWx1ZU1lbWJlcl0gIT09IHVuZGVmaW5lZCAmJiB2YWxbdGhpcy52YWx1ZU1lbWJlcl0gIT09IG51bGwpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbHRlclNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZpbHRlclNvdXJjZS5maW5kKHcgPT4gd1t0aGlzLnZhbHVlTWVtYmVyXSA9PSB2YWxbdGhpcy52YWx1ZU1lbWJlcl0pO1xyXG4gICAgICAgICAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclNvdXJjZS51bnNoaWZ0KHZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyU291cmNlID0gW3ZhbF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5maWx0ZXJTb3VyY2UuZmluZCh3ID0+IHdbdGhpcy52YWx1ZU1lbWJlcl0gPT0gdmFsKTtcclxuICAgICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtID0gdGhpcy5pbml0U291cmNlLmZpbmQodyA9PiB3W3RoaXMudmFsdWVNZW1iZXJdID09IHZhbCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTb3VyY2UudW5zaGlmdChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5maWx0ZXJTb3VyY2VDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlclNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBnZXRPYmplY3QodmFsdWUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlWYWx1ZU1lbWJlclBpcGUudHJhbnNmb3JtKHZhbHVlLCBbdGhpcy5maWx0ZXJTb3VyY2UsIHRoaXMudmFsdWVNZW1iZXJdKTtcclxuICB9XHJcbn1cclxuIl19