@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,3 +1,4 @@
1
+ import { findAndProcessDateFilter } from './filterProcessing';
1
2
  function removeBigQuerySpecialChars(columnName) {
2
3
  return columnName.replaceAll('quill_forward_slash', '/');
3
4
  }
@@ -206,3 +207,54 @@ export function convertFormatToJsType(column) {
206
207
  export function processColumnName(columnName) {
207
208
  return removeBigQuerySpecialChars(columnName);
208
209
  }
210
+ export const getYAxisFields = (report) => {
211
+ try {
212
+ const curDateFilter = findAndProcessDateFilter(Object.values(report.filtersApplied));
213
+ if (report.pivot && report.pivotColumns && report.pivot.columnField) {
214
+ return (report.pivotColumns
215
+ .slice(1)
216
+ .map((column) => {
217
+ // @ts-ignore
218
+ return { ...column, format: report.yAxisFields[0].format };
219
+ }) ?? []);
220
+ }
221
+ else if (report.pivot && report.pivotColumns) {
222
+ return (report.pivotColumns
223
+ .slice(1)
224
+ .map((column) => {
225
+ return {
226
+ ...column,
227
+ // @ts-ignore
228
+ label: report?.yAxisFields[0].label,
229
+ // @ts-ignore
230
+ format: report?.yAxisFields[0].format,
231
+ };
232
+ }) ?? []);
233
+ }
234
+ else {
235
+ if (curDateFilter?.comparison &&
236
+ curDateFilter.comparisonRange.value !== 'NO_COMPARISON') {
237
+ const comparisonYAxisFields = report.yAxisFields?.map((field) => {
238
+ return {
239
+ ...field,
240
+ field: `comparison_${field.field}`,
241
+ label: `comparison ${field.label ?? field.field}`,
242
+ };
243
+ });
244
+ if (report.pivotColumns) {
245
+ return report.pivotColumns;
246
+ }
247
+ else if (comparisonYAxisFields || report.yAxisFields) {
248
+ const yAxisFields = report.yAxisFields ?? [];
249
+ const compYAxisFields = comparisonYAxisFields ?? [];
250
+ return [...yAxisFields, ...compYAxisFields];
251
+ }
252
+ return [];
253
+ }
254
+ return report.pivotColumns ?? report.yAxisFields ?? [];
255
+ }
256
+ }
257
+ catch (e) {
258
+ return report.yAxisFields;
259
+ }
260
+ };
@@ -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,4 +1,3 @@
1
- import { valueFormatter } from './valueFormatter';
2
1
  import { generatePivotTable, generatePivotTableYAxis, } from '../internals/ReportBuilder/PivotModal';
3
2
  import { snakeAndCamelCaseToTitleCase } from './textProcessing';
4
3
  import { getData } from './dataFetcher';
@@ -14,15 +13,14 @@ const defaultDashboardItem = {
14
13
  chartType: '',
15
14
  dateField: null,
16
15
  pivot: null,
17
- primaryAggregation: '',
18
- comparisonAggregation: '',
19
- aggregationPercentChange: undefined,
20
16
  yAxisFields: [],
21
17
  xAxisLabel: '',
22
18
  xAxisField: '',
23
19
  xAxisFormat: 'string',
24
20
  order: -1,
25
21
  filtersApplied: {},
22
+ queryString: '',
23
+ rowCount: 0,
26
24
  };
27
25
  /**
28
26
  * Returns a cleaned version of the dashboard item we store in state. We clean
@@ -41,7 +39,6 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
41
39
  name: item.name,
42
40
  };
43
41
  const pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket);
44
- const { primaryAggregation, comparisonAggregation, aggregationPercentChange, } = getAggragations(pivotTable, item);
45
42
  return {
46
43
  id: item._id,
47
44
  name: item.name,
@@ -56,9 +53,6 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
56
53
  chartType: item.chartType,
57
54
  dateField: item.dateField,
58
55
  pivot: item.pivot,
59
- primaryAggregation,
60
- comparisonAggregation,
61
- aggregationPercentChange,
62
56
  yAxisFields: pivotTable
63
57
  ? extractPivotedYAxis(pivotTable, item)
64
58
  : item.yAxisFields,
@@ -70,42 +64,9 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
70
64
  rowCount: parseInt(item.rowCount),
71
65
  sort: item.sort,
72
66
  itemQuery: item.itemQuery,
67
+ queryString: item.queryString,
73
68
  };
74
69
  }
75
- /**
76
- * Extracts the aggregations from the item, if any.
77
- */
78
- function getAggragations(pivotTable, item) {
79
- const yAxisFields = extractPivotedYAxis(pivotTable, item);
80
- const rows = extractPivotedData(pivotTable, item);
81
- // extract the aggragation for the primary range.
82
- const mainKey = yAxisFields[0]?.field ?? item.pivot?.valueField;
83
- const primary = mainKey
84
- ? rows.reduce((sum, row) => sum + parseFloat(row[mainKey]), 0)
85
- : 0;
86
- // extract the aggragation for the comparison range, if applicable.
87
- const compKey = yAxisFields[1]?.field ?? item.pivot?.valueField;
88
- const comparison = compKey
89
- ? rows.reduce((sum, row) => sum + parseFloat(row[compKey]), 0)
90
- : 0;
91
- return {
92
- primaryAggregation: formatAggragation(item, primary),
93
- comparisonAggregation: formatAggragation(item, comparison),
94
- aggregationPercentChange: Number(primary - comparison),
95
- };
96
- }
97
- /**
98
- * Applies a valueFormatter to the given value based on the format in the item.
99
- */
100
- function formatAggragation(item, value) {
101
- if (!value)
102
- return undefined;
103
- return valueFormatter({
104
- value,
105
- field: item.pivot?.valueField,
106
- fields: item.yAxisFields,
107
- });
108
- }
109
70
  /**
110
71
  * Extract and transform the data from itemInfo.
111
72
  */
@@ -161,20 +122,6 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
161
122
  : undefined)
