@qrvey/utils 1.4.0-4 → 1.4.0-7

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 (122) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/column_format/helpers/defineTableChartFormat.js +34 -29
  3. package/dist/cjs/column_format/helpers/defineXYChartFormat.js +38 -21
  4. package/dist/cjs/column_format/interfaces/IChartColumn.d.ts +2 -0
  5. package/dist/cjs/columns/helpers/getDatasetColumn.js +1 -3
  6. package/dist/cjs/columns/interfaces/IColunmCalculation.d.ts +5 -0
  7. package/dist/cjs/columns/interfaces/IColunmCalculation.js +2 -0
  8. package/dist/cjs/dates/adapters/mdyDateToDate.d.ts +1 -1
  9. package/dist/cjs/dates/adapters/mdyDateToDate.js +12 -5
  10. package/dist/cjs/dates/adapters/monthYearToDate.d.ts +1 -1
  11. package/dist/cjs/dates/adapters/monthYearToDate.js +8 -7
  12. package/dist/cjs/dates/adapters/quarterYearToDate.d.ts +1 -1
  13. package/dist/cjs/dates/adapters/quarterYearToDate.js +8 -7
  14. package/dist/cjs/dates/adapters/weekYearToDate.d.ts +1 -1
  15. package/dist/cjs/dates/adapters/weekYearToDate.js +20 -19
  16. package/dist/cjs/dates/adapters/yearToDate.d.ts +1 -1
  17. package/dist/cjs/dates/adapters/yearToDate.js +7 -6
  18. package/dist/cjs/dates/constants/DATE_FORMAT_BY_PROPERTY.d.ts +16 -0
  19. package/dist/cjs/dates/constants/DATE_FORMAT_BY_PROPERTY.js +21 -0
  20. package/dist/cjs/dates/helpers/getDateFormatByProperty.js +2 -31
  21. package/dist/cjs/dates/helpers/getDateFormatRegularExpressionInArray.d.ts +2 -1
  22. package/dist/cjs/dates/helpers/getDateFormatRegularExpressionInArray.js +2 -7
  23. package/dist/cjs/dates/helpers/getDatePickerPickLevel.js +7 -1
  24. package/dist/cjs/dates/helpers/getSeparatorByDateFormat.js +1 -18
  25. package/dist/cjs/dates/helpers/index.d.ts +0 -1
  26. package/dist/cjs/dates/helpers/index.js +0 -1
  27. package/dist/cjs/dates/helpers/validateDate.js +14 -3
  28. package/dist/cjs/dates/range/getDateRange.js +15 -25
  29. package/dist/cjs/dates/relative/RelativeStatementAdapter.js +15 -10
  30. package/dist/cjs/dates/relative/helpers/getStatementCase.js +10 -7
  31. package/dist/cjs/filters/adapters/adaptDateGroupingProperty.js +9 -13
  32. package/dist/cjs/filters/adapters/logicToUI.js +1 -2
  33. package/dist/cjs/filters/adapters/transformFilters.js +1 -3
  34. package/dist/cjs/filters/helpers/OLD_getAggFilters.js +1 -3
  35. package/dist/cjs/filters/helpers/backend/buildFilters.js +5 -2
  36. package/dist/cjs/filters/helpers/backend/getBackendGroupValue.js +1 -2
  37. package/dist/cjs/filters/helpers/backend/getBackendValues.js +53 -31
  38. package/dist/cjs/filters/helpers/backend/getLogicByDatasetsColumns.d.ts +2 -2
  39. package/dist/cjs/filters/helpers/backend/getLogicByDatasetsColumns.js +57 -20
  40. package/dist/cjs/filters/helpers/common/excludeFiltersByParams.js +1 -2
  41. package/dist/cjs/filters/helpers/common/getFiltersByDatasetsColumns.js +28 -18
  42. package/dist/cjs/filters/helpers/common/getFiltersByParams.js +1 -2
  43. package/dist/cjs/filters/helpers/getAggFiltersFromFilterData.js +0 -1
  44. package/dist/cjs/filters/helpers/getScopesByHierarchy.js +7 -5
  45. package/dist/cjs/filters/helpers/ui/getUIValues.js +76 -85
  46. package/dist/cjs/filters/interfaces/functions/IFFGetLogicByDatasetsColumns.d.ts +3 -0
  47. package/dist/cjs/filters/services/UChartApi.d.ts +17 -3
  48. package/dist/cjs/filters/services/UChartApi.js +49 -26
  49. package/dist/cjs/filters/services/UChartPaginationApi.d.ts +17 -3
  50. package/dist/cjs/filters/services/UChartPaginationApi.js +45 -24
  51. package/dist/cjs/general/mix/isNaNV2.d.ts +10 -3
  52. package/dist/cjs/general/mix/isNaNV2.js +11 -4
  53. package/dist/cjs/general/string/parseUrl.js +2 -2
  54. package/dist/cjs/globalization/helpers/getI18nCalendar.js +10 -7
  55. package/dist/cjs/globalization/service/i18nextBuilder.js +1 -3
  56. package/dist/cjs/globalization/service/initI18n.js +1 -12
  57. package/dist/cjs/qrvey/helpers/getDataAnswersByColumn.js +6 -5
  58. package/dist/cjs/qrvey/helpers/getExpressionAnswers.js +15 -11
  59. package/dist/cjs/tokens/isTokenLabel.js +1 -2
  60. package/dist/column_format/helpers/defineTableChartFormat.js +17 -12
  61. package/dist/column_format/helpers/defineXYChartFormat.js +23 -6
  62. package/dist/column_format/interfaces/IChartColumn.d.ts +2 -0
  63. package/dist/columns/helpers/getDatasetColumn.js +1 -3
  64. package/dist/columns/interfaces/IColunmCalculation.d.ts +5 -0
  65. package/dist/columns/interfaces/IColunmCalculation.js +1 -0
  66. package/dist/dates/adapters/mdyDateToDate.d.ts +1 -1
  67. package/dist/dates/adapters/mdyDateToDate.js +12 -5
  68. package/dist/dates/adapters/monthYearToDate.d.ts +1 -1
  69. package/dist/dates/adapters/monthYearToDate.js +8 -7
  70. package/dist/dates/adapters/quarterYearToDate.d.ts +1 -1
  71. package/dist/dates/adapters/quarterYearToDate.js +8 -7
  72. package/dist/dates/adapters/weekYearToDate.d.ts +1 -1
  73. package/dist/dates/adapters/weekYearToDate.js +20 -19
  74. package/dist/dates/adapters/yearToDate.d.ts +1 -1
  75. package/dist/dates/adapters/yearToDate.js +7 -6
  76. package/dist/dates/constants/DATE_FORMAT_BY_PROPERTY.d.ts +16 -0
  77. package/dist/dates/constants/DATE_FORMAT_BY_PROPERTY.js +18 -0
  78. package/dist/dates/helpers/getDateFormatByProperty.js +2 -31
  79. package/dist/dates/helpers/getDateFormatRegularExpressionInArray.d.ts +2 -1
  80. package/dist/dates/helpers/getDateFormatRegularExpressionInArray.js +2 -7
  81. package/dist/dates/helpers/getDatePickerPickLevel.js +7 -1
  82. package/dist/dates/helpers/getSeparatorByDateFormat.js +1 -18
  83. package/dist/dates/helpers/index.d.ts +0 -1
  84. package/dist/dates/helpers/index.js +0 -1
  85. package/dist/dates/helpers/validateDate.js +14 -3
  86. package/dist/dates/range/getDateRange.js +15 -25
  87. package/dist/dates/relative/RelativeStatementAdapter.js +15 -10
  88. package/dist/dates/relative/helpers/getStatementCase.js +10 -7
  89. package/dist/filters/adapters/adaptDateGroupingProperty.js +9 -13
  90. package/dist/filters/adapters/logicToUI.js +1 -2
  91. package/dist/filters/adapters/transformFilters.js +1 -3
  92. package/dist/filters/helpers/OLD_getAggFilters.js +1 -3
  93. package/dist/filters/helpers/backend/buildFilters.js +5 -2
  94. package/dist/filters/helpers/backend/getBackendGroupValue.js +1 -2
  95. package/dist/filters/helpers/backend/getBackendValues.js +53 -31
  96. package/dist/filters/helpers/backend/getLogicByDatasetsColumns.d.ts +2 -2
  97. package/dist/filters/helpers/backend/getLogicByDatasetsColumns.js +56 -19
  98. package/dist/filters/helpers/common/excludeFiltersByParams.js +1 -2
  99. package/dist/filters/helpers/common/getFiltersByDatasetsColumns.js +28 -18
  100. package/dist/filters/helpers/common/getFiltersByParams.js +1 -2
  101. package/dist/filters/helpers/getAggFiltersFromFilterData.js +0 -1
  102. package/dist/filters/helpers/getScopesByHierarchy.js +7 -5
  103. package/dist/filters/helpers/ui/getUIValues.js +76 -85
  104. package/dist/filters/interfaces/functions/IFFGetLogicByDatasetsColumns.d.ts +3 -0
  105. package/dist/filters/services/UChartApi.d.ts +17 -3
  106. package/dist/filters/services/UChartApi.js +49 -26
  107. package/dist/filters/services/UChartPaginationApi.d.ts +17 -3
  108. package/dist/filters/services/UChartPaginationApi.js +45 -24
  109. package/dist/general/mix/isNaNV2.d.ts +10 -3
  110. package/dist/general/mix/isNaNV2.js +11 -4
  111. package/dist/general/string/parseUrl.js +2 -2
  112. package/dist/globalization/helpers/getI18nCalendar.js +10 -7
  113. package/dist/globalization/service/i18nextBuilder.js +1 -3
  114. package/dist/globalization/service/initI18n.js +1 -12
  115. package/dist/qrvey/helpers/getDataAnswersByColumn.js +6 -5
  116. package/dist/qrvey/helpers/getExpressionAnswers.js +14 -10
  117. package/dist/tokens/isTokenLabel.js +1 -2
  118. package/package.json +4 -4
  119. package/dist/cjs/dates/helpers/validateDateByDateFormat.d.ts +0 -8
  120. package/dist/cjs/dates/helpers/validateDateByDateFormat.js +0 -27
  121. package/dist/dates/helpers/validateDateByDateFormat.d.ts +0 -8
  122. package/dist/dates/helpers/validateDateByDateFormat.js +0 -23
