@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.
- package/README.md +1 -1
- package/dist/cjs/column_format/helpers/defineTableChartFormat.js +34 -29
- package/dist/cjs/column_format/helpers/defineXYChartFormat.js +38 -21
- package/dist/cjs/column_format/interfaces/IChartColumn.d.ts +2 -0
- package/dist/cjs/columns/helpers/getDatasetColumn.js +1 -3
- package/dist/cjs/columns/interfaces/IColunmCalculation.d.ts +5 -0
- package/dist/cjs/columns/interfaces/IColunmCalculation.js +2 -0
- package/dist/cjs/dates/adapters/mdyDateToDate.d.ts +1 -1
- package/dist/cjs/dates/adapters/mdyDateToDate.js +12 -5
- package/dist/cjs/dates/adapters/monthYearToDate.d.ts +1 -1
- package/dist/cjs/dates/adapters/monthYearToDate.js +8 -7
- package/dist/cjs/dates/adapters/quarterYearToDate.d.ts +1 -1
- package/dist/cjs/dates/adapters/quarterYearToDate.js +8 -7
- package/dist/cjs/dates/adapters/weekYearToDate.d.ts +1 -1
- package/dist/cjs/dates/adapters/weekYearToDate.js +20 -19
- package/dist/cjs/dates/adapters/yearToDate.d.ts +1 -1
- package/dist/cjs/dates/adapters/yearToDate.js +7 -6
- package/dist/cjs/dates/constants/DATE_FORMAT_BY_PROPERTY.d.ts +16 -0
- package/dist/cjs/dates/constants/DATE_FORMAT_BY_PROPERTY.js +21 -0
- package/dist/cjs/dates/helpers/getDateFormatByProperty.js +2 -31
- package/dist/cjs/dates/helpers/getDateFormatRegularExpressionInArray.d.ts +2 -1
- package/dist/cjs/dates/helpers/getDateFormatRegularExpressionInArray.js +2 -7
- package/dist/cjs/dates/helpers/getDatePickerPickLevel.js +7 -1
- package/dist/cjs/dates/helpers/getSeparatorByDateFormat.js +1 -18
- package/dist/cjs/dates/helpers/index.d.ts +0 -1
- package/dist/cjs/dates/helpers/index.js +0 -1
- package/dist/cjs/dates/helpers/validateDate.js +14 -3
- package/dist/cjs/dates/range/getDateRange.js +15 -25
- package/dist/cjs/dates/relative/RelativeStatementAdapter.js +15 -10
- package/dist/cjs/dates/relative/helpers/getStatementCase.js +10 -7
- package/dist/cjs/filters/adapters/adaptDateGroupingProperty.js +9 -13
- package/dist/cjs/filters/adapters/logicToUI.js +1 -2
- package/dist/cjs/filters/adapters/transformFilters.js +1 -3
- package/dist/cjs/filters/helpers/OLD_getAggFilters.js +1 -3
- package/dist/cjs/filters/helpers/backend/buildFilters.js +5 -2
- package/dist/cjs/filters/helpers/backend/getBackendGroupValue.js +1 -2
- package/dist/cjs/filters/helpers/backend/getBackendValues.js +53 -31
- package/dist/cjs/filters/helpers/backend/getLogicByDatasetsColumns.d.ts +2 -2
- package/dist/cjs/filters/helpers/backend/getLogicByDatasetsColumns.js +57 -20
- package/dist/cjs/filters/helpers/common/excludeFiltersByParams.js +1 -2
- package/dist/cjs/filters/helpers/common/getFiltersByDatasetsColumns.js +28 -18
- package/dist/cjs/filters/helpers/common/getFiltersByParams.js +1 -2
- package/dist/cjs/filters/helpers/getAggFiltersFromFilterData.js +0 -1
- package/dist/cjs/filters/helpers/getScopesByHierarchy.js +7 -5
- package/dist/cjs/filters/helpers/ui/getUIValues.js +76 -85
- package/dist/cjs/filters/interfaces/functions/IFFGetLogicByDatasetsColumns.d.ts +3 -0
- package/dist/cjs/filters/services/UChartApi.d.ts +17 -3
- package/dist/cjs/filters/services/UChartApi.js +49 -26
- package/dist/cjs/filters/services/UChartPaginationApi.d.ts +17 -3
- package/dist/cjs/filters/services/UChartPaginationApi.js +45 -24
- package/dist/cjs/general/mix/isNaNV2.d.ts +10 -3
- package/dist/cjs/general/mix/isNaNV2.js +11 -4
- package/dist/cjs/general/string/parseUrl.js +2 -2
- package/dist/cjs/globalization/helpers/getI18nCalendar.js +10 -7
- package/dist/cjs/globalization/service/i18nextBuilder.js +1 -3
- package/dist/cjs/globalization/service/initI18n.js +1 -12
- package/dist/cjs/qrvey/helpers/getDataAnswersByColumn.js +6 -5
- package/dist/cjs/qrvey/helpers/getExpressionAnswers.js +15 -11
- package/dist/cjs/tokens/isTokenLabel.js +1 -2
- package/dist/column_format/helpers/defineTableChartFormat.js +17 -12
- package/dist/column_format/helpers/defineXYChartFormat.js +23 -6
- package/dist/column_format/interfaces/IChartColumn.d.ts +2 -0
- package/dist/columns/helpers/getDatasetColumn.js +1 -3
- package/dist/columns/interfaces/IColunmCalculation.d.ts +5 -0
- package/dist/columns/interfaces/IColunmCalculation.js +1 -0
- package/dist/dates/adapters/mdyDateToDate.d.ts +1 -1
- package/dist/dates/adapters/mdyDateToDate.js +12 -5
- package/dist/dates/adapters/monthYearToDate.d.ts +1 -1
- package/dist/dates/adapters/monthYearToDate.js +8 -7
- package/dist/dates/adapters/quarterYearToDate.d.ts +1 -1
- package/dist/dates/adapters/quarterYearToDate.js +8 -7
- package/dist/dates/adapters/weekYearToDate.d.ts +1 -1
- package/dist/dates/adapters/weekYearToDate.js +20 -19
- package/dist/dates/adapters/yearToDate.d.ts +1 -1
- package/dist/dates/adapters/yearToDate.js +7 -6
- package/dist/dates/constants/DATE_FORMAT_BY_PROPERTY.d.ts +16 -0
- package/dist/dates/constants/DATE_FORMAT_BY_PROPERTY.js +18 -0
- package/dist/dates/helpers/getDateFormatByProperty.js +2 -31
- package/dist/dates/helpers/getDateFormatRegularExpressionInArray.d.ts +2 -1
- package/dist/dates/helpers/getDateFormatRegularExpressionInArray.js +2 -7
- package/dist/dates/helpers/getDatePickerPickLevel.js +7 -1
- package/dist/dates/helpers/getSeparatorByDateFormat.js +1 -18
- package/dist/dates/helpers/index.d.ts +0 -1
- package/dist/dates/helpers/index.js +0 -1
- package/dist/dates/helpers/validateDate.js +14 -3
- package/dist/dates/range/getDateRange.js +15 -25
- package/dist/dates/relative/RelativeStatementAdapter.js +15 -10
- package/dist/dates/relative/helpers/getStatementCase.js +10 -7
- package/dist/filters/adapters/adaptDateGroupingProperty.js +9 -13
- package/dist/filters/adapters/logicToUI.js +1 -2
- package/dist/filters/adapters/transformFilters.js +1 -3
- package/dist/filters/helpers/OLD_getAggFilters.js +1 -3
- package/dist/filters/helpers/backend/buildFilters.js +5 -2
- package/dist/filters/helpers/backend/getBackendGroupValue.js +1 -2
- package/dist/filters/helpers/backend/getBackendValues.js +53 -31
- package/dist/filters/helpers/backend/getLogicByDatasetsColumns.d.ts +2 -2
- package/dist/filters/helpers/backend/getLogicByDatasetsColumns.js +56 -19
- package/dist/filters/helpers/common/excludeFiltersByParams.js +1 -2
- package/dist/filters/helpers/common/getFiltersByDatasetsColumns.js +28 -18
- package/dist/filters/helpers/common/getFiltersByParams.js +1 -2
- package/dist/filters/helpers/getAggFiltersFromFilterData.js +0 -1
- package/dist/filters/helpers/getScopesByHierarchy.js +7 -5
- package/dist/filters/helpers/ui/getUIValues.js +76 -85
- package/dist/filters/interfaces/functions/IFFGetLogicByDatasetsColumns.d.ts +3 -0
- package/dist/filters/services/UChartApi.d.ts +17 -3
- package/dist/filters/services/UChartApi.js +49 -26
- package/dist/filters/services/UChartPaginationApi.d.ts +17 -3
- package/dist/filters/services/UChartPaginationApi.js +45 -24
- package/dist/general/mix/isNaNV2.d.ts +10 -3
- package/dist/general/mix/isNaNV2.js +11 -4
- package/dist/general/string/parseUrl.js +2 -2
- package/dist/globalization/helpers/getI18nCalendar.js +10 -7
- package/dist/globalization/service/i18nextBuilder.js +1 -3
- package/dist/globalization/service/initI18n.js +1 -12
- package/dist/qrvey/helpers/getDataAnswersByColumn.js +6 -5
- package/dist/qrvey/helpers/getExpressionAnswers.js +14 -10
- package/dist/tokens/isTokenLabel.js +1 -2
- package/package.json +4 -4
- package/dist/cjs/dates/helpers/validateDateByDateFormat.d.ts +0 -8
- package/dist/cjs/dates/helpers/validateDateByDateFormat.js +0 -27
- package/dist/dates/helpers/validateDateByDateFormat.d.ts +0 -8
- 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
|
-
|
|
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
|
-
|
|
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 =
|
|
58
|
+
const monthRange = monthIncludeTokens(value)
|
|
64
59
|
? getMonthRangeWithToken(value)
|
|
65
60
|
: getMonthRange(value);
|
|
66
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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", (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
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
|
-
|
|
43
|
-
return rankingValues
|
|
42
|
+
return value
|
|
44
43
|
.map((rValue) => {
|
|
45
44
|
if (!_hasProperty(params, "enableds") ||
|
|
46
45
|
!_hasProperty(params.enableds, "values") ||
|
|
@@ -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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
}
|