@quillsql/react 2.11.25 → 2.11.27

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 (127) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +16 -13
  3. package/dist/cjs/ChartBuilder.d.ts +7 -20
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +25 -25
  6. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  7. package/dist/cjs/ChartEditor.js +3 -3
  8. package/dist/cjs/Dashboard.d.ts +2 -1
  9. package/dist/cjs/Dashboard.d.ts.map +1 -1
  10. package/dist/cjs/ReportBuilder.d.ts +11 -5
  11. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  12. package/dist/cjs/ReportBuilder.js +208 -127
  13. package/dist/cjs/SQLEditor.d.ts +4 -11
  14. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  15. package/dist/cjs/SQLEditor.js +57 -124
  16. package/dist/cjs/Table.d.ts +1 -1
  17. package/dist/cjs/Table.js +4 -4
  18. package/dist/cjs/components/Dashboard/DashboardFilter.js +1 -1
  19. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  20. package/dist/cjs/components/Dashboard/MetricComponent.js +9 -12
  21. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  22. package/dist/cjs/components/Dashboard/TableComponent.js +13 -11
  23. package/dist/cjs/components/QuillTable.d.ts +6 -3
  24. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  25. package/dist/cjs/components/QuillTable.js +3 -3
  26. package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -2
  27. package/dist/cjs/components/ReportBuilder/ui.js +1 -1
  28. package/dist/cjs/components/UiComponents.d.ts +1 -0
  29. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  30. package/dist/cjs/components/UiComponents.js +17 -1
  31. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +27 -24
  32. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  33. package/dist/cjs/internals/ReportBuilder/PivotList.js +9 -7
  34. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +11 -3
  35. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  36. package/dist/cjs/internals/ReportBuilder/PivotModal.js +52 -67
  37. package/dist/cjs/models/Columns.d.ts +11 -0
  38. package/dist/cjs/models/Columns.d.ts.map +1 -0
  39. package/dist/cjs/models/Columns.js +2 -0
  40. package/dist/cjs/models/Tables.d.ts +0 -8
  41. package/dist/cjs/models/Tables.d.ts.map +1 -1
  42. package/dist/cjs/utils/astProcessing.d.ts +3 -0
  43. package/dist/cjs/utils/astProcessing.d.ts.map +1 -0
  44. package/dist/cjs/utils/astProcessing.js +20 -0
  45. package/dist/cjs/utils/columnProcessing.d.ts +9 -0
  46. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -0
  47. package/dist/cjs/utils/columnProcessing.js +207 -0
  48. package/dist/cjs/utils/dashboard.js +9 -9
  49. package/dist/cjs/utils/pivotProcessing.d.ts +2 -1
  50. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  51. package/dist/cjs/utils/pivotProcessing.js +3 -8
  52. package/dist/cjs/utils/tableProcessing.d.ts +2 -2
  53. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  54. package/dist/cjs/utils/tableProcessing.js +1 -3
  55. package/dist/cjs/utils/valueFormatter.d.ts +2 -1
  56. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  57. package/dist/cjs/utils/valueFormatter.js +12 -1
  58. package/dist/esm/Chart.d.ts.map +1 -1
  59. package/dist/esm/Chart.js +16 -13
  60. package/dist/esm/ChartBuilder.d.ts +7 -20
  61. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  62. package/dist/esm/ChartBuilder.js +25 -25
  63. package/dist/esm/ChartEditor.d.ts.map +1 -1
  64. package/dist/esm/ChartEditor.js +3 -3
  65. package/dist/esm/Dashboard.d.ts +2 -1
  66. package/dist/esm/Dashboard.d.ts.map +1 -1
  67. package/dist/esm/ReportBuilder.d.ts +11 -5
  68. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  69. package/dist/esm/ReportBuilder.js +205 -124
  70. package/dist/esm/SQLEditor.d.ts +4 -11
  71. package/dist/esm/SQLEditor.d.ts.map +1 -1
  72. package/dist/esm/SQLEditor.js +57 -123
  73. package/dist/esm/Table.d.ts +1 -1
  74. package/dist/esm/Table.js +4 -4
  75. package/dist/esm/components/Dashboard/DashboardFilter.js +1 -1
  76. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  77. package/dist/esm/components/Dashboard/MetricComponent.js +9 -12
  78. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  79. package/dist/esm/components/Dashboard/TableComponent.js +13 -11
  80. package/dist/esm/components/QuillTable.d.ts +6 -3
  81. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  82. package/dist/esm/components/QuillTable.js +3 -3
  83. package/dist/esm/components/ReportBuilder/convert.d.ts +2 -2
  84. package/dist/esm/components/ReportBuilder/ui.js +1 -1
  85. package/dist/esm/components/UiComponents.d.ts +1 -0
  86. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  87. package/dist/esm/components/UiComponents.js +15 -0
  88. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +27 -24
  89. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  90. package/dist/esm/internals/ReportBuilder/PivotList.js +9 -7
  91. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +11 -3
  92. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  93. package/dist/esm/internals/ReportBuilder/PivotModal.js +55 -70
  94. package/dist/esm/models/Columns.d.ts +11 -0
  95. package/dist/esm/models/Columns.d.ts.map +1 -0
  96. package/dist/esm/models/Columns.js +1 -0
  97. package/dist/esm/models/Tables.d.ts +0 -8
  98. package/dist/esm/models/Tables.d.ts.map +1 -1
  99. package/dist/esm/utils/astProcessing.d.ts +3 -0
  100. package/dist/esm/utils/astProcessing.d.ts.map +1 -0
  101. package/dist/esm/utils/astProcessing.js +16 -0
  102. package/dist/esm/utils/columnProcessing.d.ts +9 -0
  103. package/dist/esm/utils/columnProcessing.d.ts.map +1 -0
  104. package/dist/esm/utils/columnProcessing.js +201 -0
  105. package/dist/esm/utils/dashboard.js +9 -9
  106. package/dist/esm/utils/pivotProcessing.d.ts +2 -1
  107. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  108. package/dist/esm/utils/pivotProcessing.js +3 -8
  109. package/dist/esm/utils/tableProcessing.d.ts +2 -2
  110. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  111. package/dist/esm/utils/tableProcessing.js +1 -3
  112. package/dist/esm/utils/valueFormatter.d.ts +2 -1
  113. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  114. package/dist/esm/utils/valueFormatter.js +11 -0
  115. package/package.json +1 -1
  116. package/dist/cjs/utils/types.d.ts +0 -4
  117. package/dist/cjs/utils/types.d.ts.map +0 -1
  118. package/dist/cjs/utils/types.js +0 -52
  119. package/dist/cjs/utils/valueFormatterCSV.d.ts +0 -17
  120. package/dist/cjs/utils/valueFormatterCSV.d.ts.map +0 -1
  121. package/dist/cjs/utils/valueFormatterCSV.js +0 -99
  122. package/dist/esm/utils/types.d.ts +0 -4
  123. package/dist/esm/utils/types.d.ts.map +0 -1
  124. package/dist/esm/utils/types.js +0 -48
  125. package/dist/esm/utils/valueFormatterCSV.d.ts +0 -17
  126. package/dist/esm/utils/valueFormatterCSV.d.ts.map +0 -1
  127. package/dist/esm/utils/valueFormatterCSV.js +0 -95
