@quillsql/react 2.12.28 → 2.12.29

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 (105) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +10 -8
  3. package/dist/cjs/ChartBuilder.d.ts +35 -1
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +38 -4
  6. package/dist/cjs/Context.d.ts +1 -19
  7. package/dist/cjs/Context.d.ts.map +1 -1
  8. package/dist/cjs/Context.js +32 -83
  9. package/dist/cjs/Dashboard.d.ts.map +1 -1
  10. package/dist/cjs/Dashboard.js +76 -49
  11. package/dist/cjs/ReportBuilder.d.ts +9 -0
  12. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  13. package/dist/cjs/ReportBuilder.js +330 -100
  14. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  15. package/dist/cjs/SQLEditor.js +98 -29
  16. package/dist/cjs/Table.d.ts.map +1 -1
  17. package/dist/cjs/Table.js +8 -8
  18. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  19. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  20. package/dist/cjs/components/Dashboard/DataLoader.js +20 -16
  21. package/dist/cjs/hooks/useDashboard.d.ts +1 -1
  22. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  23. package/dist/cjs/hooks/useDashboard.js +18 -4
  24. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  25. package/dist/cjs/internals/ReportBuilder/PivotModal.js +56 -57
  26. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  27. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  28. package/dist/cjs/utils/columnProcessing.js +8 -1
  29. package/dist/cjs/utils/dashboard.js +1 -1
  30. package/dist/cjs/utils/dataFetcher.d.ts +1 -1
  31. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  32. package/dist/cjs/utils/dataFetcher.js +9 -4
  33. package/dist/cjs/utils/dates.d.ts +1 -0
  34. package/dist/cjs/utils/dates.d.ts.map +1 -1
  35. package/dist/cjs/utils/dates.js +12 -3
  36. package/dist/cjs/utils/monacoAutocomplete.d.ts +20 -0
  37. package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -0
  38. package/dist/cjs/utils/monacoAutocomplete.js +145 -0
  39. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  40. package/dist/cjs/utils/pivotConstructor.js +58 -5
  41. package/dist/cjs/utils/queryConstructor.d.ts +4 -2
  42. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  43. package/dist/cjs/utils/queryConstructor.js +118 -57
  44. package/dist/cjs/utils/queryConstructor.uspec.d.ts +2 -0
  45. package/dist/cjs/utils/queryConstructor.uspec.d.ts.map +1 -0
  46. package/dist/cjs/utils/queryConstructor.uspec.js +225 -0
  47. package/dist/cjs/utils/tableProcessing.d.ts +1 -0
  48. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  49. package/dist/cjs/utils/tableProcessing.js +42 -5
  50. package/dist/esm/Chart.d.ts.map +1 -1
  51. package/dist/esm/Chart.js +10 -8
  52. package/dist/esm/ChartBuilder.d.ts +35 -1
  53. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  54. package/dist/esm/ChartBuilder.js +36 -3
  55. package/dist/esm/Context.d.ts +1 -19
  56. package/dist/esm/Context.d.ts.map +1 -1
  57. package/dist/esm/Context.js +32 -82
  58. package/dist/esm/Dashboard.d.ts.map +1 -1
  59. package/dist/esm/Dashboard.js +77 -50
  60. package/dist/esm/ReportBuilder.d.ts +9 -0
  61. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  62. package/dist/esm/ReportBuilder.js +333 -103
  63. package/dist/esm/SQLEditor.d.ts.map +1 -1
  64. package/dist/esm/SQLEditor.js +99 -30
  65. package/dist/esm/Table.d.ts.map +1 -1
  66. package/dist/esm/Table.js +8 -8
  67. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  68. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  69. package/dist/esm/components/Dashboard/DataLoader.js +20 -16
  70. package/dist/esm/hooks/useDashboard.d.ts +1 -1
  71. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  72. package/dist/esm/hooks/useDashboard.js +19 -5
  73. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  74. package/dist/esm/internals/ReportBuilder/PivotModal.js +57 -58
  75. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  76. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  77. package/dist/esm/utils/columnProcessing.js +6 -0
  78. package/dist/esm/utils/dashboard.js +1 -1
  79. package/dist/esm/utils/dataFetcher.d.ts +1 -1
  80. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  81. package/dist/esm/utils/dataFetcher.js +9 -4
  82. package/dist/esm/utils/dates.d.ts +1 -0
  83. package/dist/esm/utils/dates.d.ts.map +1 -1
  84. package/dist/esm/utils/dates.js +10 -2
  85. package/dist/esm/utils/monacoAutocomplete.d.ts +20 -0
  86. package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -0
  87. package/dist/esm/utils/monacoAutocomplete.js +140 -0
  88. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  89. package/dist/esm/utils/pivotConstructor.js +58 -5
  90. package/dist/esm/utils/queryConstructor.d.ts +4 -2
  91. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  92. package/dist/esm/utils/queryConstructor.js +115 -56
  93. package/dist/esm/utils/queryConstructor.uspec.d.ts +2 -0
  94. package/dist/esm/utils/queryConstructor.uspec.d.ts.map +1 -0
  95. package/dist/esm/utils/queryConstructor.uspec.js +223 -0
  96. package/dist/esm/utils/tableProcessing.d.ts +1 -0
  97. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  98. package/dist/esm/utils/tableProcessing.js +41 -5
  99. package/package.json +1 -1
  100. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
  101. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
  102. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.js +0 -213
  103. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
  104. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
  105. package/dist/esm/internals/ReportBuilder/PivotModal.spec.js +0 -211
