@qrvey/utils 1.4.0-0 → 1.4.0-3

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 (156) 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/getColumnsLabel.js +0 -5
  11. package/dist/cjs/columns/helpers/getDatasetColumn.js +1 -1
  12. package/dist/cjs/columns/helpers/getModelColumn.js +0 -1
  13. package/dist/cjs/dates/relative/RelativeStatementAdapter.js +6 -24
  14. package/dist/cjs/filters/adapters/FDToFlatUI.js +8 -18
  15. package/dist/cjs/filters/adapters/FDToLogic.js +1 -1
  16. package/dist/cjs/filters/adapters/FDToUI.js +12 -24
  17. package/dist/cjs/filters/adapters/UIToFlatUI.js +4 -14
  18. package/dist/cjs/filters/adapters/UIToOldLogic.js +2 -1
  19. package/dist/cjs/filters/adapters/adaptFilterValues.js +1 -6
  20. package/dist/cjs/filters/adapters/flatUIToFD.js +3 -14
  21. package/dist/cjs/filters/adapters/flatUIToOldLogic.js +15 -49
  22. package/dist/cjs/filters/adapters/flatUIToUI.js +3 -14
  23. package/dist/cjs/filters/adapters/logicToFlatUI.js +20 -32
  24. package/dist/cjs/filters/adapters/transformFilters.js +4 -19
  25. package/dist/cjs/filters/classes/FilterInputErrorHandler.js +0 -8
  26. package/dist/cjs/filters/helpers/applyHierarchyForAggFilters.js +2 -11
  27. package/dist/cjs/filters/helpers/backend/buildExpression.js +2 -1
  28. package/dist/cjs/filters/helpers/backend/buildFilters.js +2 -1
  29. package/dist/cjs/filters/helpers/backend/getAggFiltersBySummaryIndex.js +1 -4
  30. package/dist/cjs/filters/helpers/backend/getLogicByDatasets.js +5 -7
  31. package/dist/cjs/filters/helpers/backend/getLogicByDatasetsColumns.js +6 -8
  32. package/dist/cjs/filters/helpers/common/areFiltersEquals.js +3 -2
  33. package/dist/cjs/filters/helpers/common/excludeFiltersByParams.js +17 -22
  34. package/dist/cjs/filters/helpers/common/getFilterid.js +9 -8
  35. package/dist/cjs/filters/helpers/common/getFiltersByDatasetsColumns.js +7 -16
  36. package/dist/cjs/filters/helpers/common/getFiltersByParams.js +12 -18
  37. package/dist/cjs/filters/helpers/common/getMergeFiltersSettings.js +4 -3
  38. package/dist/cjs/filters/helpers/common/getMergeValuesSettings.js +2 -1
  39. package/dist/cjs/filters/helpers/common/getParamsToGetFilterSettings.js +10 -9
  40. package/dist/cjs/filters/helpers/common/mergeFilters.js +7 -30
  41. package/dist/cjs/filters/helpers/common/mergeValues.js +9 -6
  42. package/dist/cjs/filters/helpers/common/resolveFilterConditions.js +9 -8
  43. package/dist/cjs/filters/helpers/getAggFiltersFromFilterData.js +2 -42
  44. package/dist/cjs/filters/helpers/ui/getUIValues.js +14 -12
  45. package/dist/cjs/filters/helpers/ui/getUpdatedUIFilters.js +1 -1
  46. package/dist/cjs/filters/helpers/ui/resolveUIFlatFilterByParams.js +5 -4
  47. package/dist/cjs/filters/helpers/ui/transformFilterValues.js +3 -14
  48. package/dist/cjs/filters/interfaces/builder/IFilterBuilderSettings.d.ts +2 -0
  49. package/dist/cjs/filters/services/Filters.api.js +44 -45
  50. package/dist/cjs/filters/services/UChartApi.js +246 -257
  51. package/dist/cjs/filters/services/UChartPaginationApi.js +289 -301
  52. package/dist/cjs/format/definition.js +1 -1
  53. package/dist/cjs/format/duration/durationFormatter.js +7 -12
  54. package/dist/cjs/format/format.js +8 -7
  55. package/dist/cjs/format/localization.d.ts +2 -1
  56. package/dist/cjs/format/localization.js +8 -7
  57. package/dist/cjs/general/array/addPropertyToArrayOfObjects.js +1 -1
  58. package/dist/cjs/general/object/getAttribute.js +2 -6
  59. package/dist/cjs/general/object/mergeDeep.js +3 -2
  60. package/dist/cjs/globalization/labels/chart_builder/I18N_CHART_BUILDER.js +6 -21
  61. package/dist/cjs/globalization/service/i18nextBuilder.js +31 -19
  62. package/dist/cjs/globalization/service/initI18n.js +13 -2
  63. package/dist/cjs/qrvey/helpers/getCategorizableExpression.js +2 -1
  64. package/dist/cjs/qrvey/helpers/getDataAnswersByColumn.js +1 -4
  65. package/dist/cjs/qrvey/helpers/getDropdownAnswers.js +1 -1
  66. package/dist/cjs/qrvey/helpers/getImageAnswers.js +2 -2
  67. package/dist/cjs/qrvey/helpers/getImageUploadHasAnalysis.js +1 -1
  68. package/dist/cjs/qrvey/helpers/getLookupAnswers.js +4 -4
  69. package/dist/cjs/qrvey/helpers/getLookupDisplays.js +1 -1
  70. package/dist/cjs/qrvey/helpers/getSlidebarAnswers.js +2 -1
  71. package/dist/cjs/qrvey/helpers/getYesNoAnswers.js +1 -5
  72. package/dist/cjs/qrvey/helpers/transformValue.js +2 -1
  73. package/dist/cjs/services/api/Charts.api.js +3 -9
  74. package/dist/cjs/services/api/getAllDatasets.api.js +1 -1
  75. package/dist/cjs/services/api/getAllQrveys.api.js +1 -1
  76. package/dist/cjs/services/api/getDatasetColumns.api.js +1 -1
  77. package/dist/cjs/services/api/getDatasetsByIds.api.js +2 -2
  78. package/dist/cjs/services/api/getModel.api.js +1 -4
  79. package/dist/cjs/services/helpers/Request.js +16 -5
  80. package/dist/column_format/helpers/defineTableChartFormat.js +10 -26
  81. package/dist/column_format/helpers/defineXYChartFormat.js +7 -11
  82. package/dist/columns/constants/COLUMN_INFO.js +23 -49
  83. package/dist/columns/constants/COLUMN_LABEL.js +1 -29
  84. package/dist/columns/constants/COLUMN_PROPERTY_INFO.js +3 -8
  85. package/dist/columns/constants/COLUMN_PROPERTY_LABEL.js +1 -11
  86. package/dist/columns/helpers/getColumnsLabel.js +0 -5
  87. package/dist/columns/helpers/getDatasetColumn.js +1 -1
  88. package/dist/columns/helpers/getModelColumn.js +0 -1
  89. package/dist/dates/relative/RelativeStatementAdapter.js +6 -24
  90. package/dist/filters/adapters/FDToFlatUI.js +8 -18
  91. package/dist/filters/adapters/FDToLogic.js +1 -1
  92. package/dist/filters/adapters/FDToUI.js +12 -24
  93. package/dist/filters/adapters/UIToFlatUI.js +4 -14
  94. package/dist/filters/adapters/UIToOldLogic.js +2 -1
  95. package/dist/filters/adapters/adaptFilterValues.js +1 -6
  96. package/dist/filters/adapters/flatUIToFD.js +3 -14
  97. package/dist/filters/adapters/flatUIToOldLogic.js +15 -49
  98. package/dist/filters/adapters/flatUIToUI.js +3 -14
  99. package/dist/filters/adapters/logicToFlatUI.js +20 -32
  100. package/dist/filters/adapters/transformFilters.js +4 -19
  101. package/dist/filters/classes/FilterInputErrorHandler.js +0 -8
  102. package/dist/filters/helpers/applyHierarchyForAggFilters.js +2 -11
  103. package/dist/filters/helpers/backend/buildExpression.js +2 -1
  104. package/dist/filters/helpers/backend/buildFilters.js +2 -1
  105. package/dist/filters/helpers/backend/getAggFiltersBySummaryIndex.js +1 -4
  106. package/dist/filters/helpers/backend/getLogicByDatasets.js +5 -7
  107. package/dist/filters/helpers/backend/getLogicByDatasetsColumns.js +6 -8
  108. package/dist/filters/helpers/common/areFiltersEquals.js +3 -2
  109. package/dist/filters/helpers/common/excludeFiltersByParams.js +17 -22
  110. package/dist/filters/helpers/common/getFilterid.js +9 -8
  111. package/dist/filters/helpers/common/getFiltersByDatasetsColumns.js +7 -16
  112. package/dist/filters/helpers/common/getFiltersByParams.js +12 -18
  113. package/dist/filters/helpers/common/getMergeFiltersSettings.js +4 -3
  114. package/dist/filters/helpers/common/getMergeValuesSettings.js +2 -1
  115. package/dist/filters/helpers/common/getParamsToGetFilterSettings.js +10 -9
  116. package/dist/filters/helpers/common/mergeFilters.js +7 -30
  117. package/dist/filters/helpers/common/mergeValues.js +9 -6
  118. package/dist/filters/helpers/common/resolveFilterConditions.js +9 -8
  119. package/dist/filters/helpers/getAggFiltersFromFilterData.js +2 -42
  120. package/dist/filters/helpers/ui/getUIValues.js +14 -12
  121. package/dist/filters/helpers/ui/getUpdatedUIFilters.js +1 -1
  122. package/dist/filters/helpers/ui/resolveUIFlatFilterByParams.js +5 -4
  123. package/dist/filters/helpers/ui/transformFilterValues.js +3 -14
  124. package/dist/filters/interfaces/builder/IFilterBuilderSettings.d.ts +2 -0
  125. package/dist/filters/services/Filters.api.js +44 -45
  126. package/dist/filters/services/UChartApi.js +246 -257
  127. package/dist/filters/services/UChartPaginationApi.js +289 -301
  128. package/dist/format/definition.js +1 -1
  129. package/dist/format/duration/durationFormatter.js +7 -12
  130. package/dist/format/format.js +8 -7
  131. package/dist/format/localization.d.ts +2 -1
  132. package/dist/format/localization.js +7 -6
  133. package/dist/general/array/addPropertyToArrayOfObjects.js +1 -1
  134. package/dist/general/object/getAttribute.js +2 -6
  135. package/dist/general/object/mergeDeep.js +3 -2
  136. package/dist/globalization/labels/chart_builder/I18N_CHART_BUILDER.js +6 -21
  137. package/dist/globalization/service/i18nextBuilder.js +31 -19
  138. package/dist/globalization/service/initI18n.js +13 -2
  139. package/dist/qrvey/helpers/getCategorizableExpression.js +2 -1
  140. package/dist/qrvey/helpers/getDataAnswersByColumn.js +1 -4
  141. package/dist/qrvey/helpers/getDropdownAnswers.js +1 -1
  142. package/dist/qrvey/helpers/getImageAnswers.js +2 -2
  143. package/dist/qrvey/helpers/getImageUploadHasAnalysis.js +1 -1
  144. package/dist/qrvey/helpers/getLookupAnswers.js +4 -4
  145. package/dist/qrvey/helpers/getLookupDisplays.js +1 -1
  146. package/dist/qrvey/helpers/getSlidebarAnswers.js +2 -1
  147. package/dist/qrvey/helpers/getYesNoAnswers.js +1 -5
  148. package/dist/qrvey/helpers/transformValue.js +2 -1
  149. package/dist/services/api/Charts.api.js +3 -9
  150. package/dist/services/api/getAllDatasets.api.js +1 -1
  151. package/dist/services/api/getAllQrveys.api.js +1 -1
  152. package/dist/services/api/getDatasetColumns.api.js +1 -1
  153. package/dist/services/api/getDatasetsByIds.api.js +2 -2
  154. package/dist/services/api/getModel.api.js +1 -4
  155. package/dist/services/helpers/Request.js +16 -5
  156. package/package.json +5 -4