@@ -36,7 +36,6 @@ import { isValidDateObject } from "../helpers/isValidDateObject";
36
36
  * }
37
37
  */
38
38
  export function getDateRange(value, dateGroupLabel = "DAY", withTime = true) {
39
- const range = {};
40
39
  const upperCaseDateGroup = dateGroupLabel.toUpperCase();
41
40
  const [timeFrom, timeTo] = withTime
42
41
  ? getStringTimeRange(value, upperCaseDateGroup)
@@ -47,60 +46,51 @@ export function getDateRange(value, dateGroupLabel = "DAY", withTime = true) {
47
46
  const yearRange = !isToken
48
47
  ? getYearRange(value)
49
48
  : { from: `01/01/${value}`, to: `12/31/${value}` };
50
- range.from = `${yearRange.from}${timeFrom}`;
51
- range.to = `${yearRange.to}${timeTo}`;
52
- break;
49
+ return getRange(`${yearRange.from}${timeFrom}`, `${yearRange.to}${timeTo}`);
53
50
  }
54
51
  case "QUARTER": {
55
52
  const quarterRange = !isToken
56
53
  ? getQuarterRange(value)
57
54
  : { from: value, to: value };
58
- range.from = `${quarterRange.from}${timeFrom}`;
59
- range.to = `${quarterRange.to}${timeTo}`;
60
- break;
55
+ return getRange(`${quarterRange.from}${timeFrom}`, `${quarterRange.to}${timeTo}`);
61
56
  }
62
57
  case "MONTH": {
63
- const monthRange = monthInclideTokens(value)
58
+ const monthRange = monthIncludeTokens(value)
64
59
  ? getMonthRangeWithToken(value)
65
60
  : getMonthRange(value);
66
- range.from = `${monthRange.from}${timeFrom}`;
67
- range.to = `${monthRange.to}${timeTo}`;
68
- break;
61
+ return getRange(`${monthRange.from}${timeFrom}`, `${monthRange.to}${timeTo}`);
69
62
  }
70
63
  case "WEEK": {
71
64
  const weekRange = !isToken
72
65
  ? getWeekRange(value)
73
66
  : { from: value, to: value };
74
- range.from = `${weekRange.from}${timeFrom}`;
75
- range.to = `${weekRange.to}${timeTo}`;
76
- break;
67
+ return getRange(`${weekRange.from}${timeFrom}`, `${weekRange.to}${timeTo}`);
77
68
  }
78
69
  case "HOUR": {
79
70
  const hourRange = !isToken
80
71
  ? getHourRange(value)
81
72
  : { from: value, to: value };
82
- range.from = hourRange.from;
83
- range.to = hourRange.to;
84
- break;
73
+ return getRange(hourRange.from, hourRange.to);
85
74
  }
86
75
  case "MINUTE": {
87
76
  const minuteRange = !isToken
88
77
  ? getMinuteRange(value)
89
78
  : { from: value, to: value };
90
- range.from = minuteRange.from;
91
- range.to = minuteRange.to;
92
- break;
79
+ return getRange(minuteRange.from, minuteRange.to);
93
80
  }
94
81
  default: {
95
82
  const dayFrom = new Date(value);
96
83
  const dayTo = new Date(value);
97
84
  const includTokens = includeTokens(value, "/");
98
- range.from = `${!includTokens ? getStringDate(dayFrom) : value}${timeFrom}`;
99
- range.to = `${!includTokens ? getStringDate(dayTo) : value}${timeTo}`;
100
- break;
85
+ return getRange(`${!includTokens ? getStringDate(dayFrom) : value}${timeFrom}`, `${!includTokens ? getStringDate(dayTo) : value}${timeTo}`);
101
86
  }
102
87
  }
