@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.
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +16 -13
- package/dist/cjs/ChartBuilder.d.ts +7 -20
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +25 -25
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +3 -3
- package/dist/cjs/Dashboard.d.ts +2 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.d.ts +11 -5
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +208 -127
- package/dist/cjs/SQLEditor.d.ts +4 -11
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +57 -124
- package/dist/cjs/Table.d.ts +1 -1
- package/dist/cjs/Table.js +4 -4
- package/dist/cjs/components/Dashboard/DashboardFilter.js +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +9 -12
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +13 -11
- package/dist/cjs/components/QuillTable.d.ts +6 -3
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +3 -3
- package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -2
- package/dist/cjs/components/ReportBuilder/ui.js +1 -1
- package/dist/cjs/components/UiComponents.d.ts +1 -0
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +17 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +27 -24
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.js +9 -7
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +11 -3
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +52 -67
- package/dist/cjs/models/Columns.d.ts +11 -0
- package/dist/cjs/models/Columns.d.ts.map +1 -0
- package/dist/cjs/models/Columns.js +2 -0
- package/dist/cjs/models/Tables.d.ts +0 -8
- package/dist/cjs/models/Tables.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.d.ts +3 -0
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/astProcessing.js +20 -0
- package/dist/cjs/utils/columnProcessing.d.ts +9 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/columnProcessing.js +207 -0
- package/dist/cjs/utils/dashboard.js +9 -9
- package/dist/cjs/utils/pivotProcessing.d.ts +2 -1
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +3 -8
- package/dist/cjs/utils/tableProcessing.d.ts +2 -2
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +1 -3
- package/dist/cjs/utils/valueFormatter.d.ts +2 -1
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +12 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +16 -13
- package/dist/esm/ChartBuilder.d.ts +7 -20
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +25 -25
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +3 -3
- package/dist/esm/Dashboard.d.ts +2 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.d.ts +11 -5
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +205 -124
- package/dist/esm/SQLEditor.d.ts +4 -11
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +57 -123
- package/dist/esm/Table.d.ts +1 -1
- package/dist/esm/Table.js +4 -4
- package/dist/esm/components/Dashboard/DashboardFilter.js +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +9 -12
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +13 -11
- package/dist/esm/components/QuillTable.d.ts +6 -3
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +3 -3
- package/dist/esm/components/ReportBuilder/convert.d.ts +2 -2
- package/dist/esm/components/ReportBuilder/ui.js +1 -1
- package/dist/esm/components/UiComponents.d.ts +1 -0
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +15 -0
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts +27 -24
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotList.js +9 -7
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +11 -3
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +55 -70
- package/dist/esm/models/Columns.d.ts +11 -0
- package/dist/esm/models/Columns.d.ts.map +1 -0
- package/dist/esm/models/Columns.js +1 -0
- package/dist/esm/models/Tables.d.ts +0 -8
- package/dist/esm/models/Tables.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.d.ts +3 -0
- package/dist/esm/utils/astProcessing.d.ts.map +1 -0
- package/dist/esm/utils/astProcessing.js +16 -0
- package/dist/esm/utils/columnProcessing.d.ts +9 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -0
- package/dist/esm/utils/columnProcessing.js +201 -0
- package/dist/esm/utils/dashboard.js +9 -9
- package/dist/esm/utils/pivotProcessing.d.ts +2 -1
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +3 -8
- package/dist/esm/utils/tableProcessing.d.ts +2 -2
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +1 -3
- package/dist/esm/utils/valueFormatter.d.ts +2 -1
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +11 -0
- package/package.json +1 -1
- package/dist/cjs/utils/types.d.ts +0 -4
- package/dist/cjs/utils/types.d.ts.map +0 -1
- package/dist/cjs/utils/types.js +0 -52
- package/dist/cjs/utils/valueFormatterCSV.d.ts +0 -17
- package/dist/cjs/utils/valueFormatterCSV.d.ts.map +0 -1
- package/dist/cjs/utils/valueFormatterCSV.js +0 -99
- package/dist/esm/utils/types.d.ts +0 -4
- package/dist/esm/utils/types.d.ts.map +0 -1
- package/dist/esm/utils/types.js +0 -48
- package/dist/esm/utils/valueFormatterCSV.d.ts +0 -17
- package/dist/esm/utils/valueFormatterCSV.d.ts.map +0 -1
- 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 = '',
|
|
74
|
-
const { data:
|
|
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 [
|
|
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 || !!
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
379
|
+
setInitalChartLoad(true);
|
|
380
|
+
if (!dashboardItem || dashboardItem.referencedTables.length !== 1) {
|
|
381
|
+
setInitalChartLoad(false);
|
|
333
382
|
return;
|
|
334
383
|
}
|
|
335
|
-
const
|
|
336
|
-
if (
|
|
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(
|
|
410
|
+
setPivotRowField(dashboardItem.pivot.rowField);
|
|
339
411
|
// @ts-ignore
|
|
340
|
-
setPivotAggregation(
|
|
412
|
+
setPivotAggregation(dashboardItem.pivot.aggregationType);
|
|
341
413
|
// @ts-ignore
|
|
342
|
-
setPivotColumnField(
|
|
414
|
+
setPivotColumnField(dashboardItem.pivot.columnField);
|
|
343
415
|
// @ts-ignore
|
|
344
|
-
setPivotValueField(
|
|
345
|
-
setPivot(
|
|
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 (
|
|
435
|
+
if (dashboardItem && dashboardItem.referencedTables.length === 1) {
|
|
353
436
|
loadChart();
|
|
354
437
|
}
|
|
355
|
-
}, [
|
|
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 =
|
|
444
|
+
const tableInfo = tables.find((tableInfo) => tableInfo.name === initialTableName);
|
|
362
445
|
if (tableInfo) {
|
|
363
|
-
const
|
|
446
|
+
const convertedStringColumns = tableInfo.columns
|
|
447
|
+
.filter((column) => {
|
|
364
448
|
return (0, ast_1.isTextColumnType)(column.fieldType);
|
|
365
|
-
})
|
|
366
|
-
|
|
367
|
-
const
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
1786
|
+
const convertedStringColumns = tableInfo.columns
|
|
1787
|
+
.filter((column) => {
|
|
1705
1788
|
return (0, ast_1.isTextColumnType)(column.fieldType);
|
|
1706
|
-
})
|
|
1707
|
-
|
|
1708
|
-
const
|
|
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,
|
|
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
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
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,
|
|
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,
|
|
1749
|
-
setPivotData(pivotedData
|
|
1823
|
+
const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
|
|
1824
|
+
setPivotData(pivotedData);
|
|
1750
1825
|
setRows(data2.rows);
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
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,
|
|
1834
|
+
const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
|
|
1766
1835
|
setRows(data2.rows);
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
return
|
|
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
|
-
|
|
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
|
|
2076
|
+
const convertedStringColumns = tableInfo.columns
|
|
2077
|
+
.filter((column) => {
|
|
2013
2078
|
return (0, ast_1.isTextColumnType)(column.fieldType);
|
|
2014
|
-
})
|
|
2015
|
-
|
|
2016
|
-
const
|
|
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,
|
|
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
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
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,
|
|
2143
|
+
const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
|
|
2089
2144
|
setRows(data2.rows);
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
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
|
-
|
|
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:
|
|
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,
|
|
2423
|
+
const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false);
|
|
2376
2424
|
setPivotData(pivotedData || []);
|
|
2377
|
-
|
|
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) ||
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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,
|
|
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,
|
|
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:
|
|
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, {
|
|
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;
|