e5core-angular-ui
Version:
e5 Anywhere Angular UI
177 lines • 19.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { UiSearchDefinitionService } from 'e5core-angular-services';
import { FieldDataType } from '../../enums/field-data-type';
import { UiStyleService } from '../../services/ui-style.service';
import { SearchDeliveryService } from '../../services/search-delivery.service';
export class E5coreUiSearchFormComponent {
/**
* @param {?} style
* @param {?} searchDeliveryService
* @param {?} search
* @param {?} cd
*/
constructor(style, searchDeliveryService, search, cd) {
this.style = style;
this.searchDeliveryService = searchDeliveryService;
this.search = search;
this.cd = cd;
this.queryChange = new EventEmitter();
}
/**
* @return {?}
*/
ngOnInit() {
if (this.searchForm$ == null) {
console.error('e5core-ui-search-form [searchForm$] must have a BehaviorSubject<SearchFormModel>');
return;
}
if (this.searchDefinitionId) {
this.searchDeliveryService.getSearchDefinition(this.searchForm$, this.searchDefinitionId).subscribe(s => {
this.applyDefaultValues(this.defaultValues);
}, error => {
this.errorMessage = error.message || "Unable to get data from server.";
console.error(error);
this.cd.markForCheck();
});
}
else {
console.warn("e5core-ui-search-form searchId is missing. Expecting one later...");
}
this.searchForm$.subscribe(searchModel => {
this.errorMessage = "";
this.zones = (searchModel) ? searchModel.zones : undefined;
this.zoneTemplateId = (searchModel && searchModel.zoneTemplateId) ? searchModel.zoneTemplateId.toUpperCase() : "";
this.cd.markForCheck();
this.queryChange.emit(this.createDataSourceQuery(searchModel));
});
}
/**
* @private
* @param {?} model
* @return {?}
*/
createDataSourceQuery(model) {
/** @type {?} */
let query = null;
if (model && model.properties && model.properties.length > 0) {
query = {
Expressions: model.properties
.filter(p => p.value)
.map(p => (/** @type {?} */ ({
Field: p.propertyId,
Value: p.value
})))
};
}
return (query);
}
/**
* If there are any default values on the form, then set them.
* @private
* @param {?} values the default values to use on the form
* @param {?=} reset
* @return {?}
*/
applyDefaultValues(values, reset) {
/** @type {?} */
let searchForm = (/** @type {?} */ (Object.assign({}, this.searchForm$.getValue())));
/** @type {?} */
let updated = false;
if (reset) {
searchForm.properties.forEach(p => {
p.value = undefined;
p.resolvedValue = undefined;
});
updated = true;
}
if (values) {
if (searchForm.properties) {
Object.keys(values).forEach(key => {
/** @type {?} */
let property = searchForm.properties.find(p => p.propertyId == key);
if (property) {
updated = true;
/** @type {?} */
let value = values[key];
property.value = value; // will be set to undefined if not specified
if (property.fieldDataType != FieldDataType.List && property.fieldDataType != FieldDataType.Lookup) // if it's not a list or lookup
property.resolvedValue = value;
}
});
}
}
if (updated)
this.searchForm$.next(searchForm);
}
/**
* Reset the serch form to the original default values, or clear it.
* @return {?}
*/
reset() {
this.applyDefaultValues(this.defaultValues, true /* reset */);
this.cd.markForCheck();
}
}
E5coreUiSearchFormComponent.decorators = [
{ type: Component, args: [{
selector: 'e5core-ui-search-form',
template: `
<span *ngIf="searchForm$" [ngSwitch]="style.current()">
<e5core-ui-search-form-box *ngSwitchCase='0' [searchForm$]='searchForm$' [zones]='zones' [zoneTemplateId]='zoneTemplateId'></e5core-ui-search-form-box>
<e5core-ui-search-form-bootstrap *ngSwitchCase='1' [searchForm$]='searchForm$' [zones]='zones' [zoneTemplateId]='zoneTemplateId'></e5core-ui-search-form-bootstrap>
<e5core-ui-search-form-material *ngSwitchCase='2' [searchForm$]='searchForm$' [zones]='zones' [zoneTemplateId]='zoneTemplateId'></e5core-ui-search-form-material>
</span>
<div *ngIf="!searchForm$" class="e5core-component-error"><e5core-ui-search-form> [searchForm$] must have a BehaviorSubject<SearchModel></div>
<div *ngIf="errorMessage" class="e5core-component-error"><e5core-ui-search-form> error : {{errorMessage}}</div>`,
styles: [".e5core-component-error{border-left:5px solid red;background-color:#ffbaba;color:#d8000c;padding:12px;box-sizing:content-box;border-radius:4pt;display:inline-block;font-family:Arial,Helvetica,sans-serif;margin:5pt 0}.e5-component{margin:5pt;border:solid #00f;box-sizing:content-box;padding:5pt}.e5-component .e5-title{color:#00f;font-weight:700}"]
}] }
];
/** @nocollapse */
E5coreUiSearchFormComponent.ctorParameters = () => [
{ type: UiStyleService },
{ type: SearchDeliveryService },
{ type: UiSearchDefinitionService },
{ type: ChangeDetectorRef }
];
E5coreUiSearchFormComponent.propDecorators = {
searchForm$: [{ type: Input }],
searchDefinitionId: [{ type: Input }],
defaultValues: [{ type: Input }],
queryChange: [{ type: Output }]
};
if (false) {
/** @type {?} */
E5coreUiSearchFormComponent.prototype.searchForm$;
/** @type {?} */
E5coreUiSearchFormComponent.prototype.searchDefinitionId;
/** @type {?} */
E5coreUiSearchFormComponent.prototype.defaultValues;
/** @type {?} */
E5coreUiSearchFormComponent.prototype.queryChange;
/** @type {?} */
E5coreUiSearchFormComponent.prototype.zones;
/** @type {?} */
E5coreUiSearchFormComponent.prototype.errorMessage;
/** @type {?} */
E5coreUiSearchFormComponent.prototype.zoneTemplateId;
/** @type {?} */
E5coreUiSearchFormComponent.prototype.style;
/**
* @type {?}
* @private
*/
E5coreUiSearchFormComponent.prototype.searchDeliveryService;
/** @type {?} */
E5coreUiSearchFormComponent.prototype.search;
/**
* @type {?}
* @private
*/
E5coreUiSearchFormComponent.prototype.cd;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZTVjb3JlLXVpLXNlYXJjaC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2U1Y29yZS1hbmd1bGFyLXVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZTVjb3JlLXVpLXNlYXJjaC1mb3JtL2U1Y29yZS11aS1zZWFyY2gtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUEyQixpQkFBaUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFxQix5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFlL0UsTUFBTSxPQUFPLDJCQUEyQjs7Ozs7OztJQVd2QyxZQUNRLEtBQXFCLEVBQ3BCLHFCQUE0QyxFQUM3QyxNQUFnQyxFQUMvQixFQUFxQjtRQUh0QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNwQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzdDLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBVnBCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUE7SUFXM0QsQ0FBQzs7OztJQUVELFFBQVE7UUFDUCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0ZBQWtGLENBQUMsQ0FBQztZQUNsRyxPQUFPO1NBQ1A7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZ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ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVSVNlYXJjaFpvbmVNb2RlbCwgVWlTZWFyY2hEZWZpbml0aW9uU2VydmljZSB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IFNlYXJjaEZvcm1Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zZWFyY2gtZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvZmllbGQtZGF0YS10eXBlJztcbmltcG9ydCB7IERhdGFTb3VyY2VRdWVyeSwgUXVlcnlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9kYXRhLXNvdXJjZS1xdWVyeSc7XG5pbXBvcnQgeyBVaVN0eWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VpLXN0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoRGVsaXZlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VhcmNoLWRlbGl2ZXJ5LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdlNWNvcmUtdWktc2VhcmNoLWZvcm0nLFxuXHRzdHlsZVVybHM6IFsnLi8uLi8uLi9jc3MvZGVmYXVsdC5jc3MnXSxcblx0dGVtcGxhdGU6IGBcbiAgPHNwYW4gKm5nSWY9XCJzZWFyY2hGb3JtJFwiIFtuZ1N3aXRjaF09XCJzdHlsZS5jdXJyZW50KClcIj5cbiAgICA8ZTVjb3JlLXVpLXNlYXJjaC1mb3JtLWJveCAqbmdTd2l0Y2hDYXNlPScwJyBbc2VhcmNoRm9ybSRdPSdzZWFyY2hGb3JtJCcgW3pvbmVzXT0nem9uZXMnIFt6b25lVGVtcGxhdGVJZF09J3pvbmVUZW1wbGF0ZUlkJz48L2U1Y29yZS11aS1zZWFyY2gtZm9ybS1ib3g+XG4gICAgPGU1Y29yZS11aS1zZWFyY2gtZm9ybS1ib290c3RyYXAgKm5nU3dpdGNoQ2FzZT0nMScgW3NlYXJjaEZvcm0kXT0nc2VhcmNoRm9ybSQnIFt6b25lc109J3pvbmVzJyBbem9uZVRlbXBsYXRlSWRdPSd6b25lVGVtcGxhdGVJZCc+PC9lNWNvcmUtdWktc2VhcmNoLWZvcm0tYm9vdHN0cmFwPlxuICAgIDxlNWNvcmUtdWktc2VhcmNoLWZvcm0tbWF0ZXJpYWwgKm5nU3dpdGNoQ2FzZT0nMicgW3NlYXJjaEZvcm0kXT0nc2VhcmNoRm9ybSQnIFt6b25lc109J3pvbmVzJyBbem9uZVRlbXBsYXRlSWRdPSd6b25lVGVtcGxhdGVJZCc+PC9lNWNvcmUtdWktc2VhcmNoLWZvcm0tbWF0ZXJpYWw+XG4gIDwvc3Bhbj5cbiAgPGRpdiAqbmdJZj1cIiFzZWFyY2hGb3JtJFwiIGNsYXNzPVwiZTVjb3JlLWNvbXBvbmVudC1lcnJvclwiPiZsdDtlNWNvcmUtdWktc2VhcmNoLWZvcm0mZ3Q7IFtzZWFyY2hGb3JtJF0gbXVzdCBoYXZlIGEgQmVoYXZpb3JTdWJqZWN0Jmx0O1NlYXJjaE1vZGVsJmd0OzwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJlNWNvcmUtY29tcG9uZW50LWVycm9yXCI+Jmx0O2U1Y29yZS11aS1zZWFyY2gtZm9ybSZndDsgZXJyb3IgOiB7e2Vycm9yTWVzc2FnZX19PC9kaXY+YCxcblx0Ly9jaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBFNWNvcmVVaVNlYXJjaEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cdEBJbnB1dCgpIHNlYXJjaEZvcm0kOiBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRm9ybU1vZGVsPjtcblx0QElucHV0KCkgc2VhcmNoRGVmaW5pdGlvbklkOiBudW1iZXI7XG5cdEBJbnB1dCgpIGRlZmF1bHRWYWx1ZXM6IHsgW3M6IHN0cmluZ106IHN0cmluZzsgfTtcblx0QE91dHB1dCgpIHF1ZXJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhU291cmNlUXVlcnk+KClcblxuXHR6b25lczogVUlTZWFyY2hab25lTW9kZWxbXTtcblx0ZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cdHpvbmVUZW1wbGF0ZUlkOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIHN0eWxlOiBVaVN0eWxlU2VydmljZSwgXG5cdFx0cHJpdmF0ZSBzZWFyY2hEZWxpdmVyeVNlcnZpY2U6IFNlYXJjaERlbGl2ZXJ5U2VydmljZSwgXG5cdFx0cHVibGljIHNlYXJjaDpVaVNlYXJjaERlZmluaXRpb25TZXJ2aWNlLFxuXHRcdHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHRpZiAodGhpcy5zZWFyY2hGb3JtJCA9PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdlNWNvcmUtdWktc2VhcmNoLWZvcm0gW3NlYXJjaEZvcm0kXSBtdXN0IGhhdmUgYSBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRm9ybU1vZGVsPicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5zZWFyY2hEZWZpbml0aW9uSWQpIHtcblx0XHRcdHRoaXMuc2VhcmNoRGVsaXZlcnlTZXJ2aWNlLmdldFNlYXJjaERlZmluaXRpb24odGhpcy5zZWFyY2hGb3JtJCwgdGhpcy5zZWFyY2hEZWZpbml0aW9uSWQpLnN1YnNjcmliZShcblx0XHRcdFx0cyA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hcHBseURlZmF1bHRWYWx1ZXModGhpcy5kZWZhdWx0VmFsdWVzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZSB8fCBcIlVuYWJsZSB0byBnZXQgZGF0YSBmcm9tIHNlcnZlci5cIjtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcblx0XHRcdFx0XHR0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXCJlNWNvcmUtdWktc2VhcmNoLWZvcm0gc2VhcmNoSWQgaXMgbWlzc2luZy4gRXhwZWN0aW5nIG9uZSBsYXRlci4uLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNlYXJjaEZvcm0kLnN1YnNjcmliZShcblx0XHRcdHNlYXJjaE1vZGVsID0+IHtcblx0XHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSBcIlwiO1xuXHRcdFx0XHR0aGlzLnpvbmVzID0gKHNlYXJjaE1vZGVsKSA/IHNlYXJjaE1vZGVsLnpvbmVzIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR0aGlzLnpvbmVUZW1wbGF0ZUlkID0gKHNlYXJjaE1vZGVsICYmIHNlYXJjaE1vZGVsLnpvbmVUZW1wbGF0ZUlkKSA/IHNlYXJjaE1vZGVsLnpvbmVUZW1wbGF0ZUlkLnRvVXBwZXJDYXNlKCkgOiBcIlwiO1xuXHRcdFx0XHR0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0XHR0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQodGhpcy5jcmVhdGVEYXRhU291cmNlUXVlcnkoc2VhcmNoTW9kZWwpKTtcblx0XHRcdH1cblx0XHQpXG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZURhdGFTb3VyY2VRdWVyeShtb2RlbDogU2VhcmNoRm9ybU1vZGVsKTogRGF0YVNvdXJjZVF1ZXJ5IHtcblx0XHRsZXQgcXVlcnk6IERhdGFTb3VyY2VRdWVyeSA9IG51bGw7XG5cdFx0aWYgKG1vZGVsICYmIG1vZGVsLnByb3BlcnRpZXMgJiYgbW9kZWwucHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRxdWVyeSA9IHtcblx0XHRcdFx0RXhwcmVzc2lvbnM6IG1vZGVsLnByb3BlcnRpZXNcblx0XHRcdFx0XHQuZmlsdGVyKHAgPT4gcC52YWx1ZSlcblx0XHRcdFx0XHQubWFwPFF1ZXJ5RXhwcmVzc2lvbj4ocCA9PiA8UXVlcnlFeHByZXNzaW9uPntcblx0XHRcdFx0XHRcdEZpZWxkOiBwLnByb3BlcnR5SWQsXG5cdFx0XHRcdFx0XHRWYWx1ZTogcC52YWx1ZVxuXHRcdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAocXVlcnkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIElmIHRoZXJlIGFyZSBhbnkgZGVmYXVsdCB2YWx1ZXMgb24gdGhlIGZvcm0sIHRoZW4gc2V0IHRoZW0uXG5cdCAqIEBwYXJhbSB2YWx1ZXMgdGhlIGRlZmF1bHQgdmFsdWVzIHRvIHVzZSBvbiB0aGUgZm9ybVxuXHQgKi9cblx0cHJpdmF0ZSBhcHBseURlZmF1bHRWYWx1ZXModmFsdWVzOiB7IFtzOiBzdHJpbmddOiBzdHJpbmc7IH0sIHJlc2V0PzogYm9vbGVhbikge1xuXHRcdGxldCBzZWFyY2hGb3JtID0gPFNlYXJjaEZvcm1Nb2RlbD57IC4uLnRoaXMuc2VhcmNoRm9ybSQuZ2V0VmFsdWUoKSB9O1xuXHRcdGxldCB1cGRhdGVkID0gZmFsc2U7XG5cdFx0aWYgKHJlc2V0KSB7XG5cdFx0XHRzZWFyY2hGb3JtLnByb3BlcnRpZXMuZm9yRWFjaChwID0+IHtcblx0XHRcdFx0cC52YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0cC5yZXNvbHZlZFZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fSlcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAodmFsdWVzKSB7XG5cdFx0XHRpZiAoc2VhcmNoRm9ybS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eSA9IHNlYXJjaEZvcm0ucHJvcGVydGllcy5maW5kKHAgPT4gcC5wcm9wZXJ0eUlkID09IGtleSlcblx0XHRcdFx0XHRpZiAocHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0bGV0IHZhbHVlID0gdmFsdWVzW2tleV1cblx0XHRcdFx0XHRcdHByb3BlcnR5LnZhbHVlID0gdmFsdWU7IC8vIHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZCBpZiBub3Qgc3BlY2lmaWVkXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkuZmllbGREYXRhVHlwZSAhPSBGaWVsZERhdGFUeXBlLkxpc3QgJiYgcHJvcGVydHkuZmllbGREYXRhVHlwZSAhPSBGaWVsZERhdGFUeXBlLkxvb2t1cCkgLy8gaWYgaXQncyBub3QgYSBsaXN0IG9yIGxvb2t1cFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eS5yZXNvbHZlZFZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHVwZGF0ZWQpXG5cdFx0XHR0aGlzLnNlYXJjaEZvcm0kLm5leHQoc2VhcmNoRm9ybSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHNlcmNoIGZvcm0gdG8gdGhlIG9yaWdpbmFsIGRlZmF1bHQgdmFsdWVzLCBvciBjbGVhciBpdC5cblx0ICovXG5cdHB1YmxpYyByZXNldCgpIHtcblx0XHR0aGlzLmFwcGx5RGVmYXVsdFZhbHVlcyh0aGlzLmRlZmF1bHRWYWx1ZXMsIHRydWUgLyogcmVzZXQgKi8pO1xuXHRcdHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG5cdH1cbn1cbiJdfQ==