@quillsql/react 2.12.30 → 2.12.32

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 (201) hide show
  1. package/dist/cjs/Chart.d.ts +6 -37
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +86 -327
  4. package/dist/cjs/ChartBuilder.d.ts +12 -49
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +68 -36
  7. package/dist/cjs/ChartEditor.d.ts +1 -1
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +11 -7
  10. package/dist/cjs/Context.d.ts +4 -1
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +10 -4
  13. package/dist/cjs/Dashboard.d.ts +61 -114
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +261 -30
  16. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  17. package/dist/cjs/DateRangePicker/DateRangePicker.js +0 -26
  18. package/dist/cjs/ReportBuilder.d.ts +1 -1
  19. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  20. package/dist/cjs/ReportBuilder.js +62 -97
  21. package/dist/cjs/SQLEditor.d.ts +2 -2
  22. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  23. package/dist/cjs/SQLEditor.js +10 -5
  24. package/dist/cjs/Table.d.ts.map +1 -1
  25. package/dist/cjs/Table.js +41 -43
  26. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  27. package/dist/cjs/components/Chart/BarChart.js +12 -1
  28. package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
  29. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  30. package/dist/cjs/components/Chart/LineChart.js +25 -1
  31. package/dist/cjs/components/Dashboard/DataLoader.d.ts +7 -7
  32. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  33. package/dist/cjs/components/Dashboard/DataLoader.js +64 -28
  34. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  35. package/dist/cjs/components/Dashboard/MetricComponent.js +11 -45
  36. package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
  37. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  38. package/dist/cjs/components/Dashboard/TableComponent.js +1 -30
  39. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  40. package/dist/cjs/components/QuillMultiSelectWithCombo.js +16 -1
  41. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  42. package/dist/cjs/components/QuillSelectWithCombo.js +4 -1
  43. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +10 -2
  44. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  45. package/dist/cjs/components/ReportBuilder/FilterModal.js +94 -70
  46. package/dist/cjs/components/ReportBuilder/convert.d.ts +7 -2
  47. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  48. package/dist/cjs/components/ReportBuilder/convert.js +53 -1
  49. package/dist/cjs/components/ReportBuilder/ui.d.ts +6 -6
  50. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  51. package/dist/cjs/components/ReportBuilder/ui.js +6 -22
  52. package/dist/cjs/components/UiComponents.d.ts +26 -1
  53. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  54. package/dist/cjs/components/UiComponents.js +97 -4
  55. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  56. package/dist/cjs/hooks/useQuill.js +19 -3
  57. package/dist/cjs/index.d.ts +2 -1
  58. package/dist/cjs/index.d.ts.map +1 -1
  59. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -0
  60. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  61. package/dist/cjs/models/Columns.d.ts +2 -1
  62. package/dist/cjs/models/Columns.d.ts.map +1 -1
  63. package/dist/cjs/models/Filter.d.ts +15 -4
  64. package/dist/cjs/models/Filter.d.ts.map +1 -1
  65. package/dist/cjs/models/Filter.js +9 -1
  66. package/dist/cjs/models/Report.d.ts +10 -23
  67. package/dist/cjs/models/Report.d.ts.map +1 -1
  68. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  69. package/dist/cjs/utils/astFilterProcessing.js +37 -2
  70. package/dist/cjs/utils/columnProcessing.d.ts +2 -0
  71. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  72. package/dist/cjs/utils/columnProcessing.js +54 -1
  73. package/dist/cjs/utils/dashboard.d.ts +1 -1
  74. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  75. package/dist/cjs/utils/dashboard.js +3 -56
  76. package/dist/cjs/utils/dataProcessing.d.ts +4 -2
  77. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -1
  78. package/dist/cjs/utils/dataProcessing.js +18 -1
  79. package/dist/cjs/utils/dates.d.ts +2 -1
  80. package/dist/cjs/utils/dates.d.ts.map +1 -1
  81. package/dist/cjs/utils/dates.js +23 -1
  82. package/dist/cjs/utils/filterProcessing.d.ts +7 -1
  83. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  84. package/dist/cjs/utils/filterProcessing.js +100 -13
  85. package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
  86. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  87. package/dist/cjs/utils/pivotConstructor.js +7 -1
  88. package/dist/cjs/utils/report.d.ts +4 -1
  89. package/dist/cjs/utils/report.d.ts.map +1 -1
  90. package/dist/cjs/utils/report.js +94 -7
  91. package/dist/cjs/utils/tableProcessing.d.ts +1 -1
  92. package/dist/esm/Chart.d.ts +6 -37
  93. package/dist/esm/Chart.d.ts.map +1 -1
  94. package/dist/esm/Chart.js +87 -329
  95. package/dist/esm/ChartBuilder.d.ts +12 -49
  96. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  97. package/dist/esm/ChartBuilder.js +68 -33
  98. package/dist/esm/ChartEditor.d.ts +1 -1
  99. package/dist/esm/ChartEditor.d.ts.map +1 -1
  100. package/dist/esm/ChartEditor.js +11 -7
  101. package/dist/esm/Context.d.ts +4 -1
  102. package/dist/esm/Context.d.ts.map +1 -1
  103. package/dist/esm/Context.js +9 -3
  104. package/dist/esm/Dashboard.d.ts +61 -114
  105. package/dist/esm/Dashboard.d.ts.map +1 -1
  106. package/dist/esm/Dashboard.js +263 -32
  107. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  108. package/dist/esm/DateRangePicker/DateRangePicker.js +0 -26
  109. package/dist/esm/ReportBuilder.d.ts +1 -1
  110. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  111. package/dist/esm/ReportBuilder.js +64 -99
  112. package/dist/esm/SQLEditor.d.ts +2 -2
  113. package/dist/esm/SQLEditor.d.ts.map +1 -1
  114. package/dist/esm/SQLEditor.js +11 -6
  115. package/dist/esm/Table.d.ts.map +1 -1
  116. package/dist/esm/Table.js +42 -44
  117. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  118. package/dist/esm/components/Chart/BarChart.js +13 -2
  119. package/dist/esm/components/Chart/LineChart.d.ts +2 -1
  120. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  121. package/dist/esm/components/Chart/LineChart.js +26 -2
  122. package/dist/esm/components/Dashboard/DataLoader.d.ts +7 -7
  123. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  124. package/dist/esm/components/Dashboard/DataLoader.js +65 -29
  125. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  126. package/dist/esm/components/Dashboard/MetricComponent.js +11 -45
  127. package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
  128. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  129. package/dist/esm/components/Dashboard/TableComponent.js +1 -30
  130. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  131. package/dist/esm/components/QuillMultiSelectWithCombo.js +16 -1
  132. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  133. package/dist/esm/components/QuillSelectWithCombo.js +5 -2
  134. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +10 -2
  135. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  136. package/dist/esm/components/ReportBuilder/FilterModal.js +94 -70
  137. package/dist/esm/components/ReportBuilder/convert.d.ts +7 -2
  138. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  139. package/dist/esm/components/ReportBuilder/convert.js +51 -0
  140. package/dist/esm/components/ReportBuilder/ui.d.ts +6 -6
  141. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  142. package/dist/esm/components/ReportBuilder/ui.js +6 -22
  143. package/dist/esm/components/UiComponents.d.ts +26 -1
  144. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  145. package/dist/esm/components/UiComponents.js +95 -3
  146. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  147. package/dist/esm/hooks/useQuill.js +19 -3
  148. package/dist/esm/index.d.ts +2 -1
  149. package/dist/esm/index.d.ts.map +1 -1
  150. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -0
  151. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  152. package/dist/esm/models/Columns.d.ts +2 -1
  153. package/dist/esm/models/Columns.d.ts.map +1 -1
  154. package/dist/esm/models/Filter.d.ts +15 -4
  155. package/dist/esm/models/Filter.d.ts.map +1 -1
  156. package/dist/esm/models/Filter.js +8 -0
  157. package/dist/esm/models/Report.d.ts +10 -23
  158. package/dist/esm/models/Report.d.ts.map +1 -1
  159. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  160. package/dist/esm/utils/astFilterProcessing.js +38 -3
  161. package/dist/esm/utils/columnProcessing.d.ts +2 -0
  162. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  163. package/dist/esm/utils/columnProcessing.js +52 -0
  164. package/dist/esm/utils/dashboard.d.ts +1 -1
  165. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  166. package/dist/esm/utils/dashboard.js +3 -56
  167. package/dist/esm/utils/dataProcessing.d.ts +4 -2
  168. package/dist/esm/utils/dataProcessing.d.ts.map +1 -1
  169. package/dist/esm/utils/dataProcessing.js +16 -0
  170. package/dist/esm/utils/dates.d.ts +2 -1
  171. package/dist/esm/utils/dates.d.ts.map +1 -1
  172. package/dist/esm/utils/dates.js +21 -0
  173. package/dist/esm/utils/filterProcessing.d.ts +7 -1
  174. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  175. package/dist/esm/utils/filterProcessing.js +97 -12
  176. package/dist/esm/utils/pivotConstructor.d.ts +2 -1
  177. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  178. package/dist/esm/utils/pivotConstructor.js +7 -1
  179. package/dist/esm/utils/report.d.ts +4 -1
  180. package/dist/esm/utils/report.d.ts.map +1 -1
  181. package/dist/esm/utils/report.js +92 -6
  182. package/dist/esm/utils/tableProcessing.d.ts +1 -1
  183. package/package.json +1 -1
  184. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts +0 -2
  185. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts.map +0 -1
  186. package/dist/esm/components/ReportBuilder/convert.uspec.js +0 -1152
  187. package/dist/esm/utils/astFilterProcessing.uspec.d.ts +0 -2
  188. package/dist/esm/utils/astFilterProcessing.uspec.d.ts.map +0 -1
  189. package/dist/esm/utils/astFilterProcessing.uspec.js +0 -2729
  190. package/dist/esm/utils/dataProcessing.uspec.d.ts +0 -2
  191. package/dist/esm/utils/dataProcessing.uspec.d.ts.map +0 -1
  192. package/dist/esm/utils/dataProcessing.uspec.js +0 -204
  193. package/dist/esm/utils/queryConstructor.uspec.d.ts +0 -2
  194. package/dist/esm/utils/queryConstructor.uspec.d.ts.map +0 -1
  195. package/dist/esm/utils/queryConstructor.uspec.js +0 -223
  196. package/dist/esm/utils/report.ispec.d.ts +0 -2
  197. package/dist/esm/utils/report.ispec.d.ts.map +0 -1
  198. package/dist/esm/utils/report.ispec.js +0 -46
  199. package/dist/esm/utils/tableProcessing.ispec.d.ts +0 -2
  200. package/dist/esm/utils/tableProcessing.ispec.d.ts.map +0 -1
  201. package/dist/esm/utils/tableProcessing.ispec.js +0 -61
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processColumnName = exports.convertFormatToJsType = exports.convertFieldTypeToJSType = exports.convertColumnInfoToColumnInternal = exports.convertPostgresColumn = void 0;
3
+ exports.getYAxisFields = exports.processColumnName = exports.convertFormatToJsType = exports.convertFieldTypeToJSType = exports.convertColumnInfoToColumnInternal = exports.convertPostgresColumn = void 0;
4
+ const filterProcessing_1 = require("./filterProcessing");
4
5
  function removeBigQuerySpecialChars(columnName) {
5
6
  return columnName.replaceAll('quill_forward_slash', '/');
6
7
  }