@@ -32,12 +32,14 @@ const AddLimitPopover_1 = require("./components/ReportBuilder/AddLimitPopover");
32
32
  const width_1 = require("./utils/width");
33
33
  const QuillSelect_1 = require("./components/QuillSelect");
34
34
  const QuillCard_1 = require("./components/QuillCard");
35
- const SQLEditor_1 = require("./SQLEditor");
36
35
  const dataFetcher_1 = require("./utils/dataFetcher");
37
36
  const valueFormatter_1 = require("./utils/valueFormatter");
38
37
  const pivotProcessing_1 = require("./utils/pivotProcessing");
39
38
  const tableProcessing_1 = require("./utils/tableProcessing");
40
39
  const useQuill_1 = require("./hooks/useQuill");
40
+ const dataFetcher_2 = require("./utils/dataFetcher");
41
+ const columnProcessing_1 = require("./utils/columnProcessing");
42
+ const astProcessing_1 = require("./utils/astProcessing");
41
43
  exports.QUILL_SERVER = process.env.QUILL_SERVER_HOST ?? 'https://quill-344421.uc.r.appspot.com';
42
44
  /**
43
45
  * Quill Report Builder
@@ -70,8 +72,8 @@ exports.QUILL_SERVER = process.env.QUILL_SERVER_HOST ?? 'https://quill-344421.uc
70
72
  * ### Report Builder API
71
73
  * @see https://docs.quillsql.com/components/report-builder
72
74
  */
