@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.
Files changed (279) hide show
  1. package/README.md +63 -1
  2. package/dist/cjs/classes/FilterAdapter.js +1 -80
  3. package/dist/cjs/classes/FilterBuilder.js +32 -251
  4. package/dist/cjs/classes/FilterManager.js +7 -64
  5. package/dist/cjs/classes/FilterResources.js +3 -116
  6. package/dist/cjs/classes/FilterSearcher.js +0 -77
  7. package/dist/cjs/classes/FilterValidation.js +0 -93
  8. package/dist/cjs/classes/FilterValues.js +0 -24
  9. package/dist/cjs/classes/index.js +8 -21
  10. package/dist/cjs/helpers/filter-adapt.helpers.js +3 -46
  11. package/dist/cjs/helpers/filter-adapt.legacy.helpers.js +6 -53
  12. package/dist/cjs/helpers/filter-adapt.logic.helpers.js +7 -128
  13. package/dist/cjs/helpers/filter-builder.helpers.js +1 -8
  14. package/dist/cjs/helpers/filter-settings.helpers.js +6 -41
  15. package/dist/cjs/helpers/filter-validators.helpers.js +15 -9
  16. package/dist/cjs/helpers/filter-verbose.helpers.js +211 -0
  17. package/dist/cjs/helpers/getAggregateFilters.js +11 -0
  18. package/dist/cjs/helpers/getFilterId.js +1 -17
  19. package/dist/cjs/helpers/getFilterType.js +1 -8
  20. package/dist/cjs/helpers/index.js +12 -20
  21. package/dist/cjs/helpers/isDateDistinctGrouping.js +15 -0
  22. package/dist/cjs/helpers/isRankingFilter.js +10 -0
  23. package/dist/cjs/helpers/resolveFilterConditions.js +2 -10
  24. package/dist/cjs/helpers/utils.helpers.js +2 -19
  25. package/dist/cjs/index.js +5 -18
  26. package/dist/cjs/models/index.js +4 -17
  27. package/dist/cjs/resources/filter-grouping.resources.js +0 -18
  28. package/dist/cjs/resources/filter-logic.resources.js +0 -3
  29. package/dist/cjs/resources/filter-scopes.resources.js +10 -27
  30. package/dist/cjs/resources/filter-validators.resources.js +0 -3
  31. package/dist/cjs/resources/filter-verbose.resources.js +13 -0
  32. package/dist/cjs/resources/filters.resources.js +0 -12
  33. package/dist/cjs/resources/index.js +12 -24
  34. package/dist/classes/FilterAdapter.d.ts +0 -80
  35. package/dist/classes/FilterAdapter.js +1 -80
  36. package/dist/classes/FilterBuilder.d.ts +2 -177
  37. package/dist/classes/FilterBuilder.js +32 -251
  38. package/dist/classes/FilterManager.d.ts +7 -62
  39. package/dist/classes/FilterManager.js +7 -64
  40. package/dist/classes/FilterResources.d.ts +1 -115
  41. package/dist/classes/FilterResources.js +3 -116
  42. package/dist/classes/FilterSearcher.d.ts +2 -77
  43. package/dist/classes/FilterSearcher.js +0 -77
  44. package/dist/classes/FilterValidation.d.ts +1 -47
  45. package/dist/classes/FilterValidation.js +0 -93
  46. package/dist/classes/FilterValues.d.ts +0 -25
  47. package/dist/classes/FilterValues.js +0 -24
  48. package/dist/classes/index.d.ts +0 -1
  49. package/dist/helpers/filter-adapt.helpers.d.ts +0 -15
  50. package/dist/helpers/filter-adapt.helpers.js +1 -43
  51. package/dist/helpers/filter-adapt.legacy.helpers.d.ts +0 -20
  52. package/dist/helpers/filter-adapt.legacy.helpers.js +3 -49
  53. package/dist/helpers/filter-adapt.logic.helpers.d.ts +0 -22
  54. package/dist/helpers/filter-adapt.logic.helpers.js +3 -123
  55. package/dist/helpers/filter-builder.helpers.d.ts +0 -7
  56. package/dist/helpers/filter-builder.helpers.js +0 -6
  57. package/dist/helpers/filter-settings.helpers.d.ts +0 -35
  58. package/dist/helpers/filter-settings.helpers.js +0 -34
  59. package/dist/helpers/filter-validators.helpers.d.ts +3 -6
  60. package/dist/helpers/filter-validators.helpers.js +11 -7
  61. package/dist/helpers/filter-verbose.helpers.d.ts +6 -0
  62. package/dist/helpers/filter-verbose.helpers.js +206 -0
  63. package/dist/helpers/getAggregateFilters.d.ts +3 -0
  64. package/dist/helpers/getAggregateFilters.js +7 -0
  65. package/dist/helpers/getFilterId.d.ts +0 -16
  66. package/dist/helpers/getFilterId.js +0 -15
  67. package/dist/helpers/getFilterType.d.ts +0 -7
  68. package/dist/helpers/getFilterType.js +0 -6
  69. package/dist/helpers/index.d.ts +5 -1
  70. package/dist/helpers/index.js +5 -0
  71. package/dist/helpers/isDateDistinctGrouping.d.ts +2 -0
  72. package/dist/helpers/isDateDistinctGrouping.js +12 -0
  73. package/dist/helpers/isRankingFilter.d.ts +2 -0
  74. package/dist/helpers/isRankingFilter.js +7 -0
  75. package/dist/helpers/resolveFilterConditions.d.ts +0 -8
  76. package/dist/helpers/resolveFilterConditions.js +1 -8
  77. package/dist/helpers/utils.helpers.d.ts +0 -17
  78. package/dist/helpers/utils.helpers.js +0 -16
  79. package/dist/index.d.ts +0 -1
  80. package/dist/models/filter-builder.models.d.ts +0 -156
  81. package/dist/models/filter-resources.models.d.ts +0 -53
  82. package/dist/models/filter-searcher.models.d.ts +5 -34
  83. package/dist/models/filter-validation.models.d.ts +0 -40
  84. package/dist/models/index.d.ts +0 -1
  85. package/dist/resources/filter-functions.resources.d.ts +0 -49
  86. package/dist/resources/filter-grouping.resources.d.ts +0 -7
  87. package/dist/resources/filter-grouping.resources.js +0 -18
  88. package/dist/resources/filter-logic.resources.d.ts +0 -79
  89. package/dist/resources/filter-logic.resources.js +0 -3
  90. package/dist/resources/filter-operators.resources.d.ts +0 -1
  91. package/dist/resources/filter-panel.interfaces.d.ts +0 -49
  92. package/dist/resources/filter-scopes.resources.d.ts +2 -25
  93. package/dist/resources/filter-scopes.resources.js +10 -27
  94. package/dist/resources/filter-validation.resources.d.ts +0 -1
  95. package/dist/resources/filter-validators.resources.d.ts +0 -1
  96. package/dist/resources/filter-validators.resources.js +0 -3
  97. package/dist/resources/filter-values.resources.d.ts +0 -13
  98. package/dist/resources/filter-verbose.resources.d.ts +23 -0
  99. package/dist/resources/filter-verbose.resources.js +10 -0
  100. package/dist/resources/filter-visual.resources.d.ts +0 -50
  101. package/dist/resources/filters.resources.d.ts +1 -102
  102. package/dist/resources/filters.resources.js +0 -12
  103. package/dist/resources/index.d.ts +1 -1
  104. package/dist/resources/index.js +1 -0
  105. package/package.json +59 -44
  106. package/.eslintignore +0 -6
  107. package/.eslintrc.json +0 -122
  108. package/.husky/pre-commit +0 -4
  109. package/.lintstagedrc +0 -7
  110. package/.prettierignore +0 -6
  111. package/.prettierrc.json +0 -1
  112. package/CHANGELOG.md +0 -274
  113. package/CODE_OF_CONDUCT.md +0 -132
  114. package/bitbucket-pipelines.yml +0 -92
  115. package/dist/cjs/classes/FilterAdapter.d.ts +0 -107
  116. package/dist/cjs/classes/FilterAdapter.d.ts.map +0 -1
  117. package/dist/cjs/classes/FilterBuilder.d.ts +0 -206
  118. package/dist/cjs/classes/FilterBuilder.d.ts.map +0 -1
  119. package/dist/cjs/classes/FilterManager.d.ts +0 -84
  120. package/dist/cjs/classes/FilterManager.d.ts.map +0 -1
  121. package/dist/cjs/classes/FilterResources.d.ts +0 -139
  122. package/dist/cjs/classes/FilterResources.d.ts.map +0 -1
  123. package/dist/cjs/classes/FilterSearcher.d.ts +0 -90
  124. package/dist/cjs/classes/FilterSearcher.d.ts.map +0 -1
  125. package/dist/cjs/classes/FilterValidation.d.ts +0 -58
  126. package/dist/cjs/classes/FilterValidation.d.ts.map +0 -1
  127. package/dist/cjs/classes/FilterValues.d.ts +0 -33
  128. package/dist/cjs/classes/FilterValues.d.ts.map +0 -1
  129. package/dist/cjs/classes/index.d.ts +0 -8
  130. package/dist/cjs/classes/index.d.ts.map +0 -1
  131. package/dist/cjs/helpers/filter-adapt.helpers.d.ts +0 -21
  132. package/dist/cjs/helpers/filter-adapt.helpers.d.ts.map +0 -1
  133. package/dist/cjs/helpers/filter-adapt.legacy.helpers.d.ts +0 -26
  134. package/dist/cjs/helpers/filter-adapt.legacy.helpers.d.ts.map +0 -1
  135. package/dist/cjs/helpers/filter-adapt.logic.helpers.d.ts +0 -29
  136. package/dist/cjs/helpers/filter-adapt.logic.helpers.d.ts.map +0 -1
  137. package/dist/cjs/helpers/filter-builder.helpers.d.ts +0 -11
  138. package/dist/cjs/helpers/filter-builder.helpers.d.ts.map +0 -1
  139. package/dist/cjs/helpers/filter-settings.helpers.d.ts +0 -42
  140. package/dist/cjs/helpers/filter-settings.helpers.d.ts.map +0 -1
  141. package/dist/cjs/helpers/filter-validators.helpers.d.ts +0 -8
  142. package/dist/cjs/helpers/filter-validators.helpers.d.ts.map +0 -1
  143. package/dist/cjs/helpers/getFilterId.d.ts +0 -18
  144. package/dist/cjs/helpers/getFilterId.d.ts.map +0 -1
  145. package/dist/cjs/helpers/getFilterType.d.ts +0 -11
  146. package/dist/cjs/helpers/getFilterType.d.ts.map +0 -1
  147. package/dist/cjs/helpers/index.d.ts +0 -7
  148. package/dist/cjs/helpers/index.d.ts.map +0 -1
  149. package/dist/cjs/helpers/resolveFilterConditions.d.ts +0 -11
  150. package/dist/cjs/helpers/resolveFilterConditions.d.ts.map +0 -1
  151. package/dist/cjs/helpers/utils.helpers.d.ts +0 -26
  152. package/dist/cjs/helpers/utils.helpers.d.ts.map +0 -1
  153. package/dist/cjs/index.d.ts +0 -5
  154. package/dist/cjs/index.d.ts.map +0 -1
  155. package/dist/cjs/models/filter-builder.models.d.ts +0 -203
  156. package/dist/cjs/models/filter-builder.models.d.ts.map +0 -1
  157. package/dist/cjs/models/filter-resources.models.d.ts +0 -71
  158. package/dist/cjs/models/filter-resources.models.d.ts.map +0 -1
  159. package/dist/cjs/models/filter-searcher.models.d.ts +0 -42
  160. package/dist/cjs/models/filter-searcher.models.d.ts.map +0 -1
  161. package/dist/cjs/models/filter-validation.models.d.ts +0 -59
  162. package/dist/cjs/models/filter-validation.models.d.ts.map +0 -1
  163. package/dist/cjs/models/index.d.ts +0 -4
  164. package/dist/cjs/models/index.d.ts.map +0 -1
  165. package/dist/cjs/resources/filter-functions.resources.d.ts +0 -94
  166. package/dist/cjs/resources/filter-functions.resources.d.ts.map +0 -1
  167. package/dist/cjs/resources/filter-grouping.resources.d.ts +0 -103
  168. package/dist/cjs/resources/filter-grouping.resources.d.ts.map +0 -1
  169. package/dist/cjs/resources/filter-logic.resources.d.ts +0 -135
  170. package/dist/cjs/resources/filter-logic.resources.d.ts.map +0 -1
  171. package/dist/cjs/resources/filter-operators.resources.d.ts +0 -16
  172. package/dist/cjs/resources/filter-operators.resources.d.ts.map +0 -1
  173. package/dist/cjs/resources/filter-panel.interfaces.d.ts +0 -80
  174. package/dist/cjs/resources/filter-panel.interfaces.d.ts.map +0 -1
  175. package/dist/cjs/resources/filter-scopes.resources.d.ts +0 -62
  176. package/dist/cjs/resources/filter-scopes.resources.d.ts.map +0 -1
  177. package/dist/cjs/resources/filter-validation.resources.d.ts +0 -20
  178. package/dist/cjs/resources/filter-validation.resources.d.ts.map +0 -1
  179. package/dist/cjs/resources/filter-validators.resources.d.ts +0 -80
  180. package/dist/cjs/resources/filter-validators.resources.d.ts.map +0 -1
  181. package/dist/cjs/resources/filter-values.resources.d.ts +0 -40
  182. package/dist/cjs/resources/filter-values.resources.d.ts.map +0 -1
  183. package/dist/cjs/resources/filter-visual.resources.d.ts +0 -77
  184. package/dist/cjs/resources/filter-visual.resources.d.ts.map +0 -1
  185. package/dist/cjs/resources/filters.resources.d.ts +0 -168
  186. package/dist/cjs/resources/filters.resources.d.ts.map +0 -1
  187. package/dist/cjs/resources/index.d.ts +0 -11
  188. package/dist/cjs/resources/index.d.ts.map +0 -1
  189. package/dist/classes/FilterAdapter.d.ts.map +0 -1
  190. package/dist/classes/FilterBuilder.d.ts.map +0 -1
  191. package/dist/classes/FilterManager.d.ts.map +0 -1
  192. package/dist/classes/FilterResources.d.ts.map +0 -1
  193. package/dist/classes/FilterSearcher.d.ts.map +0 -1
  194. package/dist/classes/FilterValidation.d.ts.map +0 -1
  195. package/dist/classes/FilterValues.d.ts.map +0 -1
  196. package/dist/classes/index.d.ts.map +0 -1
  197. package/dist/helpers/filter-adapt.helpers.d.ts.map +0 -1
  198. package/dist/helpers/filter-adapt.legacy.helpers.d.ts.map +0 -1
  199. package/dist/helpers/filter-adapt.logic.helpers.d.ts.map +0 -1
  200. package/dist/helpers/filter-builder.helpers.d.ts.map +0 -1
  201. package/dist/helpers/filter-settings.helpers.d.ts.map +0 -1
  202. package/dist/helpers/filter-validators.helpers.d.ts.map +0 -1
  203. package/dist/helpers/getFilterId.d.ts.map +0 -1
  204. package/dist/helpers/getFilterType.d.ts.map +0 -1
  205. package/dist/helpers/index.d.ts.map +0 -1
  206. package/dist/helpers/resolveFilterConditions.d.ts.map +0 -1
  207. package/dist/helpers/utils.helpers.d.ts.map +0 -1
  208. package/dist/index.d.ts.map +0 -1
  209. package/dist/models/filter-builder.models.d.ts.map +0 -1
  210. package/dist/models/filter-resources.models.d.ts.map +0 -1
  211. package/dist/models/filter-searcher.models.d.ts.map +0 -1
  212. package/dist/models/filter-validation.models.d.ts.map +0 -1
  213. package/dist/models/index.d.ts.map +0 -1
  214. package/dist/resources/filter-functions.resources.d.ts.map +0 -1
  215. package/dist/resources/filter-grouping.resources.d.ts.map +0 -1
  216. package/dist/resources/filter-logic.resources.d.ts.map +0 -1
  217. package/dist/resources/filter-operators.resources.d.ts.map +0 -1
  218. package/dist/resources/filter-panel.interfaces.d.ts.map +0 -1
  219. package/dist/resources/filter-scopes.resources.d.ts.map +0 -1
  220. package/dist/resources/filter-validation.resources.d.ts.map +0 -1
  221. package/dist/resources/filter-validators.resources.d.ts.map +0 -1
  222. package/dist/resources/filter-values.resources.d.ts.map +0 -1
  223. package/dist/resources/filter-visual.resources.d.ts.map +0 -1
  224. package/dist/resources/filters.resources.d.ts.map +0 -1
  225. package/dist/resources/index.d.ts.map +0 -1
  226. package/jest.config.js +0 -10
  227. package/jsdoc.config.json +0 -14
  228. package/scripts/clean-build/index.js +0 -62
  229. package/sonar-project.properties +0 -2
  230. package/src/classes/FilterAdapter.ts +0 -208
  231. package/src/classes/FilterBuilder.ts +0 -822
  232. package/src/classes/FilterManager.ts +0 -126
  233. package/src/classes/FilterResources.ts +0 -411
  234. package/src/classes/FilterSearcher.ts +0 -243
  235. package/src/classes/FilterValidation.ts +0 -221
  236. package/src/classes/FilterValues.ts +0 -89
  237. package/src/classes/index.ts +0 -7
  238. package/src/helpers/filter-adapt.helpers.ts +0 -204
  239. package/src/helpers/filter-adapt.legacy.helpers.ts +0 -298
  240. package/src/helpers/filter-adapt.logic.helpers.ts +0 -631
  241. package/src/helpers/filter-builder.helpers.ts +0 -28
  242. package/src/helpers/filter-settings.helpers.ts +0 -133
  243. package/src/helpers/filter-validators.helpers.ts +0 -15
  244. package/src/helpers/getFilterId.ts +0 -35
  245. package/src/helpers/getFilterType.ts +0 -23
  246. package/src/helpers/index.ts +0 -6
  247. package/src/helpers/resolveFilterConditions.ts +0 -29
  248. package/src/helpers/utils.helpers.ts +0 -37
  249. package/src/index.ts +0 -4
  250. package/src/models/filter-builder.models.ts +0 -256
  251. package/src/models/filter-resources.models.ts +0 -89
  252. package/src/models/filter-searcher.models.ts +0 -61
  253. package/src/models/filter-validation.models.ts +0 -71
  254. package/src/models/index.ts +0 -3
  255. package/src/resources/filter-functions.resources.ts +0 -132
  256. package/src/resources/filter-grouping.resources.ts +0 -531
  257. package/src/resources/filter-logic.resources.ts +0 -148
  258. package/src/resources/filter-operators.resources.ts +0 -40
  259. package/src/resources/filter-panel.interfaces.ts +0 -86
  260. package/src/resources/filter-scopes.resources.ts +0 -152
  261. package/src/resources/filter-validation.resources.ts +0 -90
  262. package/src/resources/filter-validators.resources.ts +0 -411
  263. package/src/resources/filter-values.resources.ts +0 -57
  264. package/src/resources/filter-visual.resources.ts +0 -86
  265. package/src/resources/filters.resources.ts +0 -232
  266. package/src/resources/index.ts +0 -10
  267. package/tests/classes/FilterAdapter.test.ts +0 -124
  268. package/tests/classes/FilterBuilder.test.ts +0 -903
  269. package/tests/classes/FilterResources.test.ts +0 -267
  270. package/tests/classes/FilterSearcher.test.ts +0 -188
  271. package/tests/classes/FilterValidation.test.ts +0 -54
  272. package/tests/helpers/getFilterId.test.ts +0 -121
  273. package/tests/mock/datasets.mock.ts +0 -61
  274. package/tests/mock/filters-adapter.mock.ts +0 -646
  275. package/tests/mock/filters-interactive-table.mock.ts +0 -59
  276. package/tests/mock/filters.mock.ts +0 -277
  277. package/tsconfig.doc.json +0 -4
  278. package/tsconfig.eslint.json +0 -4
  279. 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
- }