@@ -214,3 +215,55 @@ function processColumnName(columnName) {
214
215
  return removeBigQuerySpecialChars(columnName);
215
216
  }
216
217
  exports.processColumnName = processColumnName;
218
+ const getYAxisFields = (report) => {
219
+ try {
220
+ const curDateFilter = (0, filterProcessing_1.findAndProcessDateFilter)(Object.values(report.filtersApplied));
221
+ if (report.pivot && report.pivotColumns && report.pivot.columnField) {
222
+ return (report.pivotColumns
223
+ .slice(1)
224
+ .map((column) => {
225
+ // @ts-ignore
226
+ return { ...column, format: report.yAxisFields[0].format };
227
+ }) ?? []);
228
+ }
229
+ else if (report.pivot && report.pivotColumns) {
230
+ return (report.pivotColumns
231
+ .slice(1)
232
+ .map((column) => {
233
+ return {
234
+ ...column,
235
+ // @ts-ignore
236
+ label: report?.yAxisFields[0].label,
237
+ // @ts-ignore
238
+ format: report?.yAxisFields[0].format,
239
+ };
240
+ }) ?? []);
241
+ }
242
+ else {
243
+ if (curDateFilter?.comparison &&
244
+ curDateFilter.comparisonRange.value !== 'NO_COMPARISON') {
245
+ const comparisonYAxisFields = report.yAxisFields?.map((field) => {
246
+ return {
247
+ ...field,
248
+ field: `comparison_${field.field}`,
249
+ label: `comparison ${field.label ?? field.field}`,
250
+ };
251
+ });
252
+ if (report.pivotColumns) {
253
+ return report.pivotColumns;
254
+ }
255
+ else if (comparisonYAxisFields || report.yAxisFields) {
256
+ const yAxisFields = report.yAxisFields ?? [];
257
+ const compYAxisFields = comparisonYAxisFields ?? [];
258
+ return [...yAxisFields, ...compYAxisFields];
259
+ }
260
+ return [];
261
+ }
262
+ return report.pivotColumns ?? report.yAxisFields ?? [];
263
+ }
264
+ }
265
+ catch (e) {
266
+ return report.yAxisFields;
267
+ }
268
+ };
269
+ exports.getYAxisFields = getYAxisFields;
@@ -1,4 +1,4 @@
1
- import { QuillReportInternal } from '../Dashboard';
1
+ import { QuillReportInternal } from '../models/Report';
2
2
  /**
3
3
  * Returns a cleaned version of the dashboard item we store in state. We clean
4
4
  * the dashboard item so that we aren't exposing unnecessary details to the
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAgC5E;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,CAAC,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAgD9B;AA0KD,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,GAAG,CAAC,CA2Bd"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA+BpE;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,CAAC,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAyC9B;AAgHD,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,GAAG,CAAC,CA2Bd"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getDashboard = exports.cleanDashboardItem = void 0;
4
- const valueFormatter_1 = require("./valueFormatter");
5
4
  const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
6
5
  const textProcessing_1 = require("./textProcessing");
7
6
  const dataFetcher_1 = require("./dataFetcher");
@@ -17,15 +16,14 @@ const defaultDashboardItem = {
17
16
  chartType: '',
18
17
  dateField: null,
19
18
  pivot: null,
20
- primaryAggregation: '',
21
- comparisonAggregation: '',
22
- aggregationPercentChange: undefined,
23
19
  yAxisFields: [],
24
20
  xAxisLabel: '',
25
21
  xAxisField: '',
26
22
  xAxisFormat: 'string',
27
23
  order: -1,
28
24
  filtersApplied: {},
25
+ queryString: '',
26
+ rowCount: 0,
29
27
  };
30
28
  /**
31
29
  * Returns a cleaned version of the dashboard item we store in state. We clean
@@ -44,7 +42,6 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
44
42
  name: item.name,
45
43
  };
46
44
  const pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket);
47
- const { primaryAggregation, comparisonAggregation, aggregationPercentChange, } = getAggragations(pivotTable, item);
48
45
  return {
49
46
  id: item._id,
50
47
  name: item.name,
@@ -59,9 +56,6 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
59
56
  chartType: item.chartType,
60
57
  dateField: item.dateField,
61
58
  pivot: item.pivot,
62
- primaryAggregation,
63
- comparisonAggregation,
64
- aggregationPercentChange,
65
59
  yAxisFields: pivotTable
66
60
  ? extractPivotedYAxis(pivotTable, item)
67
61
  : item.yAxisFields,
@@ -73,43 +67,10 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
73
67
  rowCount: parseInt(item.rowCount),
74
68
  sort: item.sort,
75
69
  itemQuery: item.itemQuery,
70
+ queryString: item.queryString,
76
71
  };
77
72
  }
78
73
  exports.cleanDashboardItem = cleanDashboardItem;
79
- /**
80
- * Extracts the aggregations from the item, if any.
81
- */
82
- function getAggragations(pivotTable, item) {
83
- const yAxisFields = extractPivotedYAxis(pivotTable, item);
84
- const rows = extractPivotedData(pivotTable, item);
85
- // extract the aggragation for the primary range.
86
- const mainKey = yAxisFields[0]?.field ?? item.pivot?.valueField;
87
- const primary = mainKey
88
- ? rows.reduce((sum, row) => sum + parseFloat(row[mainKey]), 0)
89
- : 0;
90
- // extract the aggragation for the comparison range, if applicable.
91
- const compKey = yAxisFields[1]?.field ?? item.pivot?.valueField;
92
- const comparison = compKey
93
- ? rows.reduce((sum, row) => sum + parseFloat(row[compKey]), 0)
94
- : 0;
95
- return {
96
- primaryAggregation: formatAggragation(item, primary),
97
- comparisonAggregation: formatAggragation(item, comparison),
98
- aggregationPercentChange: Number(primary - comparison),
99
- };
100
- }
101
- /**
102
- * Applies a valueFormatter to the given value based on the format in the item.
103
- */
104
- function formatAggragation(item, value) {
105
- if (!value)
106
- return undefined;
107
- return (0, valueFormatter_1.valueFormatter)({
108
- value,
109
- field: item.pivot?.valueField,
110
- fields: item.yAxisFields,
111
- });
112
- }
113
74
  /**
114
75
  * Extract and transform the data from itemInfo.
115
76
  */
