@quillsql/react 2.13.18 → 2.13.19

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 (83) hide show
  1. package/dist/cjs/Chart.d.ts +2 -2
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +53 -175
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +3 -3
  6. package/dist/cjs/Context.d.ts +24 -3
  7. package/dist/cjs/Context.d.ts.map +1 -1
  8. package/dist/cjs/Context.js +323 -7
  9. package/dist/cjs/Dashboard.js +1 -1
  10. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  11. package/dist/cjs/ReportBuilder.js +0 -2
  12. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  13. package/dist/cjs/SQLEditor.js +1 -4
  14. package/dist/cjs/Table.d.ts.map +1 -1
  15. package/dist/cjs/Table.js +34 -32
  16. package/dist/cjs/components/Dashboard/DashboardFilter.js +1 -1
  17. package/dist/cjs/components/Dashboard/DataLoader.d.ts +4 -2
  18. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  19. package/dist/cjs/components/Dashboard/DataLoader.js +141 -57
  20. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  21. package/dist/cjs/hooks/useDashboard.js +2 -49
  22. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  23. package/dist/cjs/hooks/useQuill.js +66 -42
  24. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -1
  25. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  26. package/dist/cjs/internals/ReportBuilder/PivotModal.js +0 -1
  27. package/dist/cjs/models/Report.d.ts +4 -3
  28. package/dist/cjs/models/Report.d.ts.map +1 -1
  29. package/dist/cjs/utils/columnProcessing.d.ts +2 -1
  30. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  31. package/dist/cjs/utils/columnProcessing.js +2 -2
  32. package/dist/cjs/utils/dataProcessing.js +2 -2
  33. package/dist/cjs/utils/filterProcessing.d.ts +6 -1
  34. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  35. package/dist/cjs/utils/filterProcessing.js +81 -3
  36. package/dist/cjs/utils/pivotConstructor.js +1 -1
  37. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  38. package/dist/cjs/utils/queryConstructor.js +0 -1
  39. package/dist/cjs/utils/report.d.ts +13 -1
  40. package/dist/cjs/utils/report.d.ts.map +1 -1
  41. package/dist/cjs/utils/report.js +81 -51
  42. package/dist/esm/Chart.d.ts +2 -2
  43. package/dist/esm/Chart.d.ts.map +1 -1
  44. package/dist/esm/Chart.js +66 -179
  45. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  46. package/dist/esm/ChartBuilder.js +3 -3
  47. package/dist/esm/Context.d.ts +24 -3
  48. package/dist/esm/Context.d.ts.map +1 -1
  49. package/dist/esm/Context.js +322 -6
  50. package/dist/esm/Dashboard.js +1 -1
  51. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  52. package/dist/esm/ReportBuilder.js +0 -2
  53. package/dist/esm/SQLEditor.d.ts.map +1 -1
  54. package/dist/esm/SQLEditor.js +1 -4
  55. package/dist/esm/Table.d.ts.map +1 -1
  56. package/dist/esm/Table.js +34 -32
  57. package/dist/esm/components/Dashboard/DashboardFilter.js +1 -1
  58. package/dist/esm/components/Dashboard/DataLoader.d.ts +4 -2
  59. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  60. package/dist/esm/components/Dashboard/DataLoader.js +142 -58
  61. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  62. package/dist/esm/hooks/useDashboard.js +3 -50
  63. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  64. package/dist/esm/hooks/useQuill.js +68 -44
  65. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -1
  66. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  67. package/dist/esm/internals/ReportBuilder/PivotModal.js +0 -1
  68. package/dist/esm/models/Report.d.ts +4 -3
  69. package/dist/esm/models/Report.d.ts.map +1 -1
  70. package/dist/esm/utils/columnProcessing.d.ts +2 -1
  71. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  72. package/dist/esm/utils/columnProcessing.js +2 -2
  73. package/dist/esm/utils/dataProcessing.js +2 -2
  74. package/dist/esm/utils/filterProcessing.d.ts +6 -1
  75. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  76. package/dist/esm/utils/filterProcessing.js +78 -2
  77. package/dist/esm/utils/pivotConstructor.js +1 -1
  78. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  79. package/dist/esm/utils/queryConstructor.js +0 -1
  80. package/dist/esm/utils/report.d.ts +13 -1
  81. package/dist/esm/utils/report.d.ts.map +1 -1
  82. package/dist/esm/utils/report.js +79 -51
  83. package/package.json +1 -1
