@quillsql/react 2.13.44 → 2.13.46

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 (145) hide show
  1. package/dist/cjs/Chart.d.ts +3 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +27 -30
  4. package/dist/cjs/ChartBuilder.d.ts +1 -2
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +46 -26
  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 +6 -8
  10. package/dist/cjs/Context.d.ts +18 -6
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +98 -54
  13. package/dist/cjs/Dashboard.d.ts +7 -1
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +74 -24
  16. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  17. package/dist/cjs/ReportBuilder.js +201 -76
  18. package/dist/cjs/Table.d.ts.map +1 -1
  19. package/dist/cjs/Table.js +3 -3
  20. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  21. package/dist/cjs/components/Chart/BarChart.js +1 -2
  22. package/dist/cjs/components/Chart/GaugeChart.js +1 -1
  23. package/dist/cjs/components/Chart/LineChart.js +1 -1
  24. package/dist/cjs/components/Chart/MapChart.js +1 -1
  25. package/dist/cjs/components/Chart/PieChart.js +1 -1
  26. package/dist/cjs/components/Dashboard/DashboardFilter.js +6 -4
  27. package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
  28. package/dist/cjs/components/Dashboard/DashboardSection.js +0 -1
  29. package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
  30. package/dist/cjs/components/Dashboard/DashboardSectionContainer.js +0 -1
  31. package/dist/cjs/components/Dashboard/DataLoader.d.ts +6 -4
  32. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  33. package/dist/cjs/components/Dashboard/DataLoader.js +108 -139
  34. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  35. package/dist/cjs/components/QuillTable.js +61 -59
  36. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +4 -1
  37. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  38. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +59 -63
  39. package/dist/cjs/components/ReportBuilder/schema.d.ts +7 -0
  40. package/dist/cjs/components/ReportBuilder/schema.d.ts.map +1 -1
  41. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  42. package/dist/cjs/components/UiComponents.js +11 -3
  43. package/dist/cjs/hooks/useDashboard.d.ts +23 -2
  44. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  45. package/dist/cjs/hooks/useDashboard.js +133 -3
  46. package/dist/cjs/hooks/useExport.js +3 -3
  47. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  48. package/dist/cjs/hooks/useQuill.js +8 -7
  49. package/dist/cjs/hooks/useReport.d.ts.map +1 -1
  50. package/dist/cjs/hooks/useReport.js +13 -12
  51. package/dist/cjs/index.d.ts +1 -1
  52. package/dist/cjs/index.d.ts.map +1 -1
  53. package/dist/cjs/index.js +2 -1
  54. package/dist/cjs/models/Client.d.ts +1 -0
  55. package/dist/cjs/models/Client.d.ts.map +1 -1
  56. package/dist/cjs/models/Dashboard.d.ts +5 -1
  57. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  58. package/dist/cjs/models/Filter.d.ts.map +1 -1
  59. package/dist/cjs/models/Filter.js +0 -2
  60. package/dist/cjs/models/Report.d.ts +1 -2
  61. package/dist/cjs/models/Report.d.ts.map +1 -1
  62. package/dist/cjs/utils/client.d.ts.map +1 -1
  63. package/dist/cjs/utils/client.js +1 -0
  64. package/dist/cjs/utils/dashboard.js +1 -1
  65. package/dist/cjs/utils/report.d.ts.map +1 -1
  66. package/dist/cjs/utils/report.js +2 -2
  67. package/dist/cjs/utils/reportBuilder.d.ts +11 -2
  68. package/dist/cjs/utils/reportBuilder.d.ts.map +1 -1
  69. package/dist/cjs/utils/reportBuilder.js +127 -1
  70. package/dist/cjs/utils/schema.d.ts +2 -7
  71. package/dist/cjs/utils/schema.d.ts.map +1 -1
  72. package/dist/cjs/utils/schema.js +4 -0
  73. package/dist/esm/Chart.d.ts +3 -1
  74. package/dist/esm/Chart.d.ts.map +1 -1
  75. package/dist/esm/Chart.js +28 -31
  76. package/dist/esm/ChartBuilder.d.ts +1 -2
  77. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  78. package/dist/esm/ChartBuilder.js +47 -27
  79. package/dist/esm/ChartEditor.d.ts +1 -1
  80. package/dist/esm/ChartEditor.d.ts.map +1 -1
  81. package/dist/esm/ChartEditor.js +7 -9
  82. package/dist/esm/Context.d.ts +18 -6
  83. package/dist/esm/Context.d.ts.map +1 -1
  84. package/dist/esm/Context.js +100 -56
  85. package/dist/esm/Dashboard.d.ts +7 -1
  86. package/dist/esm/Dashboard.d.ts.map +1 -1
  87. package/dist/esm/Dashboard.js +74 -24
  88. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  89. package/dist/esm/ReportBuilder.js +206 -81
  90. package/dist/esm/Table.d.ts.map +1 -1
  91. package/dist/esm/Table.js +3 -3
  92. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  93. package/dist/esm/components/Chart/BarChart.js +1 -2
  94. package/dist/esm/components/Chart/GaugeChart.js +1 -1
  95. package/dist/esm/components/Chart/LineChart.js +1 -1
  96. package/dist/esm/components/Chart/MapChart.js +1 -1
  97. package/dist/esm/components/Chart/PieChart.js +1 -1
  98. package/dist/esm/components/Dashboard/DashboardFilter.js +6 -4
  99. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
  100. package/dist/esm/components/Dashboard/DashboardSection.js +0 -1
  101. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
  102. package/dist/esm/components/Dashboard/DashboardSectionContainer.js +0 -1
  103. package/dist/esm/components/Dashboard/DataLoader.d.ts +6 -4
  104. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  105. package/dist/esm/components/Dashboard/DataLoader.js +109 -140
  106. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  107. package/dist/esm/components/QuillTable.js +61 -59
  108. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +4 -1
  109. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  110. package/dist/esm/components/ReportBuilder/AddColumnModal.js +59 -63
  111. package/dist/esm/components/ReportBuilder/schema.d.ts +7 -0
  112. package/dist/esm/components/ReportBuilder/schema.d.ts.map +1 -1
  113. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  114. package/dist/esm/components/UiComponents.js +11 -3
  115. package/dist/esm/hooks/useDashboard.d.ts +23 -2
  116. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  117. package/dist/esm/hooks/useDashboard.js +131 -3
  118. package/dist/esm/hooks/useExport.js +4 -4
  119. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  120. package/dist/esm/hooks/useQuill.js +9 -8
  121. package/dist/esm/hooks/useReport.d.ts.map +1 -1
  122. package/dist/esm/hooks/useReport.js +14 -13
  123. package/dist/esm/index.d.ts +1 -1
  124. package/dist/esm/index.d.ts.map +1 -1
  125. package/dist/esm/index.js +1 -1
  126. package/dist/esm/models/Client.d.ts +1 -0
  127. package/dist/esm/models/Client.d.ts.map +1 -1
  128. package/dist/esm/models/Dashboard.d.ts +5 -1
  129. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  130. package/dist/esm/models/Filter.d.ts.map +1 -1
  131. package/dist/esm/models/Filter.js +0 -2
  132. package/dist/esm/models/Report.d.ts +1 -2
  133. package/dist/esm/models/Report.d.ts.map +1 -1
  134. package/dist/esm/utils/client.d.ts.map +1 -1
  135. package/dist/esm/utils/client.js +1 -0
  136. package/dist/esm/utils/dashboard.js +1 -1
  137. package/dist/esm/utils/report.d.ts.map +1 -1
  138. package/dist/esm/utils/report.js +2 -2
  139. package/dist/esm/utils/reportBuilder.d.ts +11 -2
  140. package/dist/esm/utils/reportBuilder.d.ts.map +1 -1
  141. package/dist/esm/utils/reportBuilder.js +124 -0
  142. package/dist/esm/utils/schema.d.ts +2 -7
  143. package/dist/esm/utils/schema.d.ts.map +1 -1
  144. package/dist/esm/utils/schema.js +4 -0
  145. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useContext, useEffect, useMemo, useRef, useState, } from 'react';
