UNPKG

@tarienna/ng-tri-state-checkbox

Version:
222 lines 24.3 kB
import { __decorate, __values } from "tslib"; import { Component, ElementRef, forwardRef, Input, OnDestroy, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { TriStateCheckboxState } from './tri-state-checkbox.types'; var NgTriStateCheckboxComponent = /** @class */ (function () { function NgTriStateCheckboxComponent(renderer) { this.renderer = renderer; this.checkboxClass = 'tri-state-checkbox-default'; this._isDisabled = false; this.controls = new Map(); this.currentState = TriStateCheckboxState.NONE; this.onChanged = function (_) { }; this.onTouched = function () { }; } NgTriStateCheckboxComponent_1 = NgTriStateCheckboxComponent; NgTriStateCheckboxComponent.prototype.ngOnDestroy = function () { this.controls.clear(); }; NgTriStateCheckboxComponent.prototype.registerOnChange = function (fn) { if (typeof fn === 'function') { this.onChanged = fn; } else { this.onChanged = function (_) { }; } }; NgTriStateCheckboxComponent.prototype.registerOnTouched = function (fn) { if (typeof fn === 'function') { this.onTouched = fn; } else { this.onTouched = function () { }; } }; NgTriStateCheckboxComponent.prototype.setDisabledState = function (isDisabled) { var e_1, _a; this._isDisabled = isDisabled; try { for (var _b = __values(this.controls.keys()), _c = _b.next(); !_c.done; _c = _b.next()) { var currentControl = _c.value; currentControl.setDisabled(isDisabled); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } }; Object.defineProperty(NgTriStateCheckboxComponent.prototype, "isDisabled", { get: function () { return this._isDisabled; }, enumerable: true, configurable: true }); NgTriStateCheckboxComponent.prototype.addControl = function (control) { var _this = this; if (!!control) { this.controls.set(control, control.readValue()); this.refreshState(); setTimeout(function () { _this.emitValueChanged(); }); } }; NgTriStateCheckboxComponent.prototype.removeControl = function (control) { var _this = this; this.controls.delete(control); this.refreshState(); setTimeout(function () { _this.emitValueChanged(); }); }; NgTriStateCheckboxComponent.prototype.changeControlValue = function (control, value) { this.controls.set(control, value); this.refreshState(); this.emitValueChanged(); }; NgTriStateCheckboxComponent.prototype.refreshState = function () { this.currentState = this.getState(); this.refreshCheckboxState(); }; NgTriStateCheckboxComponent.prototype.getState = function () { var e_2, _a; var anyWasFalse = false; var result = TriStateCheckboxState.NONE; try { for (var _b = __values(this.controls.values()), _c = _b.next(); !_c.done; _c = _b.next()) { var currentValue = _c.value; if (!!currentValue) { result = TriStateCheckboxState.SOME; } if (!currentValue) { anyWasFalse = true; } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_2) throw e_2.error; } } if (!anyWasFalse && result === TriStateCheckboxState.SOME) { result = TriStateCheckboxState.ALL; } return result; }; NgTriStateCheckboxComponent.prototype.onClick = function () { var currentState = this.getState(); if (currentState === TriStateCheckboxState.SOME || currentState === TriStateCheckboxState.ALL) { // gets unselected this.writeAllControlValues(false); this.currentState = TriStateCheckboxState.NONE; } else if (currentState === TriStateCheckboxState.NONE) { this.writeAllControlValues(true); this.currentState = TriStateCheckboxState.ALL; } this.refreshCheckboxState(); this.emitValueChanged(); }; NgTriStateCheckboxComponent.prototype.writeAllControlValues = function (nValue) { var e_3, _a; try { for (var _b = __values(this.controls.keys()), _c = _b.next(); !_c.done; _c = _b.next()) { var currentControl = _c.value; if (currentControl) { currentControl.writeValue(nValue); } } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_3) throw e_3.error; } } }; NgTriStateCheckboxComponent.prototype.refreshCheckboxState = function () { if (this.customCheckbox && this.customCheckbox.nativeElement) { var checked = false; var indeterminate = false; if (this.currentState === TriStateCheckboxState.ALL) { checked = true; indeterminate = false; } else if (this.currentState === TriStateCheckboxState.SOME) { checked = true; indeterminate = true; } this.renderer.setProperty(this.customCheckbox.nativeElement, 'checked', checked); // Browser Support for indeterminate: https://caniuse.com/#search=indeterminate this.customCheckbox.nativeElement.indeterminate = indeterminate; } }; NgTriStateCheckboxComponent.prototype.emitValueChanged = function () { var e_4, _a; var values = []; try { for (var _b = __values(this.controls.values()), _c = _b.next(); !_c.done; _c = _b.next()) { var value = _c.value; if (!!value) { values.push(value); } } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_4) throw e_4.error; } } this.onChanged(values); this.onTouched(); }; NgTriStateCheckboxComponent.prototype.reset = function () { this.writeAllControlValues(false); this.refreshState(); this.emitValueChanged(); }; NgTriStateCheckboxComponent.prototype.writeValue = function (obj) { if (!!obj && obj.hasOwnProperty('length') && obj.length > 0) { console.warn('It\'s currently not possible to set values. Maybe later there is a solution to do that.'); } }; var NgTriStateCheckboxComponent_1; NgTriStateCheckboxComponent.ctorParameters = function () { return [ { type: Renderer2 } ]; }; __decorate([ Input() ], NgTriStateCheckboxComponent.prototype, "checkboxClass", void 0); __decorate([ ViewChild('customCheckbox', { static: false }) ], NgTriStateCheckboxComponent.prototype, "customCheckbox", void 0); NgTriStateCheckboxComponent = NgTriStateCheckboxComponent_1 = __decorate([ Component({ selector: 'ng-tri-state-checkbox', template: "<input type=\"checkbox\" [class]=\"checkboxClass\" (change)=\"onClick()\" #customCheckbox [disabled]=\"isDisabled\">\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return NgTriStateCheckboxComponent_1; }), multi: true } ], exportAs: 'ngTriStateCheckbox', encapsulation: ViewEncapsulation.None, styles: [".tri-state-checkbox-default{height:1rem;width:1rem;display:block;position:relative;pointer-events:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-image:none;border:1px solid #adb5bd;border-radius:.15rem;box-sizing:border-box}.tri-state-checkbox-default:checked:not(:indeterminate){background-color:#0099da;color:#fff}.tri-state-checkbox-default:checked:not(:indeterminate):after{content:\"\";display:block;position:absolute;top:-1px;left:-1px;width:1rem;height:1rem;pointer-events:none;color:#fff;background-color:#0099da;background-repeat:no-repeat;background-size:50% 50%;background-position:50%;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");border:1px solid #0099da;border-radius:.15rem}.tri-state-checkbox-default:indeterminate{background-color:#fff;color:#adb5bd;border-color:#0099da}.tri-state-checkbox-default:indeterminate:after{content:\"\";display:block;position:absolute;top:calc(.225rem - 1px);left:calc(.225rem - 1px);width:.55rem;height:.55rem;pointer-events:none;background-color:#0099da;border:1px solid #0099da;border-radius:.15rem}"] }) ], NgTriStateCheckboxComponent); return NgTriStateCheckboxComponent; }()); export { NgTriStateCheckboxComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdHJpLXN0YXRlLWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YXJpZW5uYS9uZy10cmktc3RhdGUtY2hlY2tib3gvIiwic291cmNlcyI6WyJsaWIvbmctdHJpLXN0YXRlLWNoZWNrYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFrRCxNQUFNLDRCQUE0QixDQUFDO0FBZ0JuSDtJQWdCSSxxQ0FBc0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWR6QyxrQkFBYSxHQUFHLDRCQUE0QixDQUFDO1FBRXJDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGFBQVEsR0FBdUMsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFFeEYsaUJBQVksR0FBMEIscUJBQXFCLENBQUMsSUFBSSxDQUFDO1FBS2pFLGNBQVMsR0FBcUIsVUFBQyxDQUFNLElBQU0sQ0FBQyxDQUFDO1FBQzdDLGNBQVMsR0FBZSxjQUFPLENBQUMsQ0FBQztJQUVXLENBQUM7b0NBaEJwQywyQkFBMkI7SUFrQnBDLGlEQUFXLEdBQVg7UUFDSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxzREFBZ0IsR0FBaEIsVUFBaUIsRUFBTztRQUNwQixJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztTQUN2QjthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFDLENBQU0sSUFBTSxDQUFD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cUM7SUFTN0M7UUFEQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7dUVBQ3BCO0lBWGxCLDJCQUEyQjtRQWR2QyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLGtJQUFxRDtZQUVyRCxTQUFTLEVBQUU7Z0JBQ1A7b0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsNkJBQTJCLEVBQTNCLENBQTJCLENBQUM7b0JBQzFELEtBQUssRUFBRSxJQUFJO2lCQUNkO2FBQ0o7WUFDRCxRQUFRLEVBQUUsb0JBQW9CO1lBQzlCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOztTQUN4QyxDQUFDO09BQ1csMkJBQTJCLENBaUt2QztJQUFELGtDQUFDO0NBQUEsQUFqS0QsSUFpS0M7U0FqS1ksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyaVN0YXRlQ2hlY2tib3hTdGF0ZSwgSVRyaVN0YXRlQ2hlY2tib3hDb250cm9sLCBJVHJpQ2hlY2tib3hSZWdpc3RlciB9IGZyb20gJy4vdHJpLXN0YXRlLWNoZWNrYm94LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZy10cmktc3RhdGUtY2hlY2tib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZy10cmktc3RhdGUtY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25nLXRyaS1zdGF0ZS1jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5nVHJpU3RhdGVDaGVja2JveENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBleHBvcnRBczogJ25nVHJpU3RhdGVDaGVja2JveCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ1RyaVN0YXRlQ2hlY2tib3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJVHJpQ2hlY2tib3hSZWdpc3RlciB7XG4gICAgQElucHV0KClcbiAgICBjaGVja2JveENsYXNzID0gJ3RyaS1zdGF0ZS1jaGVja2JveC1kZWZhdWx0JztcblxuICAgIHByaXZhdGUgX2lzRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnRyb2xzOiBNYXA8SVRyaVN0YXRlQ2hlY2tib3hDb250cm9sLCBhbnk+ID0gbmV3IE1hcDxJVHJpU3RhdGVDaGVja2JveENvbnRyb2wsIGFueT4oKTtcblxuICAgIGN1cnJlbnRTdGF0ZTogVHJpU3RhdGVDaGVja2JveFN0YXRlID0gVHJpU3RhdGVDaGVja2JveFN0YXRlLk5PTkU7XG5cbiAgICBAVmlld0NoaWxkKCdjdXN0b21DaGVja2JveCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGN1c3RvbUNoZWNrYm94OiBFbGVtZW50UmVmO1xuXG4gICAgb25DaGFuZ2VkOiAoXzogYW55KSA9PiB2b2lkID0gKF86IGFueSkgPT4ge307XG4gICAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2xzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkID0gZm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZCA9IChfOiBhbnkpID0+IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Q29udHJvbCBvZiB0aGlzLmNvbnRyb2xzLmtleXMoKSkge1xuICAgICAgICAgICAgY3VycmVudENvbnRyb2wuc2V0RGlzYWJsZWQoaXNEaXNhYmxlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgaXNEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgYWRkQ29udHJvbChjb250cm9sOiBJVHJpU3RhdGVDaGVja2JveENvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9scy5zZXQoY29udHJvbCwgY29udHJvbC5yZWFkVmFsdWUoKSk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTdGF0ZSgpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUNvbnRyb2woY29udHJvbDogSVRyaVN0YXRlQ2hlY2tib3hDb250cm9sKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udHJvbHMuZGVsZXRlKGNvbnRyb2wpO1xuICAgICAgICB0aGlzLnJlZnJlc2hTdGF0ZSgpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDb250cm9sVmFsdWUoY29udHJvbDogSVRyaVN0YXRlQ2hlY2tib3hDb250cm9sLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuY29udHJvbHMuc2V0KGNvbnRyb2wsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU3RhdGUoKTtcbiAgICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaFN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ2hlY2tib3hTdGF0ZSgpO1xuICAgIH1cblxuICAgIGdldFN0YXRlKCk6IFRyaVN0YXRlQ2hlY2tib3hTdGF0ZSB7XG4gICAgICAgIGxldCBhbnlXYXNGYWxzZSA9IGZhbHNlO1xuICAgICAgICBsZXQgcmVzdWx0OiBUcmlTdGF0ZUNoZWNrYm94U3RhdGUgPSBUcmlTdGF0ZUNoZWNrYm94U3RhdGUuTk9ORTtcblxuICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRWYWx1ZSBvZiB0aGlzLmNvbnRyb2xzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoISFjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBUcmlTdGF0ZUNoZWNrYm94U3RhdGUuU09NRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYW55V2FzRmFsc2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbnlXYXNGYWxzZSAmJiByZXN1bHQgPT09IFRyaVN0YXRlQ2hlY2tib3hTdGF0ZS5TT01FKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBUcmlTdGF0ZUNoZWNrYm94U3RhdGUuQUxMO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBvbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT09IFRyaVN0YXRlQ2hlY2tib3hTdGF0ZS5TT01FIHx8IGN1cnJlbnRTdGF0ZSA9PT0gVHJpU3RhdGVDaGVja2JveFN0YXRlLkFMTCkge1xuICAgICAgICAgICAgLy8gZ2V0cyB1bnNlbGVjdGVkXG4gICAgICAgICAgICB0aGlzLndyaXRlQWxsQ29udHJvbFZhbHVlcyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IFRyaVN0YXRlQ2hlY2tib3hTdGF0ZS5OT05FO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0ZSA9PT0gVHJpU3RhdGVDaGVja2JveFN0YXRlLk5PTkUpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVBbGxDb250cm9sVmFsdWVzKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSBUcmlTdGF0ZUNoZWNrYm94U3RhdGUuQUxMO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaENoZWNrYm94U3RhdGUoKTtcbiAgICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlQWxsQ29udHJvbFZhbHVlcyhuVmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Q29udHJvbCBvZiB0aGlzLmNvbnRyb2xzLmtleXMoKSkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudENvbnRyb2wud3JpdGVWYWx1ZShuVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVmcmVzaENoZWNrYm94U3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUNoZWNrYm94ICYmIHRoaXMuY3VzdG9tQ2hlY2tib3gubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBpbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RhdGUgPT09IFRyaVN0YXRlQ2hlY2tib3hTdGF0ZS5BTEwpIHtcbiAgICAgICAgICAgICAgICBjaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFN0YXRlID09PSBUcmlTdGF0ZUNoZWNrYm94U3RhdGUuU09NRSkge1xuICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmN1c3RvbUNoZWNrYm94Lm5hdGl2ZUVsZW1lbnQsICdjaGVja2VkJywgY2hlY2tlZCk7XG5cbiAgICAgICAgICAgIC8vIEJyb3dzZXIgU3VwcG9ydCBmb3IgaW5kZXRlcm1pbmF0ZTogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jc2VhcmNoPWluZGV0ZXJtaW5hdGVcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ2hlY2tib3gubmF0aXZlRWxlbWVudC5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVtaXRWYWx1ZUNoYW5nZWQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMuY29udHJvbHMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZWQodmFsdWVzKTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZUFsbENvbnRyb2xWYWx1ZXMoZmFsc2UpO1xuICAgICAgICB0aGlzLnJlZnJlc2hTdGF0ZSgpO1xuICAgICAgICB0aGlzLmVtaXRWYWx1ZUNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghIW9iaiAmJiBvYmouaGFzT3duUHJvcGVydHkoJ2xlbmd0aCcpICYmIG9iai5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0l0XFwncyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIHNldCB2YWx1ZXMuIE1heWJlIGxhdGVyIHRoZXJlIGlzIGEgc29sdXRpb24gdG8gZG8gdGhhdC4nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==