162
123
  : undefined;
163
124
  }
164
- /**
165
- * Returns the data list based on whether the table is pivoted and if there is
166
- * a config value passed into this component.
167
- */
168
- function extractPivotedData(pivotTable, item, config = undefined) {
169
- if (pivotTable)
170
- return pivotTable.rows;
171
- if (config) {
172
- if (config.bucketedRows.length > 0)
173
- return config.bucketedRows;
174
- return config.rows;
175
- }
176
- return item.rows;
177
- }
178
125
  /**
179
126
  * Extracts the yAxis from the pivot table, if one exists.
180
127
  */
@@ -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"}
@@ -4,6 +4,7 @@ export var Calculation;
4
4
  (function (Calculation) {
5
5
  Calculation["PointToPointPercentageChange"] = "POINT_TO_POINT_PERCENTAGE_CHANGE";
6
6
  Calculation["SimplePercentageChange"] = "SIMPLE_PERCENTAGE_CHANGE";
7
+ Calculation["Sum"] = "SUM";
7
8
  })(Calculation || (Calculation = {}));
8
9
  const getSumOfField = (rows, field) => {
9
10
  if (rows[0] && rows[0][field]) {
@@ -120,3 +121,18 @@ export const getPointToPointPercentageChange = (data) => {
120
121
  }
121
122
  }
122
123
  };
124
+ export const getSumOfFields = (data) => {
125
+ if (data.pivot && data.pivotRows && data.pivotColumns) {
126
+ const pivotRows = data.pivotRows;
127
+ const fields = data.pivotColumns.map((field) => {
128
+ return field.field;
129
+ });
130
+ return getSumOfFieldsAndRows(pivotRows, fields);
131
+ }
132
+ else {
133
+ const yAxisFields = data.yAxisFields.map((field) => {
134
+ return field.field;
135
+ });
136
+ return getSumOfFieldsAndRows(data.rows, yAxisFields);
137
+ }
138
+ };
@@ -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"}
@@ -72,3 +72,24 @@ export function parseDateByDatabaseType(date, databaseType) {
72
72
  return new Date(date);
73
73
  }
74
74
  }