103
- return range;
88
+ }
89
+ function getRange(from, to) {
90
+ return {
91
+ from,
92
+ to,
93
+ };
104
94
  }
105
95
  function getStringTimeRange(value, dateGroupLabel) {
106
96
  const addLeadingZero = (unit) => `${unit < 10 ? "0" : ""}${unit}`;
@@ -236,7 +226,7 @@ function getMonthRangeWithToken(value) {
236
226
  to: `${monthToReturn}/{{LAST_DAY_MONTH}}/${year}`,
237
227
  };
238
228
  }
239
- function monthInclideTokens(value) {
229
+ function monthIncludeTokens(value) {
240
230
  const [month, year] = value.split(" ");
241
231
  return isTokenLabel(month) || isTokenLabel(year);
242
232
  }
@@ -52,11 +52,13 @@ export default class RelativeStatementAdapter {
52
52
  if (typeof this.statement === "string")
53
53
  return RelativeStatementAdapter.replaceNowToken(this.statement, this.now);
54
54
  const value = this._statementToRange();
55
- const path = this.cursor === RELATIVE_CURSOR.LAST
56
- ? "gte"
57
- : this.cursor === RELATIVE_CURSOR.NEXT
58
- ? "lte"
59
- : "";
55
+ let path = "";
56
+ if (this.cursor === RELATIVE_CURSOR.LAST) {
57
+ path = "gte";
58
+ }
59
+ else if (this.cursor === RELATIVE_CURSOR.NEXT) {
60
+ path = "lte";
61
+ }
60
62
  return _get(value, path, new Date());
61
63
  }
62
64
  /**
@@ -192,10 +194,13 @@ export default class RelativeStatementAdapter {
192
194
  const startOrEndOf = resolveAsCalendar
193
195
  ? loweredUnit
194
196
  : DATE_GROUPING_PROPERTY.DAY;
195
- return (setTo === COMMON_CONSTANTS.START
196
- ? date.startOf(startOrEndOf)
197
- : setTo === COMMON_CONSTANTS.END
198
- ? date.endOf(startOrEndOf)
199
- : date).format(DATETIME_FORMAT);
197
+ let absoluteDate = date;
198
+ if (setTo === COMMON_CONSTANTS.START) {
199
+ absoluteDate = date.startOf(startOrEndOf);
200
+ }
201
+ else if (setTo === COMMON_CONSTANTS.END) {
202
+ absoluteDate = date.endOf(startOrEndOf);
203
+ }
204
+ return absoluteDate.format(DATETIME_FORMAT);
200
205
  }
201
206
  }
@@ -6,11 +6,14 @@ import { COMMON_CONSTANTS } from "../constants/COMMON";
6
6
  * @returns {number}
7
7
  */
8
8
  export function getStatementCase(includeCurrent, isCalendarDate) {
9
- return includeCurrent && isCalendarDate
10
- ? COMMON_CONSTANTS.INCLUSIVE_AND_CALENDAR
11
- : !includeCurrent && isCalendarDate
12
- ? COMMON_CONSTANTS.EXCLUSIVE_AND_CALENDAR
13
- : !includeCurrent && !isCalendarDate
14
- ? COMMON_CONSTANTS.EXCLUSIVE_AND_ROLLING
15
- : COMMON_CONSTANTS.INCLUSIVE_AND_ROLLING;
9
+ if (includeCurrent && isCalendarDate) {
10
+ return COMMON_CONSTANTS.INCLUSIVE_AND_CALENDAR;
11
+ }
12
+ else if (!includeCurrent && isCalendarDate) {
13
+ return COMMON_CONSTANTS.EXCLUSIVE_AND_CALENDAR;
14
+ }
15
+ else if (!includeCurrent && !isCalendarDate) {
16
+ return COMMON_CONSTANTS.EXCLUSIVE_AND_ROLLING;
17
+ }
18
+ return COMMON_CONSTANTS.INCLUSIVE_AND_ROLLING;
16
19
  }
@@ -7,17 +7,13 @@ import { DATE_DISTINCT_TIME_PROPERTY } from "../../dates/constants/DATE_DISTINCT
7
7
  * @returns a adapted property
8
8
  */
9
9
  export function adaptDateGroupingProperty(property) {
10
- return property === "p&quarter"
11
- ? DATE_DISTINCT_PROPERTY.YEAR_QUARTER
12
- : property === "p&month"
13
- ? DATE_DISTINCT_PROPERTY.YEAR_MONTH
14
- : property === "p&day"
15
- ? DATE_DISTINCT_PROPERTY.MONTH_DAY
16
- : property === "p&hour"
17
- ? DATE_DISTINCT_TIME_PROPERTY.DAY_HOUR
18
- : property === "p&minute"
19
- ? DATE_DISTINCT_TIME_PROPERTY.HOUR_MINUTE
20
- : property === "p&second"
21
- ? DATE_DISTINCT_TIME_PROPERTY.MINUTE_SECOND
22
- : property;
10
+ return ODD_PROPERTY[property] || property;
23
11
  }
12
+ const ODD_PROPERTY = {
13
+ "p&quarter": DATE_DISTINCT_PROPERTY.YEAR_QUARTER,
14
+ "p&month": DATE_DISTINCT_PROPERTY.YEAR_MONTH,
15
+ "p&day": DATE_DISTINCT_PROPERTY.MONTH_DAY,
16
+ "p&hour": DATE_DISTINCT_TIME_PROPERTY.DAY_HOUR,
17
+ "p&minute": DATE_DISTINCT_TIME_PROPERTY.HOUR_MINUTE,
18
+ "p&second": DATE_DISTINCT_TIME_PROPERTY.MINUTE_SECOND,
19
+ };
@@ -10,6 +10,5 @@ import { logicToFlatUI } from "./logicToFlatUI";
10
10
  */
11
11
  export function logicToUI(logics = [], section = FILTER_SECTION.ANYWHERE, enabled = true, version = FILTER_STRUCTURE_VERSION) {
12
12
  const flatUiFilters = logicToFlatUI(logics);
13
- const uiFilters = flatUIToUI(flatUiFilters, section, enabled, version);
14
- return uiFilters;
13
+ return flatUIToUI(flatUiFilters, section, enabled, version);
15
14
  }
@@ -339,7 +339,7 @@ function getFilterEqualValues(values, columnType, destination = "value", formula
339
339
  }))
