@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
123 lines • 19.5 kB
JavaScript
import { HeaderColumnType } from '../../header/models/header-column';
import { HeaderChangeType } from '../../header/models/user-changes/header-change-type';
import { Component } from '@angular/core';
import { SearchIndex } from '../../search/models/search-index';
import { PaginationParams } from '../../utility/pagination/pagination-params';
import { HeaderMode } from '../../header/models/header-mode';
import * as i0 from "@angular/core";
import * as i1 from "../../search/search-keyword-resolver-service/search-index-resolver.service";
export class AbstractSortableViewComponent {
_resolver;
_lastHeaderSearchState;
_preferredSortableHeaders;
_subHeader;
constructor(_resolver) {
this._resolver = _resolver;
this._lastHeaderSearchState = {
columnType: undefined,
fieldIdentifier: '',
sortDirection: '',
columnIdentifier: -1,
fieldType: undefined
};
this._preferredSortableHeaders = [];
}
ngOnDestroy() {
if (this._subHeader) {
this._subHeader.unsubscribe();
}
}
registerPreferredSortableHeaders(headers) {
this._lastHeaderSearchState.sortDirection = '';
this._preferredSortableHeaders = [];
headers.forEach(header => {
if (!header || !header.sortDirection || header.sortDirection === '') {
return;
}
this._preferredSortableHeaders.push({ propertyId: this.getPreferredSortableFieldId(header), sortDirection: header.sortDirection });
});
}
registerHeaderChange(headerChange$) {
this._subHeader = headerChange$.subscribe((header) => {
if (!header) {
return;
}
const isModeChange = header.changeType === HeaderChangeType.MODE_CHANGED;
if (isModeChange) {
const modeChange = header.description;
if (modeChange.previousMode === HeaderMode.EDIT || modeChange.previousMode === modeChange.currentMode) {
return;
}
}
if (isModeChange || header.changeType === HeaderChangeType.SORT || header.changeType === HeaderChangeType.SEARCH) {
if (header.changeType === HeaderChangeType.SORT) {
this._lastHeaderSearchState = header.description;
}
// TODO we might not need to search all the time, do some filtering
this.reload();
}
});
}
addSortParams(params) {
if (this._lastHeaderSearchState.sortDirection !== '') {
return params.set(PaginationParams.PAGE_SORT, `${this.getSortId()},${this._lastHeaderSearchState.sortDirection}`);
}
else if (this._preferredSortableHeaders.length > 0) {
this._preferredSortableHeaders.forEach(header => {
params = params.append(PaginationParams.PAGE_SORT, `${header.propertyId},${header.sortDirection}`);
});
return params;
}
else {
return params.set(PaginationParams.PAGE_SORT, this.getDefaultSortParam());
}
}
getSortId() {
if (this._lastHeaderSearchState.columnType === HeaderColumnType.META) {
return this.getMetaFieldSortId();
}
else {
switch (this._lastHeaderSearchState.fieldType) {
case 'number':
return this._resolver.getIndex(this._lastHeaderSearchState.fieldIdentifier, SearchIndex.NUMBER);
case 'date':
case 'dateTime':
return this._resolver.getIndex(this._lastHeaderSearchState.fieldIdentifier, SearchIndex.TIMESTAMP);
case 'actor':
case 'actorList':
return this._resolver.getIndex(this._lastHeaderSearchState.fieldIdentifier, SearchIndex.FULL_NAME, true);
default:
return this._resolver.getIndex(this._lastHeaderSearchState.fieldIdentifier, SearchIndex.FULLTEXT, true);
}
}
}
getPreferredSortableFieldId(column) {
if (column.type === HeaderColumnType.META) {
return this.getMetaFieldSortId(column.fieldIdentifier);
}
else {
switch (column.fieldType) {
case 'number':
return this._resolver.getIndex(column.fieldIdentifier, SearchIndex.NUMBER);
case 'date':
case 'dateTime':
return this._resolver.getIndex(column.fieldIdentifier, SearchIndex.TIMESTAMP);
case 'actor':
case 'actorList':
return this._resolver.getIndex(column.fieldIdentifier, SearchIndex.FULL_NAME, true);
default:
return this._resolver.getIndex(column.fieldIdentifier, SearchIndex.FULLTEXT, true);
}
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSortableViewComponent, deps: [{ token: i1.SearchIndexResolverService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractSortableViewComponent, selector: "ncc-abstract-sortable-view", ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSortableViewComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-sortable-view',
template: ''
}]
}], ctorParameters: () => [{ type: i1.SearchIndexResolverService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGFibGUtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvdmlldy9hYnN0cmFjdC9zb3J0YWJsZS12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBSWpGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxTQUFTLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBSTVFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBTTNELE1BQU0sT0FBZ0IsNkJBQTZCO0lBTWY7SUFKdEIsc0JBQXNCLENBQXdCO0lBQzlDLHlCQUF5QixDQUFpQztJQUMxRCxVQUFVLENBQWU7SUFFbkMsWUFBZ0MsU0FBcUM7UUFBckMsY0FBUyxHQUFULFNBQVMsQ0FBNEI7UUFDakUsSUFBSSxDQUFDLHNCQUFzQixHQUFHO1lBQzFCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGVBQWUsRUFBRSxFQUFFO1lBQ25CLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUNwQixTQUFTLEVBQUUsU0FBUztTQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVNLGdDQUFnQyxDQUFDLE9BQTRCO1FBQ2hFLElB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VyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsRixLQUFLLE9BQU8sQ0FBQztnQkFDYixLQUFLLFdBQVc7b0JBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hGO29CQUNJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzFGO1NBQ0o7SUFDTCxDQUFDO3dHQTNHaUIsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsa0VBRnJDLEVBQUU7OzRGQUVNLDZCQUE2QjtrQkFKbEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxRQUFRLEVBQUUsRUFBRTtpQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U29ydENoYW5nZURlc2NyaXB0aW9ufSBmcm9tICcuLi8uLi9oZWFkZXIvbW9kZWxzL3VzZXItY2hhbmdlcy9zb3J0LWNoYW5nZS1kZXNjcmlwdGlvbic7XG5pbXBvcnQge0hlYWRlckNvbHVtbiwgSGVhZGVyQ29sdW1uVHlwZX0gZnJvbSAnLi4vLi4vaGVhZGVyL21vZGVscy9oZWFkZXItY29sdW1uJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7SGVhZGVyQ2hhbmdlfSBmcm9tICcuLi8uLi9oZWFkZXIvbW9kZWxzL3VzZXItY2hhbmdlcy9oZWFkZXItY2hhbmdlJztcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtIZWFkZXJDaGFuZ2VUeXBlfSBmcm9tICcuLi8uLi9oZWFkZXIvbW9kZWxzL3VzZXItY2hhbmdlcy9oZWFkZXItY2hhbmdlLXR5cGUnO1xuaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NlYXJjaEluZGV4UmVzb2x2ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLWtleXdvcmQtcmVzb2x2ZXItc2VydmljZS9zZWFyY2gtaW5kZXgtcmVzb2x2ZXIuc2VydmljZSc7XG5pbXBvcnQge1NlYXJjaEluZGV4fSBmcm9tICcuLi8uLi9zZWFyY2gvbW9kZWxzL3NlYXJjaC1pbmRleCc7XG5pbXBvcnQge1BhZ2luYXRpb25QYXJhbXN9IGZyb20gJy4uLy4uL3V0aWxpdHkvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLXBhcmFtcyc7XG5pbXBvcnQge1ByZWZlcnJlZFNvcnRhYmxlSGVhZGVyfSBmcm9tIFwiLi4vLi4vaGVhZGVyL21vZGVscy91c2VyLWNoYW5nZXMvcHJlZmVycmVkLXNvcnRhYmxlLWhlYWRlclwiO1xuaW1wb3J0IHtTb3J0RGlyZWN0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydFwiO1xuaW1wb3J0IHtNb2RlQ2hhbmdlRGVzY3JpcHRpb259IGZyb20gJy4uLy4uL2hlYWRlci9tb2RlbHMvdXNlci1jaGFuZ2VzL21vZGUtY2hhbmdlLWRlc2NyaXB0aW9uJztcbmltcG9ydCB7SGVhZGVyTW9kZX0gZnJvbSAnLi4vLi4vaGVhZGVyL21vZGVscy9oZWFkZXItbW9kZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LXNvcnRhYmxlLXZpZXcnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNvcnRhYmxlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBwcm90ZWN0ZWQgX2xhc3RIZWFkZXJTZWFyY2hTdGF0ZTogU29ydENoYW5nZURlc2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBfcHJlZmVycmVkU29ydGFibGVIZWFkZXJzOiBBcnJheTxQcmVmZXJyZWRTb3J0YWJsZUhlYWRlcj47XG4gICAgcHJvdGVjdGVkIF9zdWJIZWFkZXI6IFN1YnNjcmlwdGlvbjtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3Jlc29sdmVyOiBTZWFyY2hJbmRleFJlc29sdmVyU2VydmljZSkge1xuICAgICAgICB0aGlzLl9sYXN0SGVhZGVyU2VhcmNoU3RhdGUgPSB7XG4gICAgICAgICAgICBjb2x1bW5UeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWVsZElkZW50aWZpZXI6ICcnLFxuICAgICAgICAgICAgc29ydERpcmVjdGlvbjogJycsXG4gICAgICAgICAgICBjb2x1bW5JZGVudGlmaWVyOiAtMSxcbiAgICAgICAgICAgIGZpZWxkVHlwZTogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX3ByZWZlcnJlZFNvcnRhYmxlSGVhZGVycyA9IFtdO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc3ViSGVhZGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJIZWFkZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclByZWZlcnJlZFNvcnRhYmxlSGVhZGVycyhoZWFkZXJzOiBBcnJheTxIZWFkZXJDb2x1bW4+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xhc3RIZWFkZXJTZWFyY2hTdGF0ZS5zb3J0RGlyZWN0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX3ByZWZlcnJlZFNvcnRhYmxlSGVhZGVycyA9IFtdO1xuICAgICAgICBoZWFkZXJzLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICAgIGlmICghaGVhZGVyIHx8ICFoZWFkZXIuc29ydERpcmVjdGlvbiB8fCBoZWFkZXIuc29ydERpcmVjdGlvbiA9PT0gJycgYXMgU29ydERpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3ByZWZlcnJlZFNvcnRhYmxlSGVhZGVycy5wdXNoKHtwcm9wZXJ0eUlkOiB0aGlzLmdldFByZWZlcnJlZFNvcnRhYmxlRmllbGRJZChoZWFkZXIpLCBzb3J0RGlyZWN0aW9uOiBoZWFkZXIuc29ydERpcmVjdGlvbn0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVySGVhZGVyQ2hhbmdlKGhlYWRlckNoYW5nZSQ6IE9ic2VydmFibGU8SGVhZGVyQ2hhbmdlPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJIZWFkZXIgPSBoZWFkZXJDaGFuZ2UkLnN1YnNjcmliZSgoaGVhZGVyOiBIZWFkZXJDaGFuZ2UpID0+IHtcbiAgICAgICAgICAgIGlmICghaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNNb2RlQ2hhbmdlID0gaGVhZGVyLmNoYW5nZVR5cGUgPT09IEhlYWRlckNoYW5nZVR5cGUuTU9ERV9DSEFOR0VEO1xuICAgICAgICAgICAgaWYgKGlzTW9kZUNoYW5nZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVDaGFuZ2UgPSBoZWFkZXIuZGVzY3JpcHRpb24gYXMgTW9kZUNoYW5nZURlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlQ2hhbmdlLnByZXZpb3VzTW9kZSA9PT0gSGVhZGVyTW9kZS5FRElUIHx8IG1vZGVDaGFuZ2UucHJldmlvdXNNb2RlID09PSBtb2RlQ2hhbmdlLmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNNb2RlQ2hhbmdlIHx8IGhlYWRlci5jaGFuZ2VUeXBlID09PSBIZWFkZXJDaGFuZ2VUeXBlLlNPUlQgfHwgaGVhZGVyLmNoYW5nZVR5cGUgPT09IEhlYWRlckNoYW5nZVR5cGUuU0VBUkNIKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlci5jaGFuZ2VUeXBlID09PSBIZWFkZXJDaGFuZ2VUeXBlLlNPUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdEhlYWRlclNlYXJjaFN0YXRlID0gaGVhZGVyLmRlc2NyaXB0aW9uIGFzIFNvcnRDaGFuZ2VEZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ETyB3ZSBtaWdodCBub3QgbmVlZCB0byBzZWFyY2ggYWxsIHRoZSB0aW1lLCBkbyBzb21lIGZpbHRlcmluZ1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCByZWxvYWQoKTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBhZGRTb3J0UGFyYW1zKHBhcmFtczogSHR0cFBhcmFtcyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodGhpcy5fbGFzdEhlYWRlclNlYXJjaFN0YXRlLnNvcnREaXJlY3Rpb24gIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU09SVCwgYCR7dGhpcy5nZXRTb3J0SWQoKX0sJHt0aGlzLl9sYXN0SGVhZGVyU2VhcmNoU3RhdGUuc29ydERpcmVjdGlvbn1gKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9wcmVmZXJyZWRTb3J0YWJsZUhlYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcHJlZmVycmVkU29ydGFibGVIZWFkZXJzLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKFBhZ2luYXRpb25QYXJhbXMuUEFHRV9TT1JULCBgJHtoZWFkZXIucHJvcGVydHlJZH0sJHtoZWFkZXIuc29ydERpcmVjdGlvbn1gKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy5zZXQoUGFnaW5hdGlvblBhcmFtcy5QQUdFX1NPUlQsIHRoaXMuZ2V0RGVmYXVsdFNvcnRQYXJhbSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRTb3J0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RIZWFkZXJTZWFyY2hTdGF0ZS5jb2x1bW5UeXBlID09PSBIZWFkZXJDb2x1bW5UeXBlLk1FVEEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE1ldGFGaWVsZFNvcnRJZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9sYXN0SGVhZGVyU2VhcmNoU3RhdGUuZmllbGRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVyLmdldEluZGV4KHRoaXMuX2xhc3RIZWFkZXJTZWFyY2hTdGF0ZS5maWVsZElkZW50aWZpZXIsIFNlYXJjaEluZGV4Lk5VTUJFUik7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZXIuZ2V0SW5kZXgodGhpcy5fbGFzdEhlYWRlclNlYXJjaFN0YXRlLmZpZWxkSWRlbnRpZmllciwgU2VhcmNoSW5kZXguVElNRVNUQU1QKTtcbiAgICAgICAgICAgICAgICBjYXNlICdhY3Rvcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnYWN0b3JMaXN0JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVyLmdldEluZGV4KHRoaXMuX2xhc3RIZWFkZXJTZWFyY2hTdGF0ZS5maWVsZElkZW50aWZpZXIsIFNlYXJjaEluZGV4LkZVTExfTkFNRSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVyLmdldEluZGV4KHRoaXMuX2xhc3RIZWFkZXJTZWFyY2hTdGF0ZS5maWVsZElkZW50aWZpZXIsIFNlYXJjaEluZGV4LkZVTExURVhULCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQcmVmZXJyZWRTb3J0YWJsZUZpZWxkSWQoY29sdW1uOiBIZWFkZXJDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEhlYWRlckNvbHVtblR5cGUuTUVUQSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YUZpZWxkU29ydElkKGNvbHVtbi5maWVsZElkZW50aWZpZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChjb2x1bW4uZmllbGRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVyLmdldEluZGV4KGNvbHVtbi5maWVsZElkZW50aWZpZXIsIFNlYXJjaEluZGV4Lk5VTUJFUik7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZXIuZ2V0SW5kZXgoY29sdW1uLmZpZWxkSWRlbnRpZmllciwgU2VhcmNoSW5kZXguVElNRVNUQU1QKTtcbiAgICAgICAgICAgICAgICBjYXNlICdhY3Rvcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnYWN0b3JMaXN0JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVyLmdldEluZGV4KGNvbHVtbi5maWVsZElkZW50aWZpZXIsIFNlYXJjaEluZGV4LkZVTExfTkFNRSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVyLmdldEluZGV4KGNvbHVtbi5maWVsZElkZW50aWZpZXIsIFNlYXJjaEluZGV4LkZVTExURVhULCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRNZXRhRmllbGRTb3J0SWQoZmllbGRJZGVudGlmaWVyPzogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldERlZmF1bHRTb3J0UGFyYW0oKTogc3RyaW5nO1xuXG59XG4iXX0=