3
3
  import { MemoizedButton, MemoizedDeleteButton, MemoizedHeader, MemoizedLabel, MemoizedSecondaryButton, MemoizedText, MemoizedPopover, QuillTabs, MemoizedModal, QuillChartBuilderInputRowContainer, QuillChartBuilderInputColumnContainer, MemoizedSubHeader, QuillErrorMessageComponent, QuillPivotRowContainer, QuillPivotColumnContainer, QuillColumnSearchEmptyState, QuillChartBuilderFormContainer, QuillLoadingComponent, QuillTableReportBuilderComponent, QuillChartBuilderCheckboxComponent, QuillToolTip, } from './components/UiComponents';
4
- import { ClientContext, DashboardContext, SchemaDataContext, TenantContext, ThemeContext, } from './Context';
4
+ import { ClientContext, SchemaDataContext, TenantContext, ThemeContext, } from './Context';
5
5
  import { ChartBuilderWithModal } from './ChartBuilder';
6
6
  import { QuillTextInput } from './components/UiComponents';
7
7
  import { QuillSidebar, CustomContainer, QuillSelectColumn, QuillDraggableColumn, QuillSidebarHeading, QuillFilterPopover, QuillSortPopover, QuillLimitPopover, } from './components/ReportBuilder/ui';
@@ -12,7 +12,7 @@ import { AddLimitPopover, LimitSentence, } from './components/ReportBuilder/AddL
12
12
  import { updateFirstChildWidth } from './utils/width';
13
13
  import { QuillSelectComponent } from './components/QuillSelect';
14
14
  import { QuillCard } from './components/QuillCard';
15
- import { isValidPivot, pivotFormData, } from './utils/pivotProcessing';
15
+ import { isValidPivot, pivotFormData } from './utils/pivotProcessing';
16
16
  import { fetchResultsByQuery, fetchTableByAST, getUniqueStringValuesByTable, } from './utils/tableProcessing';
17
17
  import { createSelectStarFromAst, fetchAndProcessASTFromPrompt, fetchASTFromQuillReport, } from './utils/astProcessing';
18
18
  import PivotForm from './internals/ReportBuilder/PivotForm';
@@ -28,9 +28,12 @@ import { cleanDashboardItem } from './utils/dashboard';
28
28
  import { useDashboards } from './hooks/useDashboard';
29
29
  import { EMPTY_REPORT_BUILDER_STATE, } from './models/ReportBuilder';
30
30
  import DraggableColumns from './components/ReportBuilder/DraggableColumns';
31
- import NewAddColumnModal from './components/ReportBuilder/AddColumnModal';
32
- import { astToReportBuilderState, formatRows, isValidPivotForReport, reportBuilderStateToAst, setTypesOnPivot, } from './utils/reportBuilder';
31
+ import AddColumnModal from './components/ReportBuilder/AddColumnModal';
32
+ import { astToReportBuilderState, formatRows, isValidPivotForReport, reportBuilderStateToAst, setTypesOnPivot, validatedReportBuilderState, } from './utils/reportBuilder';
33
33
  import { fetchSqlQuery } from './utils/dataFetcher';