@@ -8,7 +8,6 @@ import { fetchSqlQuery, getData } from './dataFetcher';
8
8
  import { parseValueFromBigQueryDates } from './dataProcessing';
9
9
  import { getDateBucketFromRange } from './dates';
10
10
  import { DataLoadError } from './error';
11
- import { processFilterErrorList } from './errorProcessing';
12
11
  import { internalLog } from './logging';
13
12
  import { DEFAULT_PAGINATION } from './paginationProcessing';
14
13
  import { isPivotPossible, isValidPivot } from './pivotProcessing';
@@ -89,59 +88,20 @@ export async function fetchReport(reportId, client, useReportTask = true, filter
89
88
  useNewNodeSql: true,
90
89
  };
91
90
  const resp = await getData(client, 'itempost', 'omit', hostedBody, cloudBody, 'POST', 'fetch-data', abortSignal);
92
- processFilterErrorList(resp);
93
- const dashboardItem = {
94
- ...resp,
95
- filtersApplied: getDefaultDashboardFilters ? resp.filters : filters,
96
- };
97
- if (resp.errorMessage) {
98
- throw new DataLoadError(resp?.errorMessage, {
99
- ...resp,
100
- useReportTask,
101
- });
102
- }
103
- if (client.databaseType &&
104
- client.databaseType.toLowerCase() === 'bigquery') {
105
- parseValueFromBigQueryDates(dashboardItem.rows, resp.fields);
106
- }
107
- if (dashboardItem.compareRows) {
108
- if (client.databaseType &&
109
- client.databaseType.toLowerCase() === 'bigquery') {
110
- parseValueFromBigQueryDates(dashboardItem.compareRows, resp.fields);
111
- }
112
- }
113
- reportInfo = await cleanDashboardItem(dashboardItem, filters, client, dateBucket);
114
- if (additionalProcessing) {
115
- reportInfo.pagination = additionalProcessing.page;
116
- reportInfo.sort = additionalProcessing.sort;
117
- }
118
- // Ensure the report columns don't reference any columns that aren't present in the rows
119
- const observedColumns = reportInfo?.rows[0]
120
- ? Object.keys(reportInfo.rows[0])
121
- : null;
122
- if (observedColumns &&
123
- reportInfo &&
124
- !reportInfo.pivot &&
125
- !reportInfo.pivotColumns &&
126
- !reportInfo.error &&
127
- useReportTask &&
128
- reportInfo.columns?.filter((col) => !observedColumns.includes(col.field))
129
- ?.length > 0) {
130
- reportInfo.columns = reportInfo.columns.filter((col) => observedColumns.includes(col.field));
131
- reportInfo.columnInternal = reportInfo.columnInternal.filter((col) => observedColumns.includes(col.field));
132
- await saveReport({
133
- report: { ...dashboardItem, query: reportInfo.queryString },
134
- dashboardItemId: reportId,
135
- client,
136
- });
137
- }
91
+ reportInfo = await processReportResponse({
92
+ resp,
93
+ client,
94
+ filters,
95
+ dateBucket,
96
+ additionalProcessing,
97
+ });
138
98
  }