73
- function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => void null, destinationDashboard = undefined, organizationName = '', ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, ModalComponent = UiComponents_1.MemoizedModal, TextInputComponent = UiComponents_2.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, TableComponent = UiComponents_1.QuillTableComponent, PopoverComponent = UiComponents_1.MemoizedPopover, TabsComponent = UiComponents_1.QuillTabs, CheckboxComponent = UiComponents_1.MemoizedCheckbox, SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer, SelectColumnComponent = ui_1.QuillSelectColumn, DraggableColumnComponent = ui_1.QuillDraggableColumn, SidebarHeadingComponent = ui_1.QuillSidebarHeading, FilterPopoverComponent = ui_1.QuillFilterPopover, SortPopoverComponent = ui_1.QuillSortPopover, LimitPopoverComponent = ui_1.QuillLimitPopover, CardComponent = QuillCard_1.QuillCard, LabelComponent = UiComponents_1.MemoizedLabel, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, TextComponent = UiComponents_1.MemoizedText, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, ColumnSearchEmptyState = UiComponents_1.QuillColumnSearchEmptyState, ChartBuilderFormContainer = UiComponents_1.QuillChartBuilderFormContainer, isAdminEnabled = false, isAIEnabled = true, showChartBuilderTableFormatOptions = true, containerStyle, className, pivotRecommendationsEnabled = true, initialChartId, }) {
74
- const { data: initialData } = (0, useQuill_1.useQuill)(initialChartId || '');
75
+ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void null, onSubmitCreateReport = (_) => void null, destinationDashboard = undefined, organizationName = '', ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, ModalComponent = UiComponents_1.MemoizedModal, TextInputComponent = UiComponents_2.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, TableComponent = UiComponents_1.QuillTableComponent, PopoverComponent = UiComponents_1.MemoizedPopover, TabsComponent = UiComponents_1.QuillTabs, CheckboxComponent = UiComponents_1.MemoizedCheckbox, SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer, SelectColumnComponent = ui_1.QuillSelectColumn, DraggableColumnComponent = ui_1.QuillDraggableColumn, SidebarHeadingComponent = ui_1.QuillSidebarHeading, FilterPopoverComponent = ui_1.QuillFilterPopover, SortPopoverComponent = ui_1.QuillSortPopover, LimitPopoverComponent = ui_1.QuillLimitPopover, CardComponent = QuillCard_1.QuillCard, LabelComponent = UiComponents_1.MemoizedLabel, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, TextComponent = UiComponents_1.MemoizedText, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, LoadingComponent = UiComponents_1.QuillLoadingComponent, ColumnSearchEmptyState = UiComponents_1.QuillColumnSearchEmptyState, ChartBuilderFormContainer = UiComponents_1.QuillChartBuilderFormContainer, isAdminEnabled = false, isAIEnabled = true, showChartBuilderTableFormatOptions = true, containerStyle, className, pivotRecommendationsEnabled = true, reportId, }) {
76
+ const { data: dashboardItem } = (0, useQuill_1.useQuill)(reportId || '');
75
77
  const [aiPrompt, setAiPrompt] = (0, react_1.useState)('');
76
78
  const [errorMessage, setErrorMessage] = (0, react_1.useState)('');
77
79
  const [baseAst, setBaseAst] = (0, react_1.useState)(null);
@@ -92,7 +94,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
92
94
  const [dataDisplayed, setDataDisplayed] = (0, react_1.useState)(false);
93
95
  const [rows, setRows] = (0, react_1.useState)([]);
94
96
  const [formattedRows, setFormattedRows] = (0, react_1.useState)([]);
95
- const [fields, setFields] = (0, react_1.useState)([]);
97
+ const [columns, setColumns] = (0, react_1.useState)([]);
96
98
  const [topLevelBinaryOperator, setTopLevelBinaryOperator] = (0, react_1.useState)('AND');
97
99
  const [editPopoverKey, setEditPopoverKey] = (0, react_1.useState)(null);
98
100
  const [uniqueValues, setUniqueValues] = (0, react_1.useState)({});
@@ -103,8 +105,9 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
103
105
  const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
104
106
  const [showPivotPopover, setShowPivotPopover] = (0, react_1.useState)(false);
105
107
  const [isEdittingPivot, setIsEdittingPivot] = (0, react_1.useState)(false);
108
+ const [initalChartLoad, setInitalChartLoad] = (0, react_1.useState)(false);
106
109
  const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
107
- const [initialLoad, setInitialLoad] = (0, react_1.useState)(!!initialTableName || !!initialChartId);
110
+ const [initialLoad, setInitialLoad] = (0, react_1.useState)(!!initialTableName || !!reportId);
108
111
  const [currentTable, setCurrentTable] = (0, react_1.useState)(initialTableName || '');
109
112
  const parentRef = (0, react_1.useRef)(null);
110
113
  const askAIContainerRef = (0, react_1.useRef)(null);
@@ -174,7 +177,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
174
177
  setIsPending(false);
175
178
  setDataDisplayed(false);
176
179
  setRows([]);
177
- setFields([]);
180
+ setColumns([]);
178
181
  setTopLevelBinaryOperator('AND');
179
182
  setEditPopoverKey(null);
180
183
  setErrorMessage('');
@@ -196,6 +199,50 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
196
199
  setActiveEditItem(getByKey(formData, activePath));
197
200
  }
198
201
  }, [formData]);
202
+ const formatRows = (rows, columns, pivot, aggregationType) => {
203
+ const copiedRows = (0, util_1.deepCopy)(rows);
204
+ if (pivot) {
205
+ const formattedRows = copiedRows.map((row) => {
206
+ const formattedRow = row;
207
+ Object.keys(row).forEach((key, index) => {
208
+ let column = columns.find((c) => c.field === key);
209
+ let format = 'string';
210
+ if (!column) {
211
+ format =
212
+ aggregationType === 'count'
213
+ ? 'whole_number'
214
+ : 'two_decimal_places';
215
+ }
216
+ else {
217
+ format = valueFormatter_1.DATE_FORMAT_TYPES.includes(column.format)
218
+ ? 'date'
219
+ : 'string';
220
+ }
221
+ const formattedValue = (0, valueFormatter_1.quillFormat)({
222
+ value: row[key],
223
+ format,
224
+ });
225
+ formattedRow[key] = formattedValue;
226
+ });
227
+ return formattedRow;
228
+ });
229
+ return formattedRows;
230
+ }
231
+ else {
232
+ const formattedRows = copiedRows.map((row) => {
233
+ return columns.reduce((formattedRow, column) => {
234
+ // Apply the format function to each field in the row
235
+ const formattedValue = (0, valueFormatter_1.quillFormat)({
236
+ value: row[column.field],
237
+ format: column.format,
238
+ });
239
+ formattedRow[column.field] = formattedValue;
240
+ return formattedRow;
241
+ }, {});
242
+ });
243
+ return formattedRows;
244
+ }
245
+ };
199
246
  const getByKey = (formData, path) => {
200
247
  if (!path)
201
248
  return (0, util_1.deepCopy)(formData);
@@ -265,7 +312,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
265
312
  const data = await response.json();
266
313
  setActiveQuery(data.query);
267
314
  if (fetchData) {
268
- fetchUponChange(ast, formData, data.query);
315
+ fetchUponChange(ast, formData);
269
316
  }
270
317
  }
271
318
  catch (error) {
@@ -329,42 +376,80 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
329
376
  };
