@qrvey/utils 1.4.0-1 → 1.4.0-4
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/charts/helpers/isSimpleTableChart.js +2 -1
- package/dist/cjs/charts/helpers/isSimpleTableChart.js +2 -1
- package/dist/cjs/column_format/helpers/defineTableChartFormat.js +10 -26
- package/dist/cjs/column_format/helpers/defineXYChartFormat.js +7 -11
- package/dist/cjs/columns/constants/COLUMN_INFO.js +23 -49
- package/dist/cjs/columns/constants/COLUMN_LABEL.js +1 -29
- package/dist/cjs/columns/constants/COLUMN_PROPERTY_INFO.js +3 -8
- package/dist/cjs/columns/constants/COLUMN_PROPERTY_LABEL.js +1 -11
- package/dist/cjs/columns/helpers/getDatasetColumn.js +1 -1
- package/dist/cjs/dates/relative/RelativeStatementAdapter.js +6 -24
- package/dist/cjs/filters/adapters/FDToFlatUI.js +8 -18
- package/dist/cjs/filters/adapters/FDToLogic.js +1 -1
- package/dist/cjs/filters/adapters/FDToUI.js +12 -24
- package/dist/cjs/filters/adapters/UIToFlatUI.js +4 -14
- package/dist/cjs/filters/adapters/UIToOldLogic.js +2 -1
- package/dist/cjs/filters/adapters/adaptFilterValues.js +1 -6
- package/dist/cjs/filters/adapters/flatUIToFD.js +3 -14
- package/dist/cjs/filters/adapters/flatUIToOldLogic.js +15 -49
- package/dist/cjs/filters/adapters/flatUIToUI.js +3 -14
- package/dist/cjs/filters/adapters/logicToFlatUI.js +20 -32
- package/dist/cjs/filters/adapters/transformFilters.js +4 -19
- package/dist/cjs/filters/classes/FilterInputErrorHandler.js +0 -8
- package/dist/cjs/filters/helpers/applyHierarchyForAggFilters.js +2 -11
- package/dist/cjs/filters/helpers/backend/buildExpression.js +2 -1
- package/dist/cjs/filters/helpers/backend/buildFilters.js +2 -1
- package/dist/cjs/filters/helpers/backend/getAggFiltersBySummaryIndex.js +1 -4
- package/dist/cjs/filters/helpers/backend/getLogicByDatasets.js +5 -7
- package/dist/cjs/filters/helpers/backend/getLogicByDatasetsColumns.js +6 -8
- package/dist/cjs/filters/helpers/common/areFiltersEquals.js +3 -2
- package/dist/cjs/filters/helpers/common/excludeFiltersByParams.js +17 -22
- package/dist/cjs/filters/helpers/common/getFilterid.js +9 -8
- package/dist/cjs/filters/helpers/common/getFiltersByDatasetsColumns.js +7 -16
- package/dist/cjs/filters/helpers/common/getFiltersByParams.js +12 -18
- package/dist/cjs/filters/helpers/common/getMergeFiltersSettings.js +4 -3
- package/dist/cjs/filters/helpers/common/getMergeValuesSettings.js +2 -1
- package/dist/cjs/filters/helpers/common/getParamsToGetFilterSettings.js +10 -9
- package/dist/cjs/filters/helpers/common/mergeFilters.js +7 -30
- package/dist/cjs/filters/helpers/common/mergeValues.js +9 -6
- package/dist/cjs/filters/helpers/common/resolveFilterConditions.js +9 -8
- package/dist/cjs/filters/helpers/getAggFiltersFromFilterData.js +1 -1
- package/dist/cjs/filters/helpers/ui/getUIValues.js +14 -12
- package/dist/cjs/filters/helpers/ui/getUpdatedUIFilters.js +1 -1
- package/dist/cjs/filters/helpers/ui/resolveUIFlatFilterByParams.js +5 -4
- package/dist/cjs/filters/helpers/ui/transformFilterValues.js +3 -14
- package/dist/cjs/filters/interfaces/builder/IFilterBuilderSettings.d.ts +2 -0
- package/dist/cjs/filters/services/Filters.api.js +44 -45
- package/dist/cjs/filters/services/UChartApi.js +246 -257
- package/dist/cjs/filters/services/UChartPaginationApi.js +289 -301
- package/dist/cjs/format/duration/durationFormatter.js +7 -12
- package/dist/cjs/format/format.js +8 -7
- package/dist/cjs/format/localization.d.ts +2 -1
- package/dist/cjs/format/localization.js +8 -7
- package/dist/cjs/general/array/addPropertyToArrayOfObjects.js +1 -1
- package/dist/cjs/general/object/getAttribute.js +2 -6
- package/dist/cjs/general/object/mergeDeep.js +3 -2
- package/dist/cjs/globalization/interfaces/formula_builder/II18nFormulaBuilderListModal.d.ts +2 -1
- package/dist/cjs/globalization/labels/chart_builder/I18N_CHART_BUILDER.js +6 -21
- package/dist/cjs/globalization/labels/formula_builder/I18N_FORMULA_BUILDER.js +2 -1
- package/dist/cjs/globalization/service/i18nextBuilder.js +31 -19
- package/dist/cjs/globalization/service/initI18n.js +13 -2
- package/dist/cjs/qrvey/helpers/getCategorizableExpression.js +2 -1
- package/dist/cjs/qrvey/helpers/getDataAnswersByColumn.js +1 -4
- package/dist/cjs/qrvey/helpers/getDropdownAnswers.js +1 -1
- package/dist/cjs/qrvey/helpers/getImageAnswers.js +2 -2
- package/dist/cjs/qrvey/helpers/getImageUploadHasAnalysis.js +1 -1
- package/dist/cjs/qrvey/helpers/getLookupAnswers.js +4 -4
- package/dist/cjs/qrvey/helpers/getLookupDisplays.js +1 -1
- package/dist/cjs/qrvey/helpers/getSlidebarAnswers.js +2 -1
- package/dist/cjs/qrvey/helpers/getYesNoAnswers.js +1 -5
- package/dist/cjs/qrvey/helpers/transformValue.js +2 -1
- package/dist/cjs/services/api/Charts.api.js +3 -9
- package/dist/cjs/services/api/getAllDatasets.api.js +1 -1
- package/dist/cjs/services/api/getAllQrveys.api.js +1 -1
- package/dist/cjs/services/api/getDatasetColumns.api.js +1 -1
- package/dist/cjs/services/api/getDatasetsByIds.api.js +2 -2
- package/dist/cjs/services/api/getModel.api.js +1 -4
- package/dist/cjs/services/helpers/Request.js +16 -5
- package/dist/column_format/helpers/defineTableChartFormat.js +10 -26
- package/dist/column_format/helpers/defineXYChartFormat.js +7 -11
- package/dist/columns/constants/COLUMN_INFO.js +23 -49
- package/dist/columns/constants/COLUMN_LABEL.js +1 -29
- package/dist/columns/constants/COLUMN_PROPERTY_INFO.js +3 -8
- package/dist/columns/constants/COLUMN_PROPERTY_LABEL.js +1 -11
- package/dist/columns/helpers/getDatasetColumn.js +1 -1
- package/dist/dates/relative/RelativeStatementAdapter.js +6 -24
- package/dist/filters/adapters/FDToFlatUI.js +8 -18
- package/dist/filters/adapters/FDToLogic.js +1 -1
- package/dist/filters/adapters/FDToUI.js +12 -24
- package/dist/filters/adapters/UIToFlatUI.js +4 -14
- package/dist/filters/adapters/UIToOldLogic.js +2 -1
- package/dist/filters/adapters/adaptFilterValues.js +1 -6
- package/dist/filters/adapters/flatUIToFD.js +3 -14
- package/dist/filters/adapters/flatUIToOldLogic.js +15 -49
- package/dist/filters/adapters/flatUIToUI.js +3 -14
- package/dist/filters/adapters/logicToFlatUI.js +20 -32
- package/dist/filters/adapters/transformFilters.js +4 -19
- package/dist/filters/classes/FilterInputErrorHandler.js +0 -8
- package/dist/filters/helpers/applyHierarchyForAggFilters.js +2 -11
- package/dist/filters/helpers/backend/buildExpression.js +2 -1
- package/dist/filters/helpers/backend/buildFilters.js +2 -1
- package/dist/filters/helpers/backend/getAggFiltersBySummaryIndex.js +1 -4
- package/dist/filters/helpers/backend/getLogicByDatasets.js +5 -7
- package/dist/filters/helpers/backend/getLogicByDatasetsColumns.js +6 -8
- package/dist/filters/helpers/common/areFiltersEquals.js +3 -2
- package/dist/filters/helpers/common/excludeFiltersByParams.js +17 -22
- package/dist/filters/helpers/common/getFilterid.js +9 -8
- package/dist/filters/helpers/common/getFiltersByDatasetsColumns.js +7 -16
- package/dist/filters/helpers/common/getFiltersByParams.js +12 -18
- package/dist/filters/helpers/common/getMergeFiltersSettings.js +4 -3
- package/dist/filters/helpers/common/getMergeValuesSettings.js +2 -1
- package/dist/filters/helpers/common/getParamsToGetFilterSettings.js +10 -9
- package/dist/filters/helpers/common/mergeFilters.js +7 -30
- package/dist/filters/helpers/common/mergeValues.js +9 -6
- package/dist/filters/helpers/common/resolveFilterConditions.js +9 -8
- package/dist/filters/helpers/getAggFiltersFromFilterData.js +1 -1
- package/dist/filters/helpers/ui/getUIValues.js +14 -12
- package/dist/filters/helpers/ui/getUpdatedUIFilters.js +1 -1
- package/dist/filters/helpers/ui/resolveUIFlatFilterByParams.js +5 -4
- package/dist/filters/helpers/ui/transformFilterValues.js +3 -14
- package/dist/filters/interfaces/builder/IFilterBuilderSettings.d.ts +2 -0
- package/dist/filters/services/Filters.api.js +44 -45
- package/dist/filters/services/UChartApi.js +246 -257
- package/dist/filters/services/UChartPaginationApi.js +289 -301
- package/dist/format/duration/durationFormatter.js +7 -12
- package/dist/format/format.js +8 -7
- package/dist/format/localization.d.ts +2 -1
- package/dist/format/localization.js +7 -6
- package/dist/general/array/addPropertyToArrayOfObjects.js +1 -1
- package/dist/general/object/getAttribute.js +2 -6
- package/dist/general/object/mergeDeep.js +3 -2
- package/dist/globalization/interfaces/formula_builder/II18nFormulaBuilderListModal.d.ts +2 -1
- package/dist/globalization/labels/chart_builder/I18N_CHART_BUILDER.js +6 -21
- package/dist/globalization/labels/formula_builder/I18N_FORMULA_BUILDER.js +2 -1
- package/dist/globalization/service/i18nextBuilder.js +31 -19
- package/dist/globalization/service/initI18n.js +13 -2
- package/dist/qrvey/helpers/getCategorizableExpression.js +2 -1
- package/dist/qrvey/helpers/getDataAnswersByColumn.js +1 -4
- package/dist/qrvey/helpers/getDropdownAnswers.js +1 -1
- package/dist/qrvey/helpers/getImageAnswers.js +2 -2
- package/dist/qrvey/helpers/getImageUploadHasAnalysis.js +1 -1
- package/dist/qrvey/helpers/getLookupAnswers.js +4 -4
- package/dist/qrvey/helpers/getLookupDisplays.js +1 -1
- package/dist/qrvey/helpers/getSlidebarAnswers.js +2 -1
- package/dist/qrvey/helpers/getYesNoAnswers.js +1 -5
- package/dist/qrvey/helpers/transformValue.js +2 -1
- package/dist/services/api/Charts.api.js +3 -9
- package/dist/services/api/getAllDatasets.api.js +1 -1
- package/dist/services/api/getAllQrveys.api.js +1 -1
- package/dist/services/api/getDatasetColumns.api.js +1 -1
- package/dist/services/api/getDatasetsByIds.api.js +2 -2
- package/dist/services/api/getModel.api.js +1 -4
- package/dist/services/helpers/Request.js +16 -5
- package/package.json +3 -3
|
@@ -12,271 +12,260 @@ import { flatUIToOldLogic } from "../adapters/flatUIToOldLogic";
|
|
|
12
12
|
import ChartsApi from "../../services/api/Charts.api";
|
|
13
13
|
import { getAggFilters } from "../helpers/OLD_getAggFilters";
|
|
14
14
|
export default class UChartApi {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
.then((response) => {
|
|
34
|
-
return this._getDataFromResponse(response, uFilter);
|
|
35
|
-
})
|
|
36
|
-
.catch((_) => {
|
|
37
|
-
return { data: [] };
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Gets request body structure
|
|
42
|
-
* @param uFilter The filter Builder filter
|
|
43
|
-
* @param filterLogic Additional filter logic to apply in the preview
|
|
44
|
-
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
45
|
-
* @returns the request body structure
|
|
46
|
-
*/
|
|
47
|
-
_getPreviewRequestBody = (uFilter, filterLogic = [], chartSettings) => {
|
|
48
|
-
const { column, validator } = uFilter;
|
|
49
|
-
const haveAggFilters = (chartSettings?.aggregateColumns || []).length &&
|
|
50
|
-
(chartSettings?.chart || []).length;
|
|
51
|
-
let searchLogic;
|
|
52
|
-
if (!isEmpty(uFilter.values)) {
|
|
53
|
-
searchLogic = flatUIToOldLogic([
|
|
54
|
-
{
|
|
55
|
-
...uFilter,
|
|
56
|
-
validator: this._getValidationType(column, validator),
|
|
57
|
-
column: { ...uFilter.column, linkid: undefined },
|
|
58
|
-
},
|
|
59
|
-
]);
|
|
60
|
-
}
|
|
61
|
-
let filterCharts = [];
|
|
62
|
-
if (haveAggFilters) {
|
|
63
|
-
filterCharts = chartSettings?.chart
|
|
64
|
-
.map((chart) => {
|
|
65
|
-
if (uFilter.column.type === COLUMN.AGGREGATED_FORMULA)
|
|
66
|
-
return chart;
|
|
67
|
-
const summaryIndex = (chart.summaries || []).findIndex((s) => s.questionid === uFilter.column.id &&
|
|
68
|
-
s.aggregate === uFilter.column.aggregate);
|
|
69
|
-
const summary = summaryIndex !== -1 && chart.summaries[summaryIndex];
|
|
70
|
-
const chartAggFilters = getAggFiltersBySummaryIndex(chart.aggFilters, summaryIndex);
|
|
71
|
-
const searchAggFilters = getAggFilters(searchLogic?.logic || [], summary ? [summary] : []);
|
|
72
|
-
return {
|
|
73
|
-
...chart,
|
|
74
|
-
aggFilters: searchAggFilters || chartAggFilters,
|
|
75
|
-
summaries: summary ? [summary] : [],
|
|
76
|
-
};
|
|
15
|
+
constructor() {
|
|
16
|
+
/**
|
|
17
|
+
* Gets a promise with a resulting data
|
|
18
|
+
* @param config the config
|
|
19
|
+
* @param uFilter The filter Builder filter
|
|
20
|
+
* @param filterLogic Additional filter logic to apply in the preview
|
|
21
|
+
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
22
|
+
* @returns a promise with a resulting data
|
|
23
|
+
*/
|
|
24
|
+
this.getChartResult = (config, uFilter, filterLogic = [], chartSettings, _resetApi = false) => {
|
|
25
|
+
const requestBody = this._getPreviewRequestBody(uFilter, filterLogic, chartSettings);
|
|
26
|
+
const customChartApi = new ChartsApi(Object.assign(Object.assign({}, config), { qrvey_id: isEmpty(uFilter.column.aggregate)
|
|
27
|
+
? uFilter.column.qrveyid
|
|
28
|
+
: chartSettings === null || chartSettings === void 0 ? void 0 : chartSettings.qrveyid }));
|
|
29
|
+
return customChartApi
|
|
30
|
+
.getResults(requestBody, false, true)
|
|
31
|
+
.then((response) => {
|
|
32
|
+
return this._getDataFromResponse(response, uFilter);
|
|
77
33
|
})
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
? [this._getChartBody(uFilter)]
|
|
82
|
-
: [filterCharts[0]];
|
|
83
|
-
const filters = [
|
|
84
|
-
...filterLogic,
|
|
85
|
-
...(!filterCharts[0] ? searchLogic?.logic || [] : []),
|
|
86
|
-
];
|
|
87
|
-
return { charts: chartsBody, logic: filters, qrveyid: column.qrveyid };
|
|
88
|
-
};
|
|
89
|
-
/**
|
|
90
|
-
* Gets chart body structure
|
|
91
|
-
* @param uFilter The filter Builder filter
|
|
92
|
-
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
93
|
-
* @returns the chart body structure
|
|
94
|
-
*/
|
|
95
|
-
_getChartBody = (uFilter, chartSettings) => {
|
|
96
|
-
const dimensions = this._getDimensionsBody(uFilter, chartSettings);
|
|
97
|
-
const summaries = this._getSummariesBody(uFilter);
|
|
98
|
-
return { dimensions, summaries };
|
|
99
|
-
};
|
|
100
|
-
/**
|
|
101
|
-
* Gets dimension body structure
|
|
102
|
-
* @param uFilter The filter Builder filter
|
|
103
|
-
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
104
|
-
* @returns the dimension body structure
|
|
105
|
-
*/
|
|
106
|
-
_getDimensionsBody = (uFilter, chartSettings) => {
|
|
107
|
-
const { column, validator } = uFilter;
|
|
108
|
-
let dimensions;
|
|
109
|
-
if (!isRangeValidator(validator)) {
|
|
110
|
-
dimensions = [
|
|
111
|
-
{
|
|
112
|
-
questionid: column.id,
|
|
113
|
-
qrveyid: column.qrveyid,
|
|
114
|
-
// linkid: column.linkid,
|
|
115
|
-
maxDataPoints: this._getMaxDataPoints(column, chartSettings),
|
|
116
|
-
type: column.type,
|
|
117
|
-
formulaType: column.type === "FORMULA" ? column.formulaType : undefined,
|
|
118
|
-
sortOption: this._getSortOption(column),
|
|
119
|
-
},
|
|
120
|
-
];
|
|
121
|
-
dimensions = this._refineBodies([...dimensions], uFilter);
|
|
122
|
-
}
|
|
123
|
-
return dimensions;
|
|
124
|
-
};
|
|
125
|
-
/**
|
|
126
|
-
* Gets max data point number
|
|
127
|
-
* @param column The column to filter
|
|
128
|
-
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
129
|
-
* @returns max data point number
|
|
130
|
-
*/
|
|
131
|
-
_getMaxDataPoints = (column, chartSettings) => {
|
|
132
|
-
return !isDateColumn(column) && !isEmpty(column.aggregate)
|
|
133
|
-
? _get(chartSettings, "maxDataPoints.option", 1000)
|
|
134
|
-
: 1000;
|
|
135
|
-
};
|
|
136
|
-
/**
|
|
137
|
-
* Gets sort option structure
|
|
138
|
-
* @param column The column to filter
|
|
139
|
-
* @returns sort option structure
|
|
140
|
-
*/
|
|
141
|
-
_getSortOption = (column) => {
|
|
142
|
-
let sortBy = "CATEGORY";
|
|
143
|
-
let sortDirection = isNumericalColumn(column) ? "DESC" : "ASC";
|
|
144
|
-
if (!isEmpty(column.sorting)) {
|
|
145
|
-
sortBy = _get(column.sorting, "sortBy");
|
|
146
|
-
sortDirection = _get(column.sorting, "order");
|
|
147
|
-
if (sortBy == null)
|
|
148
|
-
sortBy = "VALUE";
|
|
149
|
-
if (sortDirection == null)
|
|
150
|
-
sortDirection = "DESC";
|
|
151
|
-
}
|
|
152
|
-
return { sortBy, sortDirection };
|
|
153
|
-
};
|
|
154
|
-
/**
|
|
155
|
-
* Gets summaries body structure
|
|
156
|
-
* @param uFilter The filter Builder filter
|
|
157
|
-
* @returns summaries body structure
|
|
158
|
-
*/
|
|
159
|
-
_getSummariesBody = (uFilter) => {
|
|
160
|
-
const { column, validator } = uFilter;
|
|
161
|
-
const summary = {
|
|
162
|
-
aggregate: _get(column, "aggregate.label", AGGREGATE.COUNT),
|
|
163
|
-
questionid: column.id,
|
|
164
|
-
property: !isDateColumn(uFilter.column) ? uFilter.property : undefined,
|
|
165
|
-
type: column.type,
|
|
34
|
+
.catch((_) => {
|
|
35
|
+
return { data: [] };
|
|
36
|
+
});
|
|
166
37
|
};
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Gets request body structure
|
|
40
|
+
* @param uFilter The filter Builder filter
|
|
41
|
+
* @param filterLogic Additional filter logic to apply in the preview
|
|
42
|
+
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
43
|
+
* @returns the request body structure
|
|
44
|
+
*/
|
|
45
|
+
this._getPreviewRequestBody = (uFilter, filterLogic = [], chartSettings) => {
|
|
46
|
+
const { column, validator } = uFilter;
|
|
47
|
+
const haveAggFilters = ((chartSettings === null || chartSettings === void 0 ? void 0 : chartSettings.aggregateColumns) || []).length &&
|
|
48
|
+
((chartSettings === null || chartSettings === void 0 ? void 0 : chartSettings.chart) || []).length;
|
|
49
|
+
let searchLogic;
|
|
50
|
+
if (!isEmpty(uFilter.values)) {
|
|
51
|
+
searchLogic = flatUIToOldLogic([
|
|
52
|
+
Object.assign(Object.assign({}, uFilter), { validator: this._getValidationType(column, validator), column: Object.assign(Object.assign({}, uFilter.column), { linkid: undefined }) }),
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
let filterCharts = [];
|
|
56
|
+
if (haveAggFilters) {
|
|
57
|
+
filterCharts = chartSettings === null || chartSettings === void 0 ? void 0 : chartSettings.chart.map((chart) => {
|
|
58
|
+
if (uFilter.column.type === COLUMN.AGGREGATED_FORMULA)
|
|
59
|
+
return chart;
|
|
60
|
+
const summaryIndex = (chart.summaries || []).findIndex((s) => s.questionid === uFilter.column.id &&
|
|
61
|
+
s.aggregate === uFilter.column.aggregate);
|
|
62
|
+
const summary = summaryIndex !== -1 && chart.summaries[summaryIndex];
|
|
63
|
+
const chartAggFilters = getAggFiltersBySummaryIndex(chart.aggFilters, summaryIndex);
|
|
64
|
+
const searchAggFilters = getAggFilters((searchLogic === null || searchLogic === void 0 ? void 0 : searchLogic.logic) || [], summary ? [summary] : []);
|
|
65
|
+
return Object.assign(Object.assign({}, chart), { aggFilters: searchAggFilters || chartAggFilters, summaries: summary ? [summary] : [] });
|
|
66
|
+
}).filter((chart) => chart.summaries.length);
|
|
67
|
+
}
|
|
68
|
+
const chartsBody = !filterCharts[0]
|
|
69
|
+
? [this._getChartBody(uFilter)]
|
|
70
|
+
: [filterCharts[0]];
|
|
71
|
+
const filters = [
|
|
72
|
+
...filterLogic,
|
|
73
|
+
...(!filterCharts[0] ? (searchLogic === null || searchLogic === void 0 ? void 0 : searchLogic.logic) || [] : []),
|
|
172
74
|
];
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
75
|
+
return { charts: chartsBody, logic: filters, qrveyid: column.qrveyid };
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Gets chart body structure
|
|
79
|
+
* @param uFilter The filter Builder filter
|
|
80
|
+
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
81
|
+
* @returns the chart body structure
|
|
82
|
+
*/
|
|
83
|
+
this._getChartBody = (uFilter, chartSettings) => {
|
|
84
|
+
const dimensions = this._getDimensionsBody(uFilter, chartSettings);
|
|
85
|
+
const summaries = this._getSummariesBody(uFilter);
|
|
86
|
+
return { dimensions, summaries };
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Gets dimension body structure
|
|
90
|
+
* @param uFilter The filter Builder filter
|
|
91
|
+
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
92
|
+
* @returns the dimension body structure
|
|
93
|
+
*/
|
|
94
|
+
this._getDimensionsBody = (uFilter, chartSettings) => {
|
|
95
|
+
const { column, validator } = uFilter;
|
|
96
|
+
let dimensions;
|
|
97
|
+
if (!isRangeValidator(validator)) {
|
|
98
|
+
dimensions = [
|
|
99
|
+
{
|
|
100
|
+
questionid: column.id,
|
|
101
|
+
qrveyid: column.qrveyid,
|
|
102
|
+
// linkid: column.linkid,
|
|
103
|
+
maxDataPoints: this._getMaxDataPoints(column, chartSettings),
|
|
104
|
+
type: column.type,
|
|
105
|
+
formulaType: column.type === "FORMULA" ? column.formulaType : undefined,
|
|
106
|
+
sortOption: this._getSortOption(column),
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
dimensions = this._refineBodies([...dimensions], uFilter);
|
|
110
|
+
}
|
|
111
|
+
return dimensions;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Gets max data point number
|
|
115
|
+
* @param column The column to filter
|
|
116
|
+
* @param chartSettings The settings of the chart. For Aggregate Columns.
|
|
117
|
+
* @returns max data point number
|
|
118
|
+
*/
|
|
119
|
+
this._getMaxDataPoints = (column, chartSettings) => {
|
|
120
|
+
return !isDateColumn(column) && !isEmpty(column.aggregate)
|
|
121
|
+
? _get(chartSettings, "maxDataPoints.option", 1000)
|
|
122
|
+
: 1000;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Gets sort option structure
|
|
126
|
+
* @param column The column to filter
|
|
127
|
+
* @returns sort option structure
|
|
128
|
+
*/
|
|
129
|
+
this._getSortOption = (column) => {
|
|
130
|
+
let sortBy = "CATEGORY";
|
|
131
|
+
let sortDirection = isNumericalColumn(column) ? "DESC" : "ASC";
|
|
132
|
+
if (!isEmpty(column.sorting)) {
|
|
133
|
+
sortBy = _get(column.sorting, "sortBy");
|
|
134
|
+
sortDirection = _get(column.sorting, "order");
|
|
135
|
+
if (sortBy == null)
|
|
136
|
+
sortBy = "VALUE";
|
|
137
|
+
if (sortDirection == null)
|
|
138
|
+
sortDirection = "DESC";
|
|
139
|
+
}
|
|
140
|
+
return { sortBy, sortDirection };
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Gets summaries body structure
|
|
144
|
+
* @param uFilter The filter Builder filter
|
|
145
|
+
* @returns summaries body structure
|
|
146
|
+
*/
|
|
147
|
+
this._getSummariesBody = (uFilter) => {
|
|
148
|
+
const { column, validator } = uFilter;
|
|
149
|
+
const summary = {
|
|
150
|
+
aggregate: _get(column, "aggregate.label", AGGREGATE.COUNT),
|
|
151
|
+
questionid: column.id,
|
|
152
|
+
property: !isDateColumn(uFilter.column) ? uFilter.property : undefined,
|
|
153
|
+
type: column.type,
|
|
154
|
+
};
|
|
155
|
+
let summaries = [summary];
|
|
156
|
+
if (isNumericalColumn(column) || isRangeValidator(validator)) {
|
|
157
|
+
summaries = [
|
|
158
|
+
Object.assign(Object.assign({}, summary), { aggregate: AGGREGATE.MIN }),
|
|
159
|
+
Object.assign(Object.assign({}, summary), { aggregate: AGGREGATE.MAX }),
|
|
160
|
+
];
|
|
161
|
+
}
|
|
162
|
+
return summaries;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Refines the body structure
|
|
166
|
+
* @param bodies The body structure
|
|
167
|
+
* @param uFilter The filter Builder filter
|
|
168
|
+
* @returns the body structure
|
|
169
|
+
*/
|
|
170
|
+
this._refineBodies = (bodies, uFilter) => {
|
|
171
|
+
const _bodies = cloneDeep(bodies);
|
|
172
|
+
if (uFilter.property != null) {
|
|
173
|
+
_bodies.forEach((body) => {
|
|
174
|
+
if (isDateColumn(uFilter.column)) {
|
|
175
|
+
body["groupType"] = "DATE";
|
|
176
|
+
body["groupValue"] = uFilter.property.toUpperCase();
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
body["property"] = uFilter.property;
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return _bodies;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Gets the validation type for the preview request
|
|
187
|
+
* @param column The column to filter
|
|
188
|
+
* @param vaildator Validator Type
|
|
189
|
+
* @returns the validator type for the preview request
|
|
190
|
+
*/
|
|
191
|
+
this._getValidationType = (column, validator) => {
|
|
192
|
+
if (isDateColumn(column) ||
|
|
193
|
+
column.type === COLUMN.BUCKET ||
|
|
194
|
+
isNumericalColumn(column)) {
|
|
195
|
+
return FILTER_VALIDATOR.EQUALS;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
if ([
|
|
199
|
+
FILTER_VALIDATOR.NOT_CONTAIN,
|
|
200
|
+
FILTER_VALIDATOR.EQUALS,
|
|
201
|
+
FILTER_VALIDATOR.NOT_EQUAL,
|
|
202
|
+
].includes(validator)) {
|
|
203
|
+
return FILTER_VALIDATOR.CONTAINS;
|
|
204
|
+
}
|
|
205
|
+
else if (validator === FILTER_VALIDATOR.NOT_END_WITH) {
|
|
206
|
+
return FILTER_VALIDATOR.ENDS_WITH;
|
|
207
|
+
}
|
|
208
|
+
else if (validator === FILTER_VALIDATOR.NOT_START_WITH) {
|
|
209
|
+
return FILTER_VALIDATOR.STARTS_WITH;
|
|
189
210
|
}
|
|
190
211
|
else {
|
|
191
|
-
|
|
212
|
+
return validator;
|
|
192
213
|
}
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
return _bodies;
|
|
196
|
-
};
|
|
197
|
-
/**
|
|
198
|
-
* Gets the validation type for the preview request
|
|
199
|
-
* @param column The column to filter
|
|
200
|
-
* @param vaildator Validator Type
|
|
201
|
-
* @returns the validator type for the preview request
|
|
202
|
-
*/
|
|
203
|
-
_getValidationType = (column, validator) => {
|
|
204
|
-
if (isDateColumn(column) ||
|
|
205
|
-
column.type === COLUMN.BUCKET ||
|
|
206
|
-
isNumericalColumn(column)) {
|
|
207
|
-
return FILTER_VALIDATOR.EQUALS;
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
if ([
|
|
211
|
-
FILTER_VALIDATOR.NOT_CONTAIN,
|
|
212
|
-
FILTER_VALIDATOR.EQUALS,
|
|
213
|
-
FILTER_VALIDATOR.NOT_EQUAL,
|
|
214
|
-
].includes(validator)) {
|
|
215
|
-
return FILTER_VALIDATOR.CONTAINS;
|
|
216
214
|
}
|
|
217
|
-
|
|
218
|
-
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Gets the Data from preview Response
|
|
218
|
+
* @param response The preview presponse
|
|
219
|
+
* @param uFilter The filter Builder filter
|
|
220
|
+
* @returns The resulting data
|
|
221
|
+
*/
|
|
222
|
+
this._getDataFromResponse = (response, uFilter) => {
|
|
223
|
+
const data = { data: [] };
|
|
224
|
+
if (isRangeValidator(uFilter.validator)) {
|
|
225
|
+
data.data = isEmpty(uFilter.column.aggregate)
|
|
226
|
+
? _get(response, "[0].summary", []).map((summary) => ({
|
|
227
|
+
value: summary,
|
|
228
|
+
}))
|
|
229
|
+
: [
|
|
230
|
+
{ value: _get(response, "[0].min") },
|
|
231
|
+
{ value: _get(response, "[0].max") },
|
|
232
|
+
];
|
|
219
233
|
}
|
|
220
|
-
else if (
|
|
221
|
-
|
|
234
|
+
else if (!this.isResultEmpty(response)) {
|
|
235
|
+
const records = _get(response, "data");
|
|
236
|
+
data.data = isEmpty(uFilter.column.aggregate)
|
|
237
|
+
? records.map((record) => ({
|
|
238
|
+
value: record.key.toString(),
|
|
239
|
+
}))
|
|
240
|
+
: this._getResponseSummaries(records);
|
|
222
241
|
}
|
|
223
|
-
|
|
224
|
-
|
|
242
|
+
return data;
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* Gets summaries from preview response
|
|
246
|
+
* @param records The data from preview response
|
|
247
|
+
* @param values The values from the preview response
|
|
248
|
+
* @returns the sumaries
|
|
249
|
+
*/
|
|
250
|
+
this._getResponseSummaries = (records, values = []) => {
|
|
251
|
+
records.forEach((record) => {
|
|
252
|
+
const value = record.summary[0].toString();
|
|
253
|
+
if (Array.isArray(record.items) && record.items.length)
|
|
254
|
+
values = this._getResponseSummaries(record.items, values);
|
|
255
|
+
else if (!Array.isArray(record.items) &&
|
|
256
|
+
!isEmpty(values.find((v) => v.value === value)))
|
|
257
|
+
values.push({ value });
|
|
258
|
+
});
|
|
259
|
+
return values;
|
|
260
|
+
};
|
|
261
|
+
this.isResultEmpty = (resultObject, validateNesteddata = false) => {
|
|
262
|
+
const result = _get(resultObject, "[0].data");
|
|
263
|
+
let validation = isEmpty(result);
|
|
264
|
+
if (validateNesteddata && !validation) {
|
|
265
|
+
// Searching empty data when Chart is Multiseries. At least, Chart needs a single item to draw in the serie. (See the second level of the result object)
|
|
266
|
+
validation = result.every((data) => !isEmpty(data) && isEmpty(_get(data, "items")));
|
|
225
267
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
* Gets the Data from preview Response
|
|
230
|
-
* @param response The preview presponse
|
|
231
|
-
* @param uFilter The filter Builder filter
|
|
232
|
-
* @returns The resulting data
|
|
233
|
-
*/
|
|
234
|
-
_getDataFromResponse = (response, uFilter) => {
|
|
235
|
-
const data = { data: [] };
|
|
236
|
-
if (isRangeValidator(uFilter.validator)) {
|
|
237
|
-
data.data = isEmpty(uFilter.column.aggregate)
|
|
238
|
-
? _get(response, "[0].summary", []).map((summary) => ({
|
|
239
|
-
value: summary,
|
|
240
|
-
}))
|
|
241
|
-
: [
|
|
242
|
-
{ value: _get(response, "[0].min") },
|
|
243
|
-
{ value: _get(response, "[0].max") },
|
|
244
|
-
];
|
|
245
|
-
}
|
|
246
|
-
else if (!this.isResultEmpty(response)) {
|
|
247
|
-
const records = _get(response, "data");
|
|
248
|
-
data.data = isEmpty(uFilter.column.aggregate)
|
|
249
|
-
? records.map((record) => ({
|
|
250
|
-
value: record.key.toString(),
|
|
251
|
-
}))
|
|
252
|
-
: this._getResponseSummaries(records);
|
|
253
|
-
}
|
|
254
|
-
return data;
|
|
255
|
-
};
|
|
256
|
-
/**
|
|
257
|
-
* Gets summaries from preview response
|
|
258
|
-
* @param records The data from preview response
|
|
259
|
-
* @param values The values from the preview response
|
|
260
|
-
* @returns the sumaries
|
|
261
|
-
*/
|
|
262
|
-
_getResponseSummaries = (records, values = []) => {
|
|
263
|
-
records.forEach((record) => {
|
|
264
|
-
const value = record.summary[0].toString();
|
|
265
|
-
if (Array.isArray(record.items) && record.items.length)
|
|
266
|
-
values = this._getResponseSummaries(record.items, values);
|
|
267
|
-
else if (!Array.isArray(record.items) &&
|
|
268
|
-
!isEmpty(values.find((v) => v.value === value)))
|
|
269
|
-
values.push({ value });
|
|
270
|
-
});
|
|
271
|
-
return values;
|
|
272
|
-
};
|
|
273
|
-
isResultEmpty = (resultObject, validateNesteddata = false) => {
|
|
274
|
-
const result = _get(resultObject, "[0].data");
|
|
275
|
-
let validation = isEmpty(result);
|
|
276
|
-
if (validateNesteddata && !validation) {
|
|
277
|
-
// Searching empty data when Chart is Multiseries. At least, Chart needs a single item to draw in the serie. (See the second level of the result object)
|
|
278
|
-
validation = result.every((data) => !isEmpty(data) && isEmpty(_get(data, "items")));
|
|
279
|
-
}
|
|
280
|
-
return validation;
|
|
281
|
-
};
|
|
268
|
+
return validation;
|
|
269
|
+
};
|
|
270
|
+
}
|
|
282
271
|
}
|