@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,631 +0,0 @@
1
- import {
2
- _hasProperty,
3
- COLUMN,
4
- COLUMN_PROPERTY,
5
- flattenDeep,
6
- isDateColumn,
7
- isEmpty,
8
- } from "@qrvey/utils";
9
-
10
- import { filterToVisual } from "./filter-adapt.helpers";
11
- import { isNullValidator } from "./filter-validators.helpers";
12
- import { getFilterType } from "./getFilterType";
13
-
14
- import {
15
- FILTER_GROUPING,
16
- IFilterGrouping,
17
- } from "../resources/filter-grouping.resources";
18
- import {
19
- FILTER_LOGIC_VALIDATOR,
20
- IFilterLogic,
21
- IFilterLogicExpression,
22
- IFilterLogicExpressionValue,
23
- IFilterLogicExpressionValueRange,
24
- IFilterLogicExpressionValueRanking,
25
- IFilterLogicExpressionValueRegular,
26
- IFilterLogicExpressionValueRelative,
27
- IFilterLogicFilter,
28
- IFilterLogicValidator,
29
- } from "../resources/filter-logic.resources";
30
- import {
31
- FILTER_OPERATOR,
32
- IFilterOperator,
33
- } from "../resources/filter-operators.resources";
34
- import {
35
- FILTER_LOGIC_VALIDATOR_BY_VALIDATOR,
36
- FILTER_VALIDATOR,
37
- } from "../resources/filter-validators.resources";
38
- import {
39
- IFilterValueRange,
40
- IFilterValueRanking,
41
- IFilterValueRegular,
42
- IFilterValueRelativeDate,
43
- } from "../resources/filter-values.resources";
44
- import {
45
- IFilterUI,
46
- IFilterVisual,
47
- IFilterVisualDataset,
48
- IFilterVisualScope,
49
- } from "../resources/filter-visual.resources";
50
- import { FILTER_TYPE, IFilter } from "../resources/filters.resources";
51
-
52
- /**
53
- * Generates a Logic structure from the filter collection
54
- * @param filters the filter collection
55
- * @returns the logic structure
56
- */
57
- export function filterToLogic(filters: IFilter[]): IFilterLogic[] {
58
- if (isEmpty(filters)) return [];
59
-
60
- const visual = filterToVisual(filters)!;
61
- return visualToLogic(visual);
62
- }
63
-
64
- /**
65
- * Generates a Logic structure from the visual filter structure
66
- * @param visual the visual filter structure
67
- * @returns the logic structure
68
- */
69
- export function visualToLogic(visual: IFilterVisual): IFilterLogic[] {
70
- return visual.scopes.reduce(
71
- (logics: IFilterLogic[], scope: IFilterVisualScope) => {
72
- const logic: IFilterLogic = buildLogic(scope);
73
- let filters: IFilterLogicFilter[] = [];
74
- if (scope.datasets.length > 0) {
75
- scope.datasets.forEach((dataset: IFilterVisualDataset) => {
76
- const expressions = buildLogicFilters(dataset.filters, true);
77
- filters = filters.concat(expressions);
78
- });
79
- }
80
- logics.push({ ...logic, filters });
81
- return logics;
82
- },
83
- [],
84
- );
85
- }
86
-
87
- /**
88
- * Gets the Logic structure for the given scope
89
- * @param scope the visual filter scope object
90
- * @returns a logic structure
91
- */
92
- function buildLogic(scope: IFilterVisualScope): IFilterLogic {
93
- return {
94
- filters: [],
95
- scope: scope.scope,
96
- scopeid: scope.id,
97
- };
98
- }
99
-
100
- /**
101
- * Gets the Logic Filters collection based on filters
102
- * @param filters the filter collection
103
- * @param groupColumns a flag to know if the
104
- * @returns the logic filter collection
105
- */
106
- function buildLogicFilters(
107
- filters: IFilterUI[],
108
- groupColumns = false,
109
- ): IFilterLogicFilter[] {
110
- const expression = numericExpression(filters, groupColumns);
111
- const orOperators = expression.split("+");
112
-
113
- const getFilter = (fi: string): IFilterLogicExpression | undefined => {
114
- const filter = filters.find((f) => f.id === fi);
115
- if (filter == null) return;
116
-
117
- return buildLogicExpression(filter);
118
- };
119
-
120
- const expressions = orOperators
121
- .map((group) => {
122
- const andOperators = group.split("*");
123
- if (andOperators.length > 1) {
124
- const groupedExpression: IFilterLogicFilter = {
125
- operator: FILTER_OPERATOR.AND,
126
- expressions: andOperators
127
- .map<IFilterLogicExpression>(
128
- (group2) =>
129
- getColumnExpressions(
130
- group2,
131
- getFilter,
132
- ) as IFilterLogicExpression,
133
- )
134
- .filter(Boolean),
135
- };
136
- return groupedExpression;
137
- }
138
- return getColumnExpressions(group, getFilter);
139
- })
140
- .filter(Boolean);
141
- if (orOperators.length > 1) {
142
- return [
143
- {
144
- operator: FILTER_OPERATOR.OR,
145
- expressions: expressions as IFilterLogicExpression[],
146
- },
147
- ];
148
- }
149
-
150
- if (_hasProperty(expressions[0], "expressions")) {
151
- return expressions as IFilterLogicFilter[];
152
- }
153
- return [
154
- {
155
- operator: FILTER_OPERATOR.AND,
156
- expressions: expressions as IFilterLogicExpression[],
157
- },
158
- ];
159
- }
160
-
161
- /**
162
- *
163
- * @param group
164
- * @param getFilter
165
- */
166
- function getColumnExpressions(
167
- group: string,
168
- getFilter: (fi: string) => IFilterLogicExpression | undefined,
169
- ): IFilterLogicFilter | IFilterLogicExpression {
170
- const columnOrOperators = group.split("/");
171
- if (columnOrOperators.length > 1) {
172
- return {
173
- operator: FILTER_OPERATOR.OR,
174
- expressions: columnOrOperators
175
- .map((group3) => getFilter(group3))
176
- .filter(Boolean),
177
- } as IFilterLogicFilter;
178
- }
179
- return getFilter(group) as IFilterLogicExpression;
180
- }
181
-
182
- /**
183
- *
184
- * @param operator
185
- * @param priority
186
- */
187
- function logicToNumeric(
188
- operator: IFilterOperator,
189
- priority = false,
190
- ): "*" | "/" | "+" {
191
- if (operator === FILTER_OPERATOR.AND) {
192
- return "*";
193
- }
194
- return priority ? "/" : "+";
195
- }
196
-
197
- /**
198
- *
199
- * @param filters
200
- * @param groupColumns
201
- */
202
- function numericExpression(filters: IFilterUI[], groupColumns = false) {
203
- let expression = "";
204
- filters.forEach((item: IFilterUI, index: number) => {
205
- const filter: IFilterUI = filters[index + 1] || {};
206
- const operator = logicToNumeric(
207
- item.operator,
208
- groupColumns && item.columnId === filter?.columnId,
209
- );
210
- expression += `${item.id}${operator}`;
211
- });
212
- return expression.substring(0, expression.length - 1);
213
- }
214
-
215
- /**
216
- * Builds filter expression by the filter data.
217
- * - If the resulting value array is empty the enabled property will be false.
218
- * @param filter The filter to transform
219
- * @returns a filter expression
220
- */
221
- export function buildLogicExpression(
222
- filter: IFilterUI,
223
- ): IFilterLogicExpression {
224
- const expression: IFilterLogicExpression = {
225
- enabled: filter.enabled,
226
- groupValue: getLogicExpressionGroupValue(filter),
227
- questionid: filter.columnId,
228
- property: getLogicExpressionProperty(filter),
229
- validationType: getLogicExpressionValidator(filter),
230
- value: getFilterLogicValues(filter),
231
- };
232
- expression.enabled =
233
- filter.selectAll || expression.value!.length > 0 ? filter.enabled : false;
234
-
235
- return expression;
236
- }
237
-
238
- /**
239
- * Gets a group value for the backend logic structure
240
- * @param filter The filter object
241
- * @returns the group value
242
- */
243
- function getLogicExpressionGroupValue(
244
- filter: IFilterUI,
245
- ): IFilterGrouping | undefined {
246
- if (
247
- filter.aggregateType == null &&
248
- isDateColumn({
249
- formulaType: filter.formulaType,
250
- type: filter.columnType,
251
- id: filter.columnId,
252
- qrveyid: filter.datasetId,
253
- }) &&
254
- filter.grouping != null
255
- ) {
256
- return filter.grouping;
257
- }
258
-
259
- return undefined;
260
- }
261
-
262
- /**
263
- * Gets a property for the logic expression structure
264
- * @param filter The filter
265
- * @returns a property
266
- */
267
- function getLogicExpressionProperty(
268
- filter: IFilterUI,
269
- ): IFilterGrouping | string | undefined {
270
- if (isEmpty(filter.aggregateType)) {
271
- if (
272
- isNullValidator(filter.validator) ||
273
- isDateColumn({
274
- formulaType: filter.formulaType,
275
- type: filter.columnType,
276
- id: filter.columnId,
277
- qrveyid: filter.datasetId,
278
- })
279
- ) {
280
- return undefined;
281
- } else if (
282
- filter.columnType === COLUMN.EXPRESSION &&
283
- filter.grouping != null
284
- ) {
285
- return undefined;
286
- } else if (
287
- filter.columnType === COLUMN.LOOKUP &&
288
- filter.grouping === FILTER_GROUPING.LOOKUP_DISPLAY &&
289
- filter.lookupDisplayIndex != null
290
- ) {
291
- return (filter.grouping as string)
292
- ?.concat("_")
293
- .concat(filter.lookupDisplayIndex.toString());
294
- } else if (filter.columnType === COLUMN.IMAGE) {
295
- return (filter.values as IFilterValueRegular[]).every((value) =>
296
- isEmpty(value.id),
297
- )
298
- ? undefined
299
- : COLUMN_PROPERTY.IMAGE_ANSWER_ID;
300
- }
301
- }
302
- return filter.grouping;
303
- }
304
-
305
- /**
306
- * Gets the filter logic Validator
307
- * @param filter the filter object
308
- * @returns the Filter Logic Validator
309
- */
310
- function getLogicExpressionValidator(filter: IFilterUI): IFilterLogicValidator {
311
- let logicValidator = FILTER_LOGIC_VALIDATOR_BY_VALIDATOR[filter.validator];
312
-
313
- if (filter.selectAll && filter.validator === FILTER_VALIDATOR.EQUALS)
314
- logicValidator = FILTER_LOGIC_VALIDATOR.NOT_EQUAL;
315
-
316
- if (filter.selectAll && filter.validator === FILTER_VALIDATOR.NOT_EQUAL)
317
- logicValidator = FILTER_LOGIC_VALIDATOR.EQUALS;
318
-
319
- return logicValidator;
320
- }
321
-
322
- /**
323
- * Gets the expresion values in the logic format
324
- * @param filter The filter structure
325
- * @returns A collection of backend expression value
326
- */
327
- export function getFilterLogicValues(
328
- filter: IFilterUI,
329
- ): IFilterLogicExpressionValue[] {
330
- const values = filter.values || [];
331
-
332
- switch (filter.validator) {
333
- case FILTER_VALIDATOR.EQUALS:
334
- case FILTER_VALIDATOR.NOT_EQUAL:
335
- case FILTER_VALIDATOR.CONTAINS:
336
- case FILTER_VALIDATOR.NOT_CONTAIN:
337
- case FILTER_VALIDATOR.STARTS_WITH:
338
- case FILTER_VALIDATOR.NOT_START_WITH:
339
- case FILTER_VALIDATOR.ENDS_WITH:
340
- case FILTER_VALIDATOR.NOT_END_WITH:
341
- if (
342
- getFilterType(filter.columnType, filter.validator) ===
343
- FILTER_TYPE.RANKING
344
- )
345
- return getRankingValues(values as IFilterValueRanking[][]);
346
- return getResultValues(values as IFilterValueRegular[], filter);
347
- case FILTER_VALIDATOR.BETWEEN_INCLUSIVE:
348
- return getInclusiveRange(values as IFilterValueRange[]);
349
- case FILTER_VALIDATOR.BETWEEN_EXCLUSIVE:
350
- return getExclusiveRange(values as IFilterValueRange[]);
351
- case FILTER_VALIDATOR.BEFORE:
352
- case FILTER_VALIDATOR.LESS_THAN:
353
- return getBeforeValues(values as IFilterValueRange[]);
354
- case FILTER_VALIDATOR.BEFORE_ON:
355
- case FILTER_VALIDATOR.LESS_THAN_EQUAL:
356
- return getBeforeOnValues(values as IFilterValueRange[]);
357
- case FILTER_VALIDATOR.AFTER:
358
- case FILTER_VALIDATOR.GREATER_THAN:
359
- return getAfterValues(values as IFilterValueRange[]);
360
- case FILTER_VALIDATOR.AFTER_ON:
361
- case FILTER_VALIDATOR.GREATER_THAN_EQUAL:
362
- return getAfterOnValues(values as IFilterValueRange[]);
363
- case FILTER_VALIDATOR.IS_NULL:
364
- case FILTER_VALIDATOR.IS_NOT_NULL:
365
- return getNullValues(values as IFilterValueRegular[], filter);
366
- case FILTER_VALIDATOR.IN:
367
- return getInValues(values as IFilterValueRelativeDate[]);
368
- default:
369
- return [];
370
- }
371
- }
372
-
373
- /**
374
- * Gets the expression values for Exclusive Ranges
375
- * @param values the collection of values
376
- * @returns the logic expression values
377
- */
378
- function getExclusiveRange(
379
- values: IFilterValueRange[],
380
- ): IFilterLogicExpressionValueRange[] {
381
- return values.reduce(
382
- (
383
- expressionValues: IFilterLogicExpressionValueRange[],
384
- value: IFilterValueRange,
385
- ) => {
386
- const expressionValue = getValue(value, {
387
- lt: value.max,
388
- gt: value.min,
389
- }) as IFilterLogicExpressionValueRange;
390
- if (expressionValue != null) expressionValues.push(expressionValue);
391
-
392
- return expressionValues;
393
- },
394
- [],
395
- );
396
- }
397
-
398
- /**
399
- * Gets the expression values for Inclusive Ranges
400
- * @param values the collection of values
401
- * @returns the logic expression values
402
- */
403
- function getInclusiveRange(
404
- values: IFilterValueRange[],
405
- ): IFilterLogicExpressionValueRange[] {
406
- return values.reduce(
407
- (
408
- expressionValues: IFilterLogicExpressionValueRange[],
409
- value: IFilterValueRange,
410
- ) => {
411
- const expressionValue = getValue(value, {
412
- lte: value.max,
413
- gte: value.min,
414
- }) as IFilterLogicExpressionValueRange;
415
- if (expressionValue != null) expressionValues.push(expressionValue);
416
-
417
- return expressionValues;
418
- },
419
- [],
420
- );
421
- }
422
-
423
- /**
424
- * Gets the expression values for Before Ranges
425
- * @param values the collection of values
426
- * @returns the logic expression values
427
- */
428
- function getBeforeValues(
429
- values: IFilterValueRange[],
430
- ): IFilterLogicExpressionValueRange[] {
431
- return values.reduce(
432
- (
433
- expressionValues: IFilterLogicExpressionValueRange[],
434
- value: IFilterValueRange,
435
- ) => {
436
- const expressionValue = getValue(value, {
437
- lt: value.max,
438
- }) as IFilterLogicExpressionValueRange;
439
- if (expressionValue != null) expressionValues.push(expressionValue);
440
-
441
- return expressionValues;
442
- },
443
- [],
444
- );
445
- }
446
-
447
- /**
448
- * Gets the expression values for BeforeOn Ranges
449
- * @param values the collection of values
450
- * @returns the logic expression values
451
- */
452
- function getBeforeOnValues(
453
- values: IFilterValueRange[],
454
- ): IFilterLogicExpressionValueRange[] {
455
- return values.reduce(
456
- (
457
- expressionValues: IFilterLogicExpressionValueRange[],
458
- value: IFilterValueRange,
459
- ) => {
460
- const expressionValue = getValue(value, {
461
- lte: value.max,
462
- }) as IFilterLogicExpressionValueRange;
463
- if (expressionValue != null) expressionValues.push(expressionValue);
464
-
465
- return expressionValues;
466
- },
467
- [],
468
- );
469
- }
470
-
471
- /**
472
- * Gets the expression values for After Ranges
473
- * @param values the collection of values
474
- * @returns the logic expression values
475
- */
476
- function getAfterValues(
477
- values: IFilterValueRange[],
478
- ): IFilterLogicExpressionValueRange[] {
479
- return values.reduce(
480
- (
481
- expressionValues: IFilterLogicExpressionValueRange[],
482
- value: IFilterValueRange,
483
- ) => {
484
- const expressionValue = getValue(value, {
485
- gt: value.min,
486
- }) as IFilterLogicExpressionValueRange;
487
- if (expressionValue != null) expressionValues.push(expressionValue);
488
-
489
- return expressionValues;
490
- },
491
- [],
492
- );
493
- }
494
-
495
- /**
496
- * Gets the expression values for AfterOn Ranges
497
- * @param values the collection of values
498
- * @returns the logic expression values
499
- */
500
- function getAfterOnValues(
501
- values: IFilterValueRange[],
502
- ): IFilterLogicExpressionValueRange[] {
503
- return values.reduce(
504
- (
505
- expressionValues: IFilterLogicExpressionValueRange[],
506
- value: IFilterValueRange,
507
- ) => {
508
- const expressionValue = getValue(value, {
509
- gte: value.min,
510
- }) as IFilterLogicExpressionValueRange;
511
- if (expressionValue != null) expressionValues.push(expressionValue);
512
-
513
- return expressionValues;
514
- },
515
- [],
516
- );
517
- }
518
-
519
- /**
520
- * Gets the expression values for Nulls
521
- * @param values the collection of values
522
- * @param filter the filter structure
523
- * @returns the logic expression values
524
- */
525
- function getNullValues(
526
- values: IFilterValueRegular[],
527
- filter: IFilterUI,
528
- ): IFilterLogicExpressionValueRegular[] {
529
- const addValue = values.length > 0 && values.every((value) => value.enabled);
530
- return addValue ? [filter.validator] : [];
531
- }
532
-
533
- /**
534
- * Gets the expression values for Relative Dates
535
- * @param values the collection of values
536
- * @returns the logic expression values
537
- */
538
- function getInValues(
539
- values: IFilterValueRelativeDate[],
540
- ): IFilterLogicExpressionValueRelative[] {
541
- return values.reduce(
542
- (
543
- expressionValues: IFilterLogicExpressionValueRelative[],
544
- value: IFilterValueRelativeDate,
545
- ) => {
546
- const expressionValue = getValue(
547
- value,
548
- value,
549
- ) as IFilterLogicExpressionValueRelative;
550
- if (expressionValue != null) expressionValues.push(expressionValue);
551
-
552
- return expressionValues;
553
- },
554
- [],
555
- );
556
- }
557
-
558
- /**
559
- * Gets the value on the filter values
560
- * @param objectValue The filter structure
561
- * @param value The filter structure
562
- * @returns the value
563
- */
564
- function getValue(
565
- objectValue:
566
- | IFilterValueRegular
567
- | IFilterValueRange
568
- | IFilterValueRelativeDate,
569
- value: IFilterLogicExpressionValue | string,
570
- ): IFilterLogicExpressionValue | undefined {
571
- return objectValue.enabled ? value : undefined;
572
- }
573
-
574
- /**
575
- * Gets the expression values. Depending on the column type
576
- * @param values a collection of filter values
577
- * @param filter The filter structure
578
- * @returns Expression values
579
- */
580
- function getResultValues(
581
- values: IFilterValueRegular[],
582
- filter: IFilterUI,
583
- ): IFilterLogicExpressionValue[] {
584
- return values.reduce(
585
- (
586
- expressionValues: IFilterLogicExpressionValueRegular[],
587
- value: IFilterValueRegular,
588
- ) => {
589
- let expressionValue = "";
590
- if (value.enabled) {
591
- expressionValue = value.value || "";
592
- if (filter.columnType === COLUMN.IMAGE) {
593
- expressionValue = value.id || value.imageUrl || value.value || "";
594
- }
595
- }
596
- if (!isEmpty(expressionValue)) expressionValues.push(expressionValue);
597
-
598
- return expressionValues;
599
- },
600
- [],
601
- );
602
- }
603
-
604
- /**
605
- * Gets the Ranking values.
606
- * @param values a collection of filter values in the ranking structure
607
- * @returns Expression values for ranking
608
- */
609
- function getRankingValues(
610
- values: IFilterValueRanking[][],
611
- ): IFilterLogicExpressionValueRanking[] {
612
- const flattenValues: IFilterValueRanking[] = flattenDeep(values);
613
- return flattenValues.reduce(
614
- (
615
- expressionValues: IFilterLogicExpressionValueRanking[],
616
- value: IFilterValueRanking,
617
- ) => {
618
- let expressionValue: IFilterLogicExpressionValueRanking;
619
- if (value.enabled) {
620
- expressionValue = {
621
- position: value.position - 1,
622
- value: value.value!,
623
- };
624
- }
625
- if (expressionValue! != null) expressionValues.push(expressionValue);
626
-
627
- return expressionValues;
628
- },
629
- [],
630
- );
631
- }
@@ -1,28 +0,0 @@
1
- import { FilterResources } from "../classes/FilterResources";
2
- import { IFilterFilterGroupingSettings } from "../resources/filter-functions.resources";
3
- import { IFilterGrouping } from "../resources/filter-grouping.resources";
4
- import { DEFAULT_FILTER, IFilter } from "../resources/filters.resources";
5
-
6
- /**
7
- * Gets the filter grouping for a given filter.
8
- * @param filter The filter to get the grouping for.
9
- * @param settings Settings for the filter grouping.
10
- * @returns The filter grouping.
11
- */
12
- export function getFilterGrouping(
13
- filter: Partial<IFilter>,
14
- settings?: IFilterFilterGroupingSettings,
15
- ): IFilterGrouping | undefined {
16
- return (
17
- (settings?.strictValidation
18
- ? FilterResources.getGroupingInfoByColumnType(
19
- {
20
- type: filter.columnType ?? DEFAULT_FILTER.columnType,
21
- formulaType: filter.formulaType,
22
- },
23
- filter.grouping,
24
- settings,
25
- )?.value
26
- : filter.grouping) || DEFAULT_FILTER.grouping
27
- );
28
- }