@@ -8,7 +8,7 @@ import { CSS as DND_CSS } from '@dnd-kit/utilities';
8
8
  import { getQuarter } from 'date-fns';
9
9
  import { ClientContext, CustomFieldContext, SchemaContext, ThemeContext, } from './Context';
10
10
  import { getTableAliases, getTableNames, isBoolColumnType, isDateishColumnType, isNumericColumnType, isTextColumnType, } from './components/ReportBuilder/ast';
11
- import { ChartBuilderWithModal } from './ChartBuilder';
11
+ import { ChartBuilderWithModal, createInitialFormData } from './ChartBuilder';
12
12
  import { QuillTextInput } from './components/UiComponents';
13
13
  import { QuillSidebar, CustomContainer, QuillSelectColumn, QuillDraggableColumn, QuillSidebarHeading, QuillFilterPopover, QuillSortPopover, TagWrapper, EditPopover, AddFilterPopover, QuillLimitPopover, } from './components/ReportBuilder/ui';
14
14
  import { generateCurrentPeriodPostgres, generateEqualsPostgres, generateLastNPeriodsPostgres, generatePreviousPeriodPostgres, } from './components/ReportBuilder/postgres';
@@ -19,7 +19,7 @@ import { hashCode } from './utils/crypto';
19
19
  import { DATE_FMT, DAY_OF_WEEK, defaultAST, defaultBoolComparison, defaultColumn, defaultEntry, defaultNumericComparison, defaultTable, defaultVariant, MONTH_OF_YEAR, } from './components/ReportBuilder/constants';
20
20
  import AddColumnModal from './components/ReportBuilder/AddColumnModal';
21
21
  import { AddSortPopover, SortSentence, } from './components/ReportBuilder/AddSortPopover';
22
- import { PivotModal, generatePivotTableInMemory, } from './internals/ReportBuilder/PivotModal';
22
+ import { PivotModal, generatePivotTable, } from './internals/ReportBuilder/PivotModal';
23
23
  import { snakeAndCamelCaseToTitleCase, } from './utils/textProcessing';
24
24
  import { AddLimitPopover, LimitSentence, } from './components/ReportBuilder/AddLimitPopover';
25
25
  import { updateFirstChildWidth } from './utils/width';
@@ -28,13 +28,15 @@ import { QuillCard } from './components/QuillCard';
28
28
  import { getData } from './utils/dataFetcher';
29
29
  import { DATE_FORMAT_TYPES, quillFormat } from './utils/valueFormatter';
30
30
  import { getPossiblePivotFieldOptions, pivotToSql, } from './utils/pivotProcessing';
31
- import { getUniqueValuesByColumns } from './utils/tableProcessing';
31
+ import { getUniqueValuesByColumns, getDateRangeByColumns, getCountsByColumns, } from './utils/tableProcessing';
32
32
  import { useQuill } from './hooks/useQuill';
33
33
  import { getDataFromCloud } from './utils/dataFetcher';
34
34
  import { convertColumnInfoToColumnInternal, convertPostgresColumn, } from './utils/columnProcessing';
35
35
  import { getSelectFromAST, processApostrophe, processStarColumn, } from './utils/astProcessing';
36
36
  import PivotForm from './internals/ReportBuilder/PivotForm';
37
37
  import { getSchemaInfoWithCustomFields } from './utils/schema';
38
+ import { MAX_COLUMN_ROWS_LIMIT } from './utils/constants';
39
+ import { getDateBucketFromRange } from './utils/dates';
38
40
  export const QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUILL_SERVER_HOST) ||
39
41
  'https://quill-344421.uc.r.appspot.com';