340
340
  : getRankingFBvalues(values);
341
341
  }
342
- const formattedValues = destination === "value"
342
+ return destination === "value"
343
343
  ? values.map((item) => {
344
344
  let value = item.value;
345
345
  if ([columnType, formulaType].includes("DATE") &&
@@ -366,7 +366,6 @@ function getFilterEqualValues(values, columnType, destination = "value", formula
366
366
  valueid: columnType === "EXPRESSION" ? undefined : item.id || item.answerid,
367
367
  enabled: item.enabled || true,
368
368
  }));
369
- return formattedValues;
370
369
  }
371
370
  function getFormulaType(oldFiltersItem) {
372
371
  if (oldFiltersItem.formulaType)
@@ -377,7 +376,6 @@ function getFormulaType(oldFiltersItem) {
377
376
  : oldFiltersItem.type === "DATE"
378
377
  ? "date"
379
378
  : "string";
380
- return;
381
379
  }
382
380
  function getExpressions(oldFiltersItem, validations, scopeLabel, scopeid, section) {
383
381
  const expressions = [];
@@ -33,7 +33,6 @@ export function getAggFilters(logics = [], summaries = []) {
33
33
  value: expression.value,
34
34
  };
35
35
  }
36
- return;
37
36
  })
38
37
  .filter(Boolean),