@@ -165,20 +126,6 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
165
126
  : undefined)
166
127
  : undefined;
167
128
  }
168
- /**
169
- * Returns the data list based on whether the table is pivoted and if there is
170
- * a config value passed into this component.
171
- */
172
- function extractPivotedData(pivotTable, item, config = undefined) {
173
- if (pivotTable)
174
- return pivotTable.rows;
175
- if (config) {
176
- if (config.bucketedRows.length > 0)
177
- return config.bucketedRows;
178
- return config.rows;
179
- }
180
- return item.rows;
181
- }
182
129
  /**
183
130
  * Extracts the yAxis from the pivot table, if one exists.
184
131
  */
@@ -1,8 +1,10 @@
1
- import { QuillReportInternal } from '../Dashboard';
1
+ import { QuillReportInternal } from '../models/Report';
2
2
  export declare enum Calculation {
3
3
  PointToPointPercentageChange = "POINT_TO_POINT_PERCENTAGE_CHANGE",
4
- SimplePercentageChange = "SIMPLE_PERCENTAGE_CHANGE"
4
+ SimplePercentageChange = "SIMPLE_PERCENTAGE_CHANGE",
5
+ Sum = "SUM"
5
6
  }
6
7
  export declare const getSimplePercentageChange: (data: QuillReportInternal) => number | undefined;
