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