@qrvey/filters 0.0.45 → 0.1.0
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/README.md +63 -1
- package/dist/cjs/classes/FilterAdapter.js +1 -80
- package/dist/cjs/classes/FilterBuilder.js +32 -251
- package/dist/cjs/classes/FilterManager.js +7 -64
- package/dist/cjs/classes/FilterResources.js +3 -116
- package/dist/cjs/classes/FilterSearcher.js +0 -77
- package/dist/cjs/classes/FilterValidation.js +0 -93
- package/dist/cjs/classes/FilterValues.js +0 -24
- package/dist/cjs/classes/index.js +8 -21
- package/dist/cjs/helpers/filter-adapt.helpers.js +3 -46
- package/dist/cjs/helpers/filter-adapt.legacy.helpers.js +6 -53
- package/dist/cjs/helpers/filter-adapt.logic.helpers.js +7 -128
- package/dist/cjs/helpers/filter-builder.helpers.js +1 -8
- package/dist/cjs/helpers/filter-settings.helpers.js +6 -41
- package/dist/cjs/helpers/filter-validators.helpers.js +15 -9
- package/dist/cjs/helpers/filter-verbose.helpers.js +211 -0
- package/dist/cjs/helpers/getAggregateFilters.js +11 -0
- package/dist/cjs/helpers/getFilterId.js +1 -17
- package/dist/cjs/helpers/getFilterType.js +1 -8
- package/dist/cjs/helpers/index.js +12 -20
- package/dist/cjs/helpers/isDateDistinctGrouping.js +15 -0
- package/dist/cjs/helpers/isRankingFilter.js +10 -0
- package/dist/cjs/helpers/resolveFilterConditions.js +2 -10
- package/dist/cjs/helpers/utils.helpers.js +2 -19
- package/dist/cjs/index.js +5 -18
- package/dist/cjs/models/index.js +4 -17
- package/dist/cjs/resources/filter-grouping.resources.js +0 -18
- package/dist/cjs/resources/filter-logic.resources.js +0 -3
- package/dist/cjs/resources/filter-scopes.resources.js +10 -27
- package/dist/cjs/resources/filter-validators.resources.js +0 -3
- package/dist/cjs/resources/filter-verbose.resources.js +13 -0
- package/dist/cjs/resources/filters.resources.js +0 -12
- package/dist/cjs/resources/index.js +12 -24
- package/dist/classes/FilterAdapter.d.ts +0 -80
- package/dist/classes/FilterAdapter.js +1 -80
- package/dist/classes/FilterBuilder.d.ts +2 -177
- package/dist/classes/FilterBuilder.js +32 -251
- package/dist/classes/FilterManager.d.ts +7 -62
- package/dist/classes/FilterManager.js +7 -64
- package/dist/classes/FilterResources.d.ts +1 -115
- package/dist/classes/FilterResources.js +3 -116
- package/dist/classes/FilterSearcher.d.ts +2 -77
- package/dist/classes/FilterSearcher.js +0 -77
- package/dist/classes/FilterValidation.d.ts +1 -47
- package/dist/classes/FilterValidation.js +0 -93
- package/dist/classes/FilterValues.d.ts +0 -25
- package/dist/classes/FilterValues.js +0 -24
- package/dist/classes/index.d.ts +0 -1
- package/dist/helpers/filter-adapt.helpers.d.ts +0 -15
- package/dist/helpers/filter-adapt.helpers.js +1 -43
- package/dist/helpers/filter-adapt.legacy.helpers.d.ts +0 -20
- package/dist/helpers/filter-adapt.legacy.helpers.js +3 -49
- package/dist/helpers/filter-adapt.logic.helpers.d.ts +0 -22
- package/dist/helpers/filter-adapt.logic.helpers.js +3 -123
- package/dist/helpers/filter-builder.helpers.d.ts +0 -7
- package/dist/helpers/filter-builder.helpers.js +0 -6
- package/dist/helpers/filter-settings.helpers.d.ts +0 -35
- package/dist/helpers/filter-settings.helpers.js +0 -34
- package/dist/helpers/filter-validators.helpers.d.ts +3 -6
- package/dist/helpers/filter-validators.helpers.js +11 -7
- package/dist/helpers/filter-verbose.helpers.d.ts +6 -0
- package/dist/helpers/filter-verbose.helpers.js +206 -0
- package/dist/helpers/getAggregateFilters.d.ts +3 -0
- package/dist/helpers/getAggregateFilters.js +7 -0
- package/dist/helpers/getFilterId.d.ts +0 -16
- package/dist/helpers/getFilterId.js +0 -15
- package/dist/helpers/getFilterType.d.ts +0 -7
- package/dist/helpers/getFilterType.js +0 -6
- package/dist/helpers/index.d.ts +5 -1
- package/dist/helpers/index.js +5 -0
- package/dist/helpers/isDateDistinctGrouping.d.ts +2 -0
- package/dist/helpers/isDateDistinctGrouping.js +12 -0
- package/dist/helpers/isRankingFilter.d.ts +2 -0
- package/dist/helpers/isRankingFilter.js +7 -0
- package/dist/helpers/resolveFilterConditions.d.ts +0 -8
- package/dist/helpers/resolveFilterConditions.js +1 -8
- package/dist/helpers/utils.helpers.d.ts +0 -17
- package/dist/helpers/utils.helpers.js +0 -16
- package/dist/index.d.ts +0 -1
- package/dist/models/filter-builder.models.d.ts +0 -156
- package/dist/models/filter-resources.models.d.ts +0 -53
- package/dist/models/filter-searcher.models.d.ts +5 -34
- package/dist/models/filter-validation.models.d.ts +0 -40
- package/dist/models/index.d.ts +0 -1
- package/dist/resources/filter-functions.resources.d.ts +0 -49
- package/dist/resources/filter-grouping.resources.d.ts +0 -7
- package/dist/resources/filter-grouping.resources.js +0 -18
- package/dist/resources/filter-logic.resources.d.ts +0 -79
- package/dist/resources/filter-logic.resources.js +0 -3
- package/dist/resources/filter-operators.resources.d.ts +0 -1
- package/dist/resources/filter-panel.interfaces.d.ts +0 -49
- package/dist/resources/filter-scopes.resources.d.ts +2 -25
- package/dist/resources/filter-scopes.resources.js +10 -27
- package/dist/resources/filter-validation.resources.d.ts +0 -1
- package/dist/resources/filter-validators.resources.d.ts +0 -1
- package/dist/resources/filter-validators.resources.js +0 -3
- package/dist/resources/filter-values.resources.d.ts +0 -13
- package/dist/resources/filter-verbose.resources.d.ts +23 -0
- package/dist/resources/filter-verbose.resources.js +10 -0
- package/dist/resources/filter-visual.resources.d.ts +0 -50
- package/dist/resources/filters.resources.d.ts +1 -102
- package/dist/resources/filters.resources.js +0 -12
- package/dist/resources/index.d.ts +1 -1
- package/dist/resources/index.js +1 -0
- package/package.json +59 -44
- package/.eslintignore +0 -6
- package/.eslintrc.json +0 -122
- package/.husky/pre-commit +0 -4
- package/.lintstagedrc +0 -7
- package/.prettierignore +0 -6
- package/.prettierrc.json +0 -1
- package/CHANGELOG.md +0 -274
- package/CODE_OF_CONDUCT.md +0 -132
- package/bitbucket-pipelines.yml +0 -92
- package/dist/cjs/classes/FilterAdapter.d.ts +0 -107
- package/dist/cjs/classes/FilterAdapter.d.ts.map +0 -1
- package/dist/cjs/classes/FilterBuilder.d.ts +0 -206
- package/dist/cjs/classes/FilterBuilder.d.ts.map +0 -1
- package/dist/cjs/classes/FilterManager.d.ts +0 -84
- package/dist/cjs/classes/FilterManager.d.ts.map +0 -1
- package/dist/cjs/classes/FilterResources.d.ts +0 -139
- package/dist/cjs/classes/FilterResources.d.ts.map +0 -1
- package/dist/cjs/classes/FilterSearcher.d.ts +0 -90
- package/dist/cjs/classes/FilterSearcher.d.ts.map +0 -1
- package/dist/cjs/classes/FilterValidation.d.ts +0 -58
- package/dist/cjs/classes/FilterValidation.d.ts.map +0 -1
- package/dist/cjs/classes/FilterValues.d.ts +0 -33
- package/dist/cjs/classes/FilterValues.d.ts.map +0 -1
- package/dist/cjs/classes/index.d.ts +0 -8
- package/dist/cjs/classes/index.d.ts.map +0 -1
- package/dist/cjs/helpers/filter-adapt.helpers.d.ts +0 -21
- package/dist/cjs/helpers/filter-adapt.helpers.d.ts.map +0 -1
- package/dist/cjs/helpers/filter-adapt.legacy.helpers.d.ts +0 -26
- package/dist/cjs/helpers/filter-adapt.legacy.helpers.d.ts.map +0 -1
- package/dist/cjs/helpers/filter-adapt.logic.helpers.d.ts +0 -29
- package/dist/cjs/helpers/filter-adapt.logic.helpers.d.ts.map +0 -1
- package/dist/cjs/helpers/filter-builder.helpers.d.ts +0 -11
- package/dist/cjs/helpers/filter-builder.helpers.d.ts.map +0 -1
- package/dist/cjs/helpers/filter-settings.helpers.d.ts +0 -42
- package/dist/cjs/helpers/filter-settings.helpers.d.ts.map +0 -1
- package/dist/cjs/helpers/filter-validators.helpers.d.ts +0 -8
- package/dist/cjs/helpers/filter-validators.helpers.d.ts.map +0 -1
- package/dist/cjs/helpers/getFilterId.d.ts +0 -18
- package/dist/cjs/helpers/getFilterId.d.ts.map +0 -1
- package/dist/cjs/helpers/getFilterType.d.ts +0 -11
- package/dist/cjs/helpers/getFilterType.d.ts.map +0 -1
- package/dist/cjs/helpers/index.d.ts +0 -7
- package/dist/cjs/helpers/index.d.ts.map +0 -1
- package/dist/cjs/helpers/resolveFilterConditions.d.ts +0 -11
- package/dist/cjs/helpers/resolveFilterConditions.d.ts.map +0 -1
- package/dist/cjs/helpers/utils.helpers.d.ts +0 -26
- package/dist/cjs/helpers/utils.helpers.d.ts.map +0 -1
- package/dist/cjs/index.d.ts +0 -5
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/models/filter-builder.models.d.ts +0 -203
- package/dist/cjs/models/filter-builder.models.d.ts.map +0 -1
- package/dist/cjs/models/filter-resources.models.d.ts +0 -71
- package/dist/cjs/models/filter-resources.models.d.ts.map +0 -1
- package/dist/cjs/models/filter-searcher.models.d.ts +0 -42
- package/dist/cjs/models/filter-searcher.models.d.ts.map +0 -1
- package/dist/cjs/models/filter-validation.models.d.ts +0 -59
- package/dist/cjs/models/filter-validation.models.d.ts.map +0 -1
- package/dist/cjs/models/index.d.ts +0 -4
- package/dist/cjs/models/index.d.ts.map +0 -1
- package/dist/cjs/resources/filter-functions.resources.d.ts +0 -94
- package/dist/cjs/resources/filter-functions.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filter-grouping.resources.d.ts +0 -103
- package/dist/cjs/resources/filter-grouping.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filter-logic.resources.d.ts +0 -135
- package/dist/cjs/resources/filter-logic.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filter-operators.resources.d.ts +0 -16
- package/dist/cjs/resources/filter-operators.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filter-panel.interfaces.d.ts +0 -80
- package/dist/cjs/resources/filter-panel.interfaces.d.ts.map +0 -1
- package/dist/cjs/resources/filter-scopes.resources.d.ts +0 -62
- package/dist/cjs/resources/filter-scopes.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filter-validation.resources.d.ts +0 -20
- package/dist/cjs/resources/filter-validation.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filter-validators.resources.d.ts +0 -80
- package/dist/cjs/resources/filter-validators.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filter-values.resources.d.ts +0 -40
- package/dist/cjs/resources/filter-values.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filter-visual.resources.d.ts +0 -77
- package/dist/cjs/resources/filter-visual.resources.d.ts.map +0 -1
- package/dist/cjs/resources/filters.resources.d.ts +0 -168
- package/dist/cjs/resources/filters.resources.d.ts.map +0 -1
- package/dist/cjs/resources/index.d.ts +0 -11
- package/dist/cjs/resources/index.d.ts.map +0 -1
- package/dist/classes/FilterAdapter.d.ts.map +0 -1
- package/dist/classes/FilterBuilder.d.ts.map +0 -1
- package/dist/classes/FilterManager.d.ts.map +0 -1
- package/dist/classes/FilterResources.d.ts.map +0 -1
- package/dist/classes/FilterSearcher.d.ts.map +0 -1
- package/dist/classes/FilterValidation.d.ts.map +0 -1
- package/dist/classes/FilterValues.d.ts.map +0 -1
- package/dist/classes/index.d.ts.map +0 -1
- package/dist/helpers/filter-adapt.helpers.d.ts.map +0 -1
- package/dist/helpers/filter-adapt.legacy.helpers.d.ts.map +0 -1
- package/dist/helpers/filter-adapt.logic.helpers.d.ts.map +0 -1
- package/dist/helpers/filter-builder.helpers.d.ts.map +0 -1
- package/dist/helpers/filter-settings.helpers.d.ts.map +0 -1
- package/dist/helpers/filter-validators.helpers.d.ts.map +0 -1
- package/dist/helpers/getFilterId.d.ts.map +0 -1
- package/dist/helpers/getFilterType.d.ts.map +0 -1
- package/dist/helpers/index.d.ts.map +0 -1
- package/dist/helpers/resolveFilterConditions.d.ts.map +0 -1
- package/dist/helpers/utils.helpers.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/models/filter-builder.models.d.ts.map +0 -1
- package/dist/models/filter-resources.models.d.ts.map +0 -1
- package/dist/models/filter-searcher.models.d.ts.map +0 -1
- package/dist/models/filter-validation.models.d.ts.map +0 -1
- package/dist/models/index.d.ts.map +0 -1
- package/dist/resources/filter-functions.resources.d.ts.map +0 -1
- package/dist/resources/filter-grouping.resources.d.ts.map +0 -1
- package/dist/resources/filter-logic.resources.d.ts.map +0 -1
- package/dist/resources/filter-operators.resources.d.ts.map +0 -1
- package/dist/resources/filter-panel.interfaces.d.ts.map +0 -1
- package/dist/resources/filter-scopes.resources.d.ts.map +0 -1
- package/dist/resources/filter-validation.resources.d.ts.map +0 -1
- package/dist/resources/filter-validators.resources.d.ts.map +0 -1
- package/dist/resources/filter-values.resources.d.ts.map +0 -1
- package/dist/resources/filter-visual.resources.d.ts.map +0 -1
- package/dist/resources/filters.resources.d.ts.map +0 -1
- package/dist/resources/index.d.ts.map +0 -1
- package/jest.config.js +0 -10
- package/jsdoc.config.json +0 -14
- package/scripts/clean-build/index.js +0 -62
- package/sonar-project.properties +0 -2
- package/src/classes/FilterAdapter.ts +0 -208
- package/src/classes/FilterBuilder.ts +0 -822
- package/src/classes/FilterManager.ts +0 -126
- package/src/classes/FilterResources.ts +0 -411
- package/src/classes/FilterSearcher.ts +0 -243
- package/src/classes/FilterValidation.ts +0 -221
- package/src/classes/FilterValues.ts +0 -89
- package/src/classes/index.ts +0 -7
- package/src/helpers/filter-adapt.helpers.ts +0 -204
- package/src/helpers/filter-adapt.legacy.helpers.ts +0 -298
- package/src/helpers/filter-adapt.logic.helpers.ts +0 -631
- package/src/helpers/filter-builder.helpers.ts +0 -28
- package/src/helpers/filter-settings.helpers.ts +0 -133
- package/src/helpers/filter-validators.helpers.ts +0 -15
- package/src/helpers/getFilterId.ts +0 -35
- package/src/helpers/getFilterType.ts +0 -23
- package/src/helpers/index.ts +0 -6
- package/src/helpers/resolveFilterConditions.ts +0 -29
- package/src/helpers/utils.helpers.ts +0 -37
- package/src/index.ts +0 -4
- package/src/models/filter-builder.models.ts +0 -256
- package/src/models/filter-resources.models.ts +0 -89
- package/src/models/filter-searcher.models.ts +0 -61
- package/src/models/filter-validation.models.ts +0 -71
- package/src/models/index.ts +0 -3
- package/src/resources/filter-functions.resources.ts +0 -132
- package/src/resources/filter-grouping.resources.ts +0 -531
- package/src/resources/filter-logic.resources.ts +0 -148
- package/src/resources/filter-operators.resources.ts +0 -40
- package/src/resources/filter-panel.interfaces.ts +0 -86
- package/src/resources/filter-scopes.resources.ts +0 -152
- package/src/resources/filter-validation.resources.ts +0 -90
- package/src/resources/filter-validators.resources.ts +0 -411
- package/src/resources/filter-values.resources.ts +0 -57
- package/src/resources/filter-visual.resources.ts +0 -86
- package/src/resources/filters.resources.ts +0 -232
- package/src/resources/index.ts +0 -10
- package/tests/classes/FilterAdapter.test.ts +0 -124
- package/tests/classes/FilterBuilder.test.ts +0 -903
- package/tests/classes/FilterResources.test.ts +0 -267
- package/tests/classes/FilterSearcher.test.ts +0 -188
- package/tests/classes/FilterValidation.test.ts +0 -54
- package/tests/helpers/getFilterId.test.ts +0 -121
- package/tests/mock/datasets.mock.ts +0 -61
- package/tests/mock/filters-adapter.mock.ts +0 -646
- package/tests/mock/filters-interactive-table.mock.ts +0 -59
- package/tests/mock/filters.mock.ts +0 -277
- package/tsconfig.doc.json +0 -4
- package/tsconfig.eslint.json +0 -4
- package/tsconfig.json +0 -113
|
@@ -1,822 +0,0 @@
|
|
|
1
|
-
import { isEmpty, isNaNV2, objectCopy } from "@qrvey/utils";
|
|
2
|
-
|
|
3
|
-
import { FilterSearcher } from "./FilterSearcher";
|
|
4
|
-
import { FilterValidation } from "./FilterValidation";
|
|
5
|
-
import { FilterValues } from "./FilterValues";
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
getEditFiltersSettings,
|
|
9
|
-
getFilterAddSettings,
|
|
10
|
-
getFilterCreateSettings,
|
|
11
|
-
getReplaceByParamsSettings,
|
|
12
|
-
} from "../helpers/filter-settings.helpers";
|
|
13
|
-
import { getFilterId } from "../helpers/getFilterId";
|
|
14
|
-
import { getFilterType } from "../helpers/getFilterType";
|
|
15
|
-
import {
|
|
16
|
-
IFilterBuilderAdd,
|
|
17
|
-
IFilterBuilderAddValue,
|
|
18
|
-
IFilterBuilderDelete,
|
|
19
|
-
IFilterBuilderDeleteValue,
|
|
20
|
-
IFilterBuilderEdit,
|
|
21
|
-
IFilterBuilderEditValue,
|
|
22
|
-
IFilterBuilderMerge,
|
|
23
|
-
IFilterBuilderMergeValue,
|
|
24
|
-
IFilterBuilderMultipleReturn,
|
|
25
|
-
IFilterBuilderSet,
|
|
26
|
-
IFilterBuilderSingleReturn,
|
|
27
|
-
} from "../models/filter-builder.models";
|
|
28
|
-
import {
|
|
29
|
-
IFilterAddSettings,
|
|
30
|
-
IFilterBuilderEditSettings,
|
|
31
|
-
IFilterCreateSettings,
|
|
32
|
-
IFilterFindLastIndexReturn,
|
|
33
|
-
IFilterMergeSettings,
|
|
34
|
-
IFilterParamSettings,
|
|
35
|
-
IFilterReplaceParamSettings,
|
|
36
|
-
} from "../resources/filter-functions.resources";
|
|
37
|
-
import { FILTER_OPERATOR } from "../resources/filter-operators.resources";
|
|
38
|
-
import {
|
|
39
|
-
IFilterValue,
|
|
40
|
-
IFilterValueRange,
|
|
41
|
-
IFilterValueRegular,
|
|
42
|
-
IFilterValueRelativeDate,
|
|
43
|
-
} from "../resources/filter-values.resources";
|
|
44
|
-
import {
|
|
45
|
-
DEFAULT_FILTER,
|
|
46
|
-
FILTER_TYPE,
|
|
47
|
-
IFilter,
|
|
48
|
-
} from "../resources/filters.resources";
|
|
49
|
-
import { getFilterGrouping } from "../helpers/filter-builder.helpers";
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Class to build new filters and manipulate ones.
|
|
53
|
-
*/
|
|
54
|
-
export class FilterBuilder
|
|
55
|
-
implements
|
|
56
|
-
IFilterBuilderAdd,
|
|
57
|
-
IFilterBuilderAddValue,
|
|
58
|
-
IFilterBuilderDelete,
|
|
59
|
-
IFilterBuilderDeleteValue,
|
|
60
|
-
IFilterBuilderEdit,
|
|
61
|
-
IFilterBuilderEditValue,
|
|
62
|
-
IFilterBuilderMerge,
|
|
63
|
-
IFilterBuilderMergeValue,
|
|
64
|
-
IFilterBuilderSet
|
|
65
|
-
{
|
|
66
|
-
/**
|
|
67
|
-
* Instance to search filters
|
|
68
|
-
*/
|
|
69
|
-
private searchEngine: FilterSearcher;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Constructor
|
|
73
|
-
* @param filters the collection of filters
|
|
74
|
-
*/
|
|
75
|
-
constructor(protected filters: IFilter[] = []) {
|
|
76
|
-
this.searchEngine = new FilterSearcher(filters);
|
|
77
|
-
this.filters = objectCopy(Array.isArray(filters) ? filters : []);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* **************************************************************************************************
|
|
82
|
-
****************************************** Adding **************************************************
|
|
83
|
-
****************************************************************************************************
|
|
84
|
-
*/
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Adds various filter into the collection.
|
|
88
|
-
* Inserts them next to the last similar filter
|
|
89
|
-
* @param newFilters the filter to add
|
|
90
|
-
* @param inIndexes collection of indexes to add the new filters
|
|
91
|
-
* @param settings the settings object to setup this function
|
|
92
|
-
* @returns the new collection of filters
|
|
93
|
-
*/
|
|
94
|
-
public addMultiple(
|
|
95
|
-
newFilters: IFilter[],
|
|
96
|
-
inIndexes?: number[],
|
|
97
|
-
settings?: IFilterAddSettings,
|
|
98
|
-
): IFilterBuilderMultipleReturn {
|
|
99
|
-
if (isEmpty(newFilters)) return { resulting: this.filters };
|
|
100
|
-
|
|
101
|
-
const filters: IFilter[] = objectCopy(this.filters);
|
|
102
|
-
const affected: IFilter[] = [];
|
|
103
|
-
try {
|
|
104
|
-
newFilters.forEach((newFilter: IFilter, index: number) => {
|
|
105
|
-
const affectedFilter = this.addSingle(
|
|
106
|
-
newFilter,
|
|
107
|
-
inIndexes?.[index],
|
|
108
|
-
settings,
|
|
109
|
-
);
|
|
110
|
-
affected.push(affectedFilter.affected!);
|
|
111
|
-
});
|
|
112
|
-
} catch (_error) {
|
|
113
|
-
this.filters = filters;
|
|
114
|
-
return { resulting: filters };
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
this.sync();
|
|
118
|
-
return {
|
|
119
|
-
resulting: this.filters,
|
|
120
|
-
affected,
|
|
121
|
-
original: filters,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Adds one filter into the collection.
|
|
127
|
-
* - Inserts it next to the last similar filter
|
|
128
|
-
* - If the new one is match with the last similar filter, the operator will change to OR
|
|
129
|
-
* - If the id is not provided, a new one is created.
|
|
130
|
-
* - If the inIndex nunber is provided, this will be the index where the filter is inserted
|
|
131
|
-
* @param filter the filter to add
|
|
132
|
-
* @param inIndex the index to add the new filter
|
|
133
|
-
* @param settings settings object to setup this function
|
|
134
|
-
* @returns the new collection of filters
|
|
135
|
-
*/
|
|
136
|
-
public addSingle(
|
|
137
|
-
filter: IFilter,
|
|
138
|
-
inIndex?: number,
|
|
139
|
-
settings?: IFilterAddSettings,
|
|
140
|
-
): IFilterBuilderSingleReturn {
|
|
141
|
-
if (isEmpty(filter)) return { resulting: this.filters };
|
|
142
|
-
if (FilterValidation.isDuplicated(this.filters, filter))
|
|
143
|
-
return { resulting: this.filters };
|
|
144
|
-
|
|
145
|
-
const original = { ...filter };
|
|
146
|
-
const newFilter: IFilter = { ...filter };
|
|
147
|
-
const newSettings = getFilterAddSettings(settings);
|
|
148
|
-
|
|
149
|
-
if (isEmpty(filter.id) || newSettings.automaticId)
|
|
150
|
-
newFilter.id = getFilterId(newFilter);
|
|
151
|
-
|
|
152
|
-
let indexResult: IFilterFindLastIndexReturn;
|
|
153
|
-
let nextIndex: number;
|
|
154
|
-
if (isNaNV2(inIndex)) {
|
|
155
|
-
indexResult = this.searchEngine.findLastIndexByFilter(newFilter, inIndex);
|
|
156
|
-
nextIndex = indexResult.index + 1;
|
|
157
|
-
} else {
|
|
158
|
-
indexResult = {
|
|
159
|
-
index: inIndex!,
|
|
160
|
-
nextToColumnFilter: false,
|
|
161
|
-
nextToDatasetFilter: false,
|
|
162
|
-
nextToScopeFilter: false,
|
|
163
|
-
};
|
|
164
|
-
nextIndex = indexResult.index;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
if (indexResult.index > -1) {
|
|
168
|
-
this.filters.splice(nextIndex, 0, newFilter);
|
|
169
|
-
if (
|
|
170
|
-
newSettings.automaticOperator &&
|
|
171
|
-
indexResult.nextToColumnFilter &&
|
|
172
|
-
indexResult.index > -1
|
|
173
|
-
)
|
|
174
|
-
this.filters[indexResult.index].operator = FILTER_OPERATOR.OR;
|
|
175
|
-
} else {
|
|
176
|
-
this.filters.push(newFilter);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
this.sync();
|
|
180
|
-
return {
|
|
181
|
-
resulting: this.filters,
|
|
182
|
-
affected: newFilter,
|
|
183
|
-
original,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Adds one value from filter
|
|
189
|
-
* @param id the ID to search the filter to add value
|
|
190
|
-
* @param value the value to add
|
|
191
|
-
* @returns the new filter collection
|
|
192
|
-
*/
|
|
193
|
-
public addValue(id: string, value: IFilterValue): IFilterBuilderSingleReturn {
|
|
194
|
-
const index = this.searchEngine.findIndexByParams({ id });
|
|
195
|
-
if (index < 0) return { resulting: this.filters };
|
|
196
|
-
|
|
197
|
-
const original: IFilter = objectCopy(this.filters[index]);
|
|
198
|
-
|
|
199
|
-
if (this.filters[index].values == null) this.filters[index].values = [];
|
|
200
|
-
this.filters[index].values?.push(value);
|
|
201
|
-
|
|
202
|
-
this.sync();
|
|
203
|
-
return {
|
|
204
|
-
resulting: this.filters,
|
|
205
|
-
affected: this.filters[index],
|
|
206
|
-
original,
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Adds various values on filter
|
|
212
|
-
* @param id the ID to search the filter to add value
|
|
213
|
-
* @param values the collection of value to add
|
|
214
|
-
* @returns the new filter collection
|
|
215
|
-
*/
|
|
216
|
-
public addValues(
|
|
217
|
-
id: string,
|
|
218
|
-
values: IFilterValue[],
|
|
219
|
-
): IFilterBuilderSingleReturn {
|
|
220
|
-
const index = this.searchEngine.findIndexByParams({ id });
|
|
221
|
-
if (isEmpty(values) || index < 0) return { resulting: this.filters };
|
|
222
|
-
|
|
223
|
-
const filters: IFilter[] = objectCopy(this.filters);
|
|
224
|
-
const original: IFilter = objectCopy(this.filters[index]);
|
|
225
|
-
|
|
226
|
-
let affected: IFilter;
|
|
227
|
-
try {
|
|
228
|
-
values.forEach((value: IFilterValue) => {
|
|
229
|
-
affected = this.addValue(id, value).affected!;
|
|
230
|
-
});
|
|
231
|
-
} catch (_error) {
|
|
232
|
-
this.filters = filters;
|
|
233
|
-
return { resulting: filters };
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
this.sync();
|
|
237
|
-
return {
|
|
238
|
-
resulting: this.filters,
|
|
239
|
-
affected: affected!,
|
|
240
|
-
original,
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* **************************************************************************************************
|
|
246
|
-
**************************************** Deleting **************************************************
|
|
247
|
-
****************************************************************************************************
|
|
248
|
-
*/
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Removes various filters by params
|
|
252
|
-
* @param params params to search the filters to delete
|
|
253
|
-
* @param settings settings for this function
|
|
254
|
-
* @returns the new collection of filters
|
|
255
|
-
*/
|
|
256
|
-
public deleteByParams(
|
|
257
|
-
params: Partial<IFilter>,
|
|
258
|
-
settings?: IFilterParamSettings,
|
|
259
|
-
): IFilterBuilderMultipleReturn {
|
|
260
|
-
const original: IFilter[] = objectCopy(this.filters);
|
|
261
|
-
const affected: IFilter[] = this.searchEngine.filterByParams(
|
|
262
|
-
params,
|
|
263
|
-
settings,
|
|
264
|
-
);
|
|
265
|
-
this.filters = this.searchEngine.excludeByParams(params, settings);
|
|
266
|
-
|
|
267
|
-
this.sync();
|
|
268
|
-
return {
|
|
269
|
-
resulting: this.filters,
|
|
270
|
-
affected,
|
|
271
|
-
original,
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* Removes various filters from the collection
|
|
277
|
-
* @param ids a collection of ID to search filters to remove
|
|
278
|
-
* @returns the new filter collection
|
|
279
|
-
*/
|
|
280
|
-
public deleteMultiple(ids: string[]): IFilterBuilderMultipleReturn {
|
|
281
|
-
if (!Array.isArray(ids)) return { resulting: this.filters };
|
|
282
|
-
|
|
283
|
-
const filters: IFilter[] = objectCopy(this.filters);
|
|
284
|
-
const affected: IFilter[] = [];
|
|
285
|
-
try {
|
|
286
|
-
ids.forEach((id: string) => {
|
|
287
|
-
const deleted: IFilterBuilderSingleReturn = this.deleteSingle(id);
|
|
288
|
-
affected.push(deleted.affected!);
|
|
289
|
-
});
|
|
290
|
-
} catch (_error) {
|
|
291
|
-
this.filters = filters;
|
|
292
|
-
return { resulting: filters };
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
this.sync();
|
|
296
|
-
return {
|
|
297
|
-
resulting: this.filters,
|
|
298
|
-
affected,
|
|
299
|
-
original: filters,
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* Removes one filter from the collection
|
|
305
|
-
* @param id the ID to search the filter to remove
|
|
306
|
-
* @returns the new filter collection
|
|
307
|
-
*/
|
|
308
|
-
public deleteSingle(id: string): IFilterBuilderSingleReturn {
|
|
309
|
-
const index = this.searchEngine.findIndexByParams({ id });
|
|
310
|
-
const original: IFilter = { ...this.filters[index] };
|
|
311
|
-
|
|
312
|
-
let deletedFilters: IFilter[] = [];
|
|
313
|
-
if (index > -1) {
|
|
314
|
-
deletedFilters = this.filters.splice(index, 1);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
this.sync();
|
|
318
|
-
return {
|
|
319
|
-
resulting: this.filters,
|
|
320
|
-
affected: deletedFilters[0],
|
|
321
|
-
original,
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Removes one value from filter
|
|
327
|
-
* @param id the ID to search the filter to remove value
|
|
328
|
-
* @param index the index to search the value to remove
|
|
329
|
-
* @returns the new filter collection
|
|
330
|
-
*/
|
|
331
|
-
public deleteValue(id: string, index: number): IFilterBuilderSingleReturn {
|
|
332
|
-
if (!Number.isInteger(index)) return { resulting: this.filters };
|
|
333
|
-
|
|
334
|
-
const filterIndex = this.searchEngine.findIndexByParams({ id });
|
|
335
|
-
|
|
336
|
-
const original: IFilter = objectCopy(this.filters[filterIndex]);
|
|
337
|
-
let affectedValues: IFilterValue[] | undefined;
|
|
338
|
-
let affectedFilter: IFilter = this.filters[filterIndex];
|
|
339
|
-
|
|
340
|
-
if (filterIndex > -1) {
|
|
341
|
-
affectedValues = this.filters[filterIndex].values?.splice(index, 1);
|
|
342
|
-
affectedFilter = { ...affectedFilter, values: affectedValues };
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
this.sync();
|
|
346
|
-
return {
|
|
347
|
-
resulting: this.filters,
|
|
348
|
-
affected: affectedFilter,
|
|
349
|
-
original,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Removes various values from filter
|
|
355
|
-
* @param id the ID to search the filter to remove value
|
|
356
|
-
* @param indexes the index collection to search the value to remove
|
|
357
|
-
* @returns the new filter collection
|
|
358
|
-
*/
|
|
359
|
-
public deleteValues(
|
|
360
|
-
id: string,
|
|
361
|
-
indexes: number[],
|
|
362
|
-
): IFilterBuilderSingleReturn {
|
|
363
|
-
if (!Array.isArray(indexes)) return { resulting: this.filters };
|
|
364
|
-
|
|
365
|
-
let sortedIndex = indexes.sort();
|
|
366
|
-
sortedIndex = indexes.reverse();
|
|
367
|
-
|
|
368
|
-
const filters: IFilter[] = objectCopy(this.filters);
|
|
369
|
-
const original: IFilter | undefined = this.searchEngine.findByParams({
|
|
370
|
-
id,
|
|
371
|
-
});
|
|
372
|
-
|
|
373
|
-
try {
|
|
374
|
-
sortedIndex.forEach((index: number) => {
|
|
375
|
-
this.deleteValue(id, index);
|
|
376
|
-
});
|
|
377
|
-
} catch (_error) {
|
|
378
|
-
this.filters = filters;
|
|
379
|
-
return { resulting: filters };
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
this.sync();
|
|
383
|
-
const affected = this.searchEngine.findByParams({ id });
|
|
384
|
-
return {
|
|
385
|
-
resulting: this.filters,
|
|
386
|
-
affected,
|
|
387
|
-
original,
|
|
388
|
-
};
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
/**
|
|
392
|
-
* **************************************************************************************************
|
|
393
|
-
****************************************** Editing *************************************************
|
|
394
|
-
****************************************************************************************************
|
|
395
|
-
*/
|
|
396
|
-
|
|
397
|
-
/**
|
|
398
|
-
* Edits various filters from the collection
|
|
399
|
-
* @param ids the collection of IDs to search filters to edit
|
|
400
|
-
* @param filters a collection of object with properties to edit
|
|
401
|
-
* @param settings settings object for the function
|
|
402
|
-
* @returns the new filter collection
|
|
403
|
-
*/
|
|
404
|
-
public editMultiple(
|
|
405
|
-
ids: string[],
|
|
406
|
-
filters: Partial<IFilter>[],
|
|
407
|
-
settings?: IFilterBuilderEditSettings,
|
|
408
|
-
): IFilterBuilderMultipleReturn {
|
|
409
|
-
if (
|
|
410
|
-
!Array.isArray(ids) ||
|
|
411
|
-
!Array.isArray(filters) ||
|
|
412
|
-
ids.length !== filters.length
|
|
413
|
-
)
|
|
414
|
-
return { resulting: this.filters };
|
|
415
|
-
|
|
416
|
-
const originalFilters = objectCopy(this.filters);
|
|
417
|
-
const editedFilters: IFilter[] = [];
|
|
418
|
-
try {
|
|
419
|
-
ids.forEach((id: string, index: number) => {
|
|
420
|
-
const editedFilter: IFilterBuilderSingleReturn = this.editSingle(
|
|
421
|
-
id,
|
|
422
|
-
filters[index],
|
|
423
|
-
settings,
|
|
424
|
-
);
|
|
425
|
-
editedFilters.push(editedFilter.affected!);
|
|
426
|
-
});
|
|
427
|
-
} catch (_error) {
|
|
428
|
-
this.filters = originalFilters;
|
|
429
|
-
return { resulting: originalFilters };
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
this.sync();
|
|
433
|
-
return {
|
|
434
|
-
resulting: this.filters,
|
|
435
|
-
affected: editedFilters,
|
|
436
|
-
original: originalFilters,
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
/**
|
|
441
|
-
* Edits one filter from the collection
|
|
442
|
-
* @param id the ID to search the filter to edit
|
|
443
|
-
* @param filter an object with properties to edit
|
|
444
|
-
* @param settings settings object for the function
|
|
445
|
-
* @returns the new filter collection
|
|
446
|
-
*/
|
|
447
|
-
public editSingle(
|
|
448
|
-
id: string,
|
|
449
|
-
filter: Partial<IFilter>,
|
|
450
|
-
settings?: IFilterBuilderEditSettings,
|
|
451
|
-
): IFilterBuilderSingleReturn {
|
|
452
|
-
if (isEmpty(filter)) return { resulting: this.filters };
|
|
453
|
-
|
|
454
|
-
const { automaticId } = getEditFiltersSettings(settings);
|
|
455
|
-
|
|
456
|
-
const index = this.searchEngine.findIndexByParams({ id });
|
|
457
|
-
const original = objectCopy(this.filters[index]);
|
|
458
|
-
let editedFilter: IFilter;
|
|
459
|
-
if (index > -1) {
|
|
460
|
-
editedFilter = { ...this.filters[index], ...filter };
|
|
461
|
-
if (FilterValidation.isDuplicated(this.filters, editedFilter))
|
|
462
|
-
return { resulting: this.filters };
|
|
463
|
-
|
|
464
|
-
if (automaticId) editedFilter.id = getFilterId(editedFilter);
|
|
465
|
-
this.filters[index] = editedFilter;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
this.sync();
|
|
469
|
-
return {
|
|
470
|
-
resulting: this.filters,
|
|
471
|
-
affected: editedFilter!,
|
|
472
|
-
original,
|
|
473
|
-
};
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
/**
|
|
477
|
-
* Edits one value from filter
|
|
478
|
-
* @param id the ID to search the filter to edit value
|
|
479
|
-
* @param value the value to edit
|
|
480
|
-
* @param index the value index to edit
|
|
481
|
-
* @returns the new filter collection
|
|
482
|
-
*/
|
|
483
|
-
editValue(
|
|
484
|
-
id: string,
|
|
485
|
-
value: IFilterValue,
|
|
486
|
-
index: number,
|
|
487
|
-
): IFilterBuilderSingleReturn {
|
|
488
|
-
const filterIndex = this.searchEngine.findIndexByParams({ id });
|
|
489
|
-
if (
|
|
490
|
-
isEmpty(value) ||
|
|
491
|
-
filterIndex < 0 ||
|
|
492
|
-
this.filters[filterIndex].values == null ||
|
|
493
|
-
this.filters[filterIndex].values?.[index] == null
|
|
494
|
-
)
|
|
495
|
-
return { resulting: this.filters };
|
|
496
|
-
|
|
497
|
-
const original = objectCopy(this.filters[filterIndex]);
|
|
498
|
-
const oldValue = this.filters[filterIndex].values![index];
|
|
499
|
-
this.filters[filterIndex].values![index] = { ...oldValue, ...value };
|
|
500
|
-
|
|
501
|
-
this.sync();
|
|
502
|
-
return {
|
|
503
|
-
resulting: this.filters,
|
|
504
|
-
affected: this.filters[filterIndex],
|
|
505
|
-
original,
|
|
506
|
-
};
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
/**
|
|
510
|
-
* Edits various values from filter
|
|
511
|
-
* @param id the ID to search the filter to edit value
|
|
512
|
-
* @param values the value collection to edit
|
|
513
|
-
* @param indexes the index collection to edit
|
|
514
|
-
* @returns the new filter collection
|
|
515
|
-
*/
|
|
516
|
-
public editValues(
|
|
517
|
-
id: string,
|
|
518
|
-
values: IFilterValue[],
|
|
519
|
-
indexes: number[],
|
|
520
|
-
): IFilterBuilderSingleReturn {
|
|
521
|
-
const filterIndex = this.searchEngine.findIndexByParams({ id });
|
|
522
|
-
if (isEmpty(values) || filterIndex < 0 || !Array.isArray(indexes))
|
|
523
|
-
return { resulting: this.filters };
|
|
524
|
-
|
|
525
|
-
const original: IFilter[] = objectCopy(this.filters);
|
|
526
|
-
let finalAffectedFilter: IFilter;
|
|
527
|
-
try {
|
|
528
|
-
values.forEach((value: IFilterValue, index: number) => {
|
|
529
|
-
const affectedFilter: IFilterBuilderSingleReturn = this.editValue(
|
|
530
|
-
id,
|
|
531
|
-
value,
|
|
532
|
-
indexes[index],
|
|
533
|
-
);
|
|
534
|
-
finalAffectedFilter = affectedFilter.affected!;
|
|
535
|
-
});
|
|
536
|
-
} catch (_error) {
|
|
537
|
-
this.filters = original;
|
|
538
|
-
return { resulting: original };
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
this.sync();
|
|
542
|
-
return {
|
|
543
|
-
resulting: this.filters,
|
|
544
|
-
affected: finalAffectedFilter!,
|
|
545
|
-
original: original[filterIndex],
|
|
546
|
-
};
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
/**
|
|
550
|
-
* **************************************************************************************************
|
|
551
|
-
****************************************** Merging *************************************************
|
|
552
|
-
****************************************************************************************************
|
|
553
|
-
*/
|
|
554
|
-
|
|
555
|
-
/**
|
|
556
|
-
* Merge the filter into the collection by some filter parameters
|
|
557
|
-
* @param filter the filter to merge
|
|
558
|
-
* @param settings the settings object to setup this function
|
|
559
|
-
* @returns the new filter collection
|
|
560
|
-
*/
|
|
561
|
-
public mergeSingle(
|
|
562
|
-
filter: IFilter,
|
|
563
|
-
settings?: IFilterMergeSettings,
|
|
564
|
-
): IFilterBuilderSingleReturn {
|
|
565
|
-
if (isEmpty(filter)) return { resulting: this.filters };
|
|
566
|
-
|
|
567
|
-
const filterIndex = this.searchEngine.findIndexByParams({
|
|
568
|
-
columnId: filter.columnId,
|
|
569
|
-
datasetId: filter.datasetId,
|
|
570
|
-
grouping: filter.grouping,
|
|
571
|
-
scope: filter.scope,
|
|
572
|
-
scopeId: filter.scopeId,
|
|
573
|
-
validator: filter.validator,
|
|
574
|
-
});
|
|
575
|
-
|
|
576
|
-
let original = filter;
|
|
577
|
-
let affected: IFilter | undefined = filter;
|
|
578
|
-
if (filterIndex > -1) {
|
|
579
|
-
original = objectCopy(this.filters[filterIndex]);
|
|
580
|
-
const { affected: affectedMergeFilter } = this.mergeValues(
|
|
581
|
-
this.filters[filterIndex].id,
|
|
582
|
-
filter.values,
|
|
583
|
-
);
|
|
584
|
-
affected = affectedMergeFilter;
|
|
585
|
-
} else {
|
|
586
|
-
const { affected: affectedAddSingle } = this.addSingle(
|
|
587
|
-
filter,
|
|
588
|
-
undefined,
|
|
589
|
-
settings,
|
|
590
|
-
);
|
|
591
|
-
affected = affectedAddSingle;
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
return {
|
|
595
|
-
resulting: this.filters,
|
|
596
|
-
affected,
|
|
597
|
-
original,
|
|
598
|
-
};
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
/**
|
|
602
|
-
* Merge the filters into the collection by some filter parameters
|
|
603
|
-
* @param filters the filter collection to merge
|
|
604
|
-
* @param settings the settings object to setup this function
|
|
605
|
-
* @returns the new filter collection
|
|
606
|
-
*/
|
|
607
|
-
public mergeMultiple(
|
|
608
|
-
filters: IFilter[],
|
|
609
|
-
settings?: IFilterMergeSettings,
|
|
610
|
-
): IFilterBuilderMultipleReturn {
|
|
611
|
-
if (!Array.isArray(filters) || isEmpty(filters))
|
|
612
|
-
return { resulting: this.filters };
|
|
613
|
-
|
|
614
|
-
const originalFilters = objectCopy(this.filters);
|
|
615
|
-
const mergedFilters: IFilter[] = [];
|
|
616
|
-
try {
|
|
617
|
-
filters.forEach((filter: IFilter) => {
|
|
618
|
-
const mergedFilter: IFilterBuilderSingleReturn = this.mergeSingle(
|
|
619
|
-
filter,
|
|
620
|
-
settings,
|
|
621
|
-
);
|
|
622
|
-
mergedFilters.push(mergedFilter.affected!);
|
|
623
|
-
});
|
|
624
|
-
} catch (_error) {
|
|
625
|
-
this.filters = originalFilters;
|
|
626
|
-
return { resulting: originalFilters };
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
this.sync();
|
|
630
|
-
return {
|
|
631
|
-
resulting: this.filters,
|
|
632
|
-
affected: mergedFilters,
|
|
633
|
-
original: originalFilters,
|
|
634
|
-
};
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
/**
|
|
638
|
-
* Merge values from filter
|
|
639
|
-
* @param id the ID to search the filter to merge values
|
|
640
|
-
* @param values the value collection to merge
|
|
641
|
-
* @returns the new filter collection
|
|
642
|
-
*/
|
|
643
|
-
public mergeValues(
|
|
644
|
-
id: string,
|
|
645
|
-
values: IFilterValue[] | undefined,
|
|
646
|
-
): IFilterBuilderSingleReturn {
|
|
647
|
-
const filterIndex = this.searchEngine.findIndexByParams({ id });
|
|
648
|
-
if (isEmpty(values) || filterIndex < 0) return { resulting: this.filters };
|
|
649
|
-
|
|
650
|
-
const original = objectCopy(this.filters[filterIndex]);
|
|
651
|
-
const filterType = getFilterType(original.columnType, original.validator);
|
|
652
|
-
|
|
653
|
-
if (isEmpty(this.filters[filterIndex].values))
|
|
654
|
-
this.filters[filterIndex].values = [];
|
|
655
|
-
|
|
656
|
-
values!.forEach((value) => {
|
|
657
|
-
switch (filterType) {
|
|
658
|
-
case FILTER_TYPE.RANGE: {
|
|
659
|
-
const valueIndex = (
|
|
660
|
-
this.filters[filterIndex].values as IFilterValueRange[]
|
|
661
|
-
).findIndex(
|
|
662
|
-
(v) =>
|
|
663
|
-
v.max === (value as IFilterValueRange).max &&
|
|
664
|
-
v.min === (value as IFilterValueRange).min,
|
|
665
|
-
);
|
|
666
|
-
if (valueIndex < 0) {
|
|
667
|
-
this.filters[filterIndex].values?.push(value);
|
|
668
|
-
}
|
|
669
|
-
break;
|
|
670
|
-
}
|
|
671
|
-
case FILTER_TYPE.REGULAR: {
|
|
672
|
-
const valueIndex = (
|
|
673
|
-
this.filters[filterIndex].values as IFilterValueRegular[]
|
|
674
|
-
).findIndex((v) => v.value === (value as IFilterValueRegular).value);
|
|
675
|
-
if (valueIndex < 0) {
|
|
676
|
-
this.filters[filterIndex].values?.push(value);
|
|
677
|
-
}
|
|
678
|
-
break;
|
|
679
|
-
}
|
|
680
|
-
case FILTER_TYPE.RELATIVE:
|
|
681
|
-
(this.filters[filterIndex].values as IFilterValueRelativeDate[])[0] =
|
|
682
|
-
value as IFilterValueRelativeDate;
|
|
683
|
-
break;
|
|
684
|
-
}
|
|
685
|
-
});
|
|
686
|
-
|
|
687
|
-
this.sync();
|
|
688
|
-
return {
|
|
689
|
-
resulting: this.filters,
|
|
690
|
-
affected: this.filters[filterIndex],
|
|
691
|
-
original,
|
|
692
|
-
};
|
|
693
|
-
}
|
|
694
|
-
|
|
695
|
-
/**
|
|
696
|
-
* **************************************************************************************************
|
|
697
|
-
****************************************** Others **************************************************
|
|
698
|
-
****************************************************************************************************
|
|
699
|
-
*/
|
|
700
|
-
|
|
701
|
-
/**
|
|
702
|
-
* Builds an filter structure based on given params
|
|
703
|
-
* @param filter the partial filter params
|
|
704
|
-
* @param settings the settings object to setup this function
|
|
705
|
-
* @returns the complete filter structure
|
|
706
|
-
*/
|
|
707
|
-
static createFilter(
|
|
708
|
-
filter: Partial<IFilter>,
|
|
709
|
-
settings?: IFilterCreateSettings,
|
|
710
|
-
): IFilter {
|
|
711
|
-
const newSettings: IFilterCreateSettings =
|
|
712
|
-
getFilterCreateSettings(settings);
|
|
713
|
-
|
|
714
|
-
const newFilter: IFilter = {
|
|
715
|
-
...DEFAULT_FILTER,
|
|
716
|
-
aggregateType: filter.aggregateType ?? DEFAULT_FILTER.aggregateType,
|
|
717
|
-
collapsed: filter.collapsed ?? DEFAULT_FILTER.collapsed,
|
|
718
|
-
columnId: filter.columnId ?? DEFAULT_FILTER.columnId,
|
|
719
|
-
columnType: filter.columnType ?? DEFAULT_FILTER.columnType,
|
|
720
|
-
customLabel: filter.customLabel ?? DEFAULT_FILTER.customLabel,
|
|
721
|
-
datasetId: filter.datasetId ?? DEFAULT_FILTER.datasetId,
|
|
722
|
-
deletable: filter.deletable ?? DEFAULT_FILTER.deletable,
|
|
723
|
-
displayed: filter.displayed ?? DEFAULT_FILTER.displayed,
|
|
724
|
-
editable: filter.editable ?? DEFAULT_FILTER.editable,
|
|
725
|
-
enableable: filter.enableable ?? DEFAULT_FILTER.enableable,
|
|
726
|
-
enabled: filter.enabled ?? DEFAULT_FILTER.enabled,
|
|
727
|
-
formulaType: filter.formulaType ?? DEFAULT_FILTER.formulaType,
|
|
728
|
-
id: filter.id || "",
|
|
729
|
-
operator: filter.operator || DEFAULT_FILTER.operator,
|
|
730
|
-
scope: filter.scope || DEFAULT_FILTER.scope,
|
|
731
|
-
scopeId: filter.scopeId || DEFAULT_FILTER.scopeId,
|
|
732
|
-
validator: filter.validator || DEFAULT_FILTER.validator,
|
|
733
|
-
grouping: getFilterGrouping(filter, newSettings),
|
|
734
|
-
selectAll: filter.selectAll ?? DEFAULT_FILTER.selectAll,
|
|
735
|
-
values: filter.values || DEFAULT_FILTER.values,
|
|
736
|
-
};
|
|
737
|
-
if (isEmpty(filter.id) || newSettings.automaticId)
|
|
738
|
-
newFilter.id = getFilterId(newFilter);
|
|
739
|
-
|
|
740
|
-
if (!isEmpty(newSettings.rawValues)) {
|
|
741
|
-
const filterType = getFilterType(
|
|
742
|
-
newFilter.columnType,
|
|
743
|
-
newFilter.validator,
|
|
744
|
-
);
|
|
745
|
-
newFilter.values = FilterValues.getFilterValues(
|
|
746
|
-
filterType,
|
|
747
|
-
newSettings.rawValues,
|
|
748
|
-
);
|
|
749
|
-
}
|
|
750
|
-
return newFilter;
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
/**
|
|
754
|
-
* Sets the given filters by param
|
|
755
|
-
* - Remove the filters by the sucesfull conditions and replace the given ones
|
|
756
|
-
* @param filters the filters to set
|
|
757
|
-
* @param params params to search the filters
|
|
758
|
-
* @param settings settings for this function
|
|
759
|
-
* @returns the new collection of filters
|
|
760
|
-
*/
|
|
761
|
-
public replaceByParams(
|
|
762
|
-
filters: IFilter[],
|
|
763
|
-
params: Partial<IFilter>,
|
|
764
|
-
settings?: IFilterReplaceParamSettings,
|
|
765
|
-
): IFilterBuilderMultipleReturn {
|
|
766
|
-
const original: IFilter[] = objectCopy(this.filters);
|
|
767
|
-
|
|
768
|
-
const newSettings = getReplaceByParamsSettings(settings);
|
|
769
|
-
let filterIndexes: number[] | undefined = undefined;
|
|
770
|
-
if (newSettings.addingInSameIndex) {
|
|
771
|
-
filterIndexes = this.searchEngine.filterIndexesByParams(params, settings);
|
|
772
|
-
if (isEmpty(filterIndexes)) filterIndexes = undefined;
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
this.filters = this.searchEngine.excludeByParams(params, newSettings);
|
|
776
|
-
this.sync();
|
|
777
|
-
const resulting = this.addMultiple(filters, filterIndexes, newSettings);
|
|
778
|
-
|
|
779
|
-
this.sync();
|
|
780
|
-
return {
|
|
781
|
-
resulting: this.filters,
|
|
782
|
-
affected: resulting.affected,
|
|
783
|
-
original,
|
|
784
|
-
};
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
/**
|
|
788
|
-
* Method to sync the Filter instances
|
|
789
|
-
*/
|
|
790
|
-
private sync(): void {
|
|
791
|
-
this.searchEngine.setFilters(this.filters);
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
/**
|
|
795
|
-
* **************************************************************************************************
|
|
796
|
-
****************************************** Getters *************************************************
|
|
797
|
-
****************************************************************************************************
|
|
798
|
-
*/
|
|
799
|
-
|
|
800
|
-
/**
|
|
801
|
-
* Gets the filter collection
|
|
802
|
-
* @returns the collection of filters of the context
|
|
803
|
-
*/
|
|
804
|
-
public getFilters(): IFilter[] {
|
|
805
|
-
return this.filters;
|
|
806
|
-
}
|
|
807
|
-
|
|
808
|
-
/**
|
|
809
|
-
* **************************************************************************************************
|
|
810
|
-
****************************************** Setters *************************************************
|
|
811
|
-
****************************************************************************************************
|
|
812
|
-
*/
|
|
813
|
-
|
|
814
|
-
/**
|
|
815
|
-
* Sets the filters
|
|
816
|
-
* @param filters the new collection of filters to set
|
|
817
|
-
*/
|
|
818
|
-
public setFilters(filters: IFilter[]): void {
|
|
819
|
-
this.filters = objectCopy(filters);
|
|
820
|
-
this.sync();
|
|
821
|
-
}
|
|
822
|
-
}
|