7
8
  export declare const getPointToPointPercentageChange: (data: QuillReportInternal) => number | undefined;
9
+ export declare const getSumOfFields: (data: QuillReportInternal) => number;
8
10
  //# sourceMappingURL=dataProcessing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/dataProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAInD,oBAAY,WAAW;IACrB,4BAA4B,qCAAqC;IACjE,sBAAsB,6BAA6B;CACpD;AAyBD,eAAO,MAAM,yBAAyB,SAAU,mBAAmB,uBAsClE,CAAC;AAEF,eAAO,MAAM,+BAA+B,SAAU,mBAAmB,uBAkFxE,CAAC"}
1
+ {"version":3,"file":"dataProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/dataProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,oBAAY,WAAW;IACrB,4BAA4B,qCAAqC;IACjE,sBAAsB,6BAA6B;IACnD,GAAG,QAAQ;CACZ;AAyBD,eAAO,MAAM,yBAAyB,SAAU,mBAAmB,uBAsClE,CAAC;AAEF,eAAO,MAAM,+BAA+B,SAAU,mBAAmB,uBAkFxE,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,mBAAmB,WAavD,CAAC"}
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPointToPointPercentageChange = exports.getSimplePercentageChange = exports.Calculation = void 0;
3
+ exports.getSumOfFields = exports.getPointToPointPercentageChange = exports.getSimplePercentageChange = exports.Calculation = void 0;
4
4
  const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