330
377
  (0, react_1.useEffect)(() => {
331
378
  const loadChart = async () => {
332
- if (!initialData || initialData.referencedTables.length !== 1) {
379
+ setInitalChartLoad(true);
380
+ if (!dashboardItem || dashboardItem.referencedTables.length !== 1) {
381
+ setInitalChartLoad(false);
333
382
  return;
334
383
  }
335
- const initialRows = await handleAsk(initialData.queryString);
336
- if (initialData.pivot) {
384
+ const tableName = dashboardItem.referencedTables[0];
385
+ if (!tableName) {
386
+ return;
387
+ }
388
+ const resp = await (0, dataFetcher_2.getDataFromCloud)(client, `astify`, {
389
+ query: dashboardItem.queryString,
390
+ });
391
+ const ast = resp.ast.select ? resp.ast.select : resp.ast;
392
+ const initialRows = await fetchUponChange(ast, undefined);
393
+ const convertedAst = (0, astProcessing_1.processStarColumn)(ast, dashboardItem.columns);
394
+ setBaseAst(convertedAst);
395
+ setFormData((0, util_1.deepCopy)(convertedAst.where));
396
+ setActiveQuery(dashboardItem.queryString);
397
+ // const initialRows = await handleAsk(dashboardItem.queryString);
398
+ const stringColumns = dashboardItem.columns.filter((column) => {
399
+ return column.format === 'string';
400
+ });
401
+ if (stringColumns.length !== 0 && tableName) {
402
+ const stringNames = stringColumns.map((column) => column.field);
403
+ const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(stringColumns, `Select ${stringNames.join(', ')} from ${tableName}`, [], client);
404
+ const joinedUniqueValues = (0, util_1.deepCopy)(uniqueValues);
405
+ joinedUniqueValues[tableName] = newUniqueValues;
406
+ setUniqueValues(joinedUniqueValues);
407
+ }
408
+ if (dashboardItem.pivot) {
337
409
  // @ts-ignore
338
- setPivotRowField(initialData.pivot.rowField);
410
+ setPivotRowField(dashboardItem.pivot.rowField);
339
411
  // @ts-ignore
340
- setPivotAggregation(initialData.pivot.aggregationType);
412
+ setPivotAggregation(dashboardItem.pivot.aggregationType);
341
413
  // @ts-ignore
342
- setPivotColumnField(initialData.pivot.columnField);
414
+ setPivotColumnField(dashboardItem.pivot.columnField);
343
415
  // @ts-ignore
344
- setPivotValueField(initialData.pivot.valueField);
345
- setPivot(initialData.pivot);
346
- const pivotedData = (0, PivotModal_1.generatePivotTable)(
347
- //@ts-ignore
348
- initialData.pivot, initialRows, [null, null, null], false);
416
+ setPivotValueField(dashboardItem.pivot.valueField);
417
+ setPivot(dashboardItem.pivot);
418
+ const pivotedData = (0, PivotModal_1.generatePivotTable)(dashboardItem.pivot, initialRows, undefined, false);
349
419
  setPivotData(pivotedData || []);
420
+ const formattedRows = formatRows(pivotedData.rows, dashboardItem.columns, true,
421
+ // @ts-ignore
422
+ dashboardItem.pivot.aggregationType);
423
+ setFormattedRows(formattedRows);
424
+ }
425
+ else {
426
+ const formattedRows = formatRows(dashboardItem.rows, dashboardItem.columns);
427
+ setFormattedRows(formattedRows);
350
428
  }
429
+ setCurrentTable(tableName);
430
+ // This handles a flashing issue
431
+ setTimeout(() => {
432
+ setInitalChartLoad(false);
433
+ }, 500);
351
434
  };
352
- if (initialData && initialData.referencedTables.length === 1) {
435
+ if (dashboardItem && dashboardItem.referencedTables.length === 1) {
353
436
  loadChart();
354
437
  }
355
- }, [initialData]);
438
+ }, [dashboardItem]);
356
439
  (0, react_1.useEffect)(() => {
357
440
  const loadTable = async (tables) => {
358
441
  if (!tables)
359
442
  return;
360
443
  setLoading(true);
361
- const tableInfo = schemaTables.find((tableInfo) => tableInfo.name === initialTableName);
444
+ const tableInfo = tables.find((tableInfo) => tableInfo.name === initialTableName);
362
445
  if (tableInfo) {
363
- const stringColumns = tableInfo.columns.filter((column) => {
446
+ const convertedStringColumns = tableInfo.columns
447
+ .filter((column) => {
364
448
  return (0, ast_1.isTextColumnType)(column.fieldType);
365
- });
366
- const stringNames = stringColumns.map((column) => column.name);
367
- const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(stringColumns, `Select ${stringNames.join(', ')} from ${initialTableName}`, [], client);
449
+ })
450
+ .map((column) => (0, columnProcessing_1.convertColumnInfoToColumnInternal)(column));
451
+ const stringNames = convertedStringColumns.map((column) => column.field);
452
+ const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(convertedStringColumns, `Select ${stringNames.join(', ')} from ${initialTableName}`, [], client);
368
453
  const joinedUniqueValues = (0, util_1.deepCopy)(uniqueValues);
369
454
  joinedUniqueValues[initialTableName] = newUniqueValues;
370
455
  if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(joinedUniqueValues)) {
@@ -431,7 +516,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
431
516
  return -1;
432
517
  return 0;
433
518
  })));
434
- if (initialTableName && initialLoad && !initialChartId) {
519
+ if (initialTableName) {
435
520
  await loadTable(tables);
436
521
  }
437
522
  setLoadingSchema(false);
@@ -444,7 +529,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
444
529
  if (schemaTables.length === 0) {
445
530
  fetchSchema();
446
531
  }
447
- }, [schemaTables, initialTableName, initialLoad]);
532
+ }, [schemaTables, initialTableName, reportId]);
448
533
  const updateFormData = (updates, { isDeletion = false, isInsertion = false, isReplaceSubtree = false, isAddVariant = false, isDeleteVariant = false, topLevelBinOp = 'OR', isCondition = undefined, }) => {
449
534
  // Function to immutably update or delete nodes based on their path
450
535
  // TODO: fix the following horible code
@@ -807,12 +892,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
807
892
  * @returns the fieldType string or undefined if not found.
808
893
  */
809
894
  const getColumnTypeByName = (columnName) => {
810
- const field = fields.find((f) => f.name === columnName);
811
- if (field)
812
- return (0, util_1.getPostgresBasicType)(field);
813
- const column = schemaTables
814
- .flatMap((t) => t.columns)
815
- .find((c) => c.name === columnName);
895
+ const column = columns.find((col) => col.field === columnName);
816
896
  return column?.fieldType;
817
897
  };
818
898
  const emptyPivotColumns = () => {
@@ -1679,9 +1759,10 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
1679
1759
  justifyContent: 'end',
1680
1760
  }, children: (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: onSave, label: 'Add condition' }) })] }));
