UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

153 lines 20.5 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes'; import { EventEmitter } from '@angular/core'; import { Subject } from 'rxjs'; import { filter, take, takeUntil } from 'rxjs/operators'; import { isPromise } from 'ng-zorro-antd/core/util'; export class NzModalRef { constructor(overlayRef, config, containerInstance) { this.overlayRef = overlayRef; this.config = config; this.containerInstance = containerInstance; this.componentInstance = null; this.state = 0 /* NzModalState.OPEN */; this.afterClose = new Subject(); this.afterOpen = new Subject(); this.destroy$ = new Subject(); containerInstance.animationStateChanged .pipe(filter(event => event.phaseName === 'done' && event.toState === 'enter'), take(1)) .subscribe(() => { this.afterOpen.next(); this.afterOpen.complete(); if (config.nzAfterOpen instanceof EventEmitter) { config.nzAfterOpen.emit(); } }); containerInstance.animationStateChanged .pipe(filter(event => event.phaseName === 'done' && event.toState === 'exit'), take(1)) .subscribe(() => { clearTimeout(this.closeTimeout); this._finishDialogClose(); }); containerInstance.containerClick.pipe(take(1), takeUntil(this.destroy$)).subscribe(() => { const cancelable = !this.config.nzCancelLoading && !this.config.nzOkLoading; if (cancelable) { this.trigger("cancel" /* NzTriggerAction.CANCEL */); } }); overlayRef .keydownEvents() .pipe(filter(event => this.config.nzKeyboard && !this.config.nzCancelLoading && !this.config.nzOkLoading && event.keyCode === ESCAPE && !hasModifierKey(event))) .subscribe(event => { event.preventDefault(); this.trigger("cancel" /* NzTriggerAction.CANCEL */); }); containerInstance.cancelTriggered .pipe(takeUntil(this.destroy$)) .subscribe(() => this.trigger("cancel" /* NzTriggerAction.CANCEL */)); containerInstance.okTriggered.pipe(takeUntil(this.destroy$)).subscribe(() => this.trigger("ok" /* NzTriggerAction.OK */)); overlayRef.detachments().subscribe(() => { this.afterClose.next(this.result); this.afterClose.complete(); if (config.nzAfterClose instanceof EventEmitter) { config.nzAfterClose.emit(this.result); } this.componentInstance = null; this.overlayRef.dispose(); }); } getContentComponent() { return this.componentInstance; } getElement() { return this.containerInstance.getNativeElement(); } destroy(result) { this.close(result); } triggerOk() { return this.trigger("ok" /* NzTriggerAction.OK */); } triggerCancel() { return this.trigger("cancel" /* NzTriggerAction.CANCEL */); } close(result) { if (this.state !== 0 /* NzModalState.OPEN */) { return; } this.result = result; this.containerInstance.animationStateChanged .pipe(filter(event => event.phaseName === 'start'), take(1)) .subscribe(event => { this.overlayRef.detachBackdrop(); this.closeTimeout = setTimeout(() => { this._finishDialogClose(); }, event.totalTime + 100); }); this.containerInstance.startExitAnimation(); this.state = 1 /* NzModalState.CLOSING */; } updateConfig(config) { Object.assign(this.config, config); this.containerInstance.bindBackdropStyle(); this.containerInstance.cdr.markForCheck(); } getState() { return this.state; } getConfig() { return this.config; } getBackdropElement() { return this.overlayRef.backdropElement; } async trigger(action) { if (this.state === 1 /* NzModalState.CLOSING */) { return; } const trigger = { ok: this.config.nzOnOk, cancel: this.config.nzOnCancel }[action]; const loadingKey = { ok: 'nzOkLoading', cancel: 'nzCancelLoading' }[action]; const loading = this.config[loadingKey]; if (loading) { return; } if (trigger instanceof EventEmitter) { trigger.emit(this.getContentComponent()); } else if (typeof trigger === 'function') { const result = trigger(this.getContentComponent()); if (isPromise(result)) { this.config[loadingKey] = true; let doClose = false; try { doClose = await result; } finally { this.config[loadingKey] = false; this.closeWhitResult(doClose); } } else { this.closeWhitResult(result); } } } closeWhitResult(result) { if (result !== false) { this.close(result); } } _finishDialogClose() { this.state = 2 /* NzModalState.CLOSED */; this.overlayRef.dispose(); this.destroy$.next(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBaUJwRCxNQUFNLE9BQU8sVUFBVTtJQVdyQixZQUNVLFVBQXNCLEVBQ3RCLE1BQW9CLEVBQ3JCLGlCQUE4QztRQUY3QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE2QjtRQWJ2RCxzQkFBaUIsR0FBYSxJQUFJLENBQUM7UUFFbkMsVUFBSyw2QkFBbUM7UUFDeEMsZUFBVSxHQUFlLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSWpDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBT3JDLGlCQUFpQixDQUFDLHFCQUFxQjthQUNwQyxJQUFJLENBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsRUFDeEUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxF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QU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksT0FBTyxHQUF3QixLQUFLLENBQUM7Z0JBQ3pDLElBQUk7b0JBQ0YsT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDO2lCQUN4Qjt3QkFBUztvQkFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDL0I7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQWlCO1FBQ3ZDLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsS0FBSyw4QkFBc0IsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgRVNDQVBFLCBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS91dGlsJztcblxuaW1wb3J0IHsgQmFzZU1vZGFsQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC1jb250YWluZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE56TW9kYWxMZWdhY3lBUEkgfSBmcm9tICcuL21vZGFsLWxlZ2FjeS1hcGknO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSAnLi9tb2RhbC10eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIE56TW9kYWxTdGF0ZSB7XG4gIE9QRU4sXG4gIENMT1NJTkcsXG4gIENMT1NFRFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBOelRyaWdnZXJBY3Rpb24ge1xuICBDQU5DRUwgPSAnY2FuY2VsJyxcbiAgT0sgPSAnb2snXG59XG5cbmV4cG9ydCBjbGFzcyBOek1vZGFsUmVmPFQgPSBOelNhZmVBbnksIFIgPSBOelNhZmVBbnk+IGltcGxlbWVudHMgTnpNb2RhbExlZ2FjeUFQSTxULCBSPiB7XG4gIGNvbXBvbmVudEluc3RhbmNlOiBUIHwgbnVsbCA9IG51bGw7XG4gIHJlc3VsdD86IFI7XG4gIHN0YXRlOiBOek1vZGFsU3RhdGUgPSBOek1vZGFsU3RhdGUuT1BFTjtcbiAgYWZ0ZXJDbG9zZTogU3ViamVjdDxSPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGFmdGVyT3BlbjogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBjbG9zZVRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmLFxuICAgIHByaXZhdGUgY29uZmlnOiBNb2RhbE9wdGlvbnMsXG4gICAgcHVibGljIGNvbnRhaW5lckluc3RhbmNlOiBCYXNlTW9kYWxDb250YWluZXJDb21wb25lbnRcbiAgKSB7XG4gICAgY29udGFpbmVySW5zdGFuY2UuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50LnBoYXNlTmFtZSA9PT0gJ2RvbmUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdlbnRlcicpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hZnRlck9wZW4ubmV4dCgpO1xuICAgICAgICB0aGlzLmFmdGVyT3Blbi5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAoY29uZmlnLm56QWZ0ZXJPcGVuIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgY29uZmlnLm56QWZ0ZXJPcGVuLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjb250YWluZXJJbnN0YW5jZS5hbmltYXRpb25TdGF0ZUNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQucGhhc2VOYW1lID09PSAnZG9uZScgJiYgZXZlbnQudG9TdGF0ZSA9PT0gJ2V4aXQnKSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZW91dCk7XG4gICAgICAgIHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCk7XG4gICAgICB9KTtcblxuICAgIGNvbnRhaW5lckluc3RhbmNlLmNvbnRhaW5lckNsaWNrLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FuY2VsYWJsZSA9ICF0aGlzLmNvbmZpZy5uekNhbmNlbExvYWRpbmcgJiYgIXRoaXMuY29uZmlnLm56T2tMb2FkaW5nO1xuICAgICAgaWYgKGNhbmNlbGFibGUpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKE56VHJpZ2dlckFjdGlvbi5DQU5DRUwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgb3ZlcmxheVJlZlxuICAgICAgLmtleWRvd25FdmVudHMoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihcbiAgICAgICAgICBldmVudCA9PlxuICAgICAgICAgICAgKHRoaXMuY29uZmlnLm56S2V5Ym9hcmQgYXMgYm9vbGVhbikgJiZcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5uekNhbmNlbExvYWRpbmcgJiZcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5uek9rTG9hZGluZyAmJlxuICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFICYmXG4gICAgICAgICAgICAhaGFzTW9kaWZpZXJLZXkoZXZlbnQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoTnpUcmlnZ2VyQWN0aW9uLkNBTkNFTCk7XG4gICAgICB9KTtcblxuICAgIGNvbnRhaW5lckluc3RhbmNlLmNhbmNlbFRyaWdnZXJlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRyaWdnZXIoTnpUcmlnZ2VyQWN0aW9uLkNBTkNFTCkpO1xuXG4gICAgY29udGFpbmVySW5zdGFuY2Uub2tUcmlnZ2VyZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRyaWdnZXIoTnpUcmlnZ2VyQWN0aW9uLk9LKSk7XG5cbiAgICBvdmVybGF5UmVmLmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuYWZ0ZXJDbG9zZS5uZXh0KHRoaXMucmVzdWx0KTtcbiAgICAgIHRoaXMuYWZ0ZXJDbG9zZS5jb21wbGV0ZSgpO1xuICAgICAgaWYgKGNvbmZpZy5uekFmdGVyQ2xvc2UgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgY29uZmlnLm56QWZ0ZXJDbG9zZS5lbWl0KHRoaXMucmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSBudWxsO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbnRlbnRDb21wb25lbnQoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgYXMgVDtcbiAgfVxuXG4gIGdldEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLmdldE5hdGl2ZUVsZW1lbnQoKTtcbiAgfVxuXG4gIGRlc3Ryb3kocmVzdWx0PzogUik6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcbiAgfVxuXG4gIHRyaWdnZXJPaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyKE56VHJpZ2dlckFjdGlvbi5PSyk7XG4gIH1cblxuICB0cmlnZ2VyQ2FuY2VsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnRyaWdnZXIoTnpUcmlnZ2VyQWN0aW9uLkNBTkNFTCk7XG4gIH1cblxuICBjbG9zZShyZXN1bHQ/OiBSKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IE56TW9kYWxTdGF0ZS5PUEVOKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgIHRoaXMuY29udGFpbmVySW5zdGFuY2UuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50LnBoYXNlTmFtZSA9PT0gJ3N0YXJ0JyksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoQmFja2Ryb3AoKTtcbiAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpO1xuICAgICAgICB9LCBldmVudC50b3RhbFRpbWUgKyAxMDApO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmNvbnRhaW5lckluc3RhbmNlLnN0YXJ0RXhpdEFuaW1hdGlvbigpO1xuICAgIHRoaXMuc3RhdGUgPSBOek1vZGFsU3RhdGUuQ0xPU0lORztcbiAgfVxuXG4gIHVwZGF0ZUNvbmZpZyhjb25maWc6IE1vZGFsT3B0aW9ucyk6IHZvaWQge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb25maWcsIGNvbmZpZyk7XG4gICAgdGhpcy5jb250YWluZXJJbnN0YW5jZS5iaW5kQmFja2Ryb3BTdHlsZSgpO1xuICAgIHRoaXMuY29udGFpbmVySW5zdGFuY2UuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0U3RhdGUoKTogTnpNb2RhbFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIGdldENvbmZpZygpOiBNb2RhbE9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIGdldEJhY2tkcm9wRWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0cmlnZ2VyKGFjdGlvbjogTnpUcmlnZ2VyQWN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IE56TW9kYWxTdGF0ZS5DTE9TSU5HKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRyaWdnZXIgPSB7IG9rOiB0aGlzLmNvbmZpZy5uek9uT2ssIGNhbmNlbDogdGhpcy5jb25maWcubnpPbkNhbmNlbCB9W2FjdGlvbl07XG4gICAgY29uc3QgbG9hZGluZ0tleSA9IHsgb2s6ICduek9rTG9hZGluZycsIGNhbmNlbDogJ256Q2FuY2VsTG9hZGluZycgfVthY3Rpb25dIGFzICduek9rTG9hZGluZycgfCAnbnpDYW5jZWxMb2FkaW5nJztcbiAgICBjb25zdCBsb2FkaW5nID0gdGhpcy5jb25maWdbbG9hZGluZ0tleV07XG4gICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRyaWdnZXIgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgIHRyaWdnZXIuZW1pdCh0aGlzLmdldENvbnRlbnRDb21wb25lbnQoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHJpZ2dlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdHJpZ2dlcih0aGlzLmdldENvbnRlbnRDb21wb25lbnQoKSk7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgdGhpcy5jb25maWdbbG9hZGluZ0tleV0gPSB0cnVlO1xuICAgICAgICBsZXQgZG9DbG9zZTogYm9vbGVhbiB8IHZvaWQgfCB7fSA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRvQ2xvc2UgPSBhd2FpdCByZXN1bHQ7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5jb25maWdbbG9hZGluZ0tleV0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNsb3NlV2hpdFJlc3VsdChkb0Nsb3NlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbG9zZVdoaXRSZXN1bHQocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlV2hpdFJlc3VsdChyZXN1bHQ6IE56U2FmZUFueSk6IHZvaWQge1xuICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgX2ZpbmlzaERpYWxvZ0Nsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSBOek1vZGFsU3RhdGUuQ0xPU0VEO1xuICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gIH1cbn1cbiJdfQ==