139
99
  catch (error) {
140
100
  if (error instanceof Error && error.name === 'AbortError') {
141
101
  throw error;
142
102
  }
143
103
  if (error instanceof DataLoadError) {
144
- if (error.data.useReportTask) {
104
+ if (useReportTask) {
145
105
  internalLog('USING ITEM AS BACKUP');
146
106
  const { report, error } = await fetchReport(reportId, client, false, filters, additionalProcessing, dateBucket, customFields, rowsOnly, rowCountOnly);
147
107
  reportInfo = report;
@@ -170,6 +130,74 @@ export async function fetchReport(reportId, client, useReportTask = true, filter
170
130
  }
171
131
  return { report: reportInfo || EMPTY_INTERNAL_REPORT, error: errorMessage };
172
132
  }
133
+ export async function processReportResponse({ resp, client, filters, dateBucket, additionalProcessing, }) {
134
+ const dashboardItem = {
135
+ ...resp,
136
+ filtersApplied: filters,
137
+ };
138
+ if (resp.errorMessage) {
139
+ throw new DataLoadError(resp?.errorMessage, {
140
+ ...resp,
141
+ useReportTask: true,
142
+ });
143
+ }
144
+ if (client.databaseType && client.databaseType.toLowerCase() === 'bigquery') {
145
+ parseValueFromBigQueryDates(dashboardItem.rows, resp.fields);
146
+ }
147
+ if (dashboardItem.compareRows) {
148
+ if (client.databaseType &&
149
+ client.databaseType.toLowerCase() === 'bigquery') {
150
+ parseValueFromBigQueryDates(dashboardItem.compareRows, resp.fields);
151
+ }
152
+ }
153
+ console.log('dashboardItem', dashboardItem);
154
+ console.log('filters', filters);
155
+ const reportInfo = await cleanDashboardItem(dashboardItem, filters, client, dateBucket);
156
+ console.log('reportInfo', reportInfo);
157
+ if (additionalProcessing) {
158
+ reportInfo.pagination = additionalProcessing.page;
159
+ reportInfo.sort = additionalProcessing.sort;
160
+ }
161
+ //TODO: Revisit this code
162
+ // It's purpose is to filter out columns that are not present in the rows
163
+ // But it appears to be confusing dashboardItem and reportInfo
164
+ // Ensure the report columns don't reference any columns that aren't present in the rows
165
+ const observedColumns = reportInfo?.rows[0]
166
+ ? Object.keys(reportInfo.rows[0])
167
+ : null;
168
+ if (observedColumns &&
169
+ reportInfo &&
170
+ !reportInfo.pivot &&
171
+ !reportInfo.pivotColumns &&
172
+ !reportInfo.error &&
173
+ reportInfo.columns?.filter((col) => !observedColumns.includes(col.field))
174
+ ?.length > 0) {
175
+ reportInfo.columns = reportInfo.columns.filter((col) => observedColumns.includes(col.field));
176
+ reportInfo.columnInternal = reportInfo.columnInternal.filter((col) => observedColumns.includes(col.field));
177
+ await saveReport({
178
+ report: { ...reportInfo, query: reportInfo.queryString },
179
+ dashboardItemId: reportInfo.id,
180
+ client,
181
+ });
182
+ }
183
+ return reportInfo;
184
+ }
185
+ export async function fetchReportInfo(reportId, client) {
186
+ const hostedBody = {
187
+ metadata: {
188
+ reportId,
189
+ clientId: client.publicKey,
190
+ task: 'report-info',
191
+ orgId: client.organizationId || '*',
192
+ },
193
+ };
194
+ const cloudBody = {
195
+ id: reportId,
196
+ useNewNodeSql: true,
197
+ };
198
+ const resp = await getData(client, 'itempost', 'omit', hostedBody, cloudBody, 'POST', 'fetch-data');
199
+ return { report: resp.report, filters: resp.filters };
200
+ }
173
201
  export async function fetchReportRowCount(reportId, client, useReportTask = true, filters = [], additionalProcessing, customFields, abortSignal) {
174
202
  // Remove extra fields on each filter so we don't confuse the backend.
175
203
  const hostedBody = {
@@ -246,7 +274,7 @@ export const formatRowsFromReport = (report) => {
246
274
  }, {});
247
275
  });
248
276
  };
249
- export function convertInternalReportToReport(report) {
277
+ export function convertInternalReportToReport(report, dashboardFilters) {
250
278
  try {
251
279
  if (!report) {
252
280
  return EMPTY_REPORT;
@@ -283,7 +311,7 @@ export function convertInternalReportToReport(report) {
283
311
  return {
284
312
  ...extractAllReportValuesFromQuillInternalReport(formattedReport),
285
313
  rows: rows,
286
- yAxisFields: getYAxisFields(report),
314
+ yAxisFields: getYAxisFields(report, dashboardFilters),
287
315
  columns: columns,
288
316
  rowCount: rows ? rows.length : 0,
289
317
  };
@@ -295,7 +323,7 @@ export function convertInternalReportToReport(report) {
295
323
  return {
296
324
  ...extractAllReportValuesFromQuillInternalReport(formattedReport),
297
325
  rows: rows,
298
- yAxisFields: getYAxisFields(report),
326
+ yAxisFields: getYAxisFields(report, dashboardFilters),
299
327
  };
300
328
  }
301
329
  catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.13.18",
3
+ "version": "2.13.19",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",