@hxui/angular
Version:
An Angular library based on the [HXUI design system](https://hxui.io).
187 lines • 22.8 kB
JavaScript
import * as _ from 'lodash';
import { DisplayMode } from '../date-range-picker/date-range-picker.model';
import { FilterType } from './filters-type.enum';
export class FiltersModel {
constructor(data) {
this.selected = [];
this.defaultIndex = [0];
this.charLimit = 2;
this.dateRangePickerDisplayMode = DisplayMode.showCustomOnly;
this.dateRangePickerDisplayDateFormat = 'dd/MM/yyyy';
this.disabled = false;
this.hidden = false;
this.isLoading = false;
this.selectAllState = {
all: false,
indeterminate: false,
none: true
};
this.selectAllValue = 'Select all';
Object.assign(this, data);
if (this.type === FilterType.MultiSelect) {
this.addSelectAll();
this.setMultiSelectOptions();
}
else if (this.type !== FilterType.Search) {
this.setSingleSelectOption();
}
this.isIconised();
}
/*
* Adds a select all option for multiselect filter types
*/
addSelectAll() {
this.options.unshift({
label: 'Select all',
value: this.selectAllValue,
selected: false
});
}
/**
* Set single select option
*/
setSingleSelectOption(option) {
if (option) {
if (this.selected.length) {
this.selected[0].selected = false;
}
this.selected = [option];
option.selected = true;
}
else {
// set preselected option
if (this.options.length && this.selected.length === 0) {
this.selected = [
this.options.find(opt => {
return opt.selected;
})
];
}
}
}
/**
* Set multi select options
*/
setMultiSelectOptions(option) {
if (option) {
this.selected = [];
if (option.value !== this.selectAllValue) {
this.options.forEach((opt, i) => {
if (opt.value !== this.selectAllValue) {
if (opt.selected) {
this.selected.push(opt);
}
}
});
}
else {
this.options.forEach((opt, i) => {
if (opt.value !== this.selectAllValue) {
opt.selected = option.selected;
if (option.selected) {
this.selected.push(opt);
}
}
});
}
}
else {
// set preselected options and select all
if (this.options.length && this.selected.length === 0) {
this.options.forEach((opt, i) => {
if (opt.selected) {
this.selected.push(opt);
}
});
}
}
this.setSelectAllState();
}
setSelectAllState() {
const reducer = (accumulator, option) => option.selected && option.value !== this.selectAllValue
? accumulator + 1
: accumulator;
const count = this.options.reduce(reducer, 0);
this.selectAllState.all = count === this.options.length - 1;
this.selectAllState.indeterminate =
count > 0 && count < this.options.length - 1;
this.selectAllState.none = count === 0;
this.options[0].selected =
this.selectAllState.all && !this.selectAllState.indeterminate;
}
setDefaultOption() {
if (this.options.length) {
if (this.type === FilterType.SingleSelect) {
this.selected[0].selected = false;
this.selected[0] = this.options[this.defaultIndex[0]];
this.selected[0].selected = true;
}
else if (this.type === FilterType.MultiSelect) {
this.selected = [];
this.options.forEach((opt, i) => {
opt.selected = false;
});
this.defaultIndex.forEach((di, i) => {
this.options[di].selected = true;
this.selected.push(this.options[di]);
});
this.setSelectAllState();
}
else {
this.selected[0].selected = false;
this.selected[0] = this.options[this.defaultIndex[0]];
this.selected[0].selected = true;
}
}
}
setSelectAll() {
this.selected = [];
this.options.forEach((opt, i) => {
opt.selected = true;
if (opt.value !== this.selectAllValue) {
this.selected.push(opt);
}
});
}
isDefaultOptionActive() {
if (this.type === FilterType.SingleSelect) {
return this.selected[0] === this.options[this.defaultIndex[0]];
}
else if (this.type === FilterType.MultiSelect) {
const selectedIndexes = [];
this.options.forEach((opt, i) => {
if (opt.selected && opt.value !== this.selectAllValue) {
selectedIndexes.push(i);
}
});
return _.isEqual(selectedIndexes, this.defaultIndex);
}
else if (this.type === FilterType.Search) {
return this.value === '' || this.value === undefined;
}
else if (this.type === FilterType.DateRange) {
return this.value === '' || this.value === undefined;
}
}
isIconised() {
if (this.options) {
const hasIcons = this.options.find(option => {
return typeof option.icon !== 'undefined' && option.icon !== '';
});
return typeof hasIcons !== 'undefined';
}
return false;
}
getSelectedLabel() {
if (this.selected.length === 1) {
return this.selected[0].label;
}
else if (this.selected.length) {
return this.selected.length + ' selected';
}
else {
return 'All';
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h4LXVpL3NyYy9saWIvZmlsdGVycy9maWx0ZXJzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsTUFBTSxPQUFPLFlBQVk7SUEyQnZCLFlBQVksSUFBcUI7UUFoQmpDLGFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBQy9CLGlCQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsK0JBQTBCLEdBQWlCLFdBQVcsQ0FBQyxjQUFjLENBQUM7UUFDdEUscUNBQWdDLEdBQVksWUFBWSxDQUFDO1FBRXpELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsbUJBQWMsR0FBRztZQUNmLEdBQUcsRUFBRSxLQUFLO1lBQ1YsYUFBYSxFQUFFLEtBQUs7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO1FBQ0YsbUJBQWMsR0FBRyxZQUFZLENBQUM7UUFHNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzlCO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDMUMsSUFBSSxDQUFD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LENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUMsT0FBTyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUM7U0FDeEM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztTQUMzQzthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRGlzcGxheU1vZGUgfSBmcm9tICcuLi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5tb2RlbCc7XHJcbmltcG9ydCB7IElGaWx0ZXJPcHRpb24sIElGaWx0ZXJzQ29uZmlnIH0gZnJvbSAnLi9maWx0ZXJzLWNvbmZpZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSAnLi9maWx0ZXJzLXR5cGUuZW51bSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRmlsdGVyc01vZGVsIGltcGxlbWVudHMgSUZpbHRlcnNDb25maWcge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdHlwZTogRmlsdGVyVHlwZTtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBJRmlsdGVyT3B0aW9uW107XHJcbiAgdmFsdWU/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogdmFsdWUgZnJvbSBzb3VyY2UgY29tcG9uZW50IHdpdGhvdXQgdHlwZSBwYXJzZVxyXG4gICAqL1xyXG4gIHNvdXJjZVZhbHVlPzogYW55O1xyXG4gIGNhbGxiYWNrOiBhbnk7XHJcbiAgc2VsZWN0ZWQ6IElGaWx0ZXJPcHRpb25bXSA9IFtdO1xyXG4gIGRlZmF1bHRJbmRleCA9IFswXTtcclxuICBjaGFyTGltaXQgPSAyO1xyXG4gIGRhdGVSYW5nZVBpY2tlckRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGUgPSBEaXNwbGF5TW9kZS5zaG93Q3VzdG9tT25seTtcclxuICBkYXRlUmFuZ2VQaWNrZXJEaXNwbGF5RGF0ZUZvcm1hdD86IHN0cmluZyA9ICdkZC9NTS95eXl5JztcclxuICB3aWR0aDogbnVtYmVyO1xyXG4gIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgaGlkZGVuID0gZmFsc2U7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgc2VsZWN0QWxsU3RhdGUgPSB7XHJcbiAgICBhbGw6IGZhbHNlLFxyXG4gICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXHJcbiAgICBub25lOiB0cnVlXHJcbiAgfTtcclxuICBzZWxlY3RBbGxWYWx1ZSA9ICdTZWxlY3QgYWxsJztcclxuXHJcbiAgY29uc3RydWN0b3IoZGF0YT86IElGaWx0ZXJzQ29uZmlnKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRhdGEpO1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gRmlsdGVyVHlwZS5NdWx0aVNlbGVjdCkge1xyXG4gICAgICB0aGlzLmFkZFNlbGVjdEFsbCgpO1xyXG4gICAgICB0aGlzLnNldE11bHRpU2VsZWN0T3B0aW9ucygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgIT09IEZpbHRlclR5cGUuU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMuc2V0U2luZ2xlU2VsZWN0T3B0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzSWNvbmlzZWQoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQWRkcyBhIHNlbGVjdCBhbGwgb3B0aW9uIGZvciBtdWx0aXNlbGVjdCBmaWx0ZXIgdHlwZXNcclxuICAgKi9cclxuICBhZGRTZWxlY3RBbGwoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMudW5zaGlmdCh7XHJcbiAgICAgIGxhYmVsOiAnU2VsZWN0IGFsbCcsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdEFsbFZhbHVlLFxyXG4gICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHNpbmdsZSBzZWxlY3Qgb3B0aW9uXHJcbiAgICovXHJcbiAgc2V0U2luZ2xlU2VsZWN0T3B0aW9uKG9wdGlvbj86IElGaWx0ZXJPcHRpb24pIHtcclxuICAgIGlmIChvcHRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFswXS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBbb3B0aW9uXTtcclxuICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNldCBwcmVzZWxlY3RlZCBvcHRpb25cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkID0gW1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmZpbmQob3B0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9wdC5zZWxlY3RlZDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IG11bHRpIHNlbGVjdCBvcHRpb25zXHJcbiAgICovXHJcbiAgc2V0TXVsdGlTZWxlY3RPcHRpb25zKG9wdGlvbj86IElGaWx0ZXJPcHRpb24pIHtcclxuICAgIGlmIChvcHRpb24pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xyXG4gICAgICBpZiAob3B0aW9uLnZhbHVlICE9PSB0aGlzLnNlbGVjdEFsbFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9wdC52YWx1ZSAhPT0gdGhpcy5zZWxlY3RBbGxWYWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAob3B0LnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKG9wdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgob3B0LCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAob3B0LnZhbHVlICE9PSB0aGlzLnNlbGVjdEFsbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIG9wdC5zZWxlY3RlZCA9IG9wdGlvbi5zZWxlY3RlZDtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChvcHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNldCBwcmVzZWxlY3RlZCBvcHRpb25zIGFuZCBzZWxlY3QgYWxsXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9wdC5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2gob3B0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0QWxsU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdEFsbFN0YXRlKCkge1xyXG4gICAgY29uc3QgcmVkdWNlciA9IChhY2N1bXVsYXRvciwgb3B0aW9uKSA9PlxyXG4gICAgICBvcHRpb24uc2VsZWN0ZWQgJiYgb3B0aW9uLnZhbHVlICE9PSB0aGlzLnNlbGVjdEFsbFZhbHVlXHJcbiAgICAgICAgPyBhY2N1bXVsYXRvciArIDFcclxuICAgICAgICA6IGFjY3VtdWxhdG9yO1xyXG4gICAgY29uc3QgY291bnQgPSB0aGlzLm9wdGlvbnMucmVkdWNlKHJlZHVjZXIsIDApO1xyXG4gICAgdGhpcy5zZWxlY3RBbGxTdGF0ZS5hbGwgPSBjb3VudCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7XHJcbiAgICB0aGlzLnNlbGVjdEFsbFN0YXRlLmluZGV0ZXJtaW5hdGUgPVxyXG4gICAgICBjb3VudCA+IDAgJiYgY291bnQgPCB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcclxuICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUubm9uZSA9IGNvdW50ID09PSAwO1xyXG4gICAgdGhpcy5vcHRpb25zWzBdLnNlbGVjdGVkID1cclxuICAgICAgdGhpcy5zZWxlY3RBbGxTdGF0ZS5hbGwgJiYgIXRoaXMuc2VsZWN0QWxsU3RhdGUuaW5kZXRlcm1pbmF0ZTtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRPcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy50eXBlID09PSBGaWx0ZXJUeXBlLlNpbmdsZVNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRbMF0uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkWzBdID0gdGhpcy5vcHRpb25zW3RoaXMuZGVmYXVsdEluZGV4WzBdXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkWzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IEZpbHRlclR5cGUuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkID0gW107XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdCwgaSkgPT4ge1xyXG4gICAgICAgICAgb3B0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SW5kZXguZm9yRWFjaCgoZGksIGkpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9uc1tkaV0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHRoaXMub3B0aW9uc1tkaV0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0QWxsU3RhdGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkWzBdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFswXSA9IHRoaXMub3B0aW9uc1t0aGlzLmRlZmF1bHRJbmRleFswXV07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFswXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdEFsbCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcclxuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHQsIGkpID0+IHtcclxuICAgICAgb3B0LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKG9wdC52YWx1ZSAhPT0gdGhpcy5zZWxlY3RBbGxWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChvcHQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdE9wdGlvbkFjdGl2ZSgpIHtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09IEZpbHRlclR5cGUuU2luZ2xlU2VsZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkWzBdID09PSB0aGlzLm9wdGlvbnNbdGhpcy5kZWZhdWx0SW5kZXhbMF1dO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IEZpbHRlclR5cGUuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleGVzID0gW107XHJcbiAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHQsIGkpID0+IHtcclxuICAgICAgICBpZiAob3B0LnNlbGVjdGVkICYmIG9wdC52YWx1ZSAhPT0gdGhpcy5zZWxlY3RBbGxWYWx1ZSkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRJbmRleGVzLnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIF8uaXNFcXVhbChzZWxlY3RlZEluZGV4ZXMsIHRoaXMuZGVmYXVsdEluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBGaWx0ZXJUeXBlLlNlYXJjaCkge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gJycgfHwgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZVJhbmdlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlID09PSAnJyB8fCB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0ljb25pc2VkKCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xyXG4gICAgICBjb25zdCBoYXNJY29ucyA9IHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvcHRpb24uaWNvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9uLmljb24gIT09ICcnO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHR5cGVvZiBoYXNJY29ucyAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZExhYmVsKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkWzBdLmxhYmVsO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZC5sZW5ndGggKyAnIHNlbGVjdGVkJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnQWxsJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19