40
42
  /**
@@ -91,6 +93,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
91
93
  const [rows, setRows] = useState([]);
92
94
  const [formattedRows, setFormattedRows] = useState([]);
93
95
  const [columns, setColumns] = useState([]);
96
+ const [tempReport, setTempReport] = useState({});
94
97
  const [topLevelBinaryOperator, setTopLevelBinaryOperator] = useState('AND');
95
98
  const [editPopoverKey, setEditPopoverKey] = useState(null);
96
99
  const [uniqueValues, setUniqueValues] = useState({});
@@ -116,19 +119,23 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
116
119
  const [pivotColumnField, setPivotColumnField] = useState(undefined);
117
120
  const [pivotValueField, setPivotValueField] = useState(undefined);
118
121
  const [pivotAggregation, setPivotAggregation] = useState(undefined);
122
+ const [dateRanges, setDateRanges] = useState(null);
119
123
  // eslint-disable-next-line no-unused-vars
120
124
  const [client, _setClient] = useContext(ClientContext);
121
125
  // JANK: This is temp and stupid
122
126
  const [overrideRecommendations, setOverrideRecommendations] = useState(true);
123
127
  const [customFields, setCustomFields] = useContext(CustomFieldContext);
124
128
  useEffect(() => {
129
+ if (!client) {
130
+ return;
131
+ }
125
132
  if (client.publicKey === '663416663aa9bc716e59a89d') {
126
133
  setOverrideRecommendations(false);
127
134
  }
128
135
  if (!loadingSchema) {
129
136
  fetchSchema();
130
137
  }
131
- }, [client.publicKey, client.customerId]);
138
+ }, [client]);
132
139
  useEffect(() => {
133
140
  updateFirstChildWidth(askAIContainerRef, setAskAIInputWidth, { gap: 12 });
134
141
  updateFirstChildWidth(askAILoadingContainerRef, setAskAILoadingContainerWidth, { gap: 12 });
@@ -146,8 +153,9 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
146
153
  window.removeEventListener('resize', handleResize);
147
154
  };
148
155
  }, []);
149
- const updatePivot = (changeField, fieldKey) => {
156
+ const updatePivot = async (changeField, fieldKey) => {
150
157
  const newPivot = pivot;
158
+ setTableLoading(true);
151
159
  // @ts-ignore
152
160
  newPivot[fieldKey] = changeField;
153
161
  if (fieldKey === 'rowField') {
@@ -165,11 +173,17 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
165
173
  newPivot.sort = undefined;
166
174
  }
167
175
  }
168
- setPivot(newPivot);
169
- const pivotedData = generatePivotTableInMemory(newPivot, rows, undefined, false);
176
+ let dateBucket = undefined;
177
+ const tempDateRange = dateRanges && dateRanges[newPivot.rowField];
178
+ if (tempDateRange) {
179
+ dateBucket = getDateBucketFromRange(tempDateRange.dateRange);
180
+ }
181
+ const pivotedData = await generatePivotTable(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
170
182
  setPivotData(pivotedData || []);
171
183
  const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
184
+ setPivot(newPivot);
172
185
  setFormattedRows(formattedRows);
186
+ setTableLoading(false);
173
187
  };
174
188
  const enforceOrderOnColumns = (columnNames) => {
175
189
  if (pivot) {
@@ -214,10 +228,13 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
214
228
  }, 0);
215
229
  };
216
230
  useEffect(() => {
231
+ if (!client) {
232
+ return;
233
+ }
217
234
  if (!initialLoad && client.publicKey) {
218
235
  clearAllState();
219
236
  }
220
- }, [client.publicKey, client.customerId]);
237
+ }, [client]);
221
238
  useEffect(() => {
222
239
  if (activePath !== null) {
223
240
  // update the modal with the new subtree
@@ -354,6 +371,34 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
354
371
  console.error(error);
355
372
  }
356
373
  };
374
+ const getUniqueStringValues = async (columns, tableName) => {
375
+ const convertedStringColumns = columns
376
+ .filter((column) => {
377
+ return isTextColumnType(column.fieldType);
378
+ })
379
+ .map((column) => convertColumnInfoToColumnInternal(column));
380
+ const stringNames = convertedStringColumns.map((column) => column.field);
381
+ const smallStringColumns = await getCountsByColumns(convertedStringColumns, `Select ${stringNames.join(', ')} from ${tableName}`, client, customFields);
382
+ const smallStringNames = smallStringColumns.map((column) => column.field);
383
+ const newUniqueValues = await getUniqueValuesByColumns(smallStringColumns, `Select ${smallStringNames.join(', ')} from ${tableName}`, [], client, customFields);
384
+ const joinedUniqueValues = deepCopy(uniqueValues);
385
+ joinedUniqueValues[tableName] = newUniqueValues;
386
+ return joinedUniqueValues;
387
+ };
388
+ const getDateRanges = async (columns, tableName) => {
389
+ const dateColumns = columns.filter((column) => {
390
+ return column.fieldType === 'date';
391
+ });
392
+ if (dateColumns.length === 0) {
393
+ return {};
394
+ }
395
+ const dateColumnNames = dateColumns.map((column) => {
396
+ //@ts-ignore
397
+ return column.field || column.name;
398
+ });
399
+ const dateRanges = await getDateRangeByColumns(dateColumns, `Select ${dateColumnNames.join(', ')} from ${tableName}`, client, customFields);
400
+ return dateRanges;
401
+ };
357
402
  // It's just like getColumnsInPivot but we expand the columnField
358
403
  // if there is one to include all the variants just like it would
359
404
  // show up in the table. (eg. category -> ...[Fuel, Food, Other])
@@ -380,18 +425,12 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
380
425
  setLoading(true);
381
426
  const tableInfo = tables.find((tableInfo) => tableInfo.name === initialTableName);
382
427
  if (tableInfo) {
383
- const convertedStringColumns = tableInfo.columns
384
- .filter((column) => {
385
- return isTextColumnType(column.fieldType);
386
- })
387
- .map((column) => convertColumnInfoToColumnInternal(column));
388
- const stringNames = convertedStringColumns.map((column) => column.field);
389
- const newUniqueValues = await getUniqueValuesByColumns(convertedStringColumns, `Select ${stringNames.join(', ')} from ${initialTableName}`, [], client, customFields);
390
- const joinedUniqueValues = deepCopy(uniqueValues);
391
- joinedUniqueValues[initialTableName] = newUniqueValues;
392
- if (hashCode(uniqueValues) !== hashCode(joinedUniqueValues)) {
393
- setUniqueValues(joinedUniqueValues);
428
+ const newUniqueValues = await getUniqueStringValues(tableInfo.columns, initialTableName);
429
+ if (hashCode(uniqueValues) !== hashCode(newUniqueValues)) {
430
+ setUniqueValues(newUniqueValues);
394
431
  }
432
+ const dateRangesTemp = await getDateRanges(tableInfo.columns, initialTableName);
433
+ setDateRanges(dateRangesTemp);
395
434
  }
396
435
  const columnsForTable = tables
397
436
  .find((t) => t.name === initialTableName)
@@ -483,17 +522,13 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
483
522
  setBaseAst(newAst);
484
523
  const initialRows = await fetchUponChange(newAst, undefined);
485
524
  const tableInfo = schemaInfo.find((table) => table.name === tableName);
486
- const stringColumns = tableInfo.columns
487
- .filter((column) => {
488
- return column.fieldType === 'varchar' || column.fieldType === 'text';
489
- })
490
- .map((column) => convertColumnInfoToColumnInternal(column));
491
- if (stringColumns.length !== 0 && tableName) {
492
- const stringNames = stringColumns.map((column) => column.field);
493
- const newUniqueValues = await getUniqueValuesByColumns(stringColumns, `Select ${stringNames.join(', ')} from ${tableName}`, [], client, customFields);
494
- const joinedUniqueValues = deepCopy(uniqueValues);
495
- joinedUniqueValues[tableName] = newUniqueValues;
496
- setUniqueValues(joinedUniqueValues);
525
+ let newUniqueValues = undefined;
526
+ let dateRangesTemp = undefined;
527
+ if (tableName) {
528
+ newUniqueValues = await getUniqueStringValues(tableInfo.columns, tableName);
529
+ setUniqueValues(newUniqueValues);
530
+ dateRangesTemp = await getDateRanges(tableInfo.columns, tableName);
531
+ setDateRanges(dateRangesTemp);
497
532
  }
498
533
  if (groupByPivot) {
499
534
  // @ts-ignore
@@ -505,9 +540,16 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
505
540
  // @ts-ignore
506
541
  setPivotValueField(groupByPivot.valueField);
507
542
  setPivot(groupByPivot);
508
- const pivotedData = generatePivotTableInMemory(
543
+ let dateBucket = undefined;
544
+ const tempDateRange = dateRangesTemp &&
545
+ groupByPivot.rowField &&
546
+ dateRangesTemp[groupByPivot.rowField];
547
+ if (tempDateRange) {
548
+ dateBucket = getDateBucketFromRange(tempDateRange.dateRange);
549
+ }
550
+ const pivotedData = await generatePivotTable(
509
551
  // @ts-ignore
510
- groupByPivot, initialRows, undefined, false);
552
+ groupByPivot, initialRows, tempDateRange, false, -1, undefined, dateBucket, report, client, newUniqueValues[tableName]);
511
553
  setPivotData(pivotedData || []);
512
554
  const formattedRows = formatRows(pivotedData.rows, report.columns, true,
513
555
  // @ts-ignore
@@ -915,6 +957,89 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
915
957
  return [{ label: snakeAndCamelCaseToTitleCase(pivot.valueField) }];
916
958
  }
917
959
  };
960
+ const [previousPage, setPreviousPage] = useState(0);
961
+ const [currentProcessing, setCurrentProcessing] = useState({
962
+ page: { currentPage: 0, rowsPerPage: 20 },
963
+ });
964
+ const [numberOfRows, setNumberOfRows] = useState(0);
965
+ const [tableLoading, setTableLoading] = useState(false);
966
+ const onPageChange = (page) => {
967
+ if (pivot) {
968
+ return;
969
+ }
970
+ if ((previousPage < page.currentPage &&
971
+ (page.currentPage * page.rowsPerPage) % MAX_COLUMN_ROWS_LIMIT === 0) ||
972
+ (previousPage > page.currentPage &&
973
+ (previousPage * page.rowsPerPage) % MAX_COLUMN_ROWS_LIMIT === 0)) {
974
+ handleRunQuery({ ...currentProcessing, page });
975
+ }
976
+ setPreviousPage(page.currentPage);
977
+ };
978
+ const onSortChange = (sort) => {
979
+ if (pivot) {
980
+ return;
981
+ }
982
+ handleRunQuery({ sort, page: { currentPage: 0, rowsPerPage: 20 } });
983
+ setPreviousPage(0);
984
+ };
985
+ const handleRunQuery = async (processing) => {
986
+ try {
987
+ setErrorMessage('');
988
+ setTableLoading(true);
989
+ const hostedBody = {
990
+ metadata: {
991
+ query: activeQuery,
992
+ task: 'query',
993
+ orgId: client.customerId || '*',
994
+ clientId: client.publicKey,
995
+ databaseType: client?.databaseType,
996
+ getCustomFields: !client.customerId || client.customerId === '*' ? false : true,
997
+ customFieldsByTable: customFields,
998
+ additionalProcessing: processing,
999
+ useUpdatedDataGathering: true,
1000
+ },
1001
+ };
1002
+ const cloudBody = { activeQuery };
1003
+ const resp = await getData(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
1004
+ if (resp && resp.errorMessage) {
1005
+ setTableLoading(false);
1006
+ setErrorMessage('Failed to run SQL query: ' + resp.errorMessage);
1007
+ setRows([]);
1008
+ setColumns([]);
1009
+ return;
1010
+ }
1011
+ if (resp.rowCount) {
1012
+ setNumberOfRows(resp.rowCount);
1013
+ }
1014
+ setErrorMessage('');
1015
+ setCurrentProcessing(processing);
1016
+ if (resp.rows.length === 0) {
1017
+ setErrorMessage('No data found');
1018
+ }
1019
+ const temp_rows = resp.rows && resp.rows.length ? resp.rows : [];
1020
+ const processedFields = resp.fields.map((elem) => convertPostgresColumn(elem));
1021
+ setRows(temp_rows);
1022
+ // setNumberOfRows(resp.compareRows[0]?.count || temp_rows.length);
1023
+ setFormattedRows(temp_rows.map((row) => {
1024
+ return processedFields.reduce((formattedRow, column) => {
1025
+ // Apply the format function to each field in the row
1026
+ const formattedValue = quillFormat({
1027
+ value: row[column.field],
1028
+ format: column.format,
1029
+ });
1030
+ formattedRow[column.field] = formattedValue;
1031
+ return formattedRow;
1032
+ }, {});
1033
+ }));
1034
+ setColumns(processedFields);
1035
+ setTableLoading(false);
1036
+ }
1037
+ catch (e) {
1038
+ setTableLoading(false);
1039
+ console.log('ERROR: ', e);
1040
+ return;
1041
+ }
1042
+ };
918
1043
  /**
919
1044
  * Render form fields based on the type of the node
920
1045
  * @param node the AST or subtree to render recursively
@@ -1780,7 +1905,8 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1780
1905
  task: 'patterns',
1781
1906
  getCustomFields: false,
1782
1907
  customFields,
1783
- // additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
1908
+ additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
1909
+ useUpdatedDataGathering: true,
1784
1910
  },
1785
1911
  };
1786
1912
  const cloudBody = {};
@@ -1789,23 +1915,23 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1789
1915
  throw new Error(data2.errorMessage);
1790
1916
  }
1791
1917
  rows = data2.rows;
1918
+ if (data2.rowCount) {
1919
+ setNumberOfRows(data2.rowCount);
1920
+ }
1792
1921
  const tables = getTableNames(baseAst);
1793
1922
  const table = tables.length >= 1 ? tables[0] : initialTableName;
1923
+ let newUniqueValues = uniqueValues;
1924
+ let dateRangesTemp = dateRanges;
1925
+ let curReport = undefined;
1794
1926
  if (table !== currentTable) {
1795
1927
  const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
1796
1928
  if (tableInfo) {
1797
- const convertedStringColumns = tableInfo.columns
1798
- .filter((column) => {
1799
- return isTextColumnType(column.fieldType);
1800
- })
1801
- .map((column) => convertColumnInfoToColumnInternal(column));
1802
- const stringNames = convertedStringColumns.map((column) => column.field);
1803
- const newUniqueValues = await getUniqueValuesByColumns(convertedStringColumns, `Select ${stringNames.join(', ')} from ${table}`, rows, client, customFields);
1804
- const joinedUniqueValues = deepCopy(uniqueValues);
1805
- joinedUniqueValues[table] = newUniqueValues;
1806
- if (hashCode(uniqueValues) !== hashCode(joinedUniqueValues)) {
1807
- setUniqueValues(joinedUniqueValues);
1929
+ newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
1930
+ if (hashCode(uniqueValues) !== hashCode(newUniqueValues)) {
1931
+ setUniqueValues(newUniqueValues);
1808
1932
  }
1933
+ dateRangesTemp = await getDateRanges(tableInfo.columns, table);
1934
+ setDateRanges(dateRangesTemp || {});
1809
1935
  }
1810
1936
  setCurrentTable(table);
1811
1937
  }
@@ -1818,6 +1944,22 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1818
1944
  setPivotData(null);
1819
1945
  setRows(data2.rows);
1820
1946
  setColumns(processedFields);
1947
+ if (data2.rowCount) {
1948
+ const processedFormData = report
1949
+ ? report
1950
+ : createInitialFormData(processedFields);
1951
+ setNumberOfRows(data2.rowCount);
1952
+ curReport = {
1953
+ ...formData,
1954
+ ...processedFormData,
1955
+ itemQuery: data2.itemQuery,
1956
+ rowCount: data2.rowCount,
1957
+ filtersApplied: [],
1958
+ rows: data2.rows,
1959
+ columns: processedFields,
1960
+ };
1961
+ setTempReport(curReport);
1962
+ }
1821
1963
  const formattedRows = formatRows(data2.rows, processedFields, false);
1822
1964
  setFormattedRows(formattedRows);
1823
1965
  return;
@@ -1829,12 +1971,36 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1829
1971
  return acc;
1830
1972
  }, {});
1831
1973
  uniqueFormatted[pivot.columnField] = uniqueRecords;
1832
- const pivotedData = generatePivotTableInMemory(pivot, data2.rows, undefined, false);
1974
+ let dateBucket = undefined;
1975
+ const tempDateRange = dateRangesTemp &&
1976
+ pivot.rowField &&
1977
+ dateRangesTemp[pivot.rowField];
1978
+ if (tempDateRange) {
1979
+ dateBucket = getDateBucketFromRange(tempDateRange.dateRange);
1980
+ }
1981
+ const pivotedData = await generatePivotTable(
1982
+ // @ts-ignore
1983
+ pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, uniqueFormatted[pivot.columnField]);
1833
1984
  console.info(`%c[Pivot]: ${JSON.stringify(pivot)}`, 'color: dimgray');
1834
1985
  const processedFields = data2.fields.map((elem) => convertPostgresColumn(elem));
1835
1986
  setPivotData(pivotedData);
1836
1987
  setRows(data2.rows);
1837
1988
  setColumns(processedFields);
1989
+ if (data2.rowCount) {
1990
+ const processedFormData = report
1991
+ ? report
1992
+ : createInitialFormData(processedFields);
1993
+ setNumberOfRows(data2.rowCount);
1994
+ setTempReport({
1995
+ ...formData,
1996
+ ...processedFormData,
1997
+ itemQuery: data2.itemQuery,
1998
+ rowCount: data2.rowCount,
1999
+ filtersApplied: [],
2000
+ rows: data2.rows,
2001
+ columns: processedFields,
2002
+ });
2003
+ }
1838
2004
  const formattedRows = formatRows(pivotedData.rows, processedFields, true, pivot.aggregationType);
1839
2005
  setSelectedColumns(processedFields.map((column) => {
1840
2006
  return `${table}.${column.field}`;
@@ -1845,6 +2011,21 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
1845
2011
  const processedFields = data2.fields.map((elem) => convertPostgresColumn(elem));
1846
2012
  setRows(data2.rows);
1847
2013
  setColumns(processedFields);
2014
+ if (data2.rowCount) {
2015
+ const processedFormData = report
2016
+ ? report
2017
+ : createInitialFormData(processedFields);
2018
+ setNumberOfRows(data2.rowCount);
2019
+ setTempReport({
2020
+ ...formData,
2021
+ ...processedFormData,
2022
+ itemQuery: data2.itemQuery,
2023
+ rowCount: data2.rowCount,
2024
+ filtersApplied: [],
2025
+ rows: data2.rows,
2026
+ columns: processedFields,
2027
+ });
2028
+ }
1848
2029
  setSelectedColumns(processedFields.map((column) => {
1849
2030
  return `${table}.${column.field}`;
1850
2031
  }));
@@ -2079,7 +2260,9 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2079
2260
  publicKey: client.publicKey,
2080
2261
  orgId: client.customerId,
2081
2262
  task: 'patterns',
2082
- // additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
2263
+ additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
2264
+ useUpdatedDataGathering: true,
2265
+ pivot: groupByPivot,
2083
2266
  },
2084
2267
  };
2085
2268
  const cloudBody = {};
@@ -2088,20 +2271,16 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2088
2271
  throw new Error('Error querying data from patterns');
2089
2272
  }
2090
2273
  let currentUniqueValues = uniqueValues;
2274
+ let dateRangesTemp = dateRanges;
2091
2275
  if (table !== currentTable) {
2092
2276
  const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
2093
2277
  if (tableInfo) {
2094
- const convertedStringColumns = tableInfo.columns
2095
- .filter((column) => {
2096
- return isTextColumnType(column.fieldType);
2097
- })
2098
- .map((column) => convertColumnInfoToColumnInternal(column));
2099
- const stringNames = convertedStringColumns.map((column) => column.field);
2100
- const newUniqueValues = await getUniqueValuesByColumns(convertedStringColumns, `Select ${stringNames.join(', ')} from ${table}`, rows, client, customFields);
2101
- currentUniqueValues[table] = newUniqueValues;
2102
- if (hashCode(uniqueValues) !== hashCode(currentUniqueValues)) {
2103
- setUniqueValues(currentUniqueValues);
2278
+ const newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
2279
+ if (hashCode(uniqueValues) !== hashCode(newUniqueValues)) {
2280
+ setUniqueValues(newUniqueValues);
2104
2281
  }
2282
+ dateRangesTemp = await getDateRanges(tableInfo.columns, table);
2283
+ setDateRanges(dateRangesTemp);
2105
2284
  }
2106
2285
  setCurrentTable(table);
2107
2286
  }
@@ -2144,15 +2323,43 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2144
2323
  errored = true;
2145
2324
  }
2146
2325
  if (groupByPivot && possiblePivot) {
2147
- setPivotRowField(groupByPivot?.rowField);
2148
- setPivotColumnField(groupByPivot?.columnField);
2149
- setPivotValueField(groupByPivot?.valueField);
2150
- setPivotAggregation(groupByPivot?.aggregationType);
2151
- const pivotedData = generatePivotTableInMemory(groupByPivot, data2.rows, undefined, false);
2326
+ let curReport = report ? report : undefined;
2327
+ if (data2.rowCount) {
2328
+ const processedFormData = report
2329
+ ? report
2330
+ : createInitialFormData(processedFields);
2331
+ setNumberOfRows(data2.rowCount);
2332
+ curReport = {
2333
+ ...formData,
2334
+ ...processedFormData,
2335
+ itemQuery: data2.itemQuery,
2336
+ rowCount: data2.rowCount,
2337
+ filtersApplied: [],
2338
+ rows: data2.rows,
2339
+ columns: processedFields,
2340
+ };
2341
+ setTempReport(curReport || null);
2342
+ }
2343
+ let dateBucket = undefined;
2344
+ const tempDateRange = dateRangesTemp &&
2345
+ groupByPivot.rowField &&
2346
+ dateRangesTemp[groupByPivot.rowField];
2347
+ if (tempDateRange) {
2348
+ dateBucket = getDateBucketFromRange(tempDateRange.dateRange);
2349
+ }
2350
+ const pivotedData = await generatePivotTable(
2351
+ // @ts-ignore
2352
+ groupByPivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, groupByPivot.columnField
2353
+ ? currentUniqueValues[groupByPivot.columnField]
2354
+ : undefined);
2152
2355
  console.info(`%c[Pivot]: ${JSON.stringify(groupByPivot)}`, 'color: dimgray');
2153
2356
  setPivotData(pivotedData);
2154
2357
  setPivot(groupByPivot);
2155
2358
  setRows(data2.rows);
2359
+ setPivotRowField(groupByPivot?.rowField);
2360
+ setPivotColumnField(groupByPivot?.columnField);
2361
+ setPivotValueField(groupByPivot?.valueField);
2362
+ setPivotAggregation(groupByPivot?.aggregationType);
2156
2363
  setColumns(processedFields);
2157
2364
  const formattedRows = formatRows(pivotedData.rows, processedFields, true, groupByPivot.aggregationType);
2158
2365
  setFormattedRows(formattedRows);
@@ -2161,6 +2368,17 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2161
2368
  const processedFields = data2.fields.map((elem) => convertPostgresColumn(elem));
2162
2369
  setRows(data2.rows);
2163
2370
  setColumns(processedFields);
2371
+ if (data2.rowCount) {
2372
+ setNumberOfRows(data2.rowCount);
2373
+ setTempReport({
2374
+ ...formData,
2375
+ itemQuery: data2.itemQuery,
2376
+ rowCount: data2.rowCount,
2377
+ filtersApplied: [],
2378
+ rows: data2.rows,
2379
+ columns: processedFields,
2380
+ });
2381
+ }
2164
2382
  const formattedRows = formatRows(data2.rows, processedFields, false);
2165
2383
  setFormattedRows(formattedRows);
2166
2384
  }
@@ -2435,17 +2653,8 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2435
2653
  },
2436
2654
  // TODOs
2437
2655
  selectPivot: (pivot) => {
2438
- if (!pivot)
2439
- return;
2440
- const newAst = { ...baseAst };
2441
- newAst.orderby = null;
2442
- setBaseAst(newAst); // trigger refetch
2443
- setPivot(pivot);
2444
- const pivotedData = generatePivotTableInMemory(pivot, rows, undefined, false);
2445
- setPivotData(pivotedData || []);
2446
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2447
- setFormattedRows(formattedRows);
2448
- }, 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 && (_jsx(PivotForm, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
2656
+ return;
2657
+ }, 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, report: tempReport ?? report }), pivot && (_jsx(PivotForm, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
2449
2658
  setPivotRowField(value);
2450
2659
  }, setPivotColumnField: setPivotColumnField, setPivotValueField: setPivotValueField, setPivotAggregation: setPivotAggregation, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotAggregation: pivotAggregation, onDelete: () => {
2451
2660
  setPivot(null);
@@ -2739,7 +2948,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2739
2948
  setPivotData(null);
2740
2949
  const formattedRows = formatRows(rows, columns, false);
2741
2950
  setFormattedRows(formattedRows);
2742
- }, selectPivot: (pivot) => {
2951
+ }, selectPivot: async (pivot, uniqueValues, dateRange, pivotTable) => {
2743
2952
  if (!pivot)
2744
2953
  return;
2745
2954
  const newAst = { ...baseAst };
@@ -2749,13 +2958,19 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2749
2958
  pivot['sortDirection'] = 'ASC';
2750
2959
  }
2751
2960
  setBaseAst(newAst); // trigger refetch
2961
+ let dateBucket = undefined;
2962
+ if (dateRange) {
2963
+ dateBucket = getDateBucketFromRange(dateRange);
2964
+ }
2965
+ if (!pivotTable) {
2966
+ pivotTable = await generatePivotTable(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues);
2967
+ }
2968
+ setPivotData(pivotTable || []);
2752
2969
  setPivot(pivot);
2753
- const pivotedData = generatePivotTableInMemory(pivot, rows, undefined, false);
2754
- setPivotData(pivotedData || []);
2755
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2970
+ const formattedRows = formatRows(pivotTable.rows, columns, true, pivot.aggregationType);
2756
2971
  setFormattedRows(formattedRows);
2757
2972
  setErrorMessage('');
2758
- }, 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 && (_jsx(PivotForm, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
2973
+ }, 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, report: tempReport }), pivot && (_jsx(PivotForm, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
2759
2974
  setPivotRowField(value);
2760
2975
  updatePivot(value, 'rowField');
2761
2976
  }, setPivotColumnField: (value) => {
@@ -2787,10 +3002,18 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2787
3002
  `.${pivot.rowField}`,
2788
3003
  `.${pivot.valueField || 'count'}`,
2789
3004
  ]
2790
- : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: () => {
3005
+ : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: async () => {
2791
3006
  if (pivot) {
2792
- setPivot({ ...pivot, sort: false });
2793
- const pivotedData = generatePivotTableInMemory({ ...pivot, sort: false }, rows, undefined, false);
3007
+ const tempPivot = { ...pivot, sort: false };
3008
+ let dateBucket = undefined;
3009
+ const tempDateRange = dateRanges &&
3010
+ pivot.rowField &&
3011
+ dateRanges[pivot.rowField];
3012
+ if (tempDateRange) {
3013
+ dateBucket = getDateBucketFromRange(tempDateRange.dateRange);
3014
+ }
3015
+ setPivot(tempPivot);
3016
+ const pivotedData = await generatePivotTable(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
2794
3017
  setPivotData(pivotedData || []);
2795
3018
  const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2796
3019
  setFormattedRows(formattedRows);
@@ -2799,25 +3022,27 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2799
3022
  }
2800
3023
  setBaseAst(deepCopy(baseAst));
2801
3024
  fetchSqlQuery(deepCopy(baseAst));
2802
- }, onSave: (column, direction) => {
3025
+ }, onSave: async (column, direction) => {
2803
3026
  if (pivot) {
2804
3027
  const sortFieldType = column === (pivot.valueField || 'count')
2805
3028
  ? 'number'
2806
3029
  : pivot.rowFieldType;
2807
- setPivot({
2808
- ...pivot,
2809
- sort: true,
2810
- sortDirection: direction,
2811
- sortField: column,
2812
- sortFieldType: sortFieldType,
2813
- });
2814
- const pivotedData = generatePivotTableInMemory({
3030
+ const tempPivot = {
2815
3031
  ...pivot,
2816
3032
  sort: true,
2817
3033
  sortDirection: direction,
2818
3034
  sortField: column,
2819
3035
  sortFieldType: sortFieldType,
2820
- }, rows, undefined, false);
3036
+ };
3037
+ setPivot(tempPivot);
3038
+ let dateBucket = undefined;
3039
+ const tempDateRange = dateRanges &&
3040
+ pivot.rowField &&
3041
+ dateRanges[pivot.rowField];
3042
+ if (tempDateRange) {
3043
+ dateBucket = getDateBucketFromRange(tempDateRange.dateRange);
3044
+ }
3045
+ const pivotedData = await generatePivotTable(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
2821
3046
  setPivotData(pivotedData || []);
2822
3047
  const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2823
3048
  setFormattedRows(formattedRows);
@@ -2898,27 +3123,29 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
2898
3123
  `.${pivot.rowField}`,
2899
3124
  `.${pivot.valueField || 'count'}`,
2900
3125
  ]
2901
- : selectedColumns, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, onSave: (column, direction) => {
3126
+ : selectedColumns, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, onSave: async (column, direction) => {
2902
3127
  if (column === '')
2903
3128
  return;
2904
3129
  if (pivot) {
2905
3130
  const sortFieldType = column === (pivot.valueField || 'count')
2906
3131
  ? 'number'
2907
3132
  : pivot.rowFieldType;
2908
- setPivot({
3133
+ const tempPivot = {
2909
3134
  ...pivot,
2910
3135
  sort: true,
2911
3136
  sortDirection: direction,
2912
3137
  sortField: column,
2913
3138
  sortFieldType: sortFieldType,
2914
- });
2915
- const pivotedData = generatePivotTableInMemory({
2916
- ...pivot,
2917
- sort: true,
2918
- sortDirection: direction,
2919
- sortField: column,
2920
- sortFieldType: sortFieldType,
2921
- }, rows, undefined, false);
3139
+ };
3140
+ setPivot(tempPivot);
3141
+ let dateBucket = undefined;
3142
+ const tempDateRange = dateRanges &&
3143
+ pivot.rowField &&
3144
+ dateRanges[pivot.rowField];
3145
+ if (tempDateRange) {
3146
+ dateBucket = getDateBucketFromRange(tempDateRange.dateRange);
3147
+ }
3148
+ const pivotedData = await generatePivotTable(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
2922
3149
  setErrorMessage('');
2923
3150
  setPivotData(pivotedData || []);
2924
3151
  const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
@@ -3011,14 +3238,16 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
3011
3238
  ? askAIInputWidth
3012
3239
  : askAILoadingContainerWidth, onChange: (e) => setAiPrompt(e.target.value), placeholder: askedAQuestion
3013
3240
  ? 'Ask a follow-up question...'
3014
- : 'Ask a question...' }), _jsx(ButtonComponent, { onClick: handleAsk, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && (_jsx(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && (_jsx(TableComponent, { isLoading: (loading && errorMessage.length === 0) || initalChartLoad, rows: formattedRows, columns: pivot
3241
+ : 'Ask a question...' }), _jsx(ButtonComponent, { onClick: handleAsk, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && (_jsx(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && (_jsx(TableComponent, { isLoading: tableLoading ||
3242
+ (loading && errorMessage.length === 0) ||
3243
+ initalChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, columns: pivot
3015
3244
  ? pivotData?.columns || emptyPivotColumns()
3016
3245
  : enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
3017
3246
  return {
3018
3247
  label: snakeAndCamelCaseToTitleCase(c),
3019
3248
  field: c,
3020
3249
  };
3021
- }) })), _jsxs("div", { style: {
3250
+ }), onPageChange: onPageChange, onSortChange: onSortChange })), _jsxs("div", { style: {
3022
3251
  display: 'flex',
3023
3252
  flexDirection: 'row',
3024
3253
  gap: '12px',
@@ -3034,6 +3263,7 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
3034
3263
  }, label: report ? 'Save changes' : 'Add to dashboard' })] }))] })] }), _jsx("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && (_jsx(ChartBuilderWithModal, { report: report
3035
3264
  ? {
3036
3265
  ...report,
3266
+ ...tempReport,
3037
3267
  pivot: pivot,
3038
3268
  yAxisFields: report.pivot && !pivot ? [] : report.yAxisFields,
3039
3269
  columns: report.columns.filter((col) => {
@@ -3044,5 +3274,5 @@ export default function ReportBuilder({ initialTableName = '', onSubmitEditRepor
3044
3274
  queryString: activeQuery,
3045
3275
  rows: rows,
3046
3276
  }
3047
- : undefined, rows: rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, title: report ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: report ? 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: ChartBuilderModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, buttonLabel: report ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement }))] }));
3277
+ : tempReport, rows: rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, title: report ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: report ? 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: ChartBuilderModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, buttonLabel: report ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement }))] }));
3048
3278
  }