@@ -1,3 +1,12 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import UChartPaginationApi from "./UChartPaginationApi";
2
11
  import UChartApi from "./UChartApi";
3
12
  import { isRangeValidator } from "../helpers/common/isRangeValidator";
@@ -19,10 +28,6 @@ import { getDatasetByColumn } from "../../qrvey/helpers/getDatasetByColumn";
19
28
  import { getLogicByDatasets } from "../helpers/backend/getLogicByDatasets";
20
29
  import { getFiltersByParams } from "../helpers/common/getFiltersByParams";
21
30
  export class FiltersApi {
22
- // abortCtrl: AbortController;
23
- config;
24
- chartApi;
25
- chartPaginationApi;
26
31
  constructor(cfg) {
27
32
  this.setConfig(cfg);
28
33
  this.chartPaginationApi = new UChartPaginationApi();
@@ -35,8 +40,7 @@ export class FiltersApi {
35
40
  */
36
41
  getModel(qrveyid) {
37
42
  const config = isEmpty(qrveyid)
38
- ? { ...this.config }
39
- : { ...this.config, qrveyid };
43
+ ? Object.assign({}, this.config) : Object.assign(Object.assign({}, this.config), { qrveyid });
40
44
  return getModel(config, {
41
45
  includeInfo: [
42
46
  "datalinkInfo",
@@ -58,14 +62,15 @@ export class FiltersApi {
58
62
  // return DataTokensApi.getAll(config);
59
63
  // }
60
64
  getData(config, resetApi = false) {
65
+ var _a, _b, _c, _d, _e, _f;
61
66
  let promise;
62
- if (areStaticColumnValues(config.filter?.column) &&
63
- isEmpty(config.filter?.column.aggregate)) {
67
+ if (areStaticColumnValues((_a = config.filter) === null || _a === void 0 ? void 0 : _a.column) &&
68
+ isEmpty((_b = config.filter) === null || _b === void 0 ? void 0 : _b.column.aggregate)) {
64
69
  promise = getValuesFromDataset({
65
- column: config.filter?.column,
66
- property: config.filter?.property,
67
- lookupDisplay: config.filter?.lookupDisplayIndex,
68
- dataset: getDatasetByColumn(config.filter?.column, config.datasets),
70
+ column: (_c = config.filter) === null || _c === void 0 ? void 0 : _c.column,
71
+ property: (_d = config.filter) === null || _d === void 0 ? void 0 : _d.property,
72
+ lookupDisplay: (_e = config.filter) === null || _e === void 0 ? void 0 : _e.lookupDisplayIndex,
73
+ dataset: getDatasetByColumn((_f = config.filter) === null || _f === void 0 ? void 0 : _f.column, config.datasets),
69
74
  value: config.valueText,
70
75
  });
71
76
  }
@@ -82,69 +87,63 @@ export class FiltersApi {
82
87
  * @param resetApi flag to determine when the api should be reseted.
83
88
  * @returns a promise with a preview of resulting data.
84
89
  */
85
- async getDataValues(config, resetApi = false) {
86
- let api;
87
- if (isRangeValidator(config.filter.validator)) {
88
- this.chartPaginationApi.afterKey = undefined;
89
- api = this.chartApi;
90
- }
91
- else {
92
- api = this.chartPaginationApi;
93
- }
94
- return api.getChartResult(this.config, this.getFilter(config), this.getLogic(config), this.getChartRequest(config), resetApi);
90
+ getDataValues(config, resetApi = false) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ let api;
93
+ if (isRangeValidator(config.filter.validator)) {
94
+ this.chartPaginationApi.afterKey = undefined;
95
+ api = this.chartApi;
96
+ }
97
+ else {
98
+ api = this.chartPaginationApi;
99
+ }
100
+ return api.getChartResult(this.config, this.getFilter(config), this.getLogic(config), this.getChartRequest(config), resetApi);
101
+ });
95
102
  }
96
103
  getLogic(config) {
104
+ var _a;
97
105
  const scopes = this.getAvailableScopeIds(config);
98
106
  let filterData = getFiltersByVisibility(config.filterData, scopes);
99
- const dataset = config.datasets.find((d) => d.qrveyid === config.filter?.column.qrveyid);
100
- filterData = getFiltersByParams(filterData, { qrveyid: dataset?.qrveyid }, {
107
+ const dataset = config.datasets.find((d) => { var _a; return d.qrveyid === ((_a = config.filter) === null || _a === void 0 ? void 0 : _a.column.qrveyid); });
108
+ filterData = getFiltersByParams(filterData, { qrveyid: dataset === null || dataset === void 0 ? void 0 : dataset.qrveyid }, {
101
109
  letPassUndefinedProperties: { filter: true },
102
110
  filterEmptyArrays: { filter: false },
103
111
  });
104
112
  filterData = excludeFiltersByAggregateColumn(filterData);
105
113
  const logics = FDToLogic(filterData);
106
- const hierarchyLogic = getLogicByScopesHierarchy(logics, scopes, config.filter?.extras.scope);
114
+ const hierarchyLogic = getLogicByScopesHierarchy(logics, scopes, (_a = config.filter) === null || _a === void 0 ? void 0 : _a.extras.scope);
107
115
  return [
108
116
  ...hierarchyLogic,
109
117
  ...(getLogicByDatasets(buildUserFilters(config.userFilters), isEmpty(dataset) ? [] : [dataset.qrveyid]) || []),
110
118
  ];
111
119
  }
112
120
  getFilter(config) {
113
- return {
114
- ...config.filter,
115
- values: !isEmpty(config.valueText)
121
+ return Object.assign(Object.assign({}, config.filter), { values: !isEmpty(config.valueText)
116
122
  ? [{ value: config.valueText, enabled: true }]
117
- : undefined,
118
- };
123
+ : undefined });
119
124
  }
120
125
  getChartRequest(config) {
126
+ var _a;
121
127
  const scopes = this.getAvailableScopeIds(config);
122
- return applyHierarchyForAggFilters(config.chartRequest, scopes, config.filter?.extras.scope);
128
+ return applyHierarchyForAggFilters(config.chartRequest, scopes, (_a = config.filter) === null || _a === void 0 ? void 0 : _a.extras.scope);
123
129
  }
124
130
  /**
125
131
  * Gets the available scopes and scope IDs
126
132
  * @returns a collection of the pair Scopes and Scope IDs
127
133
  */
128
134
  getAvailableScopeIds(config) {
129
- return getAvailableScopes({
130
- ...getAvailableScopesIDsByConfig(config),
131
- panelid: FILTER_SCOPE.CHART === config.filter?.extras.scope
132
- ? config.filter?.extras.scopeid
133
- : undefined,
134
- scopeid: config.filter?.extras.scopeid,
135
- qrveyid: config.filter?.column?.qrveyid,
136
- defaultid: config.filter?.column?.qrveyid,
137
- scope: undefined,
138
- predefinedScopes: [
139
- { label: FILTER_SCOPE.DATA, id: config.filter?.column?.qrveyid },
140
- ],
141
- });
135
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
136
+ return getAvailableScopes(Object.assign(Object.assign({}, getAvailableScopesIDsByConfig(config)), { panelid: FILTER_SCOPE.CHART === ((_a = config.filter) === null || _a === void 0 ? void 0 : _a.extras.scope)
137
+ ? (_b = config.filter) === null || _b === void 0 ? void 0 : _b.extras.scopeid
138
+ : undefined, scopeid: (_c = config.filter) === null || _c === void 0 ? void 0 : _c.extras.scopeid, qrveyid: (_e = (_d = config.filter) === null || _d === void 0 ? void 0 : _d.column) === null || _e === void 0 ? void 0 : _e.qrveyid, defaultid: (_g = (_f = config.filter) === null || _f === void 0 ? void 0 : _f.column) === null || _g === void 0 ? void 0 : _g.qrveyid, scope: undefined, predefinedScopes: [
139
+ { label: FILTER_SCOPE.DATA, id: (_j = (_h = config.filter) === null || _h === void 0 ? void 0 : _h.column) === null || _j === void 0 ? void 0 : _j.qrveyid },
140
+ ] }));
142
141
  }
143
142
  /**
144
143
  * Set the config into the Filter Builder Api class
145
144
  * @param config the config.
146
145
  */
147
146
  setConfig(config) {
148
- this.config = { ...config };
147
+ this.config = Object.assign({}, config);
149
148
  }
150
149
  }
@@ -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
- * Gets a promise with a resulting data
17
- * @param config the config
18
- * @param uFilter The filter Builder filter
19
- * @param filterLogic Additional filter logic to apply in the preview
20
- * @param chartSettings The settings of the chart. For Aggregate Columns.
21
- * @returns a promise with a resulting data
22
- */
23
- getChartResult = (config, uFilter, filterLogic = [], chartSettings, _resetApi = false) => {
24
- const requestBody = this._getPreviewRequestBody(uFilter, filterLogic, chartSettings);
25
- const customChartApi = new ChartsApi({
26
- ...config,
27
- qrvey_id: isEmpty(uFilter.column.aggregate)
28
- ? uFilter.column.qrveyid
29
- : chartSettings?.qrveyid,
30
- });
31
- return customChartApi
32
- .getResults(requestBody, false, true)
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
- .filter((chart) => chart.summaries.length);
79
- }
80
- const chartsBody = !filterCharts[0]
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
- let summaries = [summary];
168
- if (isNumericalColumn(column) || isRangeValidator(validator)) {
169
- summaries = [
170
- { ...summary, aggregate: AGGREGATE.MIN },
171
- { ...summary, aggregate: AGGREGATE.MAX },
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
- return summaries;
175
- };
176
- /**
177
- * Refines the body structure
178
- * @param bodies The body structure
179
- * @param uFilter The filter Builder filter
180
- * @returns the body structure
181
- */
182
- _refineBodies = (bodies, uFilter) => {
183
- const _bodies = cloneDeep(bodies);
184
- if (uFilter.property != null) {
185
- _bodies.forEach((body) => {
186
- if (isDateColumn(uFilter.column)) {
187
- body["groupType"] = "DATE";
188
- body["groupValue"] = uFilter.property.toUpperCase();
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
- body["property"] = uFilter.property;
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
- else if (validator === FILTER_VALIDATOR.NOT_END_WITH) {
218
- return FILTER_VALIDATOR.ENDS_WITH;
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 (validator === FILTER_VALIDATOR.NOT_START_WITH) {
221
- return FILTER_VALIDATOR.STARTS_WITH;
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
- else {
224
- return validator;
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
  }