1681
1761
  };
1682
- const fetchUponChange = async (baseAst, newFormData, query) => {
1762
+ const fetchUponChange = async (baseAst, newFormData) => {
1683
1763
  // if newFormData is null still use it
1684
1764
  const curFormData = newFormData !== undefined ? newFormData : formData;
1765
+ let rows;
1685
1766
  if ((curFormData || baseAst) && !loading) {
1686
1767
  try {
1687
1768
  setLoading(true);
@@ -1696,16 +1777,19 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
1696
1777
  };
1697
1778
  const cloudBody = {};
1698
1779
  const data2 = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
1780
+ rows = data2.rows;
1699
1781
  const tables = (0, ast_1.getTableNames)(baseAst);
1700
1782
  const table = tables.length >= 1 ? tables[0] : initialTableName;
1701
1783
  if (table !== currentTable) {
1702
1784
  const tableInfo = schemaTables.find((tableInfo) => tableInfo.name === table);
1703
1785
  if (tableInfo) {
1704
- const stringColumns = tableInfo.columns.filter((column) => {
1786
+ const convertedStringColumns = tableInfo.columns
1787
+ .filter((column) => {
1705
1788
  return (0, ast_1.isTextColumnType)(column.fieldType);
1706
- });
1707
- const stringNames = stringColumns.map((column) => column.name);
1708
- const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(stringColumns, `Select ${stringNames.join(', ')} from ${table}`, rows, client);
1789
+ })
1790
+ .map((column) => (0, columnProcessing_1.convertColumnInfoToColumnInternal)(column));
1791
+ const stringNames = convertedStringColumns.map((column) => column.field);
1792
+ const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(convertedStringColumns, `Select ${stringNames.join(', ')} from ${table}`, rows, client);
1709
1793
  const joinedUniqueValues = (0, util_1.deepCopy)(uniqueValues);
1710
1794
  joinedUniqueValues[table] = newUniqueValues;
1711
1795
  if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(joinedUniqueValues)) {
@@ -1718,22 +1802,13 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
1718
1802
  if (pivot) {
1719
1803
  // check if any of the pivot fields aren't in the data2.fields array
1720
1804
  if (!isValidPivot(data2.fields)) {
1721
- const processedFields = data2.fields.map((elem) => (0, SQLEditor_1.convertPostgresColumn)(elem));
1805
+ const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
1722
1806
  setPivot(null);
1723
1807
  setPivotData(null);
1724
1808
  setRows(data2.rows);
1725
- setFields(processedFields);
1726
- setFormattedRows(data2.rows.map((row) => {
1727
- return processedFields.reduce((formattedRow, column) => {
1728
- // Apply the format function to each field in the row
1729
- const formattedValue = (0, valueFormatter_1.quillFormat)({
1730
- value: row[column.field],
1731
- format: column.format,
1732
- });
1733
- formattedRow[column.field] = formattedValue;
1734
- return formattedRow;
1735
- }, {});
1736
- }));
1809
+ setColumns(processedFields);
1810
+ const formattedRows = formatRows(data2.rows, processedFields, false);
1811
+ setFormattedRows(formattedRows);
1737
1812
  return;
1738
1813
  }
1739
1814
  // Do all of this to make sure we have the right unique columns when applying a pivot
@@ -1743,39 +1818,27 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
1743
1818
  return acc;
1744
1819
  }, {});
1745
1820
  uniqueFormatted[pivot.columnField] = uniqueRecords;
1746
- const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, data2.rows, [null, null, null], false);
1821
+ const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, data2.rows, undefined, false);
1747
1822
  console.info(`%c[Pivot]: ${JSON.stringify(pivot)}`, 'color: dimgray');
1748
- const processedFields = data2.fields.map((elem) => (0, SQLEditor_1.convertPostgresColumn)(elem));
1749
- setPivotData(pivotedData || []);
1823
+ const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
1824
+ setPivotData(pivotedData);
1750
1825
  setRows(data2.rows);
1751
- setFields(processedFields);
1752
- setFormattedRows(data2.rows.map((row) => {
1753
- return processedFields.reduce((formattedRow, column) => {
1754
- // Apply the format function to each field in the row
1755
- const formattedValue = (0, valueFormatter_1.quillFormat)({
1756
- value: row[column.field],
1757
- format: column.format,
1758
- });
1759
- formattedRow[column.field] = formattedValue;
1760
- return formattedRow;
1761
- }, {});
1826
+ setColumns(processedFields);
1827
+ const formattedRows = formatRows(pivotedData.rows, processedFields, true, pivot.aggregationType);
1828
+ setSelectedColumns(processedFields.map((column) => {
1829
+ return `${table}.${column.field}`;
1762
1830
  }));
1831
+ setFormattedRows(formattedRows);
1763
1832
  }
1764
1833
  else {
1765
- const processedFields = data2.fields.map((elem) => (0, SQLEditor_1.convertPostgresColumn)(elem));
1834
+ const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
1766
1835
  setRows(data2.rows);
1767
- setFields(processedFields);
1768
- setFormattedRows(data2.rows.map((row) => {
1769
- return processedFields.reduce((formattedRow, column) => {
1770
- // Apply the format function to each field in the row
1771
- const formattedValue = (0, valueFormatter_1.quillFormat)({
1772
- value: row[column.field],
1773
- format: column.format,
1774
- });
1775
- formattedRow[column.field] = formattedValue;
1776
- return formattedRow;
1777
- }, {});
1836
+ setColumns(processedFields);
1837
+ setSelectedColumns(processedFields.map((column) => {
1838
+ return `${table}.${column.field}`;
1778
1839
  }));
1840
+ const formattedRows = formatRows(data2.rows, processedFields, false);
1841
+ setFormattedRows(formattedRows);
1779
1842
  if (data2.errorMessage) {
1780
1843
  setErrorMessage(`Error: ${data2.errorMessage}`);
1781
1844
  }
@@ -1783,7 +1846,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
1783
1846
  }
1784
1847
  else {
1785
1848
  setRows([]);
1786
- setFields([]);
1849
+ setColumns([]);
1787
1850
  setFormattedRows([]);
1788
1851
  setPivotData(null);
1789
1852
  }
@@ -1794,6 +1857,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
1794
1857
  finally {
1795
1858
  setLoading(false);
1796
1859
  setDataDisplayed(true);
1860
+ return rows;
1797
1861
  }
1798
1862
  }
1799
1863
  };
@@ -2009,11 +2073,13 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2009
2073
  if (table !== currentTable) {
2010
2074
  const tableInfo = schemaTables.find((tableInfo) => tableInfo.name === table);
2011
2075
  if (tableInfo) {
2012
- const stringColumns = tableInfo.columns.filter((column) => {
2076
+ const convertedStringColumns = tableInfo.columns
2077
+ .filter((column) => {
2013
2078
  return (0, ast_1.isTextColumnType)(column.fieldType);
2014
- });
2015
- const stringNames = stringColumns.map((column) => column.name);
2016
- const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(stringColumns, `Select ${stringNames.join(', ')} from ${table}`, rows, client);
2079
+ })
2080
+ .map((column) => (0, columnProcessing_1.convertColumnInfoToColumnInternal)(column));
2081
+ const stringNames = convertedStringColumns.map((column) => column.field);
2082
+ const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(convertedStringColumns, `Select ${stringNames.join(', ')} from ${table}`, rows, client);
2017
2083
  currentUniqueValues[table] = newUniqueValues;
2018
2084
  if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(currentUniqueValues)) {
2019
2085
  setUniqueValues(currentUniqueValues);
@@ -2022,7 +2088,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2022
2088
  setCurrentTable(table);
2023
2089
  }
2024
2090
  if (data2.rows && data2.rows.length) {
2025
- const processedFields = data2.fields.map((elem) => (0, SQLEditor_1.convertPostgresColumn)(elem));
2091
+ const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
2026
2092
  let possiblePivot = true;
2027
2093
  const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(processedFields, currentUniqueValues[table]);
2028
2094
  if (groupByPivot &&
@@ -2064,48 +2130,28 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2064
2130
  setPivotColumnField(groupByPivot?.columnField);
2065
2131
  setPivotValueField(groupByPivot?.valueField);
2066
2132
  setPivotAggregation(groupByPivot?.aggregationType);
2067
- const pivotedData = (0, PivotModal_1.generatePivotTable)(
2068
- // @ts-ignore
2069
- groupByPivot, data2.rows, [null, null, null], false);
2133
+ const pivotedData = (0, PivotModal_1.generatePivotTable)(groupByPivot, data2.rows, undefined, false);
2070
2134
  console.info(`%c[Pivot]: ${JSON.stringify(groupByPivot)}`, 'color: dimgray');
2071
2135
  setPivotData(pivotedData);
2072
2136
  setPivot(groupByPivot);
2073
2137
  setRows(data2.rows);
2074
- setFields(processedFields);
2075
- setFormattedRows(data2.rows.map((row) => {
2076
- return processedFields.reduce((formattedRow, column) => {
2077
- // Apply the format function to each field in the row
2078
- const formattedValue = (0, valueFormatter_1.quillFormat)({
2079
- value: row[column.field],
2080
- format: column.format,
2081
- });
2082
- formattedRow[column.field] = formattedValue;
2083
- return formattedRow;
2084
- }, {});
2085
- }));
2138
+ setColumns(processedFields);
2139
+ const formattedRows = formatRows(pivotedData.rows, processedFields, true, groupByPivot.aggregationType);
2140
+ setFormattedRows(formattedRows);
2086
2141
  }
2087
2142
  else {
2088
- const processedFields = data2.fields.map((elem) => (0, SQLEditor_1.convertPostgresColumn)(elem));
2143
+ const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
2089
2144
  setRows(data2.rows);
2090
- setFields(processedFields);
2091
- setFormattedRows(data2.rows.map((row) => {
2092
- return processedFields.reduce((formattedRow, column) => {
2093
- // Apply the format function to each field in the row
2094
- const formattedValue = (0, valueFormatter_1.quillFormat)({
2095
- value: row[column.field],
2096
- format: column.format,
2097
- });
2098
- formattedRow[column.field] = formattedValue;
2099
- return formattedRow;
2100
- }, {});
2101
- }));
2145
+ setColumns(processedFields);
2146
+ const formattedRows = formatRows(data2.rows, processedFields, false);
2147
+ setFormattedRows(formattedRows);
2102
2148
  }
2103
2149
  return data2.rows;
2104
2150
  }
2105
2151
  else {
2106
2152
  setPivotData([]);
2107
2153
  setRows([]);
2108
- setFields([]);
2154
+ setColumns([]);
2109
2155
  setFormattedRows([]);
2110
2156
  }
2111
2157
  if (data2.query) {
@@ -2229,7 +2275,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2229
2275
  gap: 8,
2230
2276
  }, children: [columnNamesInAst.map((name) => ((0, jsx_runtime_1.jsx)(DraggableItem, { id: name, label: name, onDelete: () => handleDeleteColumn(name) }, name))), columnNamesInAst?.length > 0 && (0, jsx_runtime_1.jsx)("div", { style: { height: 6 } })] }) }) }));