34
+ import { useDashboardReports } from './hooks/useDashboard';
35
+ import { getSchemaForeignKeyMapping } from './utils/schema';
36
+ import { filterSentence } from './utils/filterProcessing';
34
37
  /**
35
38
  * Quill Report Builder
36
39
  *
@@ -102,7 +105,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
102
105
  // isChartBuilderHorizontalView: whether the chart builder is in horizontal view mode
103
106
  // onClickChartElement: a callback function triggered when a chart element is clicked
104
107
  // Contexts
105
- const [dashboard] = useContext(DashboardContext);
108
+ const { dashboardReports: dashboard } = useDashboardReports(destinationDashboard);
106
109
  const [schemaData] = useContext(SchemaDataContext);
107
110
  const { dashboards } = useDashboards();
108
111
  const destinationDashboardConfig = useMemo(() => {
@@ -114,7 +117,10 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
114
117
  table.ownerTenantFields?.length === 0 ||
115
118
  table.ownerTenantFields?.includes(destinationDashboardConfig?.tenantKeys?.[0] ?? ''));
116
119
  });
117
- }, [schemaData.schemaWithCustomFields, destinationDashboardConfig?.tenantKeys]);
120
+ }, [
121
+ schemaData.schemaWithCustomFields,
122
+ destinationDashboardConfig?.tenantKeys,
123
+ ]);
118
124
  const { tenants } = useContext(TenantContext);
119
125
  const [theme] = useContext(ThemeContext);
120
126
  const [client] = useContext(ClientContext);
@@ -137,6 +143,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
137
143
  const [errorMessage, setErrorMessage] = useState('');
138
144
  const [unresolvedReportMessage, setUnresolvedReportMessage] = useState('');
139
145
  // Core Report states
146
+ // Table order matters for joins. For now, assumed to have one 'primary' table (the first one)
140
147
  const [tables, setTables] = useState([]);
141
148
  const [columns, setColumns] = useState([]);
142
149
  const [filterStack, setFilterStack] = useState([]);
@@ -153,10 +160,12 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
153
160
  limit,
154
161
  };
155
162
  }, [columns, filterStack, limit, pivot, sort, tables]);
156
- const undoButtonEnabled = false; // TODO: enable
163
+ // For undo/redo
157
164
  const [stateStack, setStateStack] = useState([]);
165
+ const [poppedStateStack, setPoppedStateStack] = useState([]);
158
166
  // Other Report states
159
167
  const [activeQuery, setActiveQuery] = useState('');
168
+ const [queryOutOfSync, setQueryOutOfSync] = useState(false);
160
169
  const [unfilteredUniqueValues, setUnfilteredUniqueValues] = useState({}); // unique values before filtering
161
170
  const [unfilteredUniqueValuesIsLoading, setUnfilteredUniqueValuesIsLoading] = useState(false);
162
171
  const [filteredUniqueValues, setFilteredUniqueValues] = useState(null); // unique values after filtering
@@ -219,8 +228,8 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
219
228
  if (tables.length === 1) {
220
229
  // Check if all columns are selected
221
230
  const totalColumnLength = tables.reduce((acc, table) => {
222
- const tableColumns = filteredSchema.find((t) => t.name === table.name)
223
- ?.columns.length ?? 0;
231
+ const tableColumns = filteredSchema.find((t) => t.name === table.name)?.columns.length ??
232
+ 0;
224
233
  return acc + tableColumns;
225
234
  }, 0);
226
235
  return totalColumnLength === columns.length;
@@ -239,11 +248,22 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
239
248
  return 'Please add a limit.';
240
249
  }
241
250
  }, [client, limit, pivot]);
251
+ const foreignKeyMap = useMemo(() => {
252
+ return getSchemaForeignKeyMapping(filteredSchema);
253
+ }, [filteredSchema]);
242
254
  // State changing functions
243
- const clearAllState = () => {
255
+ const clearAllState = (resetStateStack = true) => {
244
256
  setActiveQuery('');
245
- handleMultiStateChange(EMPTY_REPORT_BUILDER_STATE);
246
- setStateStack([]);
257
+ setQueryOutOfSync(false);
258
+ handleMultiStateChange({
259
+ state: EMPTY_REPORT_BUILDER_STATE,
260
+ fetchData: false,
261
+ updateStateStack: true,
262
+ });
263
+ if (resetStateStack) {
264
+ setStateStack([]);
265
+ setPoppedStateStack([]);
266
+ }
247
267
  setFilteredUniqueValues(null);
248
268
  setUnfilteredUniqueValues({});
249
269
  setColumnUniqueValues({});
@@ -286,54 +306,99 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
286
306
  ...prevStack,
287
307
  { ...reportBuilderState, tables: newTables },
288
308
  ]);
309
+ setPoppedStateStack([]);
289
310
  }
290
311
  };
291
- const handleColumnsChange = (newColumns, fetchData, updateStateStack = true) => {
292
- // If pivot is using removed columns, remove pivot
293
- let removePivot = false;
294
- if (pivot) {
295
- const referencedColumns = [];
296
- if (pivot.rowField) {
297
- referencedColumns.push(pivot.rowField);
298
- }
299
- if (pivot.columnField) {
300
- referencedColumns.push(pivot.columnField);
312
+ const handleColumnsChange = (newColumns, fetchData, updateStateStack = true, bypassConfirmation = false) => {
313
+ const validReportBuilderState = bypassConfirmation
314
+ ? { ...reportBuilderState, columns: newColumns }
315
+ : validatedReportBuilderState({
316
+ ...reportBuilderState,
317
+ columns: newColumns,
318
+ }, foreignKeyMap);
319
+ if (validReportBuilderState.tables.length === 0 && !bypassConfirmation) {
320
+ if (!confirm('Removing all columns will clear all state. Are you sure you want to continue?')) {
321
+ return;
301
322
  }
302
- if (pivot.aggregations) {
303
- pivot.aggregations.forEach((agg) => {
304
- if (agg.valueField) {
305
- referencedColumns.push(agg.valueField);
306
- }
307
- if (agg.valueField2) {
308
- referencedColumns.push(agg.valueField2);
309
- }
323
+ else {
324
+ handleMultiStateChange({
325
+ state: EMPTY_REPORT_BUILDER_STATE,
326
+ fetchData: false,
327
+ updateStateStack: true,
310
328
  });
329
+ return;
311
330
  }
312
- const columnMapping = referencedColumns
313
- .map((col) => {
314
- const column = columns.find((c) => (c.alias || c.field) === col);
315
- return column;
316
- })
317
- .filter((c) => c !== undefined);
318
- removePivot = !columnMapping.every((col) => newColumns.some((c) => (c.alias || c.field) === (col.alias || col.field) &&
319
- c.table === col.table));
320
- if (removePivot) {
321
- handlePivotChange(null);
331
+ }
332
+ const tablesAffected = tables.length - validReportBuilderState.tables.length >= 2;
333
+ const filtersAffected = validReportBuilderState.filterStack.length !== filterStack.length;
334
+ const deletedTables = tables
335
+ .filter((table) => {
336
+ return !validReportBuilderState.tables.some((t) => t.name === table.name);
337
+ })
338
+ .map((table) => table.name);
339
+ const deletedFilters = filterStack
340
+ .filter((filter) => filter.value)
341
+ .filter((filter) => {
342
+ return deletedTables.some((table) => table === filter.value.table);
343
+ })
344
+ .map((filter) => filterSentence(filter.value));
345
+ if (tablesAffected && filtersAffected) {
346
+ if (!confirm(`Removing this column will remove the following table${deletedTables.length > 1 ? 's' : ''}:
347
+ ${deletedTables.join(', ')}.
348
+ It will also remove the following filter${deletedFilters.length > 1 ? 's' : ''}:
349
+ ${deletedFilters.join(', ')}.
350
+ Are you sure you want to continue?
351
+ `
352
+ .replace(/\s+/g, ' ')
353
+ .trim())) {
354
+ return;
355
+ }
356
+ }
357
+ else if (tablesAffected) {
358
+ if (!confirm(`Removing this column will remove the following table${deletedTables.length > 1 ? 's' : ''}:
359
+ ${deletedTables.join(', ')}.
360
+ Are you sure you want to continue?
361
+ `
362
+ .replace(/\s+/g, ' ')
363
+ .trim())) {
364
+ return;
365
+ }
366
+ }
367
+ else if (filtersAffected) {
368
+ if (!confirm(`Removing this column will remove the following filter${deletedFilters.length > 1 ? 's' : ''}:
369
+ ${deletedFilters.join(', ')}.
370
+ Are you sure you want to continue?
371
+ `
372
+ .replace(/\s+/g, ' ')
373
+ .trim())) {
374
+ return;
322
375
  }
323
376
  }
324
- setColumns(newColumns);
377
+ if (validReportBuilderState.tables.length !== tables.length) {
378
+ handleTablesChange(validReportBuilderState.tables, false);
379
+ fetchData = true;
380
+ }
381
+ if (validReportBuilderState.filterStack.length !== filterStack.length) {
382
+ handleFilterStackChange(validReportBuilderState.filterStack, false, false);
383
+ fetchData = true;
384
+ }
385
+ if (validReportBuilderState.sort.length !== sort.length) {
386
+ handleSortChange(validReportBuilderState.sort, false, false);
387
+ fetchData = true;
388
+ }
389
+ if (pivot && !validReportBuilderState.pivot) {
390
+ handlePivotChange(validReportBuilderState.pivot, false, false);
391
+ }
392
+ setColumns(validReportBuilderState.columns);
325
393
  if (updateStateStack) {
326
- setStateStack((prevStack) => [
327
- ...prevStack,
328
- { ...reportBuilderState, columns: newColumns },
329
- ]);
394
+ setStateStack((prevStack) => [...prevStack, validReportBuilderState]);
395
+ setPoppedStateStack([]);
330
396
  }
331
397
  if (fetchData) {
332
- fetchDataFromReportBuilderState({
333
- ...reportBuilderState,
334
- columns: newColumns,
335
- pivot: removePivot ? null : pivot,
336
- });
398
+ fetchDataFromReportBuilderState(validReportBuilderState);
399
+ }
400
+ else {
401
+ setQueryOutOfSync(true);
337
402
  }
338
403
  };
339
404
  const handleFilterInsertion = (newFilter) => {
@@ -367,6 +432,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
367
432
  ...prevStack,
368
433
  { ...reportBuilderState, filterStack: newFilterStack },
369
434
  ]);
435
+ setPoppedStateStack([]);
370
436
  }
371
437
  if (fetchData) {
372
438
  fetchDataFromReportBuilderState({
@@ -403,6 +469,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
403
469
  limit: resetSortAndLimit ? null : limit,
404
470
  },
405
471
  ]);
472
+ setPoppedStateStack([]);
406
473
  }
407
474
  if (fetchData) {
408
475
  fetchDataFromReportBuilderState({
@@ -458,6 +525,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
458
525
  ...prevStack,
459
526
  { ...reportBuilderState, sort: newSort },
460
527
  ]);
528
+ setPoppedStateStack([]);
461
529
  }
462
530
  if (fetchData) {
463
531
  fetchDataFromReportBuilderState({
@@ -473,6 +541,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
473
541
  ...prevStack,
474
542
  { ...reportBuilderState, limit: newLimit },
475
543
  ]);
544
+ setPoppedStateStack([]);
476
545
  }
477
546
  if (fetchData) {
478
547
  fetchDataFromReportBuilderState({
@@ -481,12 +550,12 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
481
550
  });
482
551
  }
483
552
  };
484
- const handleMultiStateChange = (state, fetchData, updateStateStack = true) => {
553
+ const handleMultiStateChange = ({ state, fetchData, updateStateStack = true, report, }) => {
485
554
  if (state.tables !== undefined) {
486
555
  handleTablesChange(state.tables, false);
487
556
  }
488
557
  if (state.columns !== undefined) {
489
- handleColumnsChange(state.columns, false, false);
558
+ handleColumnsChange(state.columns, false, false, true);
490
559
  }
491
560
  if (state.filterStack !== undefined) {
492
561
  handleFilterStackChange(state.filterStack, false, false);
@@ -505,9 +574,10 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
505
574
  ...prevStack,
506
575
  { ...reportBuilderState, ...state },
507
576
  ]);
577
+ setPoppedStateStack([]);
508
578
  }
509
579
  if (fetchData) {
510
- fetchDataFromReportBuilderState({ ...reportBuilderState, ...state }, !!state.filterStack, !!state.tables);
580
+ fetchDataFromReportBuilderState({ ...reportBuilderState, ...state }, !!state.filterStack, !!state.tables, report);
511
581
  }
512
582
  };
513
583
  const handleUndo = () => {
@@ -515,10 +585,33 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
515
585
  return;
516
586
  }
517
587
  const previousState = stateStack[stateStack.length - 2];
588
+ setPoppedStateStack((prevStack) => [
589
+ ...prevStack,
590
+ stateStack[stateStack.length - 1],
591
+ ]);
518
592
  setStateStack((prevStack) => prevStack.slice(0, -1));
519
- handleMultiStateChange(previousState, true, false);
593
+ // Only fetch data if the previous state has columns
594
+ handleMultiStateChange({
595
+ state: previousState,
596
+ fetchData: previousState.columns.length > 0,
597
+ updateStateStack: false,
598
+ });
599
+ };
600
+ const handleRedo = () => {
601
+ if (poppedStateStack.length === 0) {
602
+ return;
603
+ }
604
+ const lastState = poppedStateStack[poppedStateStack.length - 1];
605
+ setStateStack((prevStack) => [...prevStack, lastState]);
606
+ setPoppedStateStack((prevStack) => prevStack.slice(0, -1));
607
+ // Only fetch data if the last state has columns
608
+ handleMultiStateChange({
609
+ state: lastState,
610
+ fetchData: lastState.columns.length > 0,
611
+ updateStateStack: false,
612
+ });
520
613
  };
521
- const fetchDataFromReportBuilderState = (state, filtersChanged, tablesChanged) => {
614
+ const fetchDataFromReportBuilderState = (state, filtersChanged, tablesChanged, report) => {
522
615
  if (!client) {
523
616
  return;
524
617
  }
@@ -526,11 +619,12 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
526
619
  fetchReportFromASTHelper({
527
620
  ast,
528
621
  pivot: state.pivot,
622
+ previousReport: report,
529
623
  requiresNewFilteredUniqueValues: filtersChanged,
530
624
  requiresNewUnfilteredUniqueValues: tablesChanged,
531
625
  });
532
626
  };
533
- const fetchReportFromASTHelper = async ({ ast, pivot, previousReport, requiresNewFilteredUniqueValues = false, requiresNewUnfilteredUniqueValues = false, }) => {
627
+ const fetchReportFromASTHelper = async ({ ast, pivot, previousReport = tempReport, requiresNewFilteredUniqueValues = false, requiresNewUnfilteredUniqueValues = false, }) => {
534
628
  let reportBuilderInfo = undefined;
535
629
  setErrorMessage('');
536
630
  const schema = filteredSchema;
@@ -592,6 +686,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
592
686
  pagination: REPORT_BUILDER_PAGINATION,
593
687
  });
594
688
  setActiveQuery(reportBuilderInfo.query);
689
+ setQueryOutOfSync(false);
595
690
  // table data
596
691
  fetchRowCountFromAST(ast, ast.where);
597
692
  setReportRows(reportBuilderInfo.rows);
@@ -734,7 +829,10 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
734
829
  }
735
830
  setAskAILoading(false);
736
831
  const newState = astToReportBuilderState(astInfo.ast, client.databaseType || 'postgresql', filteredSchema);
737
- handleMultiStateChange({ ...newState, pivot: astInfo.pivot }, true);
832
+ handleMultiStateChange({
833
+ state: { ...newState, pivot: astInfo.pivot },
834
+ fetchData: true,
835
+ });
738
836
  };
739
837
  const fetchGlobalUniqueValues = async (columns, tables) => {
740
838
  if (!client) {
@@ -753,6 +851,15 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
753
851
  setUnfilteredUniqueValues(uniqueStrings);
754
852
  setUnfilteredUniqueValuesIsLoading(false);
755
853
  };
854
+ const fetchQueryFromReportBuilderState = async (state) => {
855
+ if (!client) {
856
+ return '';
857
+ }
858
+ const ast = reportBuilderStateToAst(state, client.databaseType?.toLowerCase() || 'postgresql');
859
+ const query = await fetchSqlQuery(ast, client);
860
+ setActiveQuery(query.query);
861
+ return query.query;
862
+ };
756
863
  const resetProcessing = () => {
757
864
  setCurrentProcessing({ page: REPORT_BUILDER_PAGINATION });
758
865
  setPreviousPage(0);
@@ -943,9 +1050,13 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
943
1050
  const initialState = astToReportBuilderState(newAst, client.databaseType || 'postgresql', filteredSchema);
944
1051
  setTempReport(report);
945
1052
  handleMultiStateChange({
946
- ...initialState,
947
- pivot: newPivot ?? null,
948
- }, true);
1053
+ state: {
1054
+ ...initialState,
1055
+ pivot: newPivot ?? null,
1056
+ },
1057
+ fetchData: true,
1058
+ report,
1059
+ });
949
1060
  }
950
1061
  catch (err) {
951
1062
  console.error(err);
@@ -963,13 +1074,16 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
963
1074
  })?.columns ?? [];
964
1075
  if (tableColumns.length > 0) {
965
1076
  handleMultiStateChange({
966
- ...EMPTY_REPORT_BUILDER_STATE,
967
- tables: [{ name: initialTableName }],
968
- columns: tableColumns.map((col) => ({
969
- field: col.field,
970
- table: initialTableName,
971
- })),
972
- }, true);
1077
+ state: {
1078
+ ...EMPTY_REPORT_BUILDER_STATE,
1079
+ tables: [{ name: initialTableName }],
1080
+ columns: tableColumns.map((col) => ({
1081
+ field: col.field,
1082
+ table: initialTableName,
1083
+ })),
1084
+ },
1085
+ fetchData: true,
1086
+ });
973
1087
  }
974
1088
  }
975
1089
  }, [filteredSchema, initialTableName]);
@@ -997,16 +1111,17 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
997
1111
  setOpenPopover(null);
998
1112
  }, 100);
999
1113
  }
1000
- }, title: "Select columns", children: _jsx(NewAddColumnModal, { onSave: (tables, columns) => {
1114
+ }, title: "Select columns", children: _jsx(AddColumnModal, { onSave: (tables, columns) => {
1001
1115
  handleMultiStateChange({
1002
- ...EMPTY_REPORT_BUILDER_STATE,
1003
- tables,
1004
- columns,
1005
- }, true);
1116
+ state: {
1117
+ ...EMPTY_REPORT_BUILDER_STATE,
1118
+ tables,
1119
+ columns,
1120
+ },
1121
+ fetchData: true,
1122
+ });
1006
1123
  setOpenPopover(null);
1007
- },
1008
- // selectedTables={tables} // Bring back after select table join UI
1009
- selectedColumns: columns, schema: filteredSchema, schemaLoading: schemaData.isSchemaLoading, TextInputComponent: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState, LoadingComponent: LoadingComponent }) })] }), _jsxs("div", { style: { width: '100%' }, children: [_jsx(SidebarHeadingComponent, { label: "Filters" }), filterStack.length > 0 && (_jsx("div", { style: {
1124
+ }, selectedTables: tables, selectedColumns: columns, schema: filteredSchema, foreignKeyMap: foreignKeyMap, schemaLoading: schemaData.isSchemaLoading, TextInputComponent: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState, LoadingComponent: LoadingComponent }) })] }), _jsxs("div", { style: { width: '100%' }, children: [_jsx(SidebarHeadingComponent, { label: "Filters" }), filterStack.length > 0 && (_jsx("div", { style: {
1010
1125
  display: 'flex',
1011
1126
  flexDirection: 'column',
1012
1127
  gap: 8,
@@ -1128,7 +1243,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1128
1243
  if (tables.length <= 1) {
1129
1244
  fetchAstFromPromptHelper();
1130
1245
  }
1131
- }, isLoading: askAILoading && columns.length === 0, label: 'Ask AI' }) }), !reportId && (_jsx(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState, disabled: columns.length === 0 || loading }))] }) })), columns.length > 0 && (_jsx(TableComponent, { isLoading: tableLoading || (loading && errorMessage.length === 0), rows: formattedRows, rowCount: pivot ? pivotData?.rowCount : numberOfRows, rowCountIsLoading: rowCountIsLoading, rowsPerPage: 20, columns: pivot
1246
+ }, isLoading: askAILoading && columns.length === 0, label: 'Ask AI' }) }), !reportId && (_jsx(SecondaryButtonComponent, { label: 'New report', onClick: () => clearAllState(false), disabled: columns.length === 0 || loading }))] }) })), columns.length > 0 && (_jsx(TableComponent, { isLoading: tableLoading || (loading && errorMessage.length === 0), rows: formattedRows, rowCount: pivot ? pivotData?.rowCount : numberOfRows, rowCountIsLoading: rowCountIsLoading, rowsPerPage: 20, columns: pivot
1132
1247
  ? pivotData?.columns || []
1133
1248
  : reportColumnsToStateColumns.map((col) => {
1134
1249
  return {
@@ -1155,7 +1270,12 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1155
1270
  alignItems: 'center',
1156
1271
  }, children: [_jsx(ErrorMessageComponent, { errorMessage: errorMessage || pivotError }), _jsx(SecondaryButtonComponent, { onClick: () => {
1157
1272
  fetchAstFromPromptHelper();
1158
- }, label: 'Retry' }), _jsx(SecondaryButtonComponent, { onClick: clearAllState, label: 'Reset' })] })) : (_jsx("div", { style: { width: '100%' } })), columns.length > 0 && activeQuery && (_jsxs(_Fragment, { children: [undoButtonEnabled && stateStack.length > 1 && (_jsx(SecondaryButtonComponent, { onClick: handleUndo, label: "Undo", disabled: stateStack.length <= 1 || loading })), onDiscardChanges && (_jsx(SecondaryButtonComponent, { onClick: onDiscardChanges, label: "Discard changes" })), !hideCopySQL && (_jsx(SecondaryButtonComponent, { label: isCopying ? 'Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), !isAdminEnabled ? null : (_jsx(SecondaryButtonComponent, { onClick: async () => {
1273
+ }, label: 'Retry' }), _jsx(SecondaryButtonComponent, { onClick: () => clearAllState(false), label: 'Reset' })] })) : (_jsx("div", { style: { width: '100%' } })), stateStack.length > 0 && (_jsx(SecondaryButtonComponent, { onClick: handleUndo, label: "", icon: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, stroke: "currentColor", className: "size-6", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 15 3 9m0 0 6-6M3 9h12a6 6 0 0 1 0 12h-3" }) }), disabled: stateStack.length <= 1 || loading })), stateStack.length > 0 && (_jsx(SecondaryButtonComponent, { onClick: handleRedo, label: "", icon: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, stroke: "currentColor", className: "size-6", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "m15 15 6-6m0 0-6-6m6 6H9a6 6 0 0 0 0 12h3" }) }), disabled: poppedStateStack.length < 1 || loading })), columns.length > 0 && activeQuery && (_jsxs(_Fragment, { children: [onDiscardChanges && (_jsx(SecondaryButtonComponent, { onClick: onDiscardChanges, label: "Discard changes" })), !hideCopySQL && (_jsx(SecondaryButtonComponent, { label: isCopying ? 'Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), !isAdminEnabled ? null : (_jsx(SecondaryButtonComponent, { onClick: async () => {
1274
+ let tempReportQuery = activeQuery;
1275
+ if (queryOutOfSync) {
1276
+ tempReportQuery =
1277
+ await fetchQueryFromReportBuilderState(reportBuilderState);
1278
+ }
1159
1279
  const tempReportColumns = columns
1160
1280
  .map((column) => {
1161
1281
  return reportColumnsToStateColumns.find((col) => col.field === (column.alias || column.field));
@@ -1193,8 +1313,8 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1193
1313
  })
1194
1314
  : tempReportColumns,
1195
1315
  queryString: isSelectStar
1196
- ? convertQueryToSelectStar(activeQuery)
1197
- : activeQuery,
1316
+ ? convertQueryToSelectStar(tempReportQuery)
1317
+ : tempReportQuery,
1198
1318
  includeCustomFields: isSelectStar,
1199
1319
  rows: reportRows,
1200
1320
  pivotRows: pivotData?.rows,
@@ -1210,6 +1330,11 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1210
1330
  tableLoading ||
1211
1331
  loading ||
1212
1332
  !!unresolvedReportMessage, label: 'Save query', tooltipText: unresolvedReportMessage })), _jsx(ButtonComponent, { onClick: async () => {
1333
+ let tempReportQuery = activeQuery;
1334
+ if (queryOutOfSync) {
1335
+ tempReportQuery =
1336
+ await fetchQueryFromReportBuilderState(reportBuilderState);
1337
+ }
1213
1338
  onSaveChanges && onSaveChanges();
1214
1339
  const tempReportColumns = columns
1215
1340
  .map((column) => {
@@ -1248,8 +1373,8 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1248
1373
  })
1249
1374
  : tempReportColumns,
1250
1375
  queryString: isSelectStar
1251
- ? convertQueryToSelectStar(activeQuery)
1252
- : activeQuery,
1376
+ ? convertQueryToSelectStar(tempReportQuery)
1377
+ : tempReportQuery,
1253
1378
  includeCustomFields: isSelectStar,
1254
1379
  rows: reportRows,
1255
1380
  pivotRows: pivotData?.rows,
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"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"}
package/dist/esm/Table.js CHANGED
@@ -52,8 +52,8 @@ const Table = ({ TableComponent = QuillTableComponent, ...props }) => {
52
52
  reportFilters } = useContext(ReportFiltersContext);
53
53
  const specificReportFilters = useMemo(() => {
54
54
  return Object.values(reportFilters[props.reportId ?? ''] ??
55
- (dashboard[props.reportId ?? '']
56
- ? dashboardFilters[dashboard[props.reportId ?? '']?.dashboardName ?? '']
55
+ (dashboard[report?.dashboardName ?? '']?.[report?.id ?? '']
56
+ ? dashboardFilters[report.dashboardName]
57
57
  : null) ??
58
58
  {}).map((f) => f.filter);
59
59
  }, [reportFilters[props.reportId ?? '']]);
@@ -72,6 +72,6 @@ const Table = ({ TableComponent = QuillTableComponent, ...props }) => {
72
72
  }
73
73
  return (_jsx(DataLoader, { item: report, filters: specificReportFilters, userFilters: userFilters?.map(convertCustomFilter), additionalProcessing: {
74
74
  page: DEFAULT_PAGINATION,
75
- }, reportMode: true, children: ({ isLoading, error, onPageChange, onSortChange, data, rowCount, rowCountIsLoading, }) => _jsx(TableComponent, { report: data, isLoading: isLoading, error: error, rowCount: rowCount ?? data?.rowCount ?? data?.rows?.length ?? 0, rowCountIsLoading: rowCountIsLoading, onPageChange: (page) => onPageChange(page), onSortChange: (sort) => onSortChange(sort), hideName: true }) }));
75
+ }, children: ({ isLoading, error, onPageChange, onSortChange, data, rowCount, rowCountIsLoading, }) => _jsx(TableComponent, { report: data, isLoading: isLoading, error: error, rowCount: rowCount ?? data?.rowCount ?? data?.rows?.length ?? 0, rowCountIsLoading: rowCountIsLoading, onPageChange: (page) => onPageChange(page), onSortChange: (sort) => onSortChange(sort), hideName: true }) }));
76
76
  };
77
77
  export default Table;
@@ -1 +1 @@
1
- {"version":3,"file":"BarChart.d.ts","sourceRoot":"","sources":["../../../../src/components/Chart/BarChart.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,SAAS,EACT,iBAAwB,EACxB,SAAiB,EACjB,SAAiB,EACjB,iBAAyB,EACzB,mBAAmB,EACnB,UAAU,EACV,cAAc,GACf,EAAE;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAC,EAAE,CAAC;CACrD,2CAkNA"}
1
+ {"version":3,"file":"BarChart.d.ts","sourceRoot":"","sources":["../../../../src/components/Chart/BarChart.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,SAAS,EACT,iBAAwB,EACxB,SAAiB,EACjB,SAAiB,EACjB,iBAAyB,EACzB,mBAAmB,EACnB,UAAU,EACV,cAAc,GACf,EAAE;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAC,EAAE,CAAC;CACrD,2CAiNA"}
@@ -29,7 +29,6 @@ export default function BarChart({ colors, colorMap, yAxisFields, data, containe
29
29
  display: 'flex',
30
30
  flex: '1 0 auto',
31
31
  height: '100%',
32
- margin: 'auto',
33
32
  justifyContent: 'center',
34
33
  alignItems: 'center',
35
34
  fontSize: 13,
@@ -40,7 +39,7 @@ export default function BarChart({ colors, colorMap, yAxisFields, data, containe
40
39
  return (_jsx("div", { style: {
41
40
  boxSizing: 'content-box',
42
41
  ...containerStyle,
43
- }, className: className, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(ReChartsBarChart, { data: data ?? [], layout: 'horizontal', onClick: (event) => onClickChartElement
42
+ }, className: className, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", minWidth: 0, minHeight: 0, children: _jsxs(ReChartsBarChart, { data: data ?? [], layout: 'horizontal', onClick: (event) => onClickChartElement
44
43
  ? onClickChartElement(event?.activePayload
45
44
  ? event.activePayload[0].payload
46
45
  : undefined)
@@ -102,7 +102,7 @@ function D3Gauge({ percentage, containerStyle, xAxisFormat, colors, isAnimationA
102
102
  const gaugeHeight = Math.min(ch, cw / 1.2);
103
103
  const gaugeWidth = gaugeHeight * 1.2;
104
104
  const radius = gaugeHeight / 2;
105
- const innerRadius = radius * 0.65;
105
+ const innerRadius = radius * 0.6;
106
106
  // const arcWidth = radius - innerRadius;
107
107
  // Vertical offset to visually center the 270° arc.
108
108
  const verticalOffset = gaugeHeight * 0.05;
@@ -72,7 +72,7 @@ export default function LineChart({ colors, colorMap = {}, yAxisFields, data, co
72
72
  return sum + 1;
73
73
  return sum;
74
74
  }, 0);
75
- return (_jsx("div", { style: { ...containerStyle }, className: className, children: _jsx(ResponsiveContainer, { width: "100%", height: '100%', children: _jsxs(ComposedChart, { data: formattedData, onClick: (event) => onClickChartElement(event?.activePayload ? event.activePayload[0].payload : undefined), children: [!hideCartesianGrid && (_jsx(CartesianGrid, { horizontal: !hideHorizontalCartesianGrid, vertical: !hideVerticalCartesianGrid, stroke: cartesianGridLineColor ?? '#e5e7eb', strokeDasharray: cartesianGridLineStyle === 'dashed' ? '5 5' : undefined })), _jsx(XAxis, { dataKey: xAxisField, hide: hideXAxis, tick: { transform: 'translate(0, 6)' }, style: {
75
+ return (_jsx("div", { style: { ...containerStyle }, className: className, children: _jsx(ResponsiveContainer, { width: "100%", height: '100%', minWidth: 0, minHeight: 0, children: _jsxs(ComposedChart, { data: formattedData, onClick: (event) => onClickChartElement(event?.activePayload ? event.activePayload[0].payload : undefined), children: [!hideCartesianGrid && (_jsx(CartesianGrid, { horizontal: !hideHorizontalCartesianGrid, vertical: !hideVerticalCartesianGrid, stroke: cartesianGridLineColor ?? '#e5e7eb', strokeDasharray: cartesianGridLineStyle === 'dashed' ? '5 5' : undefined })), _jsx(XAxis, { dataKey: xAxisField, hide: hideXAxis, tick: { transform: 'translate(0, 6)' }, style: {
76
76
  fontSize: '12px',
77
77
  fontFamily: theme?.chartLabelFontFamily ||
78
78
  theme?.fontFamily ||
@@ -366,7 +366,7 @@ export function USMap({ theme, data, xAxisField, xAxisFormat, yAxisFields, onCli
366
366
  return (_jsxs("div", { ref: containerRef, className: className, style: {
367
367
  width: "100%",
368
368
  height: "auto",
369
- marginTop: '-5%',
369
+ marginTop: '-6.5%',
370
370
  zIndex: 0,
371
371
  ...containerStyle,
372
372
  position: "relative",
@@ -191,7 +191,7 @@ const PieChartWrapper = React.forwardRef((props, ref) => {
191
191
  justifyContent: 'center',
192
192
  boxSizing: 'content-box',
193
193
  ...containerStyle,
194
- }, ...other, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(PieChart, { children: [_jsx(Pie, { data: parseData(data, (colorMap[category] &&
194
+ }, ...other, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", minWidth: 0, minHeight: 0, children: _jsxs(PieChart, { children: [_jsx(Pie, { data: parseData(data, (colorMap[category] &&
195
195
  colorMap[category]['primary'] &&
196
196
  generateArrayFromColor(colorMap[category]['primary'], data.length)) ??
197
197
  (colors.length >= data.length