UNPKG

@hxui/angular

Version:

An Angular library based on the [HXUI design system](https://hxui.io).

187 lines 22.8 kB
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