2231
2277
  }
2232
- if (loading) {
2278
+ if (loading || initalChartLoad) {
2233
2279
  return ((0, jsx_runtime_1.jsxs)("div", { style: {
2234
2280
  display: 'flex',
2235
2281
  flexDirection: 'row',
@@ -2360,9 +2406,11 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2360
2406
  setActivePath(null);
2361
2407
  setOpenPopover(null);
2362
2408
  }
2363
- } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, CardComponent: CardComponent, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: fields, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
2409
+ } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, CardComponent: CardComponent, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
2364
2410
  setPivot(null);
2365
2411
  setPivotData(null);
2412
+ const formattedRows = formatRows(rows, columns, false);
2413
+ setFormattedRows(formattedRows);
2366
2414
  },
2367
2415
  // TODOs
2368
2416
  selectPivot: (pivot) => {
@@ -2372,9 +2420,11 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2372
2420
  newAst.orderby = null;
2373
2421
  setBaseAst(newAst); // trigger refetch
2374
2422
  setPivot(pivot);
2375
- const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, rows, [null, null, null], false);
2423
+ const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false);
2376
2424
  setPivotData(pivotedData || []);
2377
- }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: [null, null, null], pivotCountRequest: 4, SecondaryButtonComponent: SecondaryButtonComponent, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !loading && (!baseAst || !dataDisplayed), pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations }), pivot && ((0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
2425
+ const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2426
+ setFormattedRows(formattedRows);
2427
+ }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, SecondaryButtonComponent: SecondaryButtonComponent, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !loading && (!baseAst || !dataDisplayed), pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations }), pivot && ((0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
2378
2428
  pivot: pivot,
2379
2429
  rows: pivotData?.rows || [],
2380
2430
  columns: pivotData?.columns || [],
@@ -2389,6 +2439,8 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2389
2439
  }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: () => {
2390
2440
  setPivot(null);
2391
2441
  setPivotData(null);
2442
+ const formattedRows = formatRows(rows, columns, false);
2443
+ setFormattedRows(formattedRows);
2392
2444
  setBaseAst((0, util_1.deepCopy)(baseAst)); // trigger refetch
2393
2445
  }, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && ((0, jsx_runtime_1.jsx)("div", { style: {
2394
2446
  display: 'flex',
@@ -2523,11 +2575,13 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2523
2575
  ? 'Ask a follow-up question...'
2524
2576
  : 'Ask a question...', width: askAIInputWidth !== -1
2525
2577
  ? askAIInputWidth
2526
- : askAILoadingContainerWidth, value: aiPrompt, onChange: () => { } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => { }, label: "Ask AI" }), ((baseAst && dataDisplayed) || initialLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => { }, label: "New report" }))] }) })), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TableComponent, { isLoading: true, rows: [], columns: [] }), baseAst && dataDisplayed && ((0, jsx_runtime_1.jsxs)("div", { style: {
2578
+ : askAILoadingContainerWidth, value: aiPrompt, onChange: () => { } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => { }, label: "Ask AI" }), ((baseAst && dataDisplayed) ||
2579
+ initialLoad ||
2580
+ initalChartLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => { }, label: "New report" }))] }) })), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TableComponent, { isLoading: true, rows: [], columns: [] }), baseAst && dataDisplayed && !initalChartLoad && ((0, jsx_runtime_1.jsxs)("div", { style: {
2527
2581
  display: 'flex',
2528
2582
  flexDirection: 'row',
2529
2583
  gap: '12px',
2530
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => copyToClipboard(activeQuery), label: isCopying ? '✅ Copied' : 'Copy SQL' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { label: 'Add to dashboard', onClick: () => { } })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] }));
2584
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => copyToClipboard(activeQuery), label: isCopying ? '✅ Copied' : 'Copy SQL' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { label: dashboardItem ? 'Save changes' : 'Add to dashboard', onClick: () => { } })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] }));
2531
2585
  }