39
38
  });
@@ -49,7 +48,7 @@ export function getAggFilters(logics = [], summaries = []) {
49
48
  */
50
49
  function getAggregateFilters(logics = []) {
51
50
  logics = cloneDeep(logics);
52
- const aggregateLogics = logics.reduce((newLogics, logic) => {
51
+ return logics.reduce((newLogics, logic) => {
53
52
  if (!logic)
54
53
  return newLogics;
55
54
  logic.filters.forEach((filter, index) => {
@@ -66,7 +65,6 @@ function getAggregateFilters(logics = []) {
66
65
  newLogics.push(logic);
67
66
  return newLogics;
68
67
  }, []);
69
- return aggregateLogics;
70
68
  }
71
69
  function concatAggFilters(aggFilters, operator = FILTER_OPERATOR.AND) {
72
70
  const expressions = aggFilters.filter(Boolean);
@@ -61,7 +61,10 @@ function getColumnExpressions(group, getFilter) {
61
61
  }
62
62
  }
63
63
  function logicToNumeric(operator, priority = false) {
64
- return operator === FILTER_OPERATOR.AND ? "*" : priority ? "/" : "+";
64
+ if (operator === FILTER_OPERATOR.AND) {
65
+ return "*";
66
+ }
67
+ return priority ? "/" : "+";
65
68
  }
66
69
  function numericExpression(filters, groupColumns = false) {
67
70
  let expression = "";
@@ -71,5 +74,5 @@ function numericExpression(filters, groupColumns = false) {
71
74
  const operator = logicToNumeric(item.operator, groupColumns && ((_a = item.column) === null || _a === void 0 ? void 0 : _a.id) === (nextColumn === null || nextColumn === void 0 ? void 0 : nextColumn.id));
72
75
  expression += `${item.filterid}${operator}`;
73
76
  });
74
- return expression.substr(0, expression.length - 1);
77
+ return expression.substring(0, expression.length - 1);
75
78
  }
@@ -10,7 +10,6 @@ export function getBackendGroupValue(filter) {
10
10
  if (isEmpty(filter.column.aggregate) &&
11
11
  isDateColumn(filter.column) &&
12
12
  filter.property != null) {
13
- const property = adaptDateGroupingProperty(filter.property);
14
- return property;
13
+ return adaptDateGroupingProperty(filter.property);
15
14
  }
16
15
  }
@@ -13,59 +13,81 @@ export function getBackendValues(filter) {
13
13
  switch (filter.validator) {
14
14
  case FILTER_VALIDATOR.EQUALS:
15
15
  case FILTER_VALIDATOR.NOT_EQUAL:
16
- if (filter.column.type === COLUMN.RANKING &&
17
- isEmpty(filter.column.aggregate))
18
- return getRankingValues(values);
19
- return getResultValues(values, filter);
20
16
  case FILTER_VALIDATOR.CONTAINS:
21
17
  case FILTER_VALIDATOR.NOT_CONTAIN:
22
18
  case FILTER_VALIDATOR.STARTS_WITH:
23
19
  case FILTER_VALIDATOR.NOT_START_WITH:
24
20
  case FILTER_VALIDATOR.ENDS_WITH:
25
21
  case FILTER_VALIDATOR.NOT_END_WITH:
26
- return values.map((value) => value.enabled ? value.value : undefined);
22
+ if (filter.column.type === COLUMN.RANKING &&
23
+ isEmpty(filter.column.aggregate))
24
+ return getRankingValues(values);
25
+ return getResultValues(values, filter);
27
26
  case FILTER_VALIDATOR.BETWEEN_INCLUSIVE:
28
- return values
29
- .map((value) => value.enabled ? { lte: value.max, gte: value.min } : undefined)
30
- .filter(Boolean);
27
+ return getExclusiveRange(values);
31
28
  case FILTER_VALIDATOR.BETWEEN_EXCLUSIVE:
32
- return values
33
- .map((value) => value.enabled ? { lt: value.max, gt: value.min } : undefined)
34
- .filter(Boolean);
29
+ return getInclusiveRange(values);
35
30
  case FILTER_VALIDATOR.BEFORE:
36
31
  case FILTER_VALIDATOR.LESS_THAN:
37
- return values
38
- .map((value) => (value.enabled ? { lt: value.max } : undefined))
39
- .filter(Boolean);
32
+ return getBeforeValues(values);
40
33
  case FILTER_VALIDATOR.BEFORE_ON:
41
34
  case FILTER_VALIDATOR.LESS_THAN_EQUAL:
42
- return values
43
- .map((value) => (value.enabled ? { lte: value.max } : undefined))
44
- .filter(Boolean);
35
+ return getBeforeOnValues(values);
45
36
  case FILTER_VALIDATOR.AFTER:
46
37
  case FILTER_VALIDATOR.GREATER_THAN:
47
- return values
48
- .map((value) => (value.enabled ? { gt: value.min } : undefined))
49
- .filter(Boolean);
38
+ return getAfterValues(values);
50
39
  case FILTER_VALIDATOR.AFTER_ON:
51
40
  case FILTER_VALIDATOR.GREATER_THAN_EQUAL:
52
- return values
53
- .map((value) => (value.enabled ? { gte: value.min } : undefined))
54
- .filter(Boolean);
41
+ return getAfterOnValues(values);
55
42
  case FILTER_VALIDATOR.IS_NULL:
56
- case FILTER_VALIDATOR.IS_NOT_NULL: {
57
- const addValue = values.length > 0 &&
58
- values.every((value) => value.enabled);
59
- return addValue ? [FILTER_VALIDATOR_INFO[filter.validator].label] : [];
60
- }
43
+ case FILTER_VALIDATOR.IS_NOT_NULL:
44
+ return getNullValues(values, filter);
61
45
  case FILTER_VALIDATOR.IN:
62
- return values
63
- .map((value) => (value.enabled ? value : undefined))
64
- .filter(Boolean);
46
+ return getInValues(values);
65
47
  default:
66
48
  return [];
67
49
  }
68
50
  }
51
+ function getExclusiveRange(values) {
52
+ return values
53
+ .map((value) => getValue(value, { lte: value.max, gte: value.min }))
54
+ .filter(Boolean);
55
+ }
56
+ function getInclusiveRange(values) {
57
+ return values
58
+ .map((value) => getValue(value, { lt: value.max, gt: value.min }))
59
+ .filter(Boolean);
60
+ }
61
+ function getBeforeValues(values) {
62
+ return values
63
+ .map((value) => getValue(value, { lt: value.max }))
64
+ .filter(Boolean);
65
+ }
66
+ function getBeforeOnValues(values) {
67
+ return values
68
+ .map((value) => getValue(value, { lte: value.max }))
69
+ .filter(Boolean);
70
+ }
71
+ function getAfterValues(values) {
72
+ return values
73
+ .map((value) => getValue(value, { gt: value.min }))
74
+ .filter(Boolean);
75
+ }
76
+ function getAfterOnValues(values) {
77
+ return values
78
+ .map((value) => getValue(value, { gte: value.min }))
79
+ .filter(Boolean);
80
+ }
81
+ function getNullValues(values, filter) {
82
+ const addValue = values.length > 0 && values.every((value) => value.enabled);
83
+ return addValue ? [FILTER_VALIDATOR_INFO[filter.validator].label] : [];
84
+ }
85
+ function getInValues(values) {
86
+ return values.map((value) => getValue(value, value)).filter(Boolean);
87
+ }
88
+ function getValue(objectValue, value) {
89
+ return objectValue.enabled ? value : undefined;
90
+ }
69
91
  /**
70
92
  * Gets the expression values. Depending on the column type
71
93
  * @private
@@ -5,8 +5,8 @@ import { IFFGetLogicByDatasetsColumns } from "../../interfaces/functions/IFFGetL
5
5
  * @todo MODULE NO READY
6
6
  * Filters the logic by a datasets array
7
7
  * If an qrveyid is not provided in the expression a the filter passes normally
8
- * @param logic The logic of the filter
9
- * @param datasets The collection of datasets
8
+ * @param {IFBLogic[]} logic The logic of the filters
9
+ * @param {IDataset[]} datasets The collection of datasets
10
10
  * @returns a new filtered logic
11
11
  */
12
12
  export declare function getLogicByDatasetsColumns(logic: IFBLogic[], datasets?: IDataset[], settings?: IFFGetLogicByDatasetsColumns): IFBLogic[];
@@ -5,8 +5,8 @@ import { _hasProperty } from "../../../general/object/hasProperty";
5
5
  * @todo MODULE NO READY
6
6
  * Filters the logic by a datasets array
7
7
  * If an qrveyid is not provided in the expression a the filter passes normally
8
- * @param logic The logic of the filter
9
- * @param datasets The collection of datasets
8
+ * @param {IFBLogic[]} logic The logic of the filters
9
+ * @param {IDataset[]} datasets The collection of datasets
10
10
  * @returns a new filtered logic
11
11
  */
12
12
  export function getLogicByDatasetsColumns(logic, datasets = [], settings) {
@@ -15,27 +15,64 @@ export function getLogicByDatasetsColumns(logic, datasets = [], settings) {
15
15
  if (isEmpty(datasets))
16
16
  return logic;
17
17
  settings = getGetLogicByDatasetsSettings(settings);
18
- return logic.map((_l) => (Object.assign(Object.assign({}, _l), { filters: filterNestedTree(_l.filters, "expressions", (expression) => {
19
- const letQrveyidPass = settings.letPassUndefinedProperties.qrveyid ||
20
- _hasProperty(expression, "qrveyid");
21
- let letQuestionidPass = settings.letPassUndefinedProperties.questionid ||
22
- _hasProperty(expression, "questionid");
23
- const dataset = letQrveyidPass
24
- ? datasets.find((_data) => _data.qrveyid === expression.qrveyid)
18
+ return logic.map((_l) => (Object.assign(Object.assign({}, _l), { filters: filterNestedTree(_l.filters, "expressions", filterCallback(settings, datasets)) })));
19
+ }
20
+ /**
21
+ * Runs the function for the callback
22
+ * @param {IFFGetLogicByDatasetsColumns} settings the settings for the helper
23
+ * @param {IDataset[]} datasets The dataset collection
24
+ * @returns
25
+ */
26
+ function filterCallback(settings, datasets = []) {
27
+ return (expression) => {
28
+ const letQrveyidPass = getLetQrveyidPass(expression, settings);
29
+ let letQuestionidPass = getLetQuestionidPass(expression, settings);
30
+ const dataset = getDataset(expression, letQrveyidPass, datasets);
31
+ if (!isEmpty(dataset)) {
32
+ const column = letQuestionidPass
33
+ ? (dataset.options || []).find((option) => option.id === expression.questionid)
25
34
  : undefined;
26
- if (!isEmpty(dataset)) {
27
- const column = letQuestionidPass
28
- ? (dataset.options || []).find((option) => option.id === expression.questionid)
29
- : undefined;
30
- letQuestionidPass = letQuestionidPass || !isEmpty(column);
31
- }
32
- return letQrveyidPass && !isEmpty(dataset) && letQuestionidPass;
33
- }) })));
35
+ letQuestionidPass = letQuestionidPass || !isEmpty(column);
36
+ }
37
+ return letQrveyidPass && !isEmpty(dataset) && letQuestionidPass;
38
+ };
39
+ }
40
+ /**
41
+ * Gets the letQrveyidPass flag
42
+ * @param {IFBExpression} expression the logic expression of the filter
43
+ * @param {IFFGetLogicByDatasetsColumns} settings the settings for the helper
44
+ * @returns {boolean} true: the qrveyid will be passed
45
+ */
46
+ function getLetQrveyidPass(expression, settings) {
47
+ return (settings.letPassUndefinedProperties.qrveyid ||
48
+ _hasProperty(expression, "qrveyid"));
49
+ }
50
+ /**
51
+ * Gets the letQuestionidPass flag
52
+ * @param {IFBExpression} expression the logic expression of the filter
53
+ * @param {IFFGetLogicByDatasetsColumns} settings the settings for the helper
54
+ * @returns {boolean} true: the questionid will be passed
55
+ */
56
+ function getLetQuestionidPass(expression, settings) {
57
+ return (settings.letPassUndefinedProperties.questionid ||
58
+ _hasProperty(expression, "questionid"));
59
+ }
60
+ /**
61
+ * Gets the dataset related to the expression
62
+ * @param {IFBExpression} expression the logic expression of the filter
63
+ * @param {boolean} letQrveyidPass flag that allows perform the condition to compare the qrveyid with the datasets
64
+ * @param {IDataset[]} datasets The dataset collection
65
+ * @returns {IDataset} the dataset object
66
+ */
67
+ function getDataset(expression, letQrveyidPass, datasets = []) {
68
+ return letQrveyidPass
69
+ ? datasets.find((_data) => _data.qrveyid === expression.qrveyid)
70
+ : undefined;
34
71
  }
35
72
  /**
36
73
  * Gets the default settings for the getLogicByDatasetsColumn function
37
- * @param settings the settings given by the implementer
38
- * @returns an object with all properties set
74
+ * @param {IFFGetLogicByDatasetsColumns} settings the settings for the helper given by the implementer
75
+ * @returns {IFFGetLogicByDatasetsColumns} an object with all properties set
39
76
  */
40
77
  function getGetLogicByDatasetsSettings(settings) {
41
78
  var _a, _b, _c, _d, _e;
@@ -31,8 +31,7 @@ export function excludeFiltersByParams(filterData, params) {
31
31
  return Object.assign(Object.assign({}, filter), { values: (filter.values || [])
32
32
  .map((value) => {
33
33
  if (Array.isArray(value) && value.length > 0) {
34
- const rankingValues = value;
35
- return rankingValues
34
+ return value
36
35
  .map((rValue) => {
37
36
  if (params.enableds == null ||
38
37
  params.enableds === rValue.enabled)
@@ -1,4 +1,6 @@
1
+ import { getDatasetColumn } from "../../../columns/helpers/getDatasetColumn";
1
2
  import { isEmpty } from "../../../general/mix/isEmpty";
3
+ import { getDatasetByColumn } from "../../../qrvey/helpers/getDatasetByColumn";
2
4
  /**
3
5
  * Filtering the filters by the columns of datasets.
4
6
  * Module specially for CLS.
@@ -11,25 +13,33 @@ export function getFiltersByDatasetsColumns(data, datasets = []) {
11
13
  return;
12
14
  if (isEmpty(datasets))
13
15
  return data;
14
- const newData = Object.assign(Object.assign({}, data), { scopes: data.scopes
15
- .map((scope) => (Object.assign(Object.assign({}, scope), { datasets: scope.datasets
16
- .map((filterDataset) => {
17
- const dataset = datasets.find((_data) => _data.qrveyid === filterDataset.qrveyid);
18
- if (!isEmpty(dataset)) {
19
- return Object.assign(Object.assign({}, filterDataset), { filters: filterDataset.filters
20
- .map((filter) => {
21
- const column = (dataset.options || []).find((cInfo) => cInfo.id === filter.column.id &&
22
- cInfo.qrveyid === filter.column.qrveyid);
23
- if (!isEmpty(column)) {
24
- return Object.assign({}, filter);
25
- }
26
- })
27
- .filter(Boolean) });
28
- }
29
- })
30
- .filter((dataset) => !isEmpty(dataset) && dataset.filters.length > 0) })))
31
- .filter((scope) => !isEmpty(scope) && scope.datasets.length > 0) });
16
+ const newData = Object.assign(Object.assign({}, data), { scopes: getScopes(data.scopes, datasets) });
32
17
  if (!isEmpty(newData) && newData.scopes.length > 0) {
33
18
  return newData;
34
19
  }
35
20
  }
21
+ function getScopes(scopes, datasets = []) {
22
+ return scopes
23
+ .map((scope) => (Object.assign(Object.assign({}, scope), { datasets: getDatasets(scope.datasets, datasets) })))
24
+ .filter((scope) => !isEmpty(scope) && scope.datasets.length > 0);
25
+ }
26
+ function getDatasets(scopeDatasets, datasets) {
27
+ return scopeDatasets
28
+ .map((scopeDataset) => {
29
+ const dataset = getDatasetByColumn({ qrveyid: scopeDataset.qrveyid }, datasets);
30
+ if (!isEmpty(dataset)) {
31
+ return Object.assign(Object.assign({}, scopeDataset), { filters: getFilters(scopeDataset.filters, dataset) });
32
+ }
33
+ })
34
+ .filter((dataset) => !isEmpty(dataset) && dataset.filters.length > 0);
35
+ }
36
+ function getFilters(filters, dataset) {
37
+ return filters
38
+ .map((filter) => {
39
+ const column = getDatasetColumn(filter.column, dataset);
40
+ if (!isEmpty(column)) {
41
+ return Object.assign({}, filter);
42
+ }
43
+ })
44
+ .filter(Boolean);
45
+ }
@@ -39,8 +39,7 @@ export function getFiltersByParams(filterData, params, settings) {
39
39
  return Object.assign(Object.assign({}, filter), { values: (filter.values || [])
40
40
  .map((value) => {
41
41
  if (Array.isArray(value) && value.length > 0) {
42
- const rankingValues = value;
43
- return rankingValues
42
+ return value
44
43
  .map((rValue) => {
45
44
  if (!_hasProperty(params, "enableds") ||
46
45
  !_hasProperty(params.enableds, "values") ||
@@ -11,5 +11,4 @@ export function getAggFiltersFromFilterData(filterData, _summaries) {
11
11
  filterData = Object.assign({}, getFiltersByAggregateColumn(filterData));
12
12
  if (isEmpty(filterData))
13
13
  return;
14
- return;
15
14
  }
@@ -8,9 +8,11 @@ import { FILTER_SCOPE } from "../constants/common/FILTER_SCOPE";
8
8
  export function getScopesByHierarchy(scopes = [], currentScope = FILTER_SCOPE.GLOBAL) {
9
9
  const scopeIndex = scopes.findIndex((s) => s.label === currentScope);
10
10
  const chartScopeIndex = scopes.findIndex((s) => s.label === FILTER_SCOPE.CHART);
11
- return scopeIndex !== -1
12
- ? scopes.slice(0, scopeIndex)
13
- : chartScopeIndex !== -1
14
- ? scopes.slice(0, chartScopeIndex)
15
- : [];
11
+ if (scopeIndex !== -1) {
12
+ return scopes.slice(0, scopeIndex);
13
+ }
14
+ else if (chartScopeIndex !== -1) {
15
+ return scopes.slice(0, chartScopeIndex);
16
+ }
17
+ return [];
16
18
  }