75
+ export function getDateFormatFromBucket(dateBucket) {
76
+ let format = 'MMM_yyyy';
77
+ switch (dateBucket) {
78
+ case 'day':
79
+ format = 'MMM_dd';
80
+ break;
81
+ case 'week':
82
+ format = 'MMM_dd-MMM_dd';
83
+ break;
84
+ case 'month':
85
+ format = 'MMM_yyyy';
86
+ break;
87
+ case 'year':
88
+ format = 'yyyy';
89
+ break;
90
+ default:
91
+ format = 'MMM_yyyy';
92
+ break;
93
+ }
94
+ return format;
95
+ }
@@ -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,4 +1,6 @@
1
1
  import { COMPARISON_RANGE, PRIMARY_RANGE, defaultOptionsV2, getRangeFromPresetOptions, } from '../DateRangePicker/dateRangePickerUtils';
2
+ import { DateOperator, FilterNames } from '../models/Filter';
3
+ import { snakeAndCamelCaseToTitleCase } from './textProcessing';
2
4
  export function findAndProcessDateFilter(filters) {
3
5
  let dateFilter = filters.find((filter) => filter.filterType === 'date_range');
4
6
  if (dateFilter) {
@@ -20,7 +22,7 @@ export function findAndProcessDateFilter(filters) {
20
22
  function isValidDate(date) {
21
23
  return !isNaN(Date.parse(date));
22
24
  }
23
- export function processFilterFromBackend(filter, rows) {
25
+ export function processFilterFromBackend(filter) {
24
26
  if (filter.filterType === 'date_range') {
25
27
  return {
26
28
  ...filter,
@@ -29,20 +31,12 @@ export function processFilterFromBackend(filter, rows) {
29
31
  options: defaultOptionsV2,
30
32
  comparisonRange: {
31
33
  ...filter.comparisonRange,
32
- value: filter.defaultComparisonRange,
34
+ value: 'PREV_PERIOD',
33
35
  },
34
36
  };
35
37
  }
36
38
  if (filter.filterType === 'string') {
37
- const options = rows.map((row) => row[filter.field]);
38
- const distinctOptions = Array.from(new Set(options)).filter((value) => value !== undefined && value !== null);
39
- return {
40
- ...filter,
41
- options: distinctOptions.map((option) => ({
42
- label: option,
43
- value: option,
44
- })),
45
- };
39
+ return filter;
46
40
  }
47
41
  return filter;
48
42
  }
@@ -51,7 +45,7 @@ export function updateFilter(filter, value = null, comparison = null) {
51
45
  const { ...filterWithoutSelectedValue } = filter;
52
46
  if (filter.filterType === 'string') {
53
47
  let selectedValue = {};
54
- if (value) {
48
+ if (value || value === '') {
55
49
  if (filter.stringFilterType === 'multiselect') {
56
50
  const parsedValue = value;
57
51
  if (parsedValue.length === 0) {
@@ -145,3 +139,94 @@ export function updateFilter(filter, value = null, comparison = null) {
145
139
  }
146
140
  }
147
141
  }
142
+ // Function to translate field type to "string", "numeric", or "date"
143
+ export const getType = (t) => {
144
+ // strip any size numbers at the end
145
+ // TODO: 'max' data types, e.g. varchar(max)
146
+ t = t.replace(/\d+$/, '');
147
+ switch (t) {
148
+ case 'string':
149
+ case 'char':
150
+ case 'varchar':
151
+ case 'nchar':
152
+ case 'nvarchar':
153
+ case 'ntext':
154
+ case 'binary':
155
+ case 'varbinary':
156
+ case 'tinyblob':
157
+ case 'tinytext':
158
+ case 'blob':
159
+ case 'mediumtext':
160
+ case 'mediumblob':
161
+ case 'longtext':
162
+ case 'longblob':
163
+ case 'text':
164
+ return 'string';
165
+ case 'numeric':
166
+ case 'bit':
167
+ case 'tinybit':
168
+ case 'smallint':
169
+ case 'mediumint':
170
+ case 'int':
171
+ case 'tinyint':
172
+ case 'integer':
173
+ case 'bigint':
174
+ case 'float':
175
+ case 'double':
176
+ case 'double precision':
177
+ case 'decimal':
178
+ case 'dec':
179
+ case 'smallmoney':
180
+ case 'money':
181
+ case 'real':
182
+ return 'numeric';
183
+ case 'date':
184
+ case 'datetime':
185
+ case 'datetime2':
186
+ case 'smalldatetime':
187
+ case 'datetimeoffset':
188
+ case 'timestamp':
189
+ case 'timestamptz':
190
+ case 'time':
191
+ case 'year':
192
+ return 'date';
193
+ case 'bool':
194
+ case 'boolean':
195
+ return 'boolean';
196
+ default:
197
+ return 'string';
198
+ }
199
+ };
200
+ /**
201
+ * Returns a sentence to describe a Filter
202
+ */
203
+ export function filterSentence(filter) {
204
+ let value = '';
205
+ if (filter.name == FilterNames.NullFilter) {
206
+ return `${snakeAndCamelCaseToTitleCase(filter.field)} ${filter.operator}`;
207
+ }
208
+ else if (filter.value === null || filter.value === undefined) {
209
+ return 'Error: filter missing value';
210
+ }
211
+ if (typeof filter.value === 'string' || typeof filter.value === 'number') {
212
+ value = filter.value.toString();
213
+ }
214
+ else if (filter.value === false || filter.value === true) {
215
+ value = filter.value.toString();
216
+ }
217
+ else if ('unit' in filter.value) {
218
+ if (filter.operator === DateOperator.InTheCurrent) {
219
+ value = `${filter.value.unit}`;
220
+ }
221
+ else {
222
+ value = `${filter.value.value} ${filter.value.unit}${filter.value.value === 1 ? '' : 's'}`;
223
+ }
224
+ }
225
+ else if ('startDate' in filter.value) {
226
+ value = `from ${filter.value.startDate}`;
227
+ }
228
+ else if (filter.value.length > 0) {
229
+ value = filter.value.join(', ');
230
+ }
231
+ return `${snakeAndCamelCaseToTitleCase(filter.field)} ${filter.operator}${filter.operator === 'is' || filter.operator === 'is not' ? ' one of' : ''} ${value}`;
232
+ }
@@ -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"}
@@ -24,13 +24,16 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
24
24
  }
25
25
  if (pivot.rowField && !pivot.rowFieldType) {
26
26
  const rowColumn = report.columns.find((column) => column.field === pivot.rowField);
27
- pivot.rowFieldType = rowColumn.format;
27
+ pivot.rowFieldType = rowColumn?.format || 'string';
28
28
  }
29
29
  let distinctStringValues = undefined;
30
30
  if (!distinctStrings && report.rows && pivot.columnField) {
31
31
  const distinctValues = Array.from(new Set(report.rows.map((row) => row[pivot.columnField])));
32
32
  distinctStringValues = distinctValues.map((value) => value.toString());
33
33
  }
34
+ if (!report.itemQuery) {
35
+ return undefined;
36
+ }
34
37
  const sqlQuery = generatePivotQuery(pivot, report.itemQuery, client.databaseType, comparisonInterval, distinctStrings ? distinctStrings : distinctStringValues, dateBucket);
35
38
  if (sqlQuery && report.rows.length > 0) {
36
39
  const hostedBody = {
@@ -67,6 +70,9 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
67
70
  .map((field) => ({
68
71
  field: processColumnName(field.name),
69
72
  label: snakeCaseToTitleCase(processColumnName(field.name.replace('comparison_', 'comparison '))),
73
+ format: field.name === pivot.rowField
74
+ ? 'string'
75
+ : pivot.valueFieldType ?? 'whole_number',
70
76
  }))
71
77
  .filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0)
72
78
  .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,10 +1,31 @@
1
+ import { getYAxisFields } from './columnProcessing';
1
2
  import { cleanDashboardItem } from './dashboard';
2
3
  import { getData } from './dataFetcher';
3
4
  import { DataLoadError } from './error';
4
5
  import { processFilterErrorList } from './errorProcessing';
5
6
  import { internalLog } from './logging';
6
7
  import { mergeComparisonRange } from './merge';
8
+ import { isValidPivot } from './pivotProcessing';
7
9
  import { quillFormat } from './valueFormatter';
10
+ export const EMPTY_REPORT = {
11
+ id: '',
12
+ name: '',
13
+ dashboardName: '',
14
+ rows: [],
15
+ columns: [],
16
+ chartType: '',
17
+ dateField: null,
18
+ pivot: null,
19
+ xAxisLabel: '',
20
+ xAxisField: '',
21
+ xAxisFormat: 'string',
22
+ yAxisFields: [],
23
+ order: -1,
24
+ compareRows: [],
25
+ filtersApplied: [],
26
+ queryString: '',
27
+ rowCount: 0,
28
+ };
8
29
  export async function fetchReport(reportId, client, useReportTask = true, filters = [], additionalProcessing, dateBucket, customFields) {
9
30
  let reportInfo = undefined;
10
31
  let errorMessage = undefined;
@@ -53,12 +74,18 @@ export async function fetchReport(reportId, client, useReportTask = true, filter
53
74
  errorMessage = error;
54
75
  }
55
76
  else {
56
- reportInfo = {
57
- ...error.data.data,
58
- id: error.data.data._id,
59
- error: error.message,
60
- adminError: error.data.adminErrorMessage,
61
- };
77
+ if (!error.data.data) {
78
+ errorMessage = "Couln't find report";
79
+ reportInfo = EMPTY_REPORT;
80
+ }
81
+ else {
82
+ reportInfo = {
83
+ ...error.data.data,
84
+ id: error.data.data._id,
85
+ error: error.message,
86
+ adminError: error.data.adminErrorMessage,
87
+ };
88
+ }
62
89
  errorMessage = error.message;
63
90
  }
64
91
  }
@@ -74,6 +101,9 @@ export async function fetchReport(reportId, client, useReportTask = true, filter
74
101
  return { report: reportInfo, error: errorMessage };
75
102
  }
76
103
  export const formatRowsFromReport = (report) => {
104
+ if (!report.rows || !report.columns) {
105
+ return [];
106
+ }
77
107
  return report.rows.map((row) => {
78
108
  return report.columns.reduce((formattedRow, column) => {
79
109
  // Apply the format function to each field in the row
@@ -86,3 +116,59 @@ export const formatRowsFromReport = (report) => {
86
116
  }, {});
87
117
  });
88
118
  };
119
+ export function convertInternalReportToReport(report) {
120
+ try {
121
+ if (!report) {
122
+ return EMPTY_REPORT;
123
+ }
124
+ const formattedReport = {
125
+ ...report,
126
+ };
127
+ if (formattedReport.pivot && isValidPivot(formattedReport.pivot)) {
128
+ let columns = report.pivotColumns ?? report.columns;
129
+ let rows = report.pivotRows ?? report.rows;
130
+ if (report.chartType === 'table') {
131
+ columns =
132
+ report.pivotColumns?.map((col, index) => {
133
+ if (index === 0) {
134
+ return {
135
+ ...col,
136
+ format: col.format || 'string',
137
+ };
138
+ }
139
+ return {
140
+ ...col,
141
+ format: report.pivot?.valueFieldType || 'whole_number',
142
+ };
143
+ }) ?? report.columns;
144
+ rows = formatRowsFromReport({ rows, columns });
145
+ }
146
+ else if (report.chartType === 'metric') {
147
+ columns =
148
+ report.pivotColumns?.map((col) => {
149
+ return { ...col, format: report.xAxisFormat };
150
+ }) ?? report.columns;
151
+ rows = formatRowsFromReport({ rows, columns });
152
+ }
153
+ return {
154
+ ...formattedReport,
155
+ rows: rows,
156
+ yAxisFields: getYAxisFields(report),
157
+ columns: columns,
158
+ rowCount: rows ? rows.length : 0,
159
+ };
160
+ }
161
+ let rows = report.rows;
162
+ if (report.chartType === 'metric' || report.chartType === 'table') {
163
+ rows = formatRowsFromReport(report);
164
+ }
165
+ return {
166
+ ...formattedReport,
167
+ rows: rows,
168
+ yAxisFields: getYAxisFields(report),
169
+ };
170
+ }
171
+ catch (error) {
172
+ return EMPTY_REPORT;
173
+ }
174
+ }
@@ -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[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.12.30",
3
+ "version": "2.12.32",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=convert.uspec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convert.uspec.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/convert.uspec.ts"],"names":[],"mappings":""}