2532
2586
  return ((0, jsx_runtime_1.jsxs)("div", { ref: parentRef, style: {
2533
2587
  display: 'flex',
@@ -2669,9 +2723,11 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2669
2723
  setOpenPopover(null);
2670
2724
  clearCheckboxes();
2671
2725
  }
2672
- } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: fields, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
2726
+ } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
2673
2727
  setPivot(null);
2674
2728
  setPivotData(null);
2729
+ const formattedRows = formatRows(rows, columns, false);
2730
+ setFormattedRows(formattedRows);
2675
2731
  }, selectPivot: (pivot) => {
2676
2732
  if (!pivot)
2677
2733
  return;
@@ -2683,10 +2739,12 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2683
2739
  }
2684
2740
  setBaseAst(newAst); // trigger refetch
2685
2741
  setPivot(pivot);
2686
- const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, rows, [null, null, null], false);
2742
+ const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false);
2687
2743
  setPivotData(pivotedData || []);
2744
+ const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2745
+ setFormattedRows(formattedRows);
2688
2746
  setErrorMessage('');
2689
- }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: [null, null, null], pivotCountRequest: 4, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !baseAst || !dataDisplayed, pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations }), pivot && ((0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
2747
+ }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !baseAst || !dataDisplayed, pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations }), pivot && ((0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
2690
2748
  pivot: pivot,
2691
2749
  rows: pivotData?.rows || [],
2692
2750
  columns: pivotData?.columns || [],
@@ -2701,6 +2759,8 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2701
2759
  }, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, CardComponent: CardComponent, showEdit: false, onClose: () => {
2702
2760
  setPivot(null);
2703
2761
  setPivotData(null);
2762
+ const formattedRows = formatRows(rows, columns, false);
2763
+ setFormattedRows(formattedRows);
2704
2764
  setBaseAst((0, util_1.deepCopy)(baseAst));
2705
2765
  }, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && ((0, jsx_runtime_1.jsx)("div", { style: {
2706
2766
  display: 'flex',
@@ -2720,8 +2780,10 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2720
2780
  : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2721
2781
  if (pivot) {
2722
2782
  setPivot({ ...pivot, sort: false });
2723
- const pivotedData = (0, PivotModal_1.generatePivotTable)({ ...pivot, sort: false }, rows, [null, null, null], false);
2783
+ const pivotedData = (0, PivotModal_1.generatePivotTable)({ ...pivot, sort: false }, rows, undefined, false);
2724
2784
  setPivotData(pivotedData || []);
2785
+ const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2786
+ setFormattedRows(formattedRows);
2725
2787
  setErrorMessage('');
2726
2788
  return;
2727
2789
  }
@@ -2745,8 +2807,10 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2745
2807
  sortDirection: direction,
2746
2808
  sortField: column,
2747
2809
  sortFieldType: sortFieldType,
2748
- }, rows, [null, null, null], false);
2810
+ }, rows, undefined, false);
2749
2811
  setPivotData(pivotedData || []);
2812
+ const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2813
+ setFormattedRows(formattedRows);
2750
2814
  setErrorMessage('');
2751
2815
  return;
2752
2816
  }