5
5
  const dates_1 = require("./dates");
6
6
  var Calculation;
7
7
  (function (Calculation) {
8
8
  Calculation["PointToPointPercentageChange"] = "POINT_TO_POINT_PERCENTAGE_CHANGE";
9
9
  Calculation["SimplePercentageChange"] = "SIMPLE_PERCENTAGE_CHANGE";
10
+ Calculation["Sum"] = "SUM";
10
11
  })(Calculation || (exports.Calculation = Calculation = {}));
11
12
  const getSumOfField = (rows, field) => {
12
13
  if (rows[0] && rows[0][field]) {
@@ -125,3 +126,19 @@ const getPointToPointPercentageChange = (data) => {
125
126
  }
126
127
  };
127
128
  exports.getPointToPointPercentageChange = getPointToPointPercentageChange;
129
+ const getSumOfFields = (data) => {
130
+ if (data.pivot && data.pivotRows && data.pivotColumns) {
131
+ const pivotRows = data.pivotRows;
132
+ const fields = data.pivotColumns.map((field) => {
133
+ return field.field;
134
+ });
135
+ return getSumOfFieldsAndRows(pivotRows, fields);
136
+ }
137
+ else {
138
+ const yAxisFields = data.yAxisFields.map((field) => {
139
+ return field.field;
140
+ });
141
+ return getSumOfFieldsAndRows(data.rows, yAxisFields);
142
+ }
143
+ };
144
+ exports.getSumOfFields = getSumOfFields;
@@ -14,6 +14,7 @@ export declare function getComparisonInterval(comparisonRange: {
14
14
  export declare function getDateBucketFromRange(dateRange: {
15
15
  start: Date;
16
16
  end: Date;
17
- }): "month" | "week" | "year" | "day";
17
+ }): "year" | "month" | "week" | "day";
18
18
  export declare function parseDateByDatabaseType(date: any, databaseType: string): Date;
19
+ export declare function getDateFormatFromBucket(dateBucket: string): string;
19
20
  //# sourceMappingURL=dates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,UAYxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,WAa/C;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf,EACD,UAAU,CAAC,EAAE,MAAM,sBAepB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,qCAW3E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,QAMtE"}
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,UAYxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,WAa/C;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf,EACD,UAAU,CAAC,EAAE,MAAM,sBAepB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,qCAW3E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,QAMtE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,UAoBzD"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseDateByDatabaseType = exports.getDateBucketFromRange = exports.getComparisonInterval = exports.isDateFormat = exports.convertComparisonRange = void 0;
3
+ exports.getDateFormatFromBucket = exports.parseDateByDatabaseType = exports.getDateBucketFromRange = exports.getComparisonInterval = exports.isDateFormat = exports.convertComparisonRange = void 0;
4
4
  const date_fns_1 = require("date-fns");
5
5
  const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
6
6
  /**
@@ -80,3 +80,25 @@ function parseDateByDatabaseType(date, databaseType) {
80
80
  }
81
81
  }
82
82
  exports.parseDateByDatabaseType = parseDateByDatabaseType;
83
+ function getDateFormatFromBucket(dateBucket) {
84
+ let format = 'MMM_yyyy';
85
+ switch (dateBucket) {
86
+ case 'day':
87
+ format = 'MMM_dd';
88
+ break;
89
+ case 'week':
90
+ format = 'MMM_dd-MMM_dd';
91
+ break;
92
+ case 'month':
93
+ format = 'MMM_yyyy';
94
+ break;
95
+ case 'year':
96
+ format = 'yyyy';
97
+ break;
98
+ default:
99
+ format = 'MMM_yyyy';
100
+ break;
101
+ }
102
+ return format;
103
+ }
104
+ exports.getDateFormatFromBucket = getDateFormatFromBucket;
@@ -1,4 +1,10 @@
1
+ import { Filter } from '../models/Filter';
1
2
  export declare function findAndProcessDateFilter(filters: any[]): any;
2
- export declare function processFilterFromBackend(filter: any, rows: any[]): any;
3
+ export declare function processFilterFromBackend(filter: any): any;
3
4
  export declare function updateFilter(filter: any, value?: any, comparison?: any): any;
5
+ export declare const getType: (t: string) => "string" | "boolean" | "numeric" | "date";
6
+ /**
7
+ * Returns a sentence to describe a Filter
8
+ */
9
+ export declare function filterSentence(filter: Filter): string;
4
10
  //# sourceMappingURL=filterProcessing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OA4BhE;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,GAAE,GAAU,EACjB,UAAU,GAAE,GAAU,OAuGvB"}
1
+ {"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,MAAM,EAAe,MAAM,kBAAkB,CAAC;AAGrE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,GAAE,GAAU,EACjB,UAAU,GAAE,GAAU,OAuGvB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,8CAwDhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAwBrD"}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateFilter = exports.processFilterFromBackend = exports.findAndProcessDateFilter = void 0;
3
+ exports.filterSentence = exports.getType = exports.updateFilter = exports.processFilterFromBackend = exports.findAndProcessDateFilter = void 0;
4
4
  const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
5
+ const Filter_1 = require("../models/Filter");
6
+ const textProcessing_1 = require("./textProcessing");
5
7
  function findAndProcessDateFilter(filters) {
6
8
  let dateFilter = filters.find((filter) => filter.filterType === 'date_range');
7
9
  if (dateFilter) {
@@ -24,7 +26,7 @@ exports.findAndProcessDateFilter = findAndProcessDateFilter;
24
26
  function isValidDate(date) {
25
27
  return !isNaN(Date.parse(date));
26
28
  }
27
- function processFilterFromBackend(filter, rows) {
29
+ function processFilterFromBackend(filter) {
28
30
  if (filter.filterType === 'date_range') {
29
31
  return {
30
32
  ...filter,
@@ -33,20 +35,12 @@ function processFilterFromBackend(filter, rows) {
33
35
  options: dateRangePickerUtils_1.defaultOptionsV2,
34
36
  comparisonRange: {
35
37
  ...filter.comparisonRange,
36
- value: filter.defaultComparisonRange,
38
+ value: 'PREV_PERIOD',
37
39
  },
38
40
  };
39
41
  }
40
42
  if (filter.filterType === 'string') {
41
- const options = rows.map((row) => row[filter.field]);
42
- const distinctOptions = Array.from(new Set(options)).filter((value) => value !== undefined && value !== null);
43
- return {
44
- ...filter,
45
- options: distinctOptions.map((option) => ({
46
- label: option,
47
- value: option,
48
- })),
49
- };
43
+ return filter;
50
44
  }
51
45
  return filter;
52
46
  }
@@ -56,7 +50,7 @@ function updateFilter(filter, value = null, comparison = null) {
56
50
  const { ...filterWithoutSelectedValue } = filter;
57
51
  if (filter.filterType === 'string') {
58
52
  let selectedValue = {};
59
- if (value) {
53
+ if (value || value === '') {
60
54
  if (filter.stringFilterType === 'multiselect') {
61
55
  const parsedValue = value;
62
56
  if (parsedValue.length === 0) {
@@ -151,3 +145,96 @@ function updateFilter(filter, value = null, comparison = null) {
151
145
  }
152
146
  }
153
147
  exports.updateFilter = updateFilter;
148
+ // Function to translate field type to "string", "numeric", or "date"
149
+ const getType = (t) => {
150
+ // strip any size numbers at the end
151
+ // TODO: 'max' data types, e.g. varchar(max)
152
+ t = t.replace(/\d+$/, '');
153
+ switch (t) {
154
+ case 'string':
155
+ case 'char':
156
+ case 'varchar':
157
+ case 'nchar':
158
+ case 'nvarchar':
159
+ case 'ntext':
160
+ case 'binary':
161
+ case 'varbinary':
162
+ case 'tinyblob':
163
+ case 'tinytext':
164
+ case 'blob':
165
+ case 'mediumtext':
166
+ case 'mediumblob':
167
+ case 'longtext':
168
+ case 'longblob':
169
+ case 'text':
170
+ return 'string';
171
+ case 'numeric':
172
+ case 'bit':
173
+ case 'tinybit':
174
+ case 'smallint':
175
+ case 'mediumint':
176
+ case 'int':
177
+ case 'tinyint':
178
+ case 'integer':
179
+ case 'bigint':
180
+ case 'float':
181
+ case 'double':
182
+ case 'double precision':
183
+ case 'decimal':
184
+ case 'dec':
185
+ case 'smallmoney':
186
+ case 'money':
187
+ case 'real':
188
+ return 'numeric';
189
+ case 'date':
190
+ case 'datetime':
191
+ case 'datetime2':
192
+ case 'smalldatetime':
193
+ case 'datetimeoffset':
194
+ case 'timestamp':
195
+ case 'timestamptz':
196
+ case 'time':
197
+ case 'year':
198
+ return 'date';
199
+ case 'bool':
200
+ case 'boolean':
201
+ return 'boolean';
202
+ default:
203
+ return 'string';
204
+ }
205
+ };
206
+ exports.getType = getType;
207
+ /**
208
+ * Returns a sentence to describe a Filter
209
+ */
210
+ function filterSentence(filter) {
211
+ let value = '';
212
+ if (filter.name == Filter_1.FilterNames.NullFilter) {
213
+ return `${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(filter.field)} ${filter.operator}`;
214
+ }
215
+ else if (filter.value === null || filter.value === undefined) {
216
+ return 'Error: filter missing value';
217
+ }
218
+ if (typeof filter.value === 'string' || typeof filter.value === 'number') {
219
+ value = filter.value.toString();
220
+ }
221
+ else if (filter.value === false || filter.value === true) {
222
+ value = filter.value.toString();
223
+ }
224
+ else if ('unit' in filter.value) {
225
+ if (filter.operator === Filter_1.DateOperator.InTheCurrent) {
226
+ value = `${filter.value.unit}`;
227
+ }
228
+ else {
229
+ value = `${filter.value.value} ${filter.value.unit}${filter.value.value === 1 ? '' : 's'}`;
230
+ }
231
+ }
232
+ else if ('startDate' in filter.value) {
233
+ value = `from ${filter.value.startDate}`;
234
+ }
235
+ else if (filter.value.length > 0) {
236
+ value = filter.value.join(', ');
237
+ }
238
+ return `${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(filter.field)} ${filter.operator}${filter.operator === 'is' || filter.operator === 'is not' ? ' one of' : ''} ${value}`;
239
+ }
240
+ exports.filterSentence = filterSentence;
@@ -1,5 +1,6 @@
1
1
  import { Pivot } from '../internals/ReportBuilder/PivotModal';
2
- export declare function generatePivotWithSQL(pivot: Pivot, report: any, client: any, dateBucket?: string, dateFilter?: any, distinctStrings?: any): Promise<{
2
+ import { QuillReportInternal } from '../models/Report';
3
+ export declare function generatePivotWithSQL(pivot: Pivot, report: QuillReportInternal, client: any, dateBucket?: string, dateFilter?: any, distinctStrings?: any): Promise<{
3
4
  rows: any;
4
5
  columns: any;
5
6
  } | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAiB,MAAM,uCAAuC,CAAC;AAO7E,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,GAAG;;;eAkLtB"}
1
+ {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAiB,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAOvD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,GAAG,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,GAAG;;;eAyLtB"}
@@ -27,13 +27,16 @@ async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilte
27
27
  }
28
28
  if (pivot.rowField && !pivot.rowFieldType) {
29
29
  const rowColumn = report.columns.find((column) => column.field === pivot.rowField);
30
- pivot.rowFieldType = rowColumn.format;
30
+ pivot.rowFieldType = rowColumn?.format || 'string';
31
31
  }
32
32
  let distinctStringValues = undefined;
33
33
  if (!distinctStrings && report.rows && pivot.columnField) {
34
34
  const distinctValues = Array.from(new Set(report.rows.map((row) => row[pivot.columnField])));
35
35
  distinctStringValues = distinctValues.map((value) => value.toString());
36
36
  }
37
+ if (!report.itemQuery) {
38
+ return undefined;
39
+ }
37
40
  const sqlQuery = (0, queryConstructor_1.generatePivotQuery)(pivot, report.itemQuery, client.databaseType, comparisonInterval, distinctStrings ? distinctStrings : distinctStringValues, dateBucket);
38
41
  if (sqlQuery && report.rows.length > 0) {
39
42
  const hostedBody = {
@@ -70,6 +73,9 @@ async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilte
70
73
  .map((field) => ({
71
74
  field: (0, columnProcessing_1.processColumnName)(field.name),
72
75
  label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(field.name.replace('comparison_', 'comparison '))),
76
+ format: field.name === pivot.rowField
77
+ ? 'string'
78
+ : pivot.valueFieldType ?? 'whole_number',
73
79
  }))
74
80
  .filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0)
75
81
  .sort((a, b) => {
@@ -1,7 +1,10 @@
1
+ import { QuillReport, QuillReportInternal } from '../models/Report';
1
2
  import { AdditionalProcessing } from './tableProcessing';
3
+ export declare const EMPTY_REPORT: QuillReport;
2
4
  export declare function fetchReport(reportId: string, client: any, useReportTask?: boolean, filters?: any[], additionalProcessing?: AdditionalProcessing, dateBucket?: string, customFields?: any): Promise<{
3
- report: any;
5
+ report: QuillReportInternal;
4
6
  error?: string;
5
7
  }>;
6
8
  export declare const formatRowsFromReport: (report: any) => any;
9
+ export declare function convertInternalReportToReport(report: QuillReportInternal): QuillReport;
7
10
  //# sourceMappingURL=report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,EACX,aAAa,UAAO,EACpB,OAAO,GAAE,GAAG,EAAO,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,GAAG,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsF1C;AAED,eAAO,MAAM,oBAAoB,WAAY,GAAG,QAe/C,CAAC"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AASpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,eAAO,MAAM,YAAY,EAAE,WAkB1B,CAAC;AAEF,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,EACX,aAAa,UAAO,EACpB,OAAO,GAAE,GAAG,EAAO,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,GAAG,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2F1D;AAED,eAAO,MAAM,oBAAoB,WAAY,GAAG,QAkB/C,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,mBAAmB,GAC1B,WAAW,CAsDb"}
@@ -1,13 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatRowsFromReport = exports.fetchReport = void 0;
3
+ exports.convertInternalReportToReport = exports.formatRowsFromReport = exports.fetchReport = exports.EMPTY_REPORT = void 0;
4
+ const columnProcessing_1 = require("./columnProcessing");
4
5
  const dashboard_1 = require("./dashboard");
5
6
  const dataFetcher_1 = require("./dataFetcher");
6
7
  const error_1 = require("./error");
7
8
  const errorProcessing_1 = require("./errorProcessing");
8
9
  const logging_1 = require("./logging");
9
10
  const merge_1 = require("./merge");
11
+ const pivotProcessing_1 = require("./pivotProcessing");
10
12
  const valueFormatter_1 = require("./valueFormatter");
13
+ exports.EMPTY_REPORT = {
14
+ id: '',
15
+ name: '',
16
+ dashboardName: '',
17
+ rows: [],
18
+ columns: [],
19
+ chartType: '',
20
+ dateField: null,
21
+ pivot: null,
22
+ xAxisLabel: '',
23
+ xAxisField: '',
24
+ xAxisFormat: 'string',
25
+ yAxisFields: [],
26
+ order: -1,
27
+ compareRows: [],
28
+ filtersApplied: [],
29
+ queryString: '',
30
+ rowCount: 0,
31
+ };
11
32
  async function fetchReport(reportId, client, useReportTask = true, filters = [], additionalProcessing, dateBucket, customFields) {
12
33
  let reportInfo = undefined;
13
34
  let errorMessage = undefined;
@@ -56,12 +77,18 @@ async function fetchReport(reportId, client, useReportTask = true, filters = [],
56
77
  errorMessage = error;
57
78
  }
58
79
  else {
59
- reportInfo = {
60
- ...error.data.data,
61
- id: error.data.data._id,
62
- error: error.message,
63
- adminError: error.data.adminErrorMessage,
64
- };
80
+ if (!error.data.data) {
81
+ errorMessage = "Couln't find report";
82
+ reportInfo = exports.EMPTY_REPORT;
83
+ }
84
+ else {
85
+ reportInfo = {
86
+ ...error.data.data,
87
+ id: error.data.data._id,
88
+ error: error.message,
89
+ adminError: error.data.adminErrorMessage,
90
+ };
91
+ }
65
92
  errorMessage = error.message;
66
93
  }
67
94
  }
@@ -78,6 +105,9 @@ async function fetchReport(reportId, client, useReportTask = true, filters = [],
78
105
  }
79
106
  exports.fetchReport = fetchReport;
80
107
  const formatRowsFromReport = (report) => {
108
+ if (!report.rows || !report.columns) {
109
+ return [];
110
+ }
81
111
  return report.rows.map((row) => {
82
112
  return report.columns.reduce((formattedRow, column) => {
83
113
  // Apply the format function to each field in the row
@@ -91,3 +121,60 @@ const formatRowsFromReport = (report) => {
91
121
  });
92
122
  };
93
123
  exports.formatRowsFromReport = formatRowsFromReport;
124
+ function convertInternalReportToReport(report) {
125
+ try {
126
+ if (!report) {
127
+ return exports.EMPTY_REPORT;
128
+ }
129
+ const formattedReport = {
130
+ ...report,
131
+ };
132
+ if (formattedReport.pivot && (0, pivotProcessing_1.isValidPivot)(formattedReport.pivot)) {
133
+ let columns = report.pivotColumns ?? report.columns;
134
+ let rows = report.pivotRows ?? report.rows;
135
+ if (report.chartType === 'table') {
136
+ columns =
137
+ report.pivotColumns?.map((col, index) => {
138
+ if (index === 0) {
139
+ return {
140
+ ...col,
141
+ format: col.format || 'string',
142
+ };
143
+ }
144
+ return {
145
+ ...col,
146
+ format: report.pivot?.valueFieldType || 'whole_number',
147
+ };
148
+ }) ?? report.columns;
149
+ rows = (0, exports.formatRowsFromReport)({ rows, columns });
150
+ }
151
+ else if (report.chartType === 'metric') {
152
+ columns =
153
+ report.pivotColumns?.map((col) => {
154
+ return { ...col, format: report.xAxisFormat };
155
+ }) ?? report.columns;
156
+ rows = (0, exports.formatRowsFromReport)({ rows, columns });
157
+ }
158
+ return {
159
+ ...formattedReport,
160
+ rows: rows,
161
+ yAxisFields: (0, columnProcessing_1.getYAxisFields)(report),
162
+ columns: columns,
163
+ rowCount: rows ? rows.length : 0,
164
+ };
165
+ }
166
+ let rows = report.rows;
167
+ if (report.chartType === 'metric' || report.chartType === 'table') {
168
+ rows = (0, exports.formatRowsFromReport)(report);
169
+ }
170
+ return {
171
+ ...formattedReport,
172
+ rows: rows,
173
+ yAxisFields: (0, columnProcessing_1.getYAxisFields)(report),
174
+ };
175
+ }
176
+ catch (error) {
177
+ return exports.EMPTY_REPORT;
178
+ }
179
+ }
180
+ exports.convertInternalReportToReport = convertInternalReportToReport;
@@ -34,7 +34,7 @@ export declare const fetchTableByQuery: (query: string, client: any, processing?
34
34
  rows: any[];
35
35
  rowCount?: number | undefined;
36
36
  error?: string | undefined;
37
- itemQuery?: string | undefined;
37
+ itemQuery?: string[] | undefined;
38
38
  }>;
39
39
  export declare const fetchTableByReport: (reportId: string, client: any, processing?: AdditionalProcessing, filters?: any, customFields?: any) => Promise<{
40
40
  columns: Column[];