@pepperi-addons/ngx-lib 0.2.55 → 0.2.58-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/attachment/attachment.component.d.ts +1 -0
- package/attachment/pepperi-addons-ngx-lib-attachment.metadata.json +1 -1
- package/bundles/pepperi-addons-ngx-lib-attachment.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-attachment.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-checkbox.umd.js +3 -0
- package/bundles/pepperi-addons-ngx-lib-checkbox.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-color.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-color.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-date.umd.js +4 -1
- package/bundles/pepperi-addons-ngx-lib-date.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-form.umd.js +20 -15
- package/bundles/pepperi-addons-ngx-lib-form.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-image.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-image.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-images-filmstrip.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-images-filmstrip.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-list.umd.js +4 -2
- package/bundles/pepperi-addons-ngx-lib-list.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-quantity-selector.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-quantity-selector.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-rich-html-textarea.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-rich-html-textarea.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-select.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-select.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-separator.umd.js +8 -0
- package/bundles/pepperi-addons-ngx-lib-separator.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-signature.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-signature.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-slider.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-smart-filters.umd.js +1432 -173
- package/bundles/pepperi-addons-ngx-lib-smart-filters.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-textarea.umd.js +6 -1
- package/bundles/pepperi-addons-ngx-lib-textarea.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-textbox.umd.js +4 -2
- package/bundles/pepperi-addons-ngx-lib-textbox.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-top-bar.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib.umd.js +4 -2
- package/bundles/pepperi-addons-ngx-lib.umd.js.map +1 -1
- package/color/color.component.d.ts +1 -0
- package/color/pepperi-addons-ngx-lib-color.metadata.json +1 -1
- package/core/customization/customization.service.d.ts +1 -0
- package/esm2015/attachment/attachment.component.js +7 -2
- package/esm2015/checkbox/checkbox.component.js +4 -1
- package/esm2015/color/color.component.js +7 -2
- package/esm2015/core/common/services/translate.service.js +1 -1
- package/esm2015/core/customization/customization.service.js +4 -2
- package/esm2015/date/date.component.js +4 -1
- package/esm2015/form/form.component.js +2 -1
- package/esm2015/form/internal-button.component.js +20 -17
- package/esm2015/form/internal-carusel.component.js +2 -1
- package/esm2015/image/image.component.js +7 -2
- package/esm2015/image/image.service.js +1 -1
- package/esm2015/images-filmstrip/images-filmstrip.component.js +7 -2
- package/esm2015/list/list-total.component.js +5 -3
- package/esm2015/quantity-selector/quantity-selector.component.js +7 -2
- package/esm2015/rich-html-textarea/rich-html-textarea.component.js +7 -2
- package/esm2015/select/select.component.js +7 -2
- package/esm2015/separator/separator.component.js +9 -1
- package/esm2015/signature/signature.component.js +7 -2
- package/esm2015/slider/slider.component.js +1 -1
- package/esm2015/smart-filters/boolean-filter/boolean-filter.component.js +12 -2
- package/esm2015/smart-filters/common/model/base-filter-component.js +40 -10
- package/esm2015/smart-filters/common/model/creator.js +8 -2
- package/esm2015/smart-filters/common/model/field.js +12 -1
- package/esm2015/smart-filters/common/model/operator.js +8 -8
- package/esm2015/smart-filters/common/model/type.js +1 -1
- package/esm2015/smart-filters/date-filter/date-filter.component.js +45 -2
- package/esm2015/smart-filters/filter-builder/common/model/filter.js +2 -0
- package/esm2015/smart-filters/filter-builder/common/model/legacy.js +2 -0
- package/esm2015/smart-filters/filter-builder/common/model/operator-unit.js +42 -0
- package/esm2015/smart-filters/filter-builder/common/model/operator.js +207 -0
- package/esm2015/smart-filters/filter-builder/common/model/type-map.js +27 -0
- package/esm2015/smart-filters/filter-builder/common/model/type.js +6 -0
- package/esm2015/smart-filters/filter-builder/common/pipes/filter-item-counter.pipe.js +18 -0
- package/esm2015/smart-filters/filter-builder/common/services/output-filter.service.js +132 -0
- package/esm2015/smart-filters/filter-builder/common/services/type-convertor.service.js +44 -0
- package/esm2015/smart-filters/filter-builder/filter-builder-item/filter-builder-item.component.js +106 -0
- package/esm2015/smart-filters/filter-builder/filter-builder-section/filter-builder-section.component.js +50 -0
- package/esm2015/smart-filters/filter-builder/filter-builder.component.js +65 -0
- package/esm2015/smart-filters/filter-builder/filter-builder.service.js +261 -0
- package/esm2015/smart-filters/index.js +5 -0
- package/esm2015/smart-filters/multi-select-filter/multi-select-filter.component.js +53 -14
- package/esm2015/smart-filters/number-filter/number-filter.component.js +25 -2
- package/esm2015/smart-filters/pepperi-addons-ngx-lib-smart-filters.js +8 -1
- package/esm2015/smart-filters/public-api.js +2 -1
- package/esm2015/smart-filters/smart-filters.module.js +14 -2
- package/esm2015/smart-filters/text-filter/text-filter.component.js +79 -0
- package/esm2015/textarea/textarea.component.js +7 -2
- package/esm2015/textbox/textbox.component.js +5 -3
- package/esm2015/top-bar/top-bar.component.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-attachment.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-attachment.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.js +3 -0
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-color.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-color.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-date.js +3 -0
- package/fesm2015/pepperi-addons-ngx-lib-date.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-form.js +20 -15
- package/fesm2015/pepperi-addons-ngx-lib-form.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-image.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-image.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-list.js +4 -2
- package/fesm2015/pepperi-addons-ngx-lib-list.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-select.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-select.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-separator.js +8 -0
- package/fesm2015/pepperi-addons-ngx-lib-separator.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-signature.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-signature.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-slider.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.js +1293 -128
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textarea.js +6 -1
- package/fesm2015/pepperi-addons-ngx-lib-textarea.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textbox.js +4 -2
- package/fesm2015/pepperi-addons-ngx-lib-textbox.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-top-bar.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib.js +3 -1
- package/fesm2015/pepperi-addons-ngx-lib.js.map +1 -1
- package/form/internal-button.component.d.ts +0 -1
- package/image/image.component.d.ts +1 -0
- package/image/pepperi-addons-ngx-lib-image.metadata.json +1 -1
- package/images-filmstrip/images-filmstrip.component.d.ts +1 -0
- package/images-filmstrip/pepperi-addons-ngx-lib-images-filmstrip.metadata.json +1 -1
- package/list/list-total.component.d.ts +2 -0
- package/list/pepperi-addons-ngx-lib-list.metadata.json +1 -1
- package/package.json +4 -4
- package/pepperi-addons-ngx-lib.metadata.json +1 -1
- package/quantity-selector/pepperi-addons-ngx-lib-quantity-selector.metadata.json +1 -1
- package/quantity-selector/quantity-selector.component.d.ts +1 -0
- package/rich-html-textarea/pepperi-addons-ngx-lib-rich-html-textarea.metadata.json +1 -1
- package/rich-html-textarea/rich-html-textarea.component.d.ts +1 -0
- package/select/pepperi-addons-ngx-lib-select.metadata.json +1 -1
- package/select/select.component.d.ts +1 -0
- package/separator/pepperi-addons-ngx-lib-separator.metadata.json +1 -1
- package/signature/pepperi-addons-ngx-lib-signature.metadata.json +1 -1
- package/signature/signature.component.d.ts +1 -0
- package/smart-filters/boolean-filter/boolean-filter.component.d.ts +5 -1
- package/smart-filters/common/model/base-filter-component.d.ts +10 -1
- package/smart-filters/common/model/field.d.ts +4 -0
- package/smart-filters/common/model/operator.d.ts +1 -0
- package/smart-filters/common/model/type.d.ts +2 -2
- package/smart-filters/date-filter/date-filter.component.d.ts +8 -1
- package/smart-filters/filter-builder/common/model/filter.d.ts +6 -0
- package/smart-filters/filter-builder/common/model/legacy.d.ts +23 -0
- package/smart-filters/filter-builder/common/model/operator-unit.d.ts +13 -0
- package/smart-filters/filter-builder/common/model/operator.d.ts +21 -0
- package/smart-filters/filter-builder/common/model/type-map.d.ts +12 -0
- package/smart-filters/filter-builder/common/model/type.d.ts +4 -0
- package/smart-filters/filter-builder/common/pipes/filter-item-counter.pipe.d.ts +5 -0
- package/smart-filters/filter-builder/common/services/output-filter.service.d.ts +52 -0
- package/smart-filters/filter-builder/common/services/type-convertor.service.d.ts +10 -0
- package/smart-filters/filter-builder/filter-builder-item/filter-builder-item.component.d.ts +32 -0
- package/smart-filters/filter-builder/filter-builder-section/filter-builder-section.component.d.ts +22 -0
- package/smart-filters/filter-builder/filter-builder-section/filter-builder-section.component.theme.scss +6 -0
- package/smart-filters/filter-builder/filter-builder.component.d.ts +22 -0
- package/smart-filters/filter-builder/filter-builder.service.d.ts +90 -0
- package/smart-filters/index.d.ts +1 -0
- package/smart-filters/multi-select-filter/multi-select-filter.component.d.ts +6 -0
- package/smart-filters/number-filter/number-filter.component.d.ts +5 -0
- package/smart-filters/pepperi-addons-ngx-lib-smart-filters.d.ts +7 -0
- package/smart-filters/pepperi-addons-ngx-lib-smart-filters.metadata.json +1 -1
- package/smart-filters/public-api.d.ts +1 -0
- package/smart-filters/text-filter/text-filter.component.d.ts +17 -0
- package/src/assets/i18n/en.ngx-lib.json +2 -1
- package/src/core/style/components/general.scss +4 -2
- package/textarea/pepperi-addons-ngx-lib-textarea.metadata.json +1 -1
- package/textarea/textarea.component.d.ts +1 -0
- package/theming.scss +4 -0
- package/top-bar/pepperi-addons-ngx-lib-top-bar.metadata.json +1 -1
package/esm2015/smart-filters/filter-builder/filter-builder-item/filter-builder-item.component.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { FormBuilder } from '@angular/forms';
|
|
3
|
+
export class FilterBuilderItemComponent {
|
|
4
|
+
constructor(_fb) {
|
|
5
|
+
this._fb = _fb;
|
|
6
|
+
this._fields = [];
|
|
7
|
+
this._options = [];
|
|
8
|
+
this._selectedField = null;
|
|
9
|
+
this.filterChange = new EventEmitter();
|
|
10
|
+
this.remove = new EventEmitter();
|
|
11
|
+
this.test = {};
|
|
12
|
+
this.fieldWidth = 26;
|
|
13
|
+
this.filterWidth = 67.5;
|
|
14
|
+
this.binWidth = 6.5;
|
|
15
|
+
this.setupForm();
|
|
16
|
+
}
|
|
17
|
+
set fields(list) {
|
|
18
|
+
if ((list === null || list === void 0 ? void 0 : list.length) > 0) {
|
|
19
|
+
this._fields = list;
|
|
20
|
+
this._options = list.map(field => {
|
|
21
|
+
return {
|
|
22
|
+
key: field.id,
|
|
23
|
+
value: field.name
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
;
|
|
29
|
+
set selected(value) {
|
|
30
|
+
if (value) {
|
|
31
|
+
this._selectedField = value;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
set filter(value) {
|
|
35
|
+
if (value) {
|
|
36
|
+
this._filter = value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
;
|
|
40
|
+
set parentForm(value) {
|
|
41
|
+
if (value) {
|
|
42
|
+
this._parentForm = value;
|
|
43
|
+
this.addToParentForm();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
;
|
|
47
|
+
ngOnInit() {
|
|
48
|
+
}
|
|
49
|
+
setupForm() {
|
|
50
|
+
this._form = this._fb.group({
|
|
51
|
+
fieldId: this._fb.control(null),
|
|
52
|
+
fieldType: this._fb.control(null),
|
|
53
|
+
operator: this._fb.control(null),
|
|
54
|
+
operatorUnit: this._fb.control(null),
|
|
55
|
+
values: this._fb.group({
|
|
56
|
+
first: this._fb.control(null),
|
|
57
|
+
second: this._fb.control(null)
|
|
58
|
+
}),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
addToParentForm() {
|
|
62
|
+
this._parentForm.setControl(this.formKey, this._form);
|
|
63
|
+
}
|
|
64
|
+
onFieldChanged(key) {
|
|
65
|
+
let item = this._fields.find(field => field.id === key);
|
|
66
|
+
this.setupForm();
|
|
67
|
+
this.addToParentForm();
|
|
68
|
+
/**
|
|
69
|
+
* hack due to angular's change detection bug -
|
|
70
|
+
* ERROR Error: There is no FormControl instance attached to form control element with name: [formControlName]
|
|
71
|
+
*/
|
|
72
|
+
this._selectedField = null;
|
|
73
|
+
setTimeout(() => {
|
|
74
|
+
this._selectedField = item ? item : null;
|
|
75
|
+
}, 0);
|
|
76
|
+
this._filter = null;
|
|
77
|
+
}
|
|
78
|
+
onFilterChanged() {
|
|
79
|
+
if (this._form.valid) {
|
|
80
|
+
this.filterChange.emit();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
onDeleteItemClicked() {
|
|
84
|
+
this.remove.emit();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
FilterBuilderItemComponent.decorators = [
|
|
88
|
+
{ type: Component, args: [{
|
|
89
|
+
selector: 'pep-filter-builder-item',
|
|
90
|
+
template: "<div class=\"filter-item-container\" fxLayout=\"column\" fxLayoutGap=\".5rem\">\n <div fxLayout=\"row\" fxLayoutGap=\".5rem\">\n <pep-select fxFlex=\"25%\" [value]=\"_selectedField?.id\" xAlignment=\"left\" [options]=\"_options\"\n [renderTitle]=\"false\" (valueChange)=\"onFieldChanged($event)\"></pep-select>\n <ng-container *ngIf=\"_selectedField?.componentType\">\n <ng-container [ngSwitch]=\"_selectedField.componentType\">\n <ng-container *ngSwitchCase=\"'text'\">\n <pep-text-filter fxFlex=\"auto\" [showActionButtons]=\"false\" [field]=\"_selectedField\"\n [filter]=\"_filter\" [parentForm]=\"_form\" [emitOnChange]=\"true\" [inline]=\"true\"\n [renderTitle]=\"false\" (filterChange)=\"onFilterChanged()\">\n </pep-text-filter>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <pep-boolean-filter fxFlex=\"auto\" [showActionButtons]=\"false\" [field]=\"_selectedField\"\n [filter]=\"_filter\" [parentForm]=\"_form\" [emitOnChange]=\"true\" [inline]=\"true\"\n [renderTitle]=\"false\" (filterChange)=\"onFilterChanged()\">\n </pep-boolean-filter>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <pep-date-filter fxFlex=\"auto\" [showActionButtons]=\"false\" [field]=\"_selectedField\"\n [filter]=\"_filter\" [parentForm]=\"_form\" [emitOnChange]=\"true\" [inline]=\"true\"\n [renderTitle]=\"false\" (filterChange)=\"onFilterChanged()\">\n </pep-date-filter>\n </ng-container>\n <ng-container *ngSwitchCase=\"'multi-select'\">\n <pep-multi-select-filter fxFlex=\"auto\" [showActionButtons]=\"false\" [field]=\"_selectedField\"\n [filter]=\"_filter\" [parentForm]=\"_form\" [emitOnChange]=\"true\" [inline]=\"true\"\n [renderTitle]=\"false\" (filterChange)=\"onFilterChanged()\">\n </pep-multi-select-filter>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <pep-number-filter fxFlex=\"auto\" [showActionButtons]=\"false\" [field]=\"_selectedField\"\n [filter]=\"_filter\" [parentForm]=\"_form\" [emitOnChange]=\"true\" [inline]=\"true\"\n [renderTitle]=\"false\" (filterChange)=\"onFilterChanged()\">\n </pep-number-filter>\n </ng-container>\n </ng-container>\n </ng-container>\n <!-- <ng-container *ngIf=\"(_parentForm | filterItemCounter) > 1\"> -->\n <pep-button styleType=\"weak\" styleStateType=\"system_bin\" sizeType=\"md\" classNames=\"\" [disabled]=\"false\"\n iconName=\"system_bin\" iconPosition=\"end\" [visible]=\"true\" (buttonClick)=\"onDeleteItemClicked()\">\n </pep-button>\n <!-- </ng-container> -->\n </div>\n</div>",
|
|
91
|
+
styles: [""]
|
|
92
|
+
},] }
|
|
93
|
+
];
|
|
94
|
+
FilterBuilderItemComponent.ctorParameters = () => [
|
|
95
|
+
{ type: FormBuilder }
|
|
96
|
+
];
|
|
97
|
+
FilterBuilderItemComponent.propDecorators = {
|
|
98
|
+
formKey: [{ type: Input }],
|
|
99
|
+
fields: [{ type: Input }],
|
|
100
|
+
selected: [{ type: Input }],
|
|
101
|
+
filter: [{ type: Input }],
|
|
102
|
+
parentForm: [{ type: Input }],
|
|
103
|
+
filterChange: [{ type: Output }],
|
|
104
|
+
remove: [{ type: Output }]
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJ1aWxkZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NtYXJ0LWZpbHRlcnMvZmlsdGVyLWJ1aWxkZXIvZmlsdGVyLWJ1aWxkZXItaXRlbS9maWx0ZXItYnVpbGRlci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQVEsV0FBVyxFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBWTFFLE1BQU0sT0FBTywwQkFBMEI7SUFvRG5DLFlBQW9CLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7UUFsRHBDLFlBQU8sR0FBZSxFQUFFLENBQUM7UUFDekIsYUFBUSxHQUFpQixFQUFFLENBQUM7UUFhNUIsbUJBQWMsR0FBNEIsSUFBSSxDQUFDO1FBd0IvQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHNUIsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUdmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUdYLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBbERELElBQ0ksTUFBTSxDQUFDLElBQWlDO1FBQ3hDLElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7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QVFMLE1BQU07cUJBRU4sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlckJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXBTbWFydEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWwvdHlwZSc7XG5pbXBvcnQgeyBQZXBTbWFydEZpbHRlckJhc2VGaWVsZCwgSVBlcFNtYXJ0RmlsdGVyRmllbGQgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWwvZmllbGQnO1xuaW1wb3J0IHsgSVBlcFNtYXJ0RmlsdGVyRGF0YSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbC9maWx0ZXInO1xuaW1wb3J0IHsgSVBlcE9wdGlvbiB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtZmlsdGVyLWJ1aWxkZXItaXRlbScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1idWlsZGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbHRlci1idWlsZGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQnVpbGRlckl0ZW1Db21wb25lbnQge1xuICAgIEBJbnB1dCgpIGZvcm1LZXk6IHN0cmluZztcbiAgICBfZmllbGRzOiBBcnJheTxhbnk+ID0gW107XG4gICAgX29wdGlvbnM6IElQZXBPcHRpb25bXSA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZpZWxkcyhsaXN0OiBBcnJheTxJUGVwU21hcnRGaWx0ZXJGaWVsZD4pIHtcbiAgICAgICAgaWYgKGxpc3Q/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkcyA9IGxpc3Q7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gbGlzdC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogZmllbGQuaWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZC5uYW1lXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH07XG4gICAgX3NlbGVjdGVkRmllbGQ6IFBlcFNtYXJ0RmlsdGVyQmFzZUZpZWxkID0gbnVsbDtcbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRGaWVsZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9maWx0ZXI6IElQZXBTbWFydEZpbHRlckRhdGE7XG4gICAgQElucHV0KClcbiAgICBzZXQgZmlsdGVyKHZhbHVlOiBJUGVwU21hcnRGaWx0ZXJEYXRhKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9wYXJlbnRGb3JtOiBGb3JtR3JvdXA7XG4gICAgQElucHV0KClcbiAgICBzZXQgcGFyZW50Rm9ybSh2YWx1ZTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50Rm9ybSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5hZGRUb1BhcmVudEZvcm0oKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBAT3V0cHV0KClcbiAgICBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpXG4gICAgcmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgICB0ZXN0OiBhbnkgPSB7fTtcblxuICAgIF9mb3JtOiBGb3JtR3JvdXA7XG4gICAgZmllbGRXaWR0aCA9IDI2O1xuICAgIGZpbHRlcldpZHRoID0gNjcuNTtcbiAgICBiaW5XaWR0aCA9IDYuNTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlcikge1xuICAgICAgICB0aGlzLnNldHVwRm9ybSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuXG4gICAgfVxuXG4gICAgc2V0dXBGb3JtKCkge1xuICAgICAgICB0aGlzLl9mb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xuICAgICAgICAgICAgZmllbGRJZDogdGhpcy5fZmIuY29udHJvbChudWxsKSxcbiAgICAgICAgICAgIGZpZWxkVHlwZTogdGhpcy5fZmIuY29udHJvbChudWxsKSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxuICAgICAgICAgICAgb3BlcmF0b3JVbml0OiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxuICAgICAgICAgICAgdmFsdWVzOiB0aGlzLl9mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgZmlyc3Q6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiB0aGlzLl9mYi5jb250cm9sKG51bGwpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkVG9QYXJlbnRGb3JtKCkge1xuICAgICAgICB0aGlzLl9wYXJlbnRGb3JtLnNldENvbnRyb2wodGhpcy5mb3JtS2V5LCB0aGlzLl9mb3JtKTtcbiAgICB9XG5cbiAgICBvbkZpZWxkQ2hhbmdlZChrZXkpIHtcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9maWVsZHMuZmluZChmaWVsZCA9PiBmaWVsZC5pZCA9PT0ga2V5KTtcblxuICAgICAgICB0aGlzLnNldHVwRm9ybSgpO1xuICAgICAgICB0aGlzLmFkZFRvUGFyZW50Rm9ybSgpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBoYWNrIGR1ZSB0byBhbmd1bGFyJ3MgY2hhbmdlIGRldGVjdGlvbiBidWcgLVxuICAgICAgICAgKiBFUlJPUiBFcnJvcjogVGhlcmUgaXMgbm8gRm9ybUNvbnRyb2wgaW5zdGFuY2UgYXR0YWNoZWQgdG8gZm9ybSBjb250cm9sIGVsZW1lbnQgd2l0aCBuYW1lOiBbZm9ybUNvbnRyb2xOYW1lXVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRGaWVsZCA9IG51bGw7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRGaWVsZCA9IGl0ZW0gPyBpdGVtIDogbnVsbDtcbiAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBvbkZpbHRlckNoYW5nZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRlbGV0ZUl0ZW1DbGlja2VkKCkge1xuICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KCk7XG4gICAgfVxuXG5cblxufVxuIl19
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { FilterBuilderService } from '../filter-builder.service';
|
|
3
|
+
import { PepOperatorTypes } from '../common/model/type';
|
|
4
|
+
import { PepTypeConvertorService } from '../common/services/type-convertor.service';
|
|
5
|
+
export class FilterBuilderSectionComponent {
|
|
6
|
+
constructor(filterBuilderService, typeConvertorService) {
|
|
7
|
+
this.filterBuilderService = filterBuilderService;
|
|
8
|
+
this.typeConvertorService = typeConvertorService;
|
|
9
|
+
this.remove = new EventEmitter();
|
|
10
|
+
this.operatorChange = new EventEmitter();
|
|
11
|
+
}
|
|
12
|
+
ngOnInit() {
|
|
13
|
+
}
|
|
14
|
+
get f() {
|
|
15
|
+
return this.form.controls;
|
|
16
|
+
}
|
|
17
|
+
onOperatorChanged(value) {
|
|
18
|
+
this.f.operator.setValue(value);
|
|
19
|
+
this.operatorChange.emit();
|
|
20
|
+
}
|
|
21
|
+
onAddRuleClicked() {
|
|
22
|
+
this.filterBuilderService.createItem(null, this.sectionContainer, this.form);
|
|
23
|
+
}
|
|
24
|
+
onAddRuleSetClicked() {
|
|
25
|
+
const result = this.filterBuilderService.createSection(PepOperatorTypes.And, this.sectionContainer, this.form, this.depth + 1);
|
|
26
|
+
this.filterBuilderService.createItem(null, result.containerRef, result.parentForm);
|
|
27
|
+
}
|
|
28
|
+
onDeleteSectionClicked() {
|
|
29
|
+
this.remove.emit();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
FilterBuilderSectionComponent.decorators = [
|
|
33
|
+
{ type: Component, args: [{
|
|
34
|
+
selector: 'pep-filter-builder-section',
|
|
35
|
+
template: "<div fxLayout=\"row\" fxLayoutGap=\".5rem\">\n <div class=\"filter-section-container\" fxLayout=\"row\" fxLayoutAlign=\"flex-start start\" fxLayoutGap=\".5rem\">\n <pep-select fxFlex=\"11\" [value]=\"f.operator.value\" xAlignment=\"left\" [options]=\"typeConvertorService.operators\"\n [renderTitle]=\"false\" [emptyOption]=false (valueChange)=\"onOperatorChanged($event)\">\n </pep-select>\n <div fxFlex=\"89\" class=\"filter-section-wrapper\" fxLayout=\"column\" fxLayoutGap=\".5rem\">\n <ng-container #sectionContainer></ng-container>\n <div fxLayout=\"row\" fxLayoutGap=\".5rem\">\n <pep-button value=\"Add Filter\" styleType=\"weak\" styleStateType=\"system\" sizeType=\"sm\" classNames=\"\"\n [disabled]=\"false\" iconName=\"number_plus\" iconPosition=\"end\" [visible]=\"true\"\n (buttonClick)=\"onAddRuleClicked()\"></pep-button>\n <ng-container *ngIf=\"depth < filterBuilderService.maxDepth-1\">\n <pep-button value=\"Add Filter Group\" styleType=\"weak\" styleStateType=\"system\" sizeType=\"sm\"\n classNames=\"\" [disabled]=\"false\" iconName=\"number_plus\" iconPosition=\"end\" [visible]=\"true\"\n (buttonClick)=\"onAddRuleSetClicked()\"></pep-button>\n </ng-container>\n </div>\n </div>\n </div>\n <pep-button *ngIf=\"depth > 0\" styleType=\"weak\" styleStateType=\"system_bin\" sizeType=\"md\" classNames=\"\"\n [disabled]=\"false\" iconName=\"system_bin\" iconPosition=\"end\" [visible]=\"true\"\n (buttonClick)=\"onDeleteSectionClicked()\">\n </pep-button>\n</div>",
|
|
36
|
+
styles: [".filter-section-wrapper{width:100%}.filter-section-container{border-radius:.25rem;border-radius:var(--pep-border-radius-md,.25rem);padding:.5rem;width:100%}"]
|
|
37
|
+
},] }
|
|
38
|
+
];
|
|
39
|
+
FilterBuilderSectionComponent.ctorParameters = () => [
|
|
40
|
+
{ type: FilterBuilderService },
|
|
41
|
+
{ type: PepTypeConvertorService }
|
|
42
|
+
];
|
|
43
|
+
FilterBuilderSectionComponent.propDecorators = {
|
|
44
|
+
form: [{ type: Input }],
|
|
45
|
+
depth: [{ type: Input }],
|
|
46
|
+
remove: [{ type: Output }],
|
|
47
|
+
operatorChange: [{ type: Output }],
|
|
48
|
+
sectionContainer: [{ type: ViewChild, args: ['sectionContainer', { read: ViewContainerRef, static: true },] }]
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJ1aWxkZXItc2VjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NtYXJ0LWZpbHRlcnMvZmlsdGVyLWJ1aWxkZXIvZmlsdGVyLWJ1aWxkZXItc2VjdGlvbi9maWx0ZXItYnVpbGRlci1zZWN0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQVFwRixNQUFNLE9BQU8sNkJBQTZCO0lBV3RDLFlBQ1csb0JBQTBDLEVBQzFDLG9CQUE2QztRQUQ3Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFSeEQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBUXBDLENBQUM7SUFFRCxRQUFRO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQUs7UUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELG1CQUFtQjtRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OztZQTdDSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLDRCQUE0QjtnQkFDdEMsNnNEQUFzRDs7YUFFekQ7OztZQVRRLG9CQUFvQjtZQUVwQix1QkFBdUI7OzttQkFTM0IsS0FBSztvQkFDTCxLQUFLO3FCQUVMLE1BQU07NkJBRU4sTUFBTTsrQkFHTixTQUFTLFNBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlckJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXBPcGVyYXRvclR5cGVzIH0gZnJvbSAnLi4vY29tbW9uL21vZGVsL3R5cGUnO1xuaW1wb3J0IHsgUGVwVHlwZUNvbnZlcnRvclNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vc2VydmljZXMvdHlwZS1jb252ZXJ0b3Iuc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtZmlsdGVyLWJ1aWxkZXItc2VjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1idWlsZGVyLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbHRlci1idWlsZGVyLXNlY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQnVpbGRlclNlY3Rpb25Db21wb25lbnQge1xuICAgIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcbiAgICBASW5wdXQoKSBkZXB0aDogbnVtYmVyO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIG9wZXJhdG9yQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc2VjdGlvbkNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIHNlY3Rpb25Db250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGZpbHRlckJ1aWxkZXJTZXJ2aWNlOiBGaWx0ZXJCdWlsZGVyU2VydmljZSxcbiAgICAgICAgcHVibGljIHR5cGVDb252ZXJ0b3JTZXJ2aWNlOiBQZXBUeXBlQ29udmVydG9yU2VydmljZVxuICAgICkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgIH1cblxuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIG9uT3BlcmF0b3JDaGFuZ2VkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZi5vcGVyYXRvci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMub3BlcmF0b3JDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIG9uQWRkUnVsZUNsaWNrZWQoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQnVpbGRlclNlcnZpY2UuY3JlYXRlSXRlbShudWxsLCB0aGlzLnNlY3Rpb25Db250YWluZXIsIHRoaXMuZm9ybSk7XG4gICAgfVxuXG4gICAgb25BZGRSdWxlU2V0Q2xpY2tlZCgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maWx0ZXJCdWlsZGVyU2VydmljZS5jcmVhdGVTZWN0aW9uKFBlcE9wZXJhdG9yVHlwZXMuQW5kLCB0aGlzLnNlY3Rpb25Db250YWluZXIsIHRoaXMuZm9ybSwgdGhpcy5kZXB0aCArIDEpO1xuICAgICAgICB0aGlzLmZpbHRlckJ1aWxkZXJTZXJ2aWNlLmNyZWF0ZUl0ZW0obnVsbCwgcmVzdWx0LmNvbnRhaW5lclJlZiwgcmVzdWx0LnBhcmVudEZvcm0pO1xuICAgIH1cblxuICAgIG9uRGVsZXRlU2VjdGlvbkNsaWNrZWQoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlLmVtaXQoKTtcbiAgICB9XG5cblxufVxuIl19
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { FilterBuilderService } from './filter-builder.service';
|
|
3
|
+
import { FormBuilder } from '@angular/forms';
|
|
4
|
+
export class FilterBuilderComponent {
|
|
5
|
+
constructor(_fb, _filterBuilderService) {
|
|
6
|
+
this._fb = _fb;
|
|
7
|
+
this._filterBuilderService = _filterBuilderService;
|
|
8
|
+
this.json = null;
|
|
9
|
+
this.fields = new Array();
|
|
10
|
+
this.filters = new EventEmitter();
|
|
11
|
+
this.formValidationChange = new EventEmitter();
|
|
12
|
+
this._isFormValid = true;
|
|
13
|
+
this.setupForm();
|
|
14
|
+
this._formSubscription$ = this.form.valueChanges.subscribe((val) => {
|
|
15
|
+
if (this.form.valid !== this._isFormValid) {
|
|
16
|
+
this._isFormValid = this.form.valid;
|
|
17
|
+
this.formValidationChange.emit(this._isFormValid);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
this._outputJsonSubscription$ = this._filterBuilderService.triggerOutputJson.subscribe((outputJson) => {
|
|
21
|
+
this.filters.emit(outputJson);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
setupForm() {
|
|
25
|
+
this.form = this._fb.group({});
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
this._filterBuilderService.createFilterTree(this.json, this.fields, this.form, this.filterRoot);
|
|
29
|
+
}
|
|
30
|
+
/*
|
|
31
|
+
ngAfterViewInit() {
|
|
32
|
+
//this._filterBuilderService.createFilterTree(this.json, this.fields, this.form, this.filterRoot);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
ngAfterViewChecked() {
|
|
36
|
+
//this._changeDetectionRef.detectChanges();
|
|
37
|
+
} */
|
|
38
|
+
ngOnDestroy() {
|
|
39
|
+
if (this._formSubscription$) {
|
|
40
|
+
this._formSubscription$.unsubscribe();
|
|
41
|
+
}
|
|
42
|
+
if (this._outputJsonSubscription$) {
|
|
43
|
+
this._outputJsonSubscription$.unsubscribe();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
FilterBuilderComponent.decorators = [
|
|
48
|
+
{ type: Component, args: [{
|
|
49
|
+
selector: 'pep-filter-builder',
|
|
50
|
+
template: "<!-- <div class=\"filter-builder-container\"> -->\n<ng-container #filterRoot></ng-container>\n<!-- </div> -->",
|
|
51
|
+
styles: [""]
|
|
52
|
+
},] }
|
|
53
|
+
];
|
|
54
|
+
FilterBuilderComponent.ctorParameters = () => [
|
|
55
|
+
{ type: FormBuilder },
|
|
56
|
+
{ type: FilterBuilderService }
|
|
57
|
+
];
|
|
58
|
+
FilterBuilderComponent.propDecorators = {
|
|
59
|
+
json: [{ type: Input }],
|
|
60
|
+
fields: [{ type: Input }],
|
|
61
|
+
filters: [{ type: Output }],
|
|
62
|
+
formValidationChange: [{ type: Output }],
|
|
63
|
+
filterRoot: [{ type: ViewChild, args: ['filterRoot', { read: ViewContainerRef, static: true },] }]
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zbWFydC1maWx0ZXJzL2ZpbHRlci1idWlsZGVyL2ZpbHRlci1idWlsZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUlOLFNBQVMsRUFDVCxnQkFBZ0IsRUFHbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFhLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXhELE1BQU0sT0FBTyxzQkFBc0I7SUFrQi9CLFlBQ1ksR0FBZ0IsRUFDaEIscUJBQTJDO1FBRDNDLFFBQUcsR0FBSCxHQUFHLENBQWE7UUFDaEIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQjtRQW5COUMsU0FBSSxHQUFvQixJQUFJLENBQUM7UUFDN0IsV0FBTSxHQUFxQixJQUFJLEtBQUssRUFBYSxDQUFDO1FBRzNELFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVyRCx5QkFBb0IsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQU8xRSxpQkFBWSxHQUFZLElBQUksQ0FBQztRQVF6QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQy9ELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDckQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUNELFFBQVE7UUFDSixJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRDs7Ozs7OztRQU9JO0lBRUosV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN6QztRQUNELElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQy9CLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMvQztJQUNMLENBQUM7OztZQTlESixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIseUhBQThDOzthQUVqRDs7O1lBUG1CLFdBQVc7WUFEdEIsb0JBQW9COzs7bUJBVXhCLEtBQUs7cUJBQ0wsS0FBSztzQkFFTCxNQUFNO21DQUVOLE1BQU07eUJBR04sU0FBUyxTQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBPbkluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWZcblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElQZXBGaWVsZCwgSVBlcEpTT05TZWN0aW9uIH0gZnJvbSAnLi9jb21tb24vbW9kZWwvbGVnYWN5JztcbmltcG9ydCB7IEZpbHRlckJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi9maWx0ZXItYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtZmlsdGVyLWJ1aWxkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBqc29uOiBJUGVwSlNPTlNlY3Rpb24gPSBudWxsO1xuICAgIEBJbnB1dCgpIGZpZWxkczogQXJyYXk8SVBlcEZpZWxkPiA9IG5ldyBBcnJheTxJUGVwRmllbGQ+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBmaWx0ZXJzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1WYWxpZGF0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdmaWx0ZXJSb290JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgZmlsdGVyUm9vdDogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIF9mb3JtU3Vic2NyaXB0aW9uJDogU3Vic2NyaXB0aW9uO1xuICAgIF9vdXRwdXRKc29uU3Vic2NyaXB0aW9uJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgX2lzRm9ybVZhbGlkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgX2ZpbHRlckJ1aWxkZXJTZXJ2aWNlOiBGaWx0ZXJCdWlsZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnNldHVwRm9ybSgpO1xuICAgICAgICB0aGlzLl9mb3JtU3Vic2NyaXB0aW9uJCA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0udmFsaWQgIT09IHRoaXMuX2lzRm9ybVZhbGlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNGb3JtVmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkNoYW5nZS5lbWl0KHRoaXMuX2lzRm9ybVZhbGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX291dHB1dEpzb25TdWJzY3JpcHRpb24kID0gdGhpcy5fZmlsdGVyQnVpbGRlclNlcnZpY2UudHJpZ2dlck91dHB1dEpzb24uc3Vic2NyaWJlKChvdXRwdXRKc29uKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMuZW1pdChvdXRwdXRKc29uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0dXBGb3JtKCkge1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLl9mYi5ncm91cCh7fSlcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckJ1aWxkZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlclRyZWUodGhpcy5qc29uLCB0aGlzLmZpZWxkcywgdGhpcy5mb3JtLCB0aGlzLmZpbHRlclJvb3QpO1xuICAgIH1cblxuICAgIC8qXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvL3RoaXMuX2ZpbHRlckJ1aWxkZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlclRyZWUodGhpcy5qc29uLCB0aGlzLmZpZWxkcywgdGhpcy5mb3JtLCB0aGlzLmZpbHRlclJvb3QpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgLy90aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gKi9cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5fZm9ybVN1YnNjcmlwdGlvbiQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1TdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX291dHB1dEpzb25TdWJzY3JpcHRpb24kKSB7XG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRKc29uU3Vic2NyaXB0aW9uJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { Injectable, ComponentFactoryResolver } from '@angular/core';
|
|
2
|
+
import { FormBuilder } from '@angular/forms';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { PepSmartFilterOperators } from '../common/model/operator';
|
|
5
|
+
import { createSmartFilter, createSmartFilterField } from '../common/model/creator';
|
|
6
|
+
//import { getSmartBuilderType } from './common/model/type';
|
|
7
|
+
//import { convertToSmartFilterFields } from './common/model/field';
|
|
8
|
+
import { getSmartBuilderOperator } from './common/model/operator';
|
|
9
|
+
import { FilterBuilderSectionComponent } from './filter-builder-section/filter-builder-section.component';
|
|
10
|
+
import { FilterBuilderItemComponent } from './filter-builder-item/filter-builder-item.component';
|
|
11
|
+
import { PepFilterBuilderTypeMap } from './common/model/type-map';
|
|
12
|
+
import { getSmartBuilderOperationUnit } from './common/model/operator-unit';
|
|
13
|
+
//import { PepFilterBuilderOperatorUnitMap } from './common/model/operator-unit-map';
|
|
14
|
+
import { PepOutputFilterService } from './common/services/output-filter.service';
|
|
15
|
+
import { PepOperatorTypes } from './common/model/type';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
import * as i1 from "@angular/forms";
|
|
18
|
+
import * as i2 from "./common/services/output-filter.service";
|
|
19
|
+
export class FilterBuilderService {
|
|
20
|
+
constructor(_fb, _resolver, _outputJsonService) {
|
|
21
|
+
this._fb = _fb;
|
|
22
|
+
this._resolver = _resolver;
|
|
23
|
+
this._outputJsonService = _outputJsonService;
|
|
24
|
+
this.MAX_STRUCTURE_DEPTH = 3;
|
|
25
|
+
this._outputJsonSubject = new BehaviorSubject(null);
|
|
26
|
+
this.triggerOutputJson = this._outputJsonSubject.asObservable();
|
|
27
|
+
}
|
|
28
|
+
get maxDepth() {
|
|
29
|
+
return this.MAX_STRUCTURE_DEPTH;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* creates a dynamic filter structure
|
|
33
|
+
* might has a different structure than the input's due to merge of parent-child elements
|
|
34
|
+
* @param json legacy JSON
|
|
35
|
+
* @param fields an array of legacy fields
|
|
36
|
+
* @param containerRef reference to root element
|
|
37
|
+
*/
|
|
38
|
+
createFilterTree(json, fields, form, containerRef) {
|
|
39
|
+
this._form = form;
|
|
40
|
+
this._smartFilterFields = this.convertToSmartFilterFields(fields);
|
|
41
|
+
const result = this.createSection((json === null || json === void 0 ? void 0 : json.Operation) ? json.Operation : PepOperatorTypes.And, containerRef, this._form, 0);
|
|
42
|
+
if (json) {
|
|
43
|
+
this.flatten(json, json.LeftNode, result.containerRef, result.parentForm, 1);
|
|
44
|
+
this.flatten(json, json.RightNode, result.containerRef, result.parentForm, 1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* checks if the object contains property
|
|
49
|
+
* @param obj object
|
|
50
|
+
* @param prop property name
|
|
51
|
+
* @returns true if contains, false otherwise
|
|
52
|
+
*/
|
|
53
|
+
hasProperty(obj, prop) {
|
|
54
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* a recursive function dynamically builds filters structure
|
|
58
|
+
* @param parent legacy complex object
|
|
59
|
+
* @param current child legacy object (either another complex or expression type)
|
|
60
|
+
* @param containerRef parent element
|
|
61
|
+
* @param parentForm parent form
|
|
62
|
+
*/
|
|
63
|
+
flatten(parent, current, containerRef, parentForm, depth) {
|
|
64
|
+
if (this.hasProperty(current, 'ComplexId')) {
|
|
65
|
+
const section = current;
|
|
66
|
+
if (parent.Operation === current.Operation) {
|
|
67
|
+
this.flatten(parent, section.LeftNode, containerRef, parentForm, depth);
|
|
68
|
+
this.flatten(parent, section.RightNode, containerRef, parentForm, depth);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const result = this.createSection(section.Operation, containerRef, parentForm, depth);
|
|
72
|
+
this.flatten(section, section.LeftNode, result.containerRef, result.parentForm, depth + 1);
|
|
73
|
+
this.flatten(section, section.RightNode, result.containerRef, result.parentForm, depth + 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (this.hasProperty(current, 'ExpressionId')) {
|
|
77
|
+
this.createItem(current, containerRef, parentForm);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* creates a container object of two or more child filter items
|
|
82
|
+
* @param operator AND/OR operator
|
|
83
|
+
* @param containerRef parent element
|
|
84
|
+
* @param parentForm parent form
|
|
85
|
+
* @param depth
|
|
86
|
+
* @returns an object containing the current element and current form
|
|
87
|
+
*/
|
|
88
|
+
createSection(operator, containerRef, parentForm, depth) {
|
|
89
|
+
const factory = this._resolver.resolveComponentFactory(FilterBuilderSectionComponent);
|
|
90
|
+
let componentRef = containerRef.createComponent(factory);
|
|
91
|
+
let sectionGroup = this._fb.group({
|
|
92
|
+
operator: this._fb.control(operator)
|
|
93
|
+
});
|
|
94
|
+
let counter = 1;
|
|
95
|
+
Object.keys(parentForm.controls).forEach(item => { if (item.includes('section')) {
|
|
96
|
+
counter++;
|
|
97
|
+
} });
|
|
98
|
+
let formKey = `section${counter}`;
|
|
99
|
+
parentForm.addControl(formKey, sectionGroup);
|
|
100
|
+
componentRef.instance.depth = depth;
|
|
101
|
+
componentRef.instance.form = sectionGroup;
|
|
102
|
+
componentRef.instance.remove.subscribe(() => {
|
|
103
|
+
parentForm.removeControl(formKey);
|
|
104
|
+
componentRef.destroy();
|
|
105
|
+
this.createOutputJson();
|
|
106
|
+
});
|
|
107
|
+
componentRef.instance.operatorChange.subscribe(() => {
|
|
108
|
+
this.createOutputJson();
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
containerRef: componentRef.instance.sectionContainer,
|
|
112
|
+
parentForm: sectionGroup
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* creates a component represents filter item (leaf element - has no childs)
|
|
117
|
+
* @param current filter legacy element
|
|
118
|
+
* @param containerRef parent element
|
|
119
|
+
* @param parentForm parent form
|
|
120
|
+
*/
|
|
121
|
+
createItem(current, containerRef, parentForm) {
|
|
122
|
+
const factory = this._resolver.resolveComponentFactory(FilterBuilderItemComponent);
|
|
123
|
+
let componentRef = containerRef.createComponent(factory);
|
|
124
|
+
let counter = 1;
|
|
125
|
+
Object.keys(parentForm.controls).forEach(item => { if (item.includes('item')) {
|
|
126
|
+
counter++;
|
|
127
|
+
} });
|
|
128
|
+
let formKey = `item${counter}`;
|
|
129
|
+
componentRef.instance.formKey = formKey;
|
|
130
|
+
componentRef.instance.fields = this._smartFilterFields;
|
|
131
|
+
const selectedField = this.getSelectedField(current);
|
|
132
|
+
if (selectedField) {
|
|
133
|
+
componentRef.instance.selected = selectedField;
|
|
134
|
+
if (current) {
|
|
135
|
+
componentRef.instance.filter = this.getFilter(current, selectedField);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
componentRef.instance.parentForm = parentForm;
|
|
139
|
+
componentRef.instance.filterChange.subscribe(() => {
|
|
140
|
+
this.createOutputJson();
|
|
141
|
+
});
|
|
142
|
+
componentRef.instance.remove.subscribe(() => {
|
|
143
|
+
parentForm.removeControl(formKey);
|
|
144
|
+
componentRef.destroy();
|
|
145
|
+
this.createOutputJson();
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* creates a smart filter object
|
|
150
|
+
* @param current filter legacy element
|
|
151
|
+
* @param field filter's selected field
|
|
152
|
+
* @returns smart filter object
|
|
153
|
+
*/
|
|
154
|
+
getFilter(current, field) {
|
|
155
|
+
let operator = getSmartBuilderOperator(current.Operation, field.type);
|
|
156
|
+
if (operator) {
|
|
157
|
+
let filterValues = this.getFilterValues(current, operator, field);
|
|
158
|
+
return createSmartFilter(current.ApiName, operator, filterValues.first, filterValues.second, filterValues.operationUnit);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* get smart filter field
|
|
166
|
+
* @param current filter legacy element
|
|
167
|
+
* @returns smart filter field, if not found returns the first fields
|
|
168
|
+
*/
|
|
169
|
+
getSelectedField(current) {
|
|
170
|
+
var _a, _b;
|
|
171
|
+
if (current) {
|
|
172
|
+
let item = this._smartFilterFields.find(field => field.id === current.ApiName);
|
|
173
|
+
return item ? item : ((_a = this._smartFilterFields) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this._smartFilterFields[0] : null;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
return ((_b = this._smartFilterFields) === null || _b === void 0 ? void 0 : _b.length) > 0 ? this._smartFilterFields[0] : null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* gets smart filter's values data
|
|
181
|
+
* @param current filter legacy element
|
|
182
|
+
* @param operator smart filter operator
|
|
183
|
+
* @param field filter's selected field
|
|
184
|
+
* @returns object contains the filter values data
|
|
185
|
+
*/
|
|
186
|
+
getFilterValues(current, operator, field) {
|
|
187
|
+
var _a, _b, _c, _d, _e;
|
|
188
|
+
let data = {
|
|
189
|
+
first: null,
|
|
190
|
+
second: null,
|
|
191
|
+
operationUnit: null
|
|
192
|
+
};
|
|
193
|
+
if (operator === PepSmartFilterOperators.In) { //multi select
|
|
194
|
+
//filter keys don't exist on field options
|
|
195
|
+
data.first = ((_a = current === null || current === void 0 ? void 0 : current.Values) === null || _a === void 0 ? void 0 : _a.length) > 0 ? current.Values.filter(item => {
|
|
196
|
+
return field.options.find(option => option.key === item);
|
|
197
|
+
}) : null;
|
|
198
|
+
}
|
|
199
|
+
else if (operator === PepSmartFilterOperators.InTheLast ||
|
|
200
|
+
operator === PepSmartFilterOperators.NotInTheLast ||
|
|
201
|
+
operator === PepSmartFilterOperators.DueIn ||
|
|
202
|
+
operator === PepSmartFilterOperators.NotDueIn) { //operation unit
|
|
203
|
+
data.first = ((_b = current === null || current === void 0 ? void 0 : current.Values) === null || _b === void 0 ? void 0 : _b.length) > 0 ? current.Values[0] : null;
|
|
204
|
+
if (((_c = current === null || current === void 0 ? void 0 : current.Values) === null || _c === void 0 ? void 0 : _c.length) === 2) {
|
|
205
|
+
data.operationUnit = getSmartBuilderOperationUnit(current.Values[1]);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
data.first = ((_d = current === null || current === void 0 ? void 0 : current.Values) === null || _d === void 0 ? void 0 : _d.length) > 0 ? current.Values[0] : null;
|
|
210
|
+
data.second = ((_e = current === null || current === void 0 ? void 0 : current.Values) === null || _e === void 0 ? void 0 : _e.length) === 2 ? current.Values[1] : null;
|
|
211
|
+
}
|
|
212
|
+
return data;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* converts legacy fields to smart filter fields
|
|
216
|
+
* @param fields legacy fields array
|
|
217
|
+
* @returns smart filter fields array
|
|
218
|
+
*/
|
|
219
|
+
convertToSmartFilterFields(fields) {
|
|
220
|
+
if ((fields === null || fields === void 0 ? void 0 : fields.length) > 0) {
|
|
221
|
+
const typeMapper = new PepFilterBuilderTypeMap();
|
|
222
|
+
return fields.map((field) => {
|
|
223
|
+
var _a;
|
|
224
|
+
return createSmartFilterField({
|
|
225
|
+
id: field.FieldID,
|
|
226
|
+
name: field.Title,
|
|
227
|
+
options: (_a = field.OptionalValues) === null || _a === void 0 ? void 0 : _a.map(option => {
|
|
228
|
+
return {
|
|
229
|
+
key: option.Key,
|
|
230
|
+
value: option.Value
|
|
231
|
+
};
|
|
232
|
+
})
|
|
233
|
+
}, typeMapper.getSmartBuilderType(field.FieldType));
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
return [];
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* creates a legacy output JSON
|
|
242
|
+
*/
|
|
243
|
+
createOutputJson() {
|
|
244
|
+
if (this._form.valid) {
|
|
245
|
+
const json = this._outputJsonService.generateJson(this._form.value, this._smartFilterFields);
|
|
246
|
+
this._outputJsonSubject.next(json);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
FilterBuilderService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FilterBuilderService_Factory() { return new FilterBuilderService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i2.PepOutputFilterService)); }, token: FilterBuilderService, providedIn: "root" });
|
|
251
|
+
FilterBuilderService.decorators = [
|
|
252
|
+
{ type: Injectable, args: [{
|
|
253
|
+
providedIn: 'root'
|
|
254
|
+
},] }
|
|
255
|
+
];
|
|
256
|
+
FilterBuilderService.ctorParameters = () => [
|
|
257
|
+
{ type: FormBuilder },
|
|
258
|
+
{ type: ComponentFactoryResolver },
|
|
259
|
+
{ type: PepOutputFilterService }
|
|
260
|
+
];
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJ1aWxkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvc21hcnQtZmlsdGVycy9maWx0ZXItYnVpbGRlci9maWx0ZXItYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQW9CLHdCQUF3QixFQUV6RCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUEwQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNdkMsT0FBTyxFQUFFLHVCQUF1QixFQUEyQixNQUFNLDBCQUEwQixDQUFDO0FBRTVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BGLDREQUE0RDtBQUM1RCxvRUFBb0U7QUFDcEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDMUcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUUscUZBQXFGO0FBQ3JGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBS3ZELE1BQU0sT0FBTyxvQkFBb0I7SUFVN0IsWUFBb0IsR0FBZ0IsRUFBVSxTQUFtQyxFQUFVLGtCQUEwQztRQUFqSCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FB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QVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUF4QlEsV0FBVztZQUhjLHdCQUF3QjtZQXFCakQsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50RmFjdG9yeSwgQ29tcG9uZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBQZXBTbWFydEZpbHRlcnNNb2R1bGUgfSBmcm9tICcuLi9zbWFydC1maWx0ZXJzLm1vZHVsZSc7XG5pbXBvcnQgeyBJUGVwRmllbGQsIElQZXBKU09OU2VjdGlvbiwgSVBlcEpTT05JdGVtIH0gZnJvbSAnLi9jb21tb24vbW9kZWwvbGVnYWN5JztcbmltcG9ydCB7IFBlcFNtYXJ0RmlsdGVyQmFzZUZpZWxkLCBJUGVwU21hcnRGaWx0ZXJGaWVsZCwgSVBlcFNtYXJ0RmlsdGVyRmllbGRPcHRpb24gfSBmcm9tICcuLi9jb21tb24vbW9kZWwvZmllbGQnO1xuaW1wb3J0IHsgSVBlcFNtYXJ0RmlsdGVyRGF0YSB9IGZyb20gJy4uL2NvbW1vbi9tb2RlbC9maWx0ZXInO1xuaW1wb3J0IHsgUGVwU21hcnRGaWx0ZXJPcGVyYXRvcnMsIElQZXBTbWFydEZpbHRlck9wZXJhdG9yIH0gZnJvbSAnLi4vY29tbW9uL21vZGVsL29wZXJhdG9yJztcbmltcG9ydCB7IFBlcFNtYXJ0RmlsdGVyVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9tb2RlbC90eXBlJ1xuaW1wb3J0IHsgY3JlYXRlU21hcnRGaWx0ZXIsIGNyZWF0ZVNtYXJ0RmlsdGVyRmllbGQgfSBmcm9tICcuLi9jb21tb24vbW9kZWwvY3JlYXRvcic7XG4vL2ltcG9ydCB7IGdldFNtYXJ0QnVpbGRlclR5cGUgfSBmcm9tICcuL2NvbW1vbi9tb2RlbC90eXBlJztcbi8vaW1wb3J0IHsgY29udmVydFRvU21hcnRGaWx0ZXJGaWVsZHMgfSBmcm9tICcuL2NvbW1vbi9tb2RlbC9maWVsZCc7XG5pbXBvcnQgeyBnZXRTbWFydEJ1aWxkZXJPcGVyYXRvciB9IGZyb20gJy4vY29tbW9uL21vZGVsL29wZXJhdG9yJztcbmltcG9ydCB7IEZpbHRlckJ1aWxkZXJTZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9maWx0ZXItYnVpbGRlci1zZWN0aW9uL2ZpbHRlci1idWlsZGVyLXNlY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEZpbHRlckJ1aWxkZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9maWx0ZXItYnVpbGRlci1pdGVtL2ZpbHRlci1idWlsZGVyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFBlcEZpbHRlckJ1aWxkZXJUeXBlTWFwIH0gZnJvbSAnLi9jb21tb24vbW9kZWwvdHlwZS1tYXAnO1xuaW1wb3J0IHsgZ2V0U21hcnRCdWlsZGVyT3BlcmF0aW9uVW5pdCB9IGZyb20gJy4vY29tbW9uL21vZGVsL29wZXJhdG9yLXVuaXQnO1xuLy9pbXBvcnQgeyBQZXBGaWx0ZXJCdWlsZGVyT3BlcmF0b3JVbml0TWFwIH0gZnJvbSAnLi9jb21tb24vbW9kZWwvb3BlcmF0b3ItdW5pdC1tYXAnO1xuaW1wb3J0IHsgUGVwT3V0cHV0RmlsdGVyU2VydmljZSB9IGZyb20gJy4vY29tbW9uL3NlcnZpY2VzL291dHB1dC1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJUGVwRmlsdGVyQnVpbGRlclZhbHVlcyB9IGZyb20gJy4vY29tbW9uL21vZGVsL2ZpbHRlcic7XG5pbXBvcnQgeyBQZXBPcGVyYXRvclR5cGVzIH0gZnJvbSAnLi9jb21tb24vbW9kZWwvdHlwZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQnVpbGRlclNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTUFYX1NUUlVDVFVSRV9ERVBUSDogbnVtYmVyID0gMztcblxuICAgIHByaXZhdGUgX291dHB1dEpzb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gICAgcHJpdmF0ZSBfc21hcnRGaWx0ZXJGaWVsZHM6IEFycmF5PElQZXBTbWFydEZpbHRlckZpZWxkPjtcbiAgICBwcml2YXRlIF9mb3JtOiBGb3JtR3JvdXA7XG5cbiAgICBwdWJsaWMgdHJpZ2dlck91dHB1dEpzb24gPSB0aGlzLl9vdXRwdXRKc29uU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgcHJpdmF0ZSBfb3V0cHV0SnNvblNlcnZpY2U6IFBlcE91dHB1dEZpbHRlclNlcnZpY2UpIHtcblxuICAgIH1cblxuICAgIGdldCBtYXhEZXB0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5NQVhfU1RSVUNUVVJFX0RFUFRIO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgYSBkeW5hbWljIGZpbHRlciBzdHJ1Y3R1cmVcbiAgICAgKiBtaWdodCBoYXMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIHRoYW4gdGhlIGlucHV0J3MgZHVlIHRvIG1lcmdlIG9mIHBhcmVudC1jaGlsZCBlbGVtZW50c1xuICAgICAqIEBwYXJhbSBqc29uIGxlZ2FjeSBKU09OXG4gICAgICogQHBhcmFtIGZpZWxkcyBhbiBhcnJheSBvZiBsZWdhY3kgZmllbGRzICAgICBcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyUmVmIHJlZmVyZW5jZSB0byByb290IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVGaWx0ZXJUcmVlKFxuICAgICAgICBqc29uOiBJUGVwSlNPTlNlY3Rpb24gfCBudWxsLFxuICAgICAgICBmaWVsZHM6IEFycmF5PElQZXBGaWVsZD4sXG4gICAgICAgIGZvcm06IEZvcm1Hcm91cCxcbiAgICAgICAgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2Zvcm0gPSBmb3JtO1xuICAgICAgICB0aGlzLl9zbWFydEZpbHRlckZpZWxkcyA9IHRoaXMuY29udmVydFRvU21hcnRGaWx0ZXJGaWVsZHMoZmllbGRzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jcmVhdGVTZWN0aW9uKGpzb24/Lk9wZXJhdGlvbiA/IGpzb24uT3BlcmF0aW9uIDogUGVwT3BlcmF0b3JUeXBlcy5BbmQsIGNvbnRhaW5lclJlZiwgdGhpcy5fZm9ybSwgMCk7XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgICB0aGlzLmZsYXR0ZW4oanNvbiwganNvbi5MZWZ0Tm9kZSwgcmVzdWx0LmNvbnRhaW5lclJlZiwgcmVzdWx0LnBhcmVudEZvcm0sIDEpO1xuICAgICAgICAgICAgdGhpcy5mbGF0dGVuKGpzb24sIGpzb24uUmlnaHROb2RlLCByZXN1bHQuY29udGFpbmVyUmVmLCByZXN1bHQucGFyZW50Rm9ybSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIGNoZWNrcyBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHByb3BlcnR5XG4gICAgKiBAcGFyYW0gb2JqIG9iamVjdFxuICAgICogQHBhcmFtIHByb3AgcHJvcGVydHkgbmFtZVxuICAgICogQHJldHVybnMgdHJ1ZSBpZiBjb250YWlucywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgKi9cbiAgICBwcml2YXRlIGhhc1Byb3BlcnR5KG9iaiwgcHJvcCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYSByZWN1cnNpdmUgZnVuY3Rpb24gZHluYW1pY2FsbHkgYnVpbGRzIGZpbHRlcnMgc3RydWN0dXJlXG4gICAgICogQHBhcmFtIHBhcmVudCBsZWdhY3kgY29tcGxleCBvYmplY3RcbiAgICAgKiBAcGFyYW0gY3VycmVudCBjaGlsZCBsZWdhY3kgb2JqZWN0IChlaXRoZXIgYW5vdGhlciBjb21wbGV4IG9yIGV4cHJlc3Npb24gdHlwZSlcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyUmVmIHBhcmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHBhcmVudEZvcm0gcGFyZW50IGZvcm1cbiAgICAgKi9cbiAgICBwcml2YXRlIGZsYXR0ZW4ocGFyZW50OiBJUGVwSlNPTlNlY3Rpb24sIGN1cnJlbnQ6IElQZXBKU09OU2VjdGlvbiB8IElQZXBKU09OSXRlbSwgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBwYXJlbnRGb3JtOiBGb3JtR3JvdXAsIGRlcHRoOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvcGVydHkoY3VycmVudCwgJ0NvbXBsZXhJZCcpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gY3VycmVudCBhcyBJUGVwSlNPTlNlY3Rpb247XG4gICAgICAgICAgICBpZiAocGFyZW50Lk9wZXJhdGlvbiA9PT0gY3VycmVudC5PcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXR0ZW4ocGFyZW50LCBzZWN0aW9uLkxlZnROb2RlLCBjb250YWluZXJSZWYsIHBhcmVudEZvcm0sIGRlcHRoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXR0ZW4ocGFyZW50LCBzZWN0aW9uLlJpZ2h0Tm9kZSwgY29udGFpbmVyUmVmLCBwYXJlbnRGb3JtLCBkZXB0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlU2VjdGlvbihzZWN0aW9uLk9wZXJhdGlvbiwgY29udGFpbmVyUmVmLCBwYXJlbnRGb3JtLCBkZXB0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0dGVuKHNlY3Rpb24sIHNlY3Rpb24uTGVmdE5vZGUsIHJlc3VsdC5jb250YWluZXJSZWYsIHJlc3VsdC5wYXJlbnRGb3JtLCBkZXB0aCArIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlbihzZWN0aW9uLCBzZWN0aW9uLlJpZ2h0Tm9kZSwgcmVzdWx0LmNvbnRhaW5lclJlZiwgcmVzdWx0LnBhcmVudEZvcm0sIGRlcHRoICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQcm9wZXJ0eShjdXJyZW50LCAnRXhwcmVzc2lvbklkJykpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSXRlbShjdXJyZW50IGFzIElQZXBKU09OSXRlbSwgY29udGFpbmVyUmVmLCBwYXJlbnRGb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IG9mIHR3byBvciBtb3JlIGNoaWxkIGZpbHRlciBpdGVtc1xuICAgICAqIEBwYXJhbSBvcGVyYXRvciBBTkQvT1Igb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyUmVmIHBhcmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHBhcmVudEZvcm0gcGFyZW50IGZvcm1cbiAgICAgKiBAcGFyYW0gZGVwdGhcbiAgICAgKiBAcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgY3VycmVudCBlbGVtZW50IGFuZCBjdXJyZW50IGZvcm1cbiAgICAgKi9cbiAgICBjcmVhdGVTZWN0aW9uKG9wZXJhdG9yOiBQZXBPcGVyYXRvclR5cGVzLCBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIHBhcmVudEZvcm06IEZvcm1Hcm91cCwgZGVwdGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5fcmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoRmlsdGVyQnVpbGRlclNlY3Rpb25Db21wb25lbnQpO1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gY29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcblxuICAgICAgICBsZXQgc2VjdGlvbkdyb3VwID0gdGhpcy5fZmIuZ3JvdXAoe1xuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuX2ZiLmNvbnRyb2wob3BlcmF0b3IpXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY291bnRlciA9IDE7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmVudEZvcm0uY29udHJvbHMpLmZvckVhY2goaXRlbSA9PiB7IGlmIChpdGVtLmluY2x1ZGVzKCdzZWN0aW9uJykpIHsgY291bnRlcisrOyB9IH0pO1xuICAgICAgICBsZXQgZm9ybUtleTogc3RyaW5nID0gYHNlY3Rpb24ke2NvdW50ZXJ9YDtcbiAgICAgICAgcGFyZW50Rm9ybS5hZGRDb250cm9sKGZvcm1LZXksIHNlY3Rpb25Hcm91cCk7XG5cbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRlcHRoID0gZGVwdGg7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5mb3JtID0gc2VjdGlvbkdyb3VwO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucmVtb3ZlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBwYXJlbnRGb3JtLnJlbW92ZUNvbnRyb2woZm9ybUtleSk7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVPdXRwdXRKc29uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uub3BlcmF0b3JDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlT3V0cHV0SnNvbigpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGFpbmVyUmVmOiBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VjdGlvbkNvbnRhaW5lcixcbiAgICAgICAgICAgIHBhcmVudEZvcm06IHNlY3Rpb25Hcm91cFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgYSBjb21wb25lbnQgcmVwcmVzZW50cyBmaWx0ZXIgaXRlbSAobGVhZiBlbGVtZW50IC0gaGFzIG5vIGNoaWxkcylcbiAgICAgKiBAcGFyYW0gY3VycmVudCBmaWx0ZXIgbGVnYWN5IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyUmVmIHBhcmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHBhcmVudEZvcm0gcGFyZW50IGZvcm1cbiAgICAgKi9cbiAgICBjcmVhdGVJdGVtKGN1cnJlbnQ6IElQZXBKU09OSXRlbSwgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBwYXJlbnRGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuX3Jlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEZpbHRlckJ1aWxkZXJJdGVtQ29tcG9uZW50KTtcbiAgICAgICAgbGV0IGNvbXBvbmVudFJlZiA9IGNvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XG5cbiAgICAgICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJlbnRGb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGl0ZW0gPT4geyBpZiAoaXRlbS5pbmNsdWRlcygnaXRlbScpKSB7IGNvdW50ZXIrKzsgfSB9KTtcbiAgICAgICAgbGV0IGZvcm1LZXk6IHN0cmluZyA9IGBpdGVtJHtjb3VudGVyfWA7XG5cbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmZvcm1LZXkgPSBmb3JtS2V5O1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmllbGRzID0gdGhpcy5fc21hcnRGaWx0ZXJGaWVsZHM7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRmllbGQgPSB0aGlzLmdldFNlbGVjdGVkRmllbGQoY3VycmVudCk7XG4gICAgICAgIGlmIChzZWxlY3RlZEZpZWxkKSB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VsZWN0ZWQgPSBzZWxlY3RlZEZpZWxkO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXIoY3VycmVudCwgc2VsZWN0ZWRGaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhcmVudEZvcm0gPSBwYXJlbnRGb3JtO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmlsdGVyQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU91dHB1dEpzb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5yZW1vdmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHBhcmVudEZvcm0ucmVtb3ZlQ29udHJvbChmb3JtS2V5KTtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU91dHB1dEpzb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBhIHNtYXJ0IGZpbHRlciBvYmplY3RcbiAgICAgKiBAcGFyYW0gY3VycmVudCBmaWx0ZXIgbGVnYWN5IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gZmllbGQgZmlsdGVyJ3Mgc2VsZWN0ZWQgZmllbGRcbiAgICAgKiBAcmV0dXJucyBzbWFydCBmaWx0ZXIgb2JqZWN0XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXIoY3VycmVudDogSVBlcEpTT05JdGVtLCBmaWVsZDogYW55KTogSVBlcFNtYXJ0RmlsdGVyRGF0YSB8IG51bGwge1xuICAgICAgICBsZXQgb3BlcmF0b3I6IElQZXBTbWFydEZpbHRlck9wZXJhdG9yID0gZ2V0U21hcnRCdWlsZGVyT3BlcmF0b3IoY3VycmVudC5PcGVyYXRpb24sIGZpZWxkLnR5cGUpO1xuICAgICAgICBpZiAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZXM6IElQZXBGaWx0ZXJCdWlsZGVyVmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJWYWx1ZXMoY3VycmVudCwgb3BlcmF0b3IsIGZpZWxkKTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVTbWFydEZpbHRlcihcbiAgICAgICAgICAgICAgICBjdXJyZW50LkFwaU5hbWUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVzLmZpcnN0LFxuICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlcy5zZWNvbmQsXG4gICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVzLm9wZXJhdGlvblVuaXRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCBzbWFydCBmaWx0ZXIgZmllbGRcbiAgICAgKiBAcGFyYW0gY3VycmVudCBmaWx0ZXIgbGVnYWN5IGVsZW1lbnRcbiAgICAgKiBAcmV0dXJucyBzbWFydCBmaWx0ZXIgZmllbGQsIGlmIG5vdCBmb3VuZCByZXR1cm5zIHRoZSBmaXJzdCBmaWVsZHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkRmllbGQoY3VycmVudDogSVBlcEpTT05JdGVtKTogSVBlcFNtYXJ0RmlsdGVyRmllbGQgfCBudWxsIHtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5fc21hcnRGaWx0ZXJGaWVsZHMuZmluZChmaWVsZCA9PiBmaWVsZC5pZCA9PT0gY3VycmVudC5BcGlOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBpdGVtID8gaXRlbSA6IHRoaXMuX3NtYXJ0RmlsdGVyRmllbGRzPy5sZW5ndGggPiAwID8gdGhpcy5fc21hcnRGaWx0ZXJGaWVsZHNbMF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NtYXJ0RmlsdGVyRmllbGRzPy5sZW5ndGggPiAwID8gdGhpcy5fc21hcnRGaWx0ZXJGaWVsZHNbMF0gOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0cyBzbWFydCBmaWx0ZXIncyB2YWx1ZXMgZGF0YVxuICAgICAqIEBwYXJhbSBjdXJyZW50IGZpbHRlciBsZWdhY3kgZWxlbWVudFxuICAgICAqIEBwYXJhbSBvcGVyYXRvciBzbWFydCBmaWx0ZXIgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0gZmllbGQgZmlsdGVyJ3Mgc2VsZWN0ZWQgZmllbGRcbiAgICAgKiBAcmV0dXJucyBvYmplY3QgY29udGFpbnMgdGhlIGZpbHRlciB2YWx1ZXMgZGF0YVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RmlsdGVyVmFsdWVzKGN1cnJlbnQ6IElQZXBKU09OSXRlbSwgb3BlcmF0b3I6IElQZXBTbWFydEZpbHRlck9wZXJhdG9yLCBmaWVsZDogYW55KSB7XG4gICAgICAgIGxldCBkYXRhOiBJUGVwRmlsdGVyQnVpbGRlclZhbHVlcyA9IHtcbiAgICAgICAgICAgIGZpcnN0OiBudWxsLFxuICAgICAgICAgICAgc2Vjb25kOiBudWxsLFxuICAgICAgICAgICAgb3BlcmF0aW9uVW5pdDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gUGVwU21hcnRGaWx0ZXJPcGVyYXRvcnMuSW4pIHsgLy9tdWx0aSBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vZmlsdGVyIGtleXMgZG9uJ3QgZXhpc3Qgb24gZmllbGQgb3B0aW9uc1xuICAgICAgICAgICAgZGF0YS5maXJzdCA9IGN1cnJlbnQ/LlZhbHVlcz8ubGVuZ3RoID4gMCA/IGN1cnJlbnQuVmFsdWVzLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQub3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24ua2V5ID09PSBpdGVtKTtcbiAgICAgICAgICAgIH0pIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIG9wZXJhdG9yID09PSBQZXBTbWFydEZpbHRlck9wZXJhdG9ycy5JblRoZUxhc3QgfHxcbiAgICAgICAgICAgIG9wZXJhdG9yID09PSBQZXBTbWFydEZpbHRlck9wZXJhdG9ycy5Ob3RJblRoZUxhc3QgfHxcbiAgICAgICAgICAgIG9wZXJhdG9yID09PSBQZXBTbWFydEZpbHRlck9wZXJhdG9ycy5EdWVJbiB8fFxuICAgICAgICAgICAgb3BlcmF0b3IgPT09IFBlcFNtYXJ0RmlsdGVyT3BlcmF0b3JzLk5vdER1ZUluXG4gICAgICAgICkgeyAvL29wZXJhdGlvbiB1bml0XG4gICAgICAgICAgICBkYXRhLmZpcnN0ID0gY3VycmVudD8uVmFsdWVzPy5sZW5ndGggPiAwID8gY3VycmVudC5WYWx1ZXNbMF0gOiBudWxsO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQ/LlZhbHVlcz8ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5vcGVyYXRpb25Vbml0ID0gZ2V0U21hcnRCdWlsZGVyT3BlcmF0aW9uVW5pdChjdXJyZW50LlZhbHVlc1sxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhLmZpcnN0ID0gY3VycmVudD8uVmFsdWVzPy5sZW5ndGggPiAwID8gY3VycmVudC5WYWx1ZXNbMF0gOiBudWxsO1xuICAgICAgICAgICAgZGF0YS5zZWNvbmQgPSBjdXJyZW50Py5WYWx1ZXM/Lmxlbmd0aCA9PT0gMiA/IGN1cnJlbnQuVmFsdWVzWzFdIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGxlZ2FjeSBmaWVsZHMgdG8gc21hcnQgZmlsdGVyIGZpZWxkc1xuICAgICAqIEBwYXJhbSBmaWVsZHMgbGVnYWN5IGZpZWxkcyBhcnJheVxuICAgICAqIEByZXR1cm5zIHNtYXJ0IGZpbHRlciBmaWVsZHMgYXJyYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbnZlcnRUb1NtYXJ0RmlsdGVyRmllbGRzKGZpZWxkczogQXJyYXk8SVBlcEZpZWxkPikge1xuICAgICAgICBpZiAoZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTWFwcGVyID0gbmV3IFBlcEZpbHRlckJ1aWxkZXJUeXBlTWFwKCk7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU21hcnRGaWx0ZXJGaWVsZChcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGZpZWxkLkZpZWxkSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5UaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGZpZWxkLk9wdGlvbmFsVmFsdWVzPy5tYXAob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IG9wdGlvbi5LZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb24uVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9IGFzIElQZXBTbWFydEZpbHRlckZpZWxkXG4gICAgICAgICAgICAgICAgICAgICwgdHlwZU1hcHBlci5nZXRTbWFydEJ1aWxkZXJUeXBlKGZpZWxkLkZpZWxkVHlwZSkgYXMgUGVwU21hcnRGaWx0ZXJUeXBlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgYSBsZWdhY3kgb3V0cHV0IEpTT04gXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVPdXRwdXRKc29uKCkge1xuICAgICAgICBpZiAodGhpcy5fZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IHRoaXMuX291dHB1dEpzb25TZXJ2aWNlLmdlbmVyYXRlSnNvbih0aGlzLl9mb3JtLnZhbHVlLCB0aGlzLl9zbWFydEZpbHRlckZpZWxkcyk7XG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRKc29uU3ViamVjdC5uZXh0KGpzb24pO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufSJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* export from ngx-lib/smart-filters
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NtYXJ0LWZpbHRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBleHBvcnQgZnJvbSBuZ3gtbGliL3NtYXJ0LWZpbHRlcnNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|