UNPKG

@bimeister/pupakit.forms

Version:
159 lines 22.9 kB
import { Directive, EventEmitter, Output } from '@angular/core'; import { NgControl } from '@angular/forms'; import '@bimeister/pupakit.common'; import { isEmpty, isNil } from '@bimeister/utilities'; import { Subscription } from 'rxjs'; import '../../interfaces/select-state-service-declaration.interface'; import '../../types/on-change-callback.type'; import '../../types/on-touched-callback.type'; import '../../types/select-outer-value.type'; import '../../types/select-size.type'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; export class SelectBase { constructor(selectStateService, ngControl) { this.selectStateService = selectStateService; this.invalidTooltipHideOnHover = false; this.invalidTooltipDisabled = false; this.invalidTooltip = null; this.invalidTooltipContentTemplate = null; this.isTriggerTouched$ = this.selectStateService.isTriggerTouched$; this.focus = new EventEmitter(); this.blur = new EventEmitter(); this.reset = this.selectStateService.resetOutput; this.subscription = new Subscription(); if (isNil(ngControl)) { return; } ngControl.valueAccessor = this; this.selectStateService.setControlRef(ngControl); this.subscription.add(this.handleIsExpandedChangesToEmitFocusEvents()); } processCloseEvent() { this.selectStateService.collapse(); } resetIsTriggerTouchedState() { this.selectStateService.setIsTriggerTouchedState(false); } ngOnChanges(changes) { this.processIsMultiSelectionEnabledValueChange(changes?.isMultiSelectionEnabled); this.processIsUnselectionEnabledValueChange(changes?.isUnselectionEnabled); this.processIsPatchedValueChange(changes?.isPatched); this.processPlaceholderValueChange(changes?.placeholder); this.processWithResetChange(changes?.withReset); this.processInlineChange(changes?.inline); this.processSizeChange(changes?.size); this.processInvalidTooltipHideOnHoverChange(changes?.invalidTooltipHideOnHover); this.processInvalidTooltipDisabledChange(changes?.invalidTooltipDisabled); this.processInvalidTooltipChange(changes?.invalidTooltip); this.processInvalidTooltipContentTemplateChange(changes?.invalidTooltipContentTemplate); } ngOnDestroy() { this.subscription.unsubscribe(); } writeValue(newValue) { this.selectStateService.setValue(newValue); this.selectStateService.setIsFilled(!isEmpty(newValue)); } registerOnChange(onChange) { this.selectStateService.defineOnChangeCallback(onChange); } registerOnTouched(onTouched) { this.selectStateService.defineOnTouchedCallback(onTouched); } setDisabledState(isDisabled) { this.selectStateService.setDisabledState(isDisabled); } processIsMultiSelectionEnabledValueChange(change) { const updatedState = change?.currentValue; if (isNil(updatedState)) { return; } this.selectStateService.setMultiSelectionState(Boolean(updatedState)); } processIsUnselectionEnabledValueChange(change) { const updatedState = change?.currentValue; if (isNil(updatedState)) { return; } this.selectStateService.setUnselectionState(Boolean(updatedState)); } processIsPatchedValueChange(change) { const updatedState = change?.currentValue; if (isNil(updatedState)) { return; } this.selectStateService.setIsPatchedState(Boolean(updatedState)); } processPlaceholderValueChange(change) { const updatedState = change?.currentValue; if (isNil(updatedState)) { return; } this.selectStateService.setPlaceholderState(updatedState); } processWithResetChange(change) { const updatedValue = change?.currentValue; if (isNil(updatedValue)) { return; } this.selectStateService.setWithResetState(updatedValue); } processInlineChange(change) { const updatedValue = change?.currentValue; if (isNil(updatedValue)) { return; } this.selectStateService.setInlineState(updatedValue); } processSizeChange(change) { const updatedValue = change?.currentValue; if (isNil(updatedValue)) { return; } this.selectStateService.setSizeState(updatedValue); } processInvalidTooltipHideOnHoverChange(change) { const updatedValue = change?.currentValue; if (isNil(updatedValue)) { return; } this.selectStateService.setInvalidTooltipHideOnHoverState(updatedValue); } processInvalidTooltipDisabledChange(change) { const updatedValue = change?.currentValue; if (isNil(updatedValue)) { return; } this.selectStateService.setInvalidTooltipDisabledState(updatedValue); } processInvalidTooltipChange(change) { const updatedValue = change?.currentValue; if (isNil(updatedValue)) { return; } this.selectStateService.setInvalidTooltipState(updatedValue); } processInvalidTooltipContentTemplateChange(change) { const updatedValue = change?.currentValue; if (isNil(updatedValue)) { return; } this.selectStateService.setInvalidTooltipContentTemplateState(updatedValue); } handleIsExpandedChangesToEmitFocusEvents() { return this.selectStateService.isExpanded$.subscribe((isExpanded) => isExpanded ? this.focus.emit() : this.blur.emit()); } } SelectBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); SelectBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: SelectBase, outputs: { focus: "focus", blur: "blur", reset: "reset" }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectBase, decorators: [{ type: Directive }], ctorParameters: function () { return [{ type: undefined }, { type: i1.NgControl }]; }, propDecorators: { focus: [{ type: Output }], blur: [{ type: Output }], reset: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWJhc2UuYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGVjbGFyYXRpb25zL2NsYXNzZXMvYWJzdHJhY3Qvc2VsZWN0LWJhc2UuYWJzdHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQXdCLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQWtELDJCQUEyQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFZLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUE4Qyw2REFBNkQsQ0FBQztBQUM1RyxPQUFpQyxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFrQyxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFpQyxxQ0FBcUMsQ0FBQztBQUN2RSxPQUEyQiw4QkFBOEIsQ0FBQzs7O0FBRzFELE1BQU0sT0FBZ0IsVUFBVTtJQXNCOUIsWUFBK0Isa0JBQW9ELEVBQUUsU0FBb0I7UUFBMUUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFrQztRQWI1RSw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFDM0MsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLG1CQUFjLEdBQXFCLElBQUksQ0FBQztRQUN4QyxrQ0FBNkIsR0FBbUMsSUFBSSxDQUFDO1FBRTVELHNCQUFpQixHQUF3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUM7UUFFekUsVUFBSyxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3JELFNBQUksR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNwRCxVQUFLLEdBQXVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7UUFFekUsaUJB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QUMsU0FBUyxDQUFDLENBQUMsVUFBbUIsRUFBRSxFQUFFLENBQzNFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FDbEQsQ0FBQztJQUNKLENBQUM7O3dHQWhNbUIsVUFBVTs0RkFBVixVQUFVOzRGQUFWLFVBQVU7a0JBRC9CLFNBQVM7cUhBaUJrQixLQUFLO3NCQUE5QixNQUFNO2dCQUNtQixJQUFJO3NCQUE3QixNQUFNO2dCQUNtQixLQUFLO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q2hhbmdlLCBDb21wb25lbnRDaGFuZ2VzIH0gZnJvbSAnQGJpbWVpc3Rlci9wdXBha2l0LmNvbW1vbic7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCwgTnVsbGFibGUgfSBmcm9tICdAYmltZWlzdGVyL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlbGVjdFN0YXRlU2VydmljZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZWxlY3Qtc3RhdGUtc2VydmljZS1kZWNsYXJhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT25DaGFuZ2VDYWxsYmFjayB9IGZyb20gJy4uLy4uL3R5cGVzL29uLWNoYW5nZS1jYWxsYmFjay50eXBlJztcbmltcG9ydCB7IE9uVG91Y2hlZENhbGxiYWNrIH0gZnJvbSAnLi4vLi4vdHlwZXMvb24tdG91Y2hlZC1jYWxsYmFjay50eXBlJztcbmltcG9ydCB7IFNlbGVjdE91dGVyVmFsdWUgfSBmcm9tICcuLi8uLi90eXBlcy9zZWxlY3Qtb3V0ZXItdmFsdWUudHlwZSc7XG5pbXBvcnQgeyBTZWxlY3RTaXplIH0gZnJvbSAnLi4vLi4vdHlwZXMvc2VsZWN0LXNpemUudHlwZSc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlbGVjdEJhc2U8VD4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwdWJsaWMgYWJzdHJhY3QgaXNNdWx0aVNlbGVjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBhYnN0cmFjdCBpc1Vuc2VsZWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcbiAgcHVibGljIGFic3RyYWN0IGlzUGF0Y2hlZDogYm9vbGVhbjtcbiAgcHVibGljIGFic3RyYWN0IHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCB3aXRoUmVzZXQ6IGJvb2xlYW47XG4gIHB1YmxpYyBhYnN0cmFjdCBpbmxpbmU6IGJvb2xlYW47XG4gIHB1YmxpYyBhYnN0cmFjdCBzaXplOiBTZWxlY3RTaXplO1xuXG4gIHB1YmxpYyBpbnZhbGlkVG9vbHRpcEhpZGVPbkhvdmVyOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpbnZhbGlkVG9vbHRpcERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpbnZhbGlkVG9vbHRpcDogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBpbnZhbGlkVG9vbHRpcENvbnRlbnRUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4+ID0gbnVsbDtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNUcmlnZ2VyVG91Y2hlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5pc1RyaWdnZXJUb3VjaGVkJDtcblxuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGZvY3VzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYmx1cjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHJlc2V0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5yZXNldE91dHB1dDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RTdGF0ZVNlcnZpY2U6IFNlbGVjdFN0YXRlU2VydmljZURlY2xhcmF0aW9uPFQ+LCBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xuICAgIGlmIChpc05pbChuZ0NvbnRyb2wpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcblxuICAgIHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLnNldENvbnRyb2xSZWYobmdDb250cm9sKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmhhbmRsZUlzRXhwYW5kZWRDaGFuZ2VzVG9FbWl0Rm9jdXNFdmVudHMoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc0Nsb3NlRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UuY29sbGFwc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldElzVHJpZ2dlclRvdWNoZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zZXRJc1RyaWdnZXJUb3VjaGVkU3RhdGUoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IENvbXBvbmVudENoYW5nZXM8dGhpcz4pOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NJc011bHRpU2VsZWN0aW9uRW5hYmxlZFZhbHVlQ2hhbmdlKGNoYW5nZXM/LmlzTXVsdGlTZWxlY3Rpb25FbmFibGVkKTtcbiAgICB0aGlzLnByb2Nlc3NJc1Vuc2VsZWN0aW9uRW5hYmxlZFZhbHVlQ2hhbmdlKGNoYW5nZXM/LmlzVW5zZWxlY3Rpb25FbmFibGVkKTtcbiAgICB0aGlzLnByb2Nlc3NJc1BhdGNoZWRWYWx1ZUNoYW5nZShjaGFuZ2VzPy5pc1BhdGNoZWQpO1xuICAgIHRoaXMucHJvY2Vzc1BsYWNlaG9sZGVyVmFsdWVDaGFuZ2UoY2hhbmdlcz8ucGxhY2Vob2xkZXIpO1xuICAgIHRoaXMucHJvY2Vzc1dpdGhSZXNldENoYW5nZShjaGFuZ2VzPy53aXRoUmVzZXQpO1xuICAgIHRoaXMucHJvY2Vzc0lubGluZUNoYW5nZShjaGFuZ2VzPy5pbmxpbmUpO1xuICAgIHRoaXMucHJvY2Vzc1NpemVDaGFuZ2UoY2hhbmdlcz8uc2l6ZSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnZhbGlkVG9vbHRpcEhpZGVPbkhvdmVyQ2hhbmdlKGNoYW5nZXM/LmludmFsaWRUb29sdGlwSGlkZU9uSG92ZXIpO1xuICAgIHRoaXMucHJvY2Vzc0ludmFsaWRUb29sdGlwRGlzYWJsZWRDaGFuZ2UoY2hhbmdlcz8uaW52YWxpZFRvb2x0aXBEaXNhYmxlZCk7XG4gICAgdGhpcy5wcm9jZXNzSW52YWxpZFRvb2x0aXBDaGFuZ2UoY2hhbmdlcz8uaW52YWxpZFRvb2x0aXApO1xuICAgIHRoaXMucHJvY2Vzc0ludmFsaWRUb29sdGlwQ29udGVudFRlbXBsYXRlQ2hhbmdlKGNoYW5nZXM/LmludmFsaWRUb29sdGlwQ29udGVudFRlbXBsYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUobmV3VmFsdWU6IFNlbGVjdE91dGVyVmFsdWU8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2Uuc2V0SXNGaWxsZWQoIWlzRW1wdHkobmV3VmFsdWUpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBPbkNoYW5nZUNhbGxiYWNrPFNlbGVjdE91dGVyVmFsdWU8VD4+KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UuZGVmaW5lT25DaGFuZ2VDYWxsYmFjayhvbkNoYW5nZSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBPblRvdWNoZWRDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLmRlZmluZU9uVG91Y2hlZENhbGxiYWNrKG9uVG91Y2hlZCk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2Uuc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lzTXVsdGlTZWxlY3Rpb25FbmFibGVkVmFsdWVDaGFuZ2UoY2hhbmdlOiBDb21wb25lbnRDaGFuZ2U8dGhpcywgYm9vbGVhbj4pOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVkU3RhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjaGFuZ2U/LmN1cnJlbnRWYWx1ZTtcblxuICAgIGlmIChpc05pbCh1cGRhdGVkU3RhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2Uuc2V0TXVsdGlTZWxlY3Rpb25TdGF0ZShCb29sZWFuKHVwZGF0ZWRTdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSXNVbnNlbGVjdGlvbkVuYWJsZWRWYWx1ZUNoYW5nZShjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBib29sZWFuPik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRTdGF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGNoYW5nZT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGlzTmlsKHVwZGF0ZWRTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zZXRVbnNlbGVjdGlvblN0YXRlKEJvb2xlYW4odXBkYXRlZFN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NJc1BhdGNoZWRWYWx1ZUNoYW5nZShjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBib29sZWFuPik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRTdGF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGNoYW5nZT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGlzTmlsKHVwZGF0ZWRTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zZXRJc1BhdGNoZWRTdGF0ZShCb29sZWFuKHVwZGF0ZWRTdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUGxhY2Vob2xkZXJWYWx1ZUNoYW5nZShjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZFN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBjaGFuZ2U/LmN1cnJlbnRWYWx1ZTtcblxuICAgIGlmIChpc05pbCh1cGRhdGVkU3RhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2Uuc2V0UGxhY2Vob2xkZXJTdGF0ZSh1cGRhdGVkU3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzV2l0aFJlc2V0Q2hhbmdlKGNoYW5nZTogQ29tcG9uZW50Q2hhbmdlPHRoaXMsIGJvb2xlYW4+KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZFZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY2hhbmdlPy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAoaXNOaWwodXBkYXRlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zZXRXaXRoUmVzZXRTdGF0ZSh1cGRhdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSW5saW5lQ2hhbmdlKGNoYW5nZTogQ29tcG9uZW50Q2hhbmdlPHRoaXMsIGJvb2xlYW4+KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZFZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY2hhbmdlPy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAoaXNOaWwodXBkYXRlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLnNldElubGluZVN0YXRlKHVwZGF0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTaXplQ2hhbmdlKGNoYW5nZTogQ29tcG9uZW50Q2hhbmdlPHRoaXMsIFNlbGVjdFNpemU+KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZFZhbHVlOiBTZWxlY3RTaXplIHwgdW5kZWZpbmVkID0gY2hhbmdlPy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAoaXNOaWwodXBkYXRlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLnNldFNpemVTdGF0ZSh1cGRhdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSW52YWxpZFRvb2x0aXBIaWRlT25Ib3ZlckNoYW5nZShjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBib29sZWFuPik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGNoYW5nZT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGlzTmlsKHVwZGF0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zZXRJbnZhbGlkVG9vbHRpcEhpZGVPbkhvdmVyU3RhdGUodXBkYXRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0ludmFsaWRUb29sdGlwRGlzYWJsZWRDaGFuZ2UoY2hhbmdlOiBDb21wb25lbnRDaGFuZ2U8dGhpcywgYm9vbGVhbj4pOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVkVmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjaGFuZ2U/LmN1cnJlbnRWYWx1ZTtcblxuICAgIGlmIChpc05pbCh1cGRhdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2Uuc2V0SW52YWxpZFRvb2x0aXBEaXNhYmxlZFN0YXRlKHVwZGF0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NJbnZhbGlkVG9vbHRpcENoYW5nZShjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBOdWxsYWJsZTxzdHJpbmc+Pik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZTogTnVsbGFibGU8c3RyaW5nPiB8IHVuZGVmaW5lZCA9IGNoYW5nZT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGlzTmlsKHVwZGF0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zZXRJbnZhbGlkVG9vbHRpcFN0YXRlKHVwZGF0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NJbnZhbGlkVG9vbHRpcENvbnRlbnRUZW1wbGF0ZUNoYW5nZShcbiAgICBjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBOdWxsYWJsZTxUZW1wbGF0ZVJlZjx1bmtub3duPj4+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4+IHwgdW5kZWZpbmVkID0gY2hhbmdlPy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAoaXNOaWwodXBkYXRlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLnNldEludmFsaWRUb29sdGlwQ29udGVudFRlbXBsYXRlU3RhdGUodXBkYXRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSXNFeHBhbmRlZENoYW5nZXNUb0VtaXRGb2N1c0V2ZW50cygpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5pc0V4cGFuZGVkJC5zdWJzY3JpYmUoKGlzRXhwYW5kZWQ6IGJvb2xlYW4pID0+XG4gICAgICBpc0V4cGFuZGVkID8gdGhpcy5mb2N1cy5lbWl0KCkgOiB0aGlzLmJsdXIuZW1pdCgpXG4gICAgKTtcbiAgfVxufVxuIl19