@@ -2844,9 +2908,11 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2844
2908
  sortDirection: direction,
2845
2909
  sortField: column,
2846
2910
  sortFieldType: sortFieldType,
2847
- }, rows, [null, null, null], false);
2911
+ }, rows, undefined, false);
2848
2912
  setErrorMessage('');
2849
2913
  setPivotData(pivotedData || []);
2914
+ const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2915
+ setFormattedRows(formattedRows);
2850
2916
  setActivePath(null);
2851
2917
  setOpenPopover(null);
2852
2918
  setBaseAst((0, util_1.deepCopy)(baseAst));
@@ -2934,7 +3000,7 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2934
3000
  : 'visible',
2935
3001
  }, children: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: "ask_ai_input_bar", value: aiPrompt, width: askAIInputWidth !== -1
2936
3002
  ? askAIInputWidth
2937
- : askAILoadingContainerWidth, onChange: (e) => setAiPrompt(e.target.value), placeholder: baseAst ? 'Ask a follow-up question...' : 'Ask a question...' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleAsk, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: loading && errorMessage.length === 0, rows: pivotData?.rows || formattedRows, columns: pivot
3003
+ : askAILoadingContainerWidth, onChange: (e) => setAiPrompt(e.target.value), placeholder: baseAst ? 'Ask a follow-up question...' : 'Ask a question...' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleAsk, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: (loading && errorMessage.length === 0) || initalChartLoad, rows: formattedRows, columns: pivot
2938
3004
  ? pivotData?.columns || emptyPivotColumns()
2939
3005
  : enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
2940
3006
  return { label: (0, textProcessing_1.snakeCaseToTitleCase)(c), field: c };
@@ -2949,8 +3015,23 @@ function ReportBuilder({ initialTableName = '', onSubmitChartBuilder = (_) => vo
2949
3015
  overflow: 'hidden',
2950
3016
  width: '100%',
2951
3017
  gap: 12,
2952
- }, children: [(0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: errorMessage }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAsk, label: 'Retry' })] })) : ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } })), baseAst && dataDisplayed && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: isCopying ? '✅ Copied' : 'Copy SQL', onClick: () => copyToClipboard(activeQuery) }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
3018
+ }, children: [(0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: errorMessage }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAsk, label: 'Retry' })] })) : ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } })), baseAst && dataDisplayed && !initalChartLoad && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: isCopying ? '✅ Copied' : 'Copy SQL', onClick: () => copyToClipboard(activeQuery) }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
2953
3019
  setIsChartBuilderOpen(true);
2954
- }, label: 'Add to dashboard' })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` }), (0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { rows: rows, columns: fields, fields: fields, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, title: "Add to dashboard", isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: onSubmitChartBuilder, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData, initialUniqueValues: uniqueValues[currentTable], pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, CardComponent: CardComponent, ModalComponent: ModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true })] }));
3020
+ }, label: dashboardItem ? 'Save changes' : 'Add to dashboard' })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` }), (0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { dashboardItem: dashboardItem
3021
+ ? {
3022
+ ...dashboardItem,
3023
+ pivot: pivot,
3024
+ yAxisFields: dashboardItem.pivot && !pivot
3025
+ ? []
3026
+ : dashboardItem.yAxisFields,
3027
+ columns: dashboardItem.columns.filter((col) => {
3028
+ return columns.find((c) => {
3029
+ return col.field === c.field;
3030
+ });
3031
+ }),
3032
+ queryString: activeQuery,
3033
+ rows: rows,
3034
+ }
3035
+ : undefined, rows: rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, title: dashboardItem ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: dashboardItem ? onSubmitEditReport : onSubmitCreateReport, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData, initialUniqueValues: uniqueValues[currentTable], pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, CardComponent: CardComponent, ModalComponent: ModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, buttonLabel: dashboardItem ? 'Save changes' : 'Add to dashboard' })] }));
2955
3036
  }
2956
3037
  exports.default = ReportBuilder;