@quillsql/react 2.11.9 → 2.11.13
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/BarList.d.ts +2 -1
- package/dist/cjs/BarList.d.ts.map +1 -1
- package/dist/cjs/BarList.js +9 -3
- package/dist/cjs/Chart.d.ts +11 -5
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +57 -20
- package/dist/cjs/ChartBuilder.d.ts +16 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +423 -281
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +1 -0
- package/dist/cjs/Dashboard.d.ts +2 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +6 -20
- package/dist/cjs/PieChart.d.ts.map +1 -1
- package/dist/cjs/PieChart.js +2 -1
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +15 -1
- package/dist/cjs/ReportBuilder.d.ts +4 -3
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +238 -108
- package/dist/cjs/SQLEditor.d.ts +2 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +61 -90
- package/dist/cjs/components/Chart/BarChart.d.ts +2 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +10 -3
- package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltipFrame.js +1 -0
- package/dist/cjs/components/Chart/LineChart.d.ts +3 -4
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +35 -15
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.js +0 -3
- package/dist/cjs/components/Dashboard/DashboardSection.js +4 -4
- package/dist/cjs/components/Dashboard/DashboardSectionContainer.js +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +8 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +12 -3
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts +12 -1
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +105 -9
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +78 -3
- package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelect.js +7 -1
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +3 -1
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +3 -3
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +3 -0
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +43 -0
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +14 -7
- package/dist/cjs/components/ReportBuilder/ast.d.ts +4 -0
- package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ast.js +10 -1
- package/dist/cjs/components/ReportBuilder/bigDateMap.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/bigDateMap.js +2 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts +4 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +45 -13
- package/dist/cjs/components/ReportBuilder/pivot.d.ts +3 -0
- package/dist/cjs/components/ReportBuilder/pivot.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +7 -5
- package/dist/cjs/components/ReportBuilder/util.d.ts +1 -0
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +55 -6
- package/dist/cjs/components/UiComponents.d.ts +3 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +4 -4
- package/dist/cjs/hooks/useQuill.js +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +91 -91
- package/dist/cjs/utils/axisFormatter.js +74 -30
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +10 -0
- package/dist/cjs/utils/getDomain.js +25 -4
- package/dist/cjs/utils/valueFormatter.d.ts +2 -1
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/BarList.d.ts +2 -1
- package/dist/esm/BarList.d.ts.map +1 -1
- package/dist/esm/BarList.js +9 -3
- package/dist/esm/Chart.d.ts +11 -5
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +57 -20
- package/dist/esm/ChartBuilder.d.ts +16 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +421 -280
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +1 -0
- package/dist/esm/Dashboard.d.ts +2 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +6 -20
- package/dist/esm/PieChart.d.ts.map +1 -1
- package/dist/esm/PieChart.js +2 -1
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +16 -2
- package/dist/esm/ReportBuilder.d.ts +4 -3
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +242 -112
- package/dist/esm/SQLEditor.d.ts +2 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +62 -91
- package/dist/esm/components/Chart/BarChart.d.ts +2 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +10 -3
- package/dist/esm/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltipFrame.js +1 -0
- package/dist/esm/components/Chart/LineChart.d.ts +3 -4
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +35 -15
- package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.js +0 -3
- package/dist/esm/components/Dashboard/DashboardSection.js +4 -4
- package/dist/esm/components/Dashboard/DashboardSectionContainer.js +1 -1
- package/dist/esm/components/Dashboard/DataLoader.d.ts +8 -1
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +13 -4
- package/dist/esm/components/Dashboard/MetricComponent.d.ts +12 -1
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +101 -8
- package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +74 -2
- package/dist/esm/components/QuillSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillSelect.js +7 -1
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +3 -1
- package/dist/esm/components/ReportBuilder/AddColumnPopover.js +3 -3
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +3 -0
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/AddLimitPopover.js +38 -0
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +15 -8
- package/dist/esm/components/ReportBuilder/ast.d.ts +4 -0
- package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ast.js +8 -0
- package/dist/esm/components/ReportBuilder/bigDateMap.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/bigDateMap.js +2 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts +4 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +45 -13
- package/dist/esm/components/ReportBuilder/pivot.d.ts +3 -0
- package/dist/esm/components/ReportBuilder/pivot.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +7 -5
- package/dist/esm/components/ReportBuilder/util.d.ts +1 -0
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +53 -5
- package/dist/esm/components/UiComponents.d.ts +3 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +4 -4
- package/dist/esm/hooks/useQuill.js +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +91 -91
- package/dist/esm/utils/axisFormatter.js +74 -30
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +10 -0
- package/dist/esm/utils/getDomain.js +25 -4
- package/dist/esm/utils/valueFormatter.d.ts +2 -1
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -25,6 +25,9 @@ const AddSortPopover_1 = require("./components/ReportBuilder/AddSortPopover");
|
|
|
25
25
|
const PivotModal_1 = require("./internals/ReportBuilder/PivotModal");
|
|
26
26
|
const PivotList_1 = require("./internals/ReportBuilder/PivotList");
|
|
27
27
|
const QuillTable_1 = __importDefault(require("./components/QuillTable"));
|
|
28
|
+
const QuillSelect_1 = require("./components/QuillSelect");
|
|
29
|
+
const textProcessing_1 = require("./utils/textProcessing");
|
|
30
|
+
const AddLimitPopover_1 = require("./components/ReportBuilder/AddLimitPopover");
|
|
28
31
|
/**
|
|
29
32
|
* Quill Report Builder
|
|
30
33
|
*
|
|
@@ -33,7 +36,7 @@ const QuillTable_1 = __importDefault(require("./components/QuillTable"));
|
|
|
33
36
|
* they can click a button and add that report to their dashboard or export it
|
|
34
37
|
* as a CSV.
|
|
35
38
|
*/
|
|
36
|
-
function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () => void null, destinationDashboard = undefined, organizationName = '', Button = UiComponents_1.MemoizedButton, SecondaryButton = UiComponents_1.MemoizedSecondaryButton, TextInput = ui_1.QuillTextInput, Select =
|
|
39
|
+
function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () => void null, destinationDashboard = undefined, organizationName = '', Button = UiComponents_1.MemoizedButton, SecondaryButton = UiComponents_1.MemoizedSecondaryButton, TextInput = ui_1.QuillTextInput, Select = QuillSelect_1.QuillSelectComponent, Table = QuillTable_1.default, Popover = ui_1.QuillPopover, Tabs = ui_1.QuillTabs, Checkbox = UiComponents_1.MemoizedCheckbox, Sidebar = ui_1.QuillSidebar, Container = ui_1.CustomContainer, HandleButton = ui_1.QuillHandleButton, SelectColumn = ui_1.QuillSelectColumn, DraggableColumn = ui_1.QuillDraggableColumn, ButtonLoadingState = ui_1.QuillButtonLoadingState, TableLoadingState = ui_1.QuillTableLoadingState, SidebarHeading = ui_1.QuillSidebarHeading, SidebarSubHeading = ui_1.QuillSidebarSubHeading, FilterPopover = ui_1.QuillFilterPopover, SortPopover = ui_1.QuillSortPopover, Label = UiComponents_1.MemoizedLabel, Header = UiComponents_1.MemoizedHeader, Text = UiComponents_1.MemoizedText, PivotPopover = UiComponents_1.MemoizedPopover, admin = false, hideAi = false, containerStyle, }) {
|
|
37
40
|
const [aiPrompt, setAiPrompt] = (0, react_1.useState)('');
|
|
38
41
|
const [errorMessage, setErrorMessage] = (0, react_1.useState)('');
|
|
39
42
|
const [baseAst, setBaseAst] = (0, react_1.useState)(null);
|
|
@@ -89,7 +92,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
89
92
|
return columns.map((col) => ({
|
|
90
93
|
label: col,
|
|
91
94
|
name: col,
|
|
92
|
-
displayName: col,
|
|
95
|
+
displayName: (0, textProcessing_1.snakeCaseToTitleCase)(col),
|
|
93
96
|
field: col,
|
|
94
97
|
format: (0, util_1.getPostgresBasicType)(fields.find((f) => f.name === col))?.replace('number', 'whole_number') || 'string',
|
|
95
98
|
fieldType: schemaTables
|
|
@@ -121,6 +124,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
121
124
|
// setUniqueValues({});
|
|
122
125
|
setPivot(null);
|
|
123
126
|
setPivotData(null);
|
|
127
|
+
setRecommendedPivots([]);
|
|
124
128
|
}, 0);
|
|
125
129
|
};
|
|
126
130
|
(0, react_1.useEffect)(() => {
|
|
@@ -248,14 +252,14 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
248
252
|
'Content-Type': 'application/json',
|
|
249
253
|
},
|
|
250
254
|
body: JSON.stringify({
|
|
251
|
-
orgId:
|
|
255
|
+
orgId: client.customerId,
|
|
252
256
|
publicKey: client.publicKey,
|
|
253
257
|
query: query,
|
|
254
258
|
}),
|
|
255
259
|
});
|
|
256
260
|
const data = await response.json();
|
|
257
261
|
if (data.errorMessage) {
|
|
258
|
-
console.error(data.errorMessage);
|
|
262
|
+
// console.error(data.errorMessage);
|
|
259
263
|
return null;
|
|
260
264
|
}
|
|
261
265
|
const options = data.rows.map((r) => r[column]);
|
|
@@ -272,19 +276,36 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
272
276
|
};
|
|
273
277
|
const fetchSchema = async () => {
|
|
274
278
|
try {
|
|
275
|
-
const response = await fetch(
|
|
279
|
+
const response = await fetch(`${client.queryEndpoint}`, {
|
|
280
|
+
method: 'POST',
|
|
281
|
+
headers: {
|
|
282
|
+
...client.queryHeaders,
|
|
283
|
+
'Content-Type': 'application/json',
|
|
284
|
+
},
|
|
285
|
+
body: JSON.stringify({
|
|
286
|
+
metadata: {
|
|
287
|
+
clientId: client.publicKey,
|
|
288
|
+
publicKey: client.publicKey,
|
|
289
|
+
task: 'schema',
|
|
290
|
+
removeCustomerField: true,
|
|
291
|
+
},
|
|
292
|
+
}),
|
|
293
|
+
});
|
|
294
|
+
const results = await response.json();
|
|
276
295
|
// Filter out hidden columns on tables back from schema2.
|
|
277
|
-
const tables =
|
|
278
|
-
for (const table of tables) {
|
|
279
|
-
table.columns = table.columns.filter((column) =>
|
|
280
|
-
// Quick and dirty fix for removing org ids from response.
|
|
281
|
-
// TODO: Fix this on the backend or something.
|
|
282
|
-
column.isVisible && column.displayName !== 'pm_company_id');
|
|
283
|
-
}
|
|
296
|
+
const tables = results.data.tables || results.data.data.tables;
|
|
284
297
|
setSchemaTables(tables ?? []);
|
|
285
|
-
setOrderedColumnNames((tables ?? [])
|
|
286
|
-
|
|
287
|
-
.
|
|
298
|
+
setOrderedColumnNames((tables ?? []).flatMap((table) => table.columns
|
|
299
|
+
.map((c) => `${table.name}.${c.name}`)
|
|
300
|
+
.sort((a, b) => {
|
|
301
|
+
const aIsId = a.endsWith('.id') || a.endsWith('_id');
|
|
302
|
+
const bIsId = b.endsWith('.id') || b.endsWith('_id');
|
|
303
|
+
if (aIsId && !bIsId)
|
|
304
|
+
return 1;
|
|
305
|
+
if (bIsId && !aIsId)
|
|
306
|
+
return -1;
|
|
307
|
+
return 0;
|
|
308
|
+
})));
|
|
288
309
|
// Fetch all the unique values in parallel
|
|
289
310
|
const pendingFetches = [];
|
|
290
311
|
for (let table of tables ?? []) {
|
|
@@ -309,6 +330,12 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
309
330
|
if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
|
|
310
331
|
setUniqueValues(newUniqueValues);
|
|
311
332
|
}
|
|
333
|
+
if (initialTableName) {
|
|
334
|
+
const columnsForTable = tables
|
|
335
|
+
.find((t) => t.name === initialTableName)
|
|
336
|
+
?.columns.map((c) => c.name);
|
|
337
|
+
await handleAsk(`get ${columnsForTable} from ${initialTableName}`);
|
|
338
|
+
}
|
|
312
339
|
}
|
|
313
340
|
catch (error) {
|
|
314
341
|
console.error(error);
|
|
@@ -611,6 +638,9 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
611
638
|
};
|
|
612
639
|
// Function to handle operator changes
|
|
613
640
|
const handleOperatorChange = (value, node, keyPrefix, column = null) => {
|
|
641
|
+
if (!keyPrefix) {
|
|
642
|
+
setTopLevelBinaryOperator(value);
|
|
643
|
+
}
|
|
614
644
|
if (isPending) {
|
|
615
645
|
updateActiveItem([{ path: keyPrefix + 'operator', value }], { column });
|
|
616
646
|
}
|
|
@@ -708,7 +738,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
708
738
|
'node.right.args.value.1.column') ??
|
|
709
739
|
(node.right?.args?.value[1]?.value &&
|
|
710
740
|
'node.right.args.value.1.value');
|
|
711
|
-
return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', gap: 20 }, children: [(0, jsx_runtime_1.jsx)(Select, { value: dateColumn, onChange: (value) => {
|
|
741
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', gap: 20 }, children: [(0, jsx_runtime_1.jsx)(Select, { theme: theme, value: dateColumn, onChange: (value) => {
|
|
712
742
|
const columnType = getColumnTypeByName(value);
|
|
713
743
|
if ((0, ast_1.isDateishColumnType)(columnType)) {
|
|
714
744
|
// handleChange(value, keyPrefix + dateColumnPath, "text");
|
|
@@ -725,9 +755,9 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
725
755
|
handleReplaceSubtree(keyPrefix, newSubtree);
|
|
726
756
|
}
|
|
727
757
|
}, options: getAllPossibleColumns().map((column) => ({
|
|
728
|
-
label: column.displayName,
|
|
758
|
+
label: (0, textProcessing_1.snakeCaseToTitleCase)(column.displayName),
|
|
729
759
|
value: column.name,
|
|
730
|
-
})) }), (0, jsx_runtime_1.jsx)(Select, { value: dateFilterType, onChange: (value) => {
|
|
760
|
+
})) }), (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: dateFilterType, onChange: (value) => {
|
|
731
761
|
if (value === dateFilterType)
|
|
732
762
|
return null;
|
|
733
763
|
let newSubtree = {};
|
|
@@ -773,7 +803,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
773
803
|
path: keyPrefix + intervalPath,
|
|
774
804
|
},
|
|
775
805
|
]));
|
|
776
|
-
} })), (0, jsx_runtime_1.jsx)(Select, { value: intervalType, onChange: (value) => {
|
|
806
|
+
} })), (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: intervalType, onChange: (value) => {
|
|
777
807
|
if (intervalPaths.length === 1) {
|
|
778
808
|
handleChangeText([
|
|
779
809
|
{
|
|
@@ -819,7 +849,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
819
849
|
else if ((0, util_1.isInTheLastInterval)(node, client.databaseType)) {
|
|
820
850
|
const { dateColumn, dateFilterType, intervalCount, intervalType } = (0, util_1.getDateFilterInfo)(node);
|
|
821
851
|
const options = getAllPossibleColumns().map((column) => ({
|
|
822
|
-
label: column.displayName,
|
|
852
|
+
label: (0, textProcessing_1.snakeCaseToTitleCase)(column.displayName),
|
|
823
853
|
value: column.name,
|
|
824
854
|
}));
|
|
825
855
|
const plural = node.right.args.value[1].expr.value > 1 ? 's' : '';
|
|
@@ -828,7 +858,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
828
858
|
flexDirection: 'row',
|
|
829
859
|
alignItems: 'center',
|
|
830
860
|
gap: 20,
|
|
831
|
-
}, children: [(0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(Select, { value: node.left.column, onChange: (value) => {
|
|
861
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: node.left.column, onChange: (value) => {
|
|
832
862
|
const columnType = getColumnTypeByName(value);
|
|
833
863
|
if ((0, ast_1.isDateishColumnType)(columnType)) {
|
|
834
864
|
// handleChange(value, keyPrefix + dateColumnPath, "text");
|
|
@@ -844,7 +874,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
844
874
|
newSubtree.left.args.value[0].column = value;
|
|
845
875
|
handleReplaceSubtree(keyPrefix, newSubtree);
|
|
846
876
|
}
|
|
847
|
-
}, options: options }) }), (0, jsx_runtime_1.jsx)(Select, { value: dateFilterType, onChange: (value) => {
|
|
877
|
+
}, options: options }) }), (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: dateFilterType, onChange: (value) => {
|
|
848
878
|
handleOperatorChange(value, node, keyPrefix, dateColumn);
|
|
849
879
|
}, options: [
|
|
850
880
|
{ label: 'in the last', value: 'IN_THE_LAST' },
|
|
@@ -858,7 +888,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
858
888
|
path: keyPrefix + 'right.args.value||1.expr.value',
|
|
859
889
|
},
|
|
860
890
|
]);
|
|
861
|
-
} }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(Select, { value: node.right.args.value[1].unit, onChange: (value) => handleChange([
|
|
891
|
+
} }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: node.right.args.value[1].unit, onChange: (value) => handleChange([
|
|
862
892
|
{ value, path: keyPrefix + 'right.args.value||1.unit' },
|
|
863
893
|
]), options: [
|
|
864
894
|
{ label: `year${plural}`, value: '* 365 DAY' },
|
|
@@ -870,7 +900,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
870
900
|
else if ((0, util_1.isTheCurrentInterval)(node, client.databaseType)) {
|
|
871
901
|
const { dateFilterType } = (0, util_1.getDateFilterInfo)(node);
|
|
872
902
|
const options = getAllPossibleColumns().map((column) => ({
|
|
873
|
-
label: column.displayName,
|
|
903
|
+
label: (0, textProcessing_1.snakeCaseToTitleCase)(column.displayName),
|
|
874
904
|
value: column.name,
|
|
875
905
|
}));
|
|
876
906
|
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
@@ -878,7 +908,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
878
908
|
flexDirection: 'row',
|
|
879
909
|
alignItems: 'center',
|
|
880
910
|
gap: 20,
|
|
881
|
-
}, children: [(0, jsx_runtime_1.jsx)(Select, { value: node.left.column, onChange: (value) => {
|
|
911
|
+
}, children: [(0, jsx_runtime_1.jsx)(Select, { theme: theme, value: node.left.column, onChange: (value) => {
|
|
882
912
|
const columnType = getColumnTypeByName(value);
|
|
883
913
|
if ((0, ast_1.isDateishColumnType)(columnType)) {
|
|
884
914
|
// handleChange(value, keyPrefix + dateColumnPath, "text");
|
|
@@ -894,14 +924,14 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
894
924
|
newSubtree.left.args.value[0].column = value;
|
|
895
925
|
handleReplaceSubtree(keyPrefix, newSubtree);
|
|
896
926
|
}
|
|
897
|
-
}, options: options }), (0, jsx_runtime_1.jsx)(Select, { value: 'IN_THE_CURRENT', onChange: (value) => {
|
|
927
|
+
}, options: options }), (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: 'IN_THE_CURRENT', onChange: (value) => {
|
|
898
928
|
handleOperatorChange(value, node, keyPrefix, node.left.column);
|
|
899
929
|
}, options: [
|
|
900
930
|
{ label: 'in the last', value: 'IN_THE_LAST' },
|
|
901
931
|
{ label: 'in the previous', value: 'IN_THE_PREVIOUS' },
|
|
902
932
|
{ label: 'in the current', value: 'IN_THE_CURRENT' },
|
|
903
933
|
// { label: 'equals', value: 'equals' },
|
|
904
|
-
] }), (0, jsx_runtime_1.jsx)(Select, { value: node.left.args.value[1].column, onChange: (value) => {
|
|
934
|
+
] }), (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: node.left.args.value[1].column, onChange: (value) => {
|
|
905
935
|
handleChange([
|
|
906
936
|
{ value, path: 'right.args.value||1.column' },
|
|
907
937
|
{ value, path: 'left.args.value||1.column' },
|
|
@@ -915,7 +945,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
915
945
|
}
|
|
916
946
|
else if ((0, util_1.isThePreviousInterval)(node, client.databaseType)) {
|
|
917
947
|
const options = getAllPossibleColumns().map((column) => ({
|
|
918
|
-
label: column.displayName,
|
|
948
|
+
label: (0, textProcessing_1.snakeCaseToTitleCase)(column.displayName),
|
|
919
949
|
value: column.name,
|
|
920
950
|
}));
|
|
921
951
|
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
@@ -923,7 +953,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
923
953
|
flexDirection: 'row',
|
|
924
954
|
alignItems: 'center',
|
|
925
955
|
gap: 20,
|
|
926
|
-
}, children: [(0, jsx_runtime_1.jsx)(Select, { value: node.left.column, onChange: (value) => {
|
|
956
|
+
}, children: [(0, jsx_runtime_1.jsx)(Select, { theme: theme, value: node.left.column, onChange: (value) => {
|
|
927
957
|
const columnType = getColumnTypeByName(value);
|
|
928
958
|
if ((0, ast_1.isDateishColumnType)(columnType)) {
|
|
929
959
|
// handleChange(value, keyPrefix + dateColumnPath, "text");
|
|
@@ -939,14 +969,14 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
939
969
|
newSubtree.left.args.value[0].column = value;
|
|
940
970
|
handleReplaceSubtree(keyPrefix, newSubtree);
|
|
941
971
|
}
|
|
942
|
-
}, opt: true, options: options }), (0, jsx_runtime_1.jsx)(Select, { value: 'IN_THE_PREVIOUS', onChange: (value) => {
|
|
972
|
+
}, opt: true, options: options }), (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: 'IN_THE_PREVIOUS', onChange: (value) => {
|
|
943
973
|
handleOperatorChange(value, node, keyPrefix, node.left.column);
|
|
944
974
|
}, options: [
|
|
945
975
|
{ label: 'in the last', value: 'IN_THE_LAST' },
|
|
946
976
|
{ label: 'in the previous', value: 'IN_THE_PREVIOUS' },
|
|
947
977
|
{ label: 'in the current', value: 'IN_THE_CURRENT' },
|
|
948
978
|
// { label: 'equals', value: 'equals' },
|
|
949
|
-
] }), (0, jsx_runtime_1.jsx)(Select, { value: node.left.args.value[1].column, onChange: (value) => {
|
|
979
|
+
] }), (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: node.left.args.value[1].column, onChange: (value) => {
|
|
950
980
|
const dayConversion = {
|
|
951
981
|
YEAR: 365,
|
|
952
982
|
QUARTER: 90,
|
|
@@ -976,7 +1006,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
976
1006
|
}
|
|
977
1007
|
else if ((0, util_1.isColumnComparison)(node)) {
|
|
978
1008
|
const options = getAllPossibleColumns().map((column) => ({
|
|
979
|
-
label: column.displayName,
|
|
1009
|
+
label: (0, textProcessing_1.snakeCaseToTitleCase)(column.displayName),
|
|
980
1010
|
value: column.name,
|
|
981
1011
|
}));
|
|
982
1012
|
// grab the value of the left child of the column comparison
|
|
@@ -1030,6 +1060,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1030
1060
|
gap: 12,
|
|
1031
1061
|
flexDirection: 'column',
|
|
1032
1062
|
width: '100%',
|
|
1063
|
+
padding: '6px 0px',
|
|
1033
1064
|
}, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1034
1065
|
display: 'flex',
|
|
1035
1066
|
gap: 20,
|
|
@@ -1038,7 +1069,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1038
1069
|
? 'row'
|
|
1039
1070
|
: 'column',
|
|
1040
1071
|
width: '100%',
|
|
1041
|
-
}, children: [(0, jsx_runtime_1.jsx)(Select, { style: { width: 'min-content' }, value: leftChildValue, onChange: (value) => {
|
|
1072
|
+
}, children: [(0, jsx_runtime_1.jsx)(Select, { theme: theme, style: { width: 'min-content' }, value: leftChildValue, onChange: (value) => {
|
|
1042
1073
|
const columnType = getColumnTypeByName(value);
|
|
1043
1074
|
if ((0, ast_1.isDateishColumnType)(columnType)) {
|
|
1044
1075
|
handleOperatorChange('IN_THE_LAST', node, keyPrefix, value);
|
|
@@ -1053,7 +1084,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1053
1084
|
newSubtree.left.args.value[0].column = value;
|
|
1054
1085
|
handleReplaceSubtree(keyPrefix, newSubtree);
|
|
1055
1086
|
}
|
|
1056
|
-
}, options: options }), operatorOptions.length > 0 && ((0, jsx_runtime_1.jsx)(Select, { value: node.operator, onChange: (value) => {
|
|
1087
|
+
}, options: options }), operatorOptions.length > 0 && ((0, jsx_runtime_1.jsx)(Select, { theme: theme, value: node.operator, onChange: (value) => {
|
|
1057
1088
|
handleOperatorChange(value, node, keyPrefix, leftChildValue);
|
|
1058
1089
|
}, style: { width: 'min-content' }, options: operatorOptions })), node.right &&
|
|
1059
1090
|
node.right.type !== 'expr_list' &&
|
|
@@ -1083,7 +1114,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1083
1114
|
justifyContent: 'space-between',
|
|
1084
1115
|
flexDirection: (0, util_1.showNodeAsRow)(node, formData) ? 'row' : 'column',
|
|
1085
1116
|
width: '100%',
|
|
1086
|
-
}, children: [node.left && renderNode(node.left, keyPrefix + 'left.'), (0, jsx_runtime_1.jsx)(Select, { value: node.operator, onChange: (value) => {
|
|
1117
|
+
}, children: [node.left && renderNode(node.left, keyPrefix + 'left.'), (0, jsx_runtime_1.jsx)(Select, { theme: theme, value: node.operator, onChange: (value) => {
|
|
1087
1118
|
handleOperatorChange(value, node, keyPrefix);
|
|
1088
1119
|
}, style: { width: `100%` }, options: [
|
|
1089
1120
|
// { label: `and`, value: "AND" },
|
|
@@ -1125,10 +1156,10 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1125
1156
|
}
|
|
1126
1157
|
case 'column_ref': {
|
|
1127
1158
|
const options = getAllPossibleColumns().map((column) => ({
|
|
1128
|
-
label: column.displayName,
|
|
1159
|
+
label: (0, textProcessing_1.snakeCaseToTitleCase)(column.displayName),
|
|
1129
1160
|
value: column.name,
|
|
1130
1161
|
}));
|
|
1131
|
-
return ((0, jsx_runtime_1.jsx)(Select, { style: { width: '120px' }, value: node.column ?? options[0]?.value, onChange: (value) => {
|
|
1162
|
+
return ((0, jsx_runtime_1.jsx)(Select, { theme: theme, style: { width: '120px' }, value: node.column ?? options[0]?.value, onChange: (value) => {
|
|
1132
1163
|
handleChange([{ value, path: keyPrefix + 'column' }]);
|
|
1133
1164
|
}, options: options }));
|
|
1134
1165
|
}
|
|
@@ -1252,10 +1283,10 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1252
1283
|
isInTheCurrentIntervalSentence ??
|
|
1253
1284
|
isInTheLastIntervalSentence ??
|
|
1254
1285
|
isInThePreviousIntervalSentence ?? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [node.left &&
|
|
1255
|
-
renderSentence(formData, node.left, keyPrefix + 'left.', false, false, isRow), isRow ? (' ' + OPS[node.operator] + ' ') : topLevelBinaryOperator === 'OR' ? ((0, jsx_runtime_1.jsx)(TopLevelBooleanSwitch, { node: node, keyPrefix: keyPrefix, handleOperatorChange: handleOperatorChange, Select: Select })) : null, node.right &&
|
|
1286
|
+
renderSentence(formData, node.left, keyPrefix + 'left.', false, false, isRow), isRow ? (' ' + OPS[node.operator] + ' ') : isTopLevel || topLevelBinaryOperator === 'OR' ? ((0, jsx_runtime_1.jsx)(TopLevelBooleanSwitch, { node: node, keyPrefix: keyPrefix, handleOperatorChange: handleOperatorChange, Select: Select })) : null, node.right &&
|
|
1256
1287
|
renderSentence(formData, node.right, keyPrefix + 'right.', false, false, isRow)] })) }));
|
|
1257
1288
|
case 'column_ref':
|
|
1258
|
-
return node.column;
|
|
1289
|
+
return (0, textProcessing_1.snakeCaseToTitleCase)(node.column);
|
|
1259
1290
|
case 'expr_list':
|
|
1260
1291
|
if (node.value.length === 1) {
|
|
1261
1292
|
const subQuery = renderSentence(formData, node.value[0]);
|
|
@@ -1287,10 +1318,10 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1287
1318
|
if (node.args.value.length < 1)
|
|
1288
1319
|
return null;
|
|
1289
1320
|
if (node.args.value[0].value) {
|
|
1290
|
-
return node.args.value[0].value.replaceAll('%', '');
|
|
1321
|
+
return (0, textProcessing_1.snakeCaseToTitleCase)(node.args.value[0].value.replaceAll('%', ''));
|
|
1291
1322
|
}
|
|
1292
1323
|
if (node.args.value[0].column)
|
|
1293
|
-
return node.args.value[0].column.replaceAll('%', '');
|
|
1324
|
+
return (0, textProcessing_1.snakeCaseToTitleCase)(node.args.value[0].column.replaceAll('%', ''));
|
|
1294
1325
|
return null;
|
|
1295
1326
|
}
|
|
1296
1327
|
if (node.name.toLowerCase() === 'current_date' ||
|
|
@@ -1327,10 +1358,22 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1327
1358
|
const tableNamesInQuery = baseAst.from.map((tbl) => tbl.table);
|
|
1328
1359
|
return schemaTables
|
|
1329
1360
|
.filter((t) => tableNamesInQuery.includes(t.displayName))
|
|
1330
|
-
.flatMap((table) => table.columns
|
|
1361
|
+
.flatMap((table) => table.columns
|
|
1362
|
+
.map((c) => ({
|
|
1331
1363
|
...c,
|
|
1332
1364
|
table: table.displayName,
|
|
1333
|
-
}))
|
|
1365
|
+
}))
|
|
1366
|
+
.sort((a, b) => {
|
|
1367
|
+
const aIsId = a.name.toLowerCase() === 'id' ||
|
|
1368
|
+
a.name.toLowerCase().endsWith('_id');
|
|
1369
|
+
const bIsId = b.name.toLowerCase() === 'id' ||
|
|
1370
|
+
b.name.toLowerCase().endsWith('_id');
|
|
1371
|
+
if (aIsId && !bIsId)
|
|
1372
|
+
return 1;
|
|
1373
|
+
if (bIsId && !aIsId)
|
|
1374
|
+
return -1;
|
|
1375
|
+
return 0;
|
|
1376
|
+
}));
|
|
1334
1377
|
};
|
|
1335
1378
|
const getDateColumns = () => {
|
|
1336
1379
|
const allColumns = getAllPossibleColumns();
|
|
@@ -1381,26 +1424,6 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1381
1424
|
},
|
|
1382
1425
|
as: null,
|
|
1383
1426
|
});
|
|
1384
|
-
const SortableItem = ({ id, label, setSelectedColumns, selectedColumns, }) => {
|
|
1385
|
-
const { attributes, listeners, setNodeRef, transform, transition } = (0, sortable_1.useSortable)({ id: id });
|
|
1386
|
-
const style = {
|
|
1387
|
-
transform: utilities_1.CSS.Transform.toString(transform),
|
|
1388
|
-
transition,
|
|
1389
|
-
};
|
|
1390
|
-
const handleSelect = () => {
|
|
1391
|
-
setSelectedColumns((selectedColumns) => {
|
|
1392
|
-
if (selectedColumns.includes(id)) {
|
|
1393
|
-
return selectedColumns.filter((column) => column !== id);
|
|
1394
|
-
}
|
|
1395
|
-
else {
|
|
1396
|
-
return [...selectedColumns, id];
|
|
1397
|
-
}
|
|
1398
|
-
});
|
|
1399
|
-
};
|
|
1400
|
-
return ((0, jsx_runtime_1.jsx)("div", { style: { userSelect: 'none', ...style }, ref: setNodeRef, children: (0, jsx_runtime_1.jsx)(SelectColumn, { selected: selectedColumns?.includes(id), setSelected: handleSelect, label: label, children: (0, jsx_runtime_1.jsx)("div", { style: {
|
|
1401
|
-
cursor: 'grab',
|
|
1402
|
-
}, ...attributes, ...listeners, children: (0, jsx_runtime_1.jsx)(HandleButton, {}) }) }) }));
|
|
1403
|
-
};
|
|
1404
1427
|
const AddConditionPopover = ({ onSave }) => {
|
|
1405
1428
|
return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: 2 }, children: [(0, jsx_runtime_1.jsx)("h1", { style: {
|
|
1406
1429
|
fontWeight: '600',
|
|
@@ -1426,13 +1449,24 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1426
1449
|
body: JSON.stringify({
|
|
1427
1450
|
ast: { ...baseAst, where: formData },
|
|
1428
1451
|
publicKey: client.publicKey,
|
|
1429
|
-
orgId:
|
|
1452
|
+
orgId: client.customerId,
|
|
1430
1453
|
}),
|
|
1431
1454
|
});
|
|
1432
1455
|
const data2 = await res2.json();
|
|
1433
1456
|
if (data2.rows && data2.rows.length) {
|
|
1434
1457
|
const tables = (0, ast_1.getTableNames)(baseAst);
|
|
1435
1458
|
const table = tables.length >= 1 ? tables[0] : initialTableName;
|
|
1459
|
+
const sortedFields = data2.fields.sort((a, b) => {
|
|
1460
|
+
const aIsId = a.name.toLowerCase() === 'id' ||
|
|
1461
|
+
a.name.toLowerCase().endsWith('_id');
|
|
1462
|
+
const bIsId = b.name.toLowerCase() === 'id' ||
|
|
1463
|
+
b.name.toLowerCase().endsWith('_id');
|
|
1464
|
+
if (aIsId && !bIsId)
|
|
1465
|
+
return 1;
|
|
1466
|
+
if (bIsId && !aIsId)
|
|
1467
|
+
return -1;
|
|
1468
|
+
return 0;
|
|
1469
|
+
});
|
|
1436
1470
|
if (pivot) {
|
|
1437
1471
|
// Do all of this to make sure we have the right unique columns when applying a pivot
|
|
1438
1472
|
let uniqueFormatted = {};
|
|
@@ -1444,6 +1478,8 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1444
1478
|
const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, data2.rows, [null, null, null], false);
|
|
1445
1479
|
console.info(`%c[Pivot]: ${JSON.stringify(pivot)}`, 'color: dimgray');
|
|
1446
1480
|
setPivotData(pivotedData);
|
|
1481
|
+
setRows(data2.rows);
|
|
1482
|
+
setFields(data2.fields);
|
|
1447
1483
|
}
|
|
1448
1484
|
else {
|
|
1449
1485
|
setRows(data2.rows);
|
|
@@ -1564,8 +1600,8 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1564
1600
|
}
|
|
1565
1601
|
return false;
|
|
1566
1602
|
};
|
|
1567
|
-
const handleAsk = async () => {
|
|
1568
|
-
if (!aiPrompt) {
|
|
1603
|
+
const handleAsk = async (overridePrompt = '') => {
|
|
1604
|
+
if (!aiPrompt && !overridePrompt) {
|
|
1569
1605
|
return;
|
|
1570
1606
|
}
|
|
1571
1607
|
try {
|
|
@@ -1584,7 +1620,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1584
1620
|
method: 'POST',
|
|
1585
1621
|
headers: { 'Content-Type': 'application/json' },
|
|
1586
1622
|
body: JSON.stringify({
|
|
1587
|
-
initialQuestion: aiPrompt,
|
|
1623
|
+
initialQuestion: aiPrompt || overridePrompt,
|
|
1588
1624
|
publicKey: client.publicKey,
|
|
1589
1625
|
}),
|
|
1590
1626
|
});
|
|
@@ -1621,11 +1657,21 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1621
1657
|
newAst = (0, convert_1.convertBigQuery)(ast);
|
|
1622
1658
|
newAst = (0, convert_1.convertWildcardColumns)(newAst, schemaTables); // must go before groupby
|
|
1623
1659
|
({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot, schemaTables));
|
|
1660
|
+
if (groupByPivot && !groupByPivot?.valueField) {
|
|
1661
|
+
setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
|
|
1662
|
+
return;
|
|
1663
|
+
}
|
|
1624
1664
|
newAst = (0, convert_1.convertStringComparison)(newAst, client.databaseType);
|
|
1625
1665
|
newAst = (0, convert_1.convertRemoveSimpleParentheses)(newAst);
|
|
1666
|
+
const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
|
|
1667
|
+
const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
|
|
1668
|
+
newAst = (0, util_1.removeNonSelectedTableReferences)(newAst, tableAlias ?? table);
|
|
1626
1669
|
// newAst = convertDateComparison(newAst); // TODO
|
|
1627
1670
|
ast = newAst; // so we fetch data for newAst later.
|
|
1628
|
-
|
|
1671
|
+
setPivotRowField(groupByPivot?.rowField);
|
|
1672
|
+
setPivotColumnField(groupByPivot?.columnField);
|
|
1673
|
+
setPivotValueField(groupByPivot?.valueField);
|
|
1674
|
+
setPivotAggregation(groupByPivot?.aggregationType);
|
|
1629
1675
|
setPivot(groupByPivot);
|
|
1630
1676
|
setSelectedColumns((0, util_1.deepCopy)(newAst).columns?.map((column) => {
|
|
1631
1677
|
if (column.expr.type === 'column_ref') {
|
|
@@ -1657,7 +1703,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1657
1703
|
body: JSON.stringify({
|
|
1658
1704
|
ast: ast,
|
|
1659
1705
|
publicKey: client.publicKey,
|
|
1660
|
-
orgId:
|
|
1706
|
+
orgId: client.customerId,
|
|
1661
1707
|
}),
|
|
1662
1708
|
});
|
|
1663
1709
|
const data2 = await res2.json();
|
|
@@ -1668,6 +1714,8 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1668
1714
|
const pivotedData = (0, PivotModal_1.generatePivotTable)(pivot, data2.rows, [null, null, null], false);
|
|
1669
1715
|
console.info(`%c[Pivot]: ${JSON.stringify(groupByPivot)}`, 'color: dimgray');
|
|
1670
1716
|
setPivotData(pivotedData);
|
|
1717
|
+
setRows(data2.rows);
|
|
1718
|
+
setFields(data2.fields);
|
|
1671
1719
|
}
|
|
1672
1720
|
else {
|
|
1673
1721
|
setRows(data2.rows);
|
|
@@ -1731,7 +1779,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1731
1779
|
transform: utilities_1.CSS.Transform.toString(transform),
|
|
1732
1780
|
transition,
|
|
1733
1781
|
};
|
|
1734
|
-
return ((0, jsx_runtime_1.jsx)("div", { style: { ...style }, ref: setNodeRef, children: (0, jsx_runtime_1.jsx)(DraggableColumn, { label: label, onDelete: onDelete, children: (0, jsx_runtime_1.jsx)("div", { style: {
|
|
1782
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: { ...style }, ref: setNodeRef, children: (0, jsx_runtime_1.jsx)(DraggableColumn, { label: (0, textProcessing_1.snakeCaseToTitleCase)(label), onDelete: onDelete, children: (0, jsx_runtime_1.jsx)("div", { style: {
|
|
1735
1783
|
cursor: 'grab',
|
|
1736
1784
|
}, ...attributes, ...listeners, children: (0, jsx_runtime_1.jsx)(HandleButton, {}) }) }) }));
|
|
1737
1785
|
};
|
|
@@ -1792,24 +1840,17 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1792
1840
|
gap: 8,
|
|
1793
1841
|
}, 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 } })] }) }) }));
|
|
1794
1842
|
}
|
|
1795
|
-
const allNumericColumns = getNumericColumns().map((column) => ({
|
|
1796
|
-
label: column.displayName,
|
|
1797
|
-
value: column.name,
|
|
1798
|
-
}));
|
|
1799
|
-
const allNonNumericColumns = getNonNumericColumns().map((column) => ({
|
|
1800
|
-
label: column.displayName,
|
|
1801
|
-
value: column.name,
|
|
1802
|
-
}));
|
|
1803
|
-
const allStringColumns = getStringColumns().map((column) => ({
|
|
1804
|
-
label: column.displayName,
|
|
1805
|
-
value: column.name,
|
|
1806
|
-
}));
|
|
1807
1843
|
if (loading) {
|
|
1808
|
-
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1844
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1845
|
+
display: 'flex',
|
|
1846
|
+
flexDirection: 'row',
|
|
1847
|
+
height: '100%',
|
|
1848
|
+
...containerStyle,
|
|
1849
|
+
}, ref: parentRef, children: [(0, jsx_runtime_1.jsxs)(Sidebar, { children: [(0, jsx_runtime_1.jsx)(SidebarHeading, { label: "Columns" }), (0, jsx_runtime_1.jsx)("div", { style: { height: 4, width: '100%' } }), (0, jsx_runtime_1.jsx)(DraggableColumns, {}), (0, jsx_runtime_1.jsx)(Popover, { isOpen: openPopover === 'AddColumnPopover', trigger: (0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => {
|
|
1809
1850
|
if (!openPopover) {
|
|
1810
1851
|
setOpenPopover('AddColumnPopover');
|
|
1811
1852
|
}
|
|
1812
|
-
}, label: 'Select columns' }),
|
|
1853
|
+
}, label: 'Select columns' }), label: "Select columns", onClose: () => {
|
|
1813
1854
|
setIsPending(false);
|
|
1814
1855
|
setActiveEditItem(null);
|
|
1815
1856
|
setActivePath(null);
|
|
@@ -1922,7 +1963,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1922
1963
|
newAst.orderby = null;
|
|
1923
1964
|
setBaseAst(newAst); // trigger refetch
|
|
1924
1965
|
setPivot(pivot);
|
|
1925
|
-
}, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: Label, HeaderComponent: Header, dateRange: [null, null, null], recommendPivotCount: 3 }), pivot && ((0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
|
|
1966
|
+
}, selectPivotOnEdit: true, showTrigger: !pivot || !pivotData, theme: theme, LabelComponent: Label, HeaderComponent: Header, dateRange: [null, null, null], recommendPivotCount: 3, SecondaryButtonComponent: SecondaryButton }), pivot && pivotData && ((0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
|
|
1926
1967
|
pivot: pivot,
|
|
1927
1968
|
rows: pivotData?.rows || [],
|
|
1928
1969
|
columns: pivotData?.columns || [],
|
|
@@ -1981,7 +2022,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1981
2022
|
const newAst = { ...baseAst };
|
|
1982
2023
|
newAst.orderby.splice(id, 1);
|
|
1983
2024
|
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
1984
|
-
} }, `sort-sentence-${id}`))) })), (0, jsx_runtime_1.jsx)(Popover, { isOpen: openPopover === 'AddSortPopover', trigger: (0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => {
|
|
2025
|
+
} }, `sort-sentence-${id}`))) })), (0, jsx_runtime_1.jsx)(Popover, { isOpen: openPopover === 'AddSortPopover', setIsOpen: () => { }, trigger: (0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => {
|
|
1985
2026
|
if (!openPopover) {
|
|
1986
2027
|
setOpenPopover('AddSortPopover');
|
|
1987
2028
|
}
|
|
@@ -1990,12 +2031,45 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
1990
2031
|
setActiveEditItem(null);
|
|
1991
2032
|
setActivePath(null);
|
|
1992
2033
|
setOpenPopover(null);
|
|
1993
|
-
}, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.AddSortPopover, { columns: selectedColumns, Select: Select, Button: Button, onSave: () => { } }) })
|
|
2034
|
+
}, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.AddSortPopover, { columns: selectedColumns, Select: Select, Button: Button, onSave: () => { } }) }), (0, jsx_runtime_1.jsx)("div", { style: { height: 28, width: '100%' } }), (0, jsx_runtime_1.jsx)(SidebarHeading, { label: "Limit" }), (0, jsx_runtime_1.jsx)("div", { style: { height: 4, width: '100%' } }), baseAst && baseAst.limit ? ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2035
|
+
display: 'flex',
|
|
2036
|
+
flexDirection: 'column',
|
|
2037
|
+
gap: 8,
|
|
2038
|
+
marginBottom: 12,
|
|
2039
|
+
}, children: (0, jsx_runtime_1.jsx)(AddLimitPopover_1.LimitSentence, { limit: baseAst.limit, setOpenPopover: setOpenPopover, LimitPopover: SortPopover, EditPopover: AddLimitPopover_1.AddLimitPopover, handleDelete: () => {
|
|
2040
|
+
const newAst = { ...baseAst };
|
|
2041
|
+
newAst.limit = null;
|
|
2042
|
+
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
2043
|
+
}, onSave: (limit) => {
|
|
2044
|
+
const newAst = { ...baseAst };
|
|
2045
|
+
newAst.limit = {
|
|
2046
|
+
seperator: '',
|
|
2047
|
+
value: [
|
|
2048
|
+
{
|
|
2049
|
+
type: 'number',
|
|
2050
|
+
value: limit,
|
|
2051
|
+
},
|
|
2052
|
+
],
|
|
2053
|
+
};
|
|
2054
|
+
setOpenPopover(null);
|
|
2055
|
+
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
2056
|
+
} }) })) : ((0, jsx_runtime_1.jsx)(Popover, { isOpen: openPopover === 'AddLimitPopover', setIsOpen: () => { }, trigger: (0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => {
|
|
2057
|
+
if (!openPopover) {
|
|
2058
|
+
setOpenPopover('AddLimitPopover');
|
|
2059
|
+
}
|
|
2060
|
+
}, label: 'Add limit' }), title: "Limit", onClose: () => {
|
|
2061
|
+
setIsPending(false);
|
|
2062
|
+
setActiveEditItem(null);
|
|
2063
|
+
setActivePath(null);
|
|
2064
|
+
setOpenPopover(null);
|
|
2065
|
+
}, children: (0, jsx_runtime_1.jsx)(TextInput, { value: 0, type: "number", style: { width: 120, minHeight: 32 }, onChange: (e) => { } }) }))] }), (0, jsx_runtime_1.jsxs)(Container, { children: [!hideAi && ((0, jsx_runtime_1.jsxs)("form", { onSubmit: (event) => {
|
|
2066
|
+
event.preventDefault();
|
|
2067
|
+
}, style: {
|
|
1994
2068
|
display: 'flex',
|
|
1995
2069
|
flexDirection: 'row',
|
|
1996
2070
|
gap: 12,
|
|
1997
2071
|
padding: 1,
|
|
1998
|
-
}, children: [(0, jsx_runtime_1.jsx)(TextInput, { placeholder:
|
|
2072
|
+
}, children: [(0, jsx_runtime_1.jsx)(TextInput, { placeholder: baseAst ? 'Ask a follow-up question...' : 'Ask a question...', type: "text", style: { width: '100%', fontSize: 14 }, value: aiPrompt }), (0, jsx_runtime_1.jsx)(Button, { onClick: () => { }, label: 'Ask AI' }), baseAst && ((0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: clearAllState, label: "New report" }))] })), baseAst && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TableLoadingState, {}), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1999
2073
|
display: 'flex',
|
|
2000
2074
|
flexDirection: 'row',
|
|
2001
2075
|
gap: '12px',
|
|
@@ -2006,6 +2080,8 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
2006
2080
|
flexDirection: 'row',
|
|
2007
2081
|
height: '100%',
|
|
2008
2082
|
overflowY: 'auto',
|
|
2083
|
+
boxSizing: 'border-box',
|
|
2084
|
+
...containerStyle,
|
|
2009
2085
|
}, children: [(0, jsx_runtime_1.jsxs)(Sidebar, { children: [(0, jsx_runtime_1.jsx)(SidebarHeading, { label: "Columns" }), (0, jsx_runtime_1.jsx)("div", { style: { height: 4, width: '100%' } }), (0, jsx_runtime_1.jsx)(DraggableColumns, {}), (0, jsx_runtime_1.jsx)(Popover, { isOpen: openPopover === 'AddColumnPopover', title: "Select columns", trigger: (0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => {
|
|
2010
2086
|
if (!openPopover) {
|
|
2011
2087
|
setOpenPopover('AddColumnPopover');
|
|
@@ -2118,7 +2194,7 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
2118
2194
|
setOpenPopover(null);
|
|
2119
2195
|
clearCheckboxes();
|
|
2120
2196
|
}
|
|
2121
|
-
} }) }))] }), (0, jsx_runtime_1.jsx)("div", { style: { height: 28, width: '100%' } }), (0, jsx_runtime_1.jsx)(SidebarHeading, { label: "Pivot" }), (0, jsx_runtime_1.jsx)("div", { style: { height: 4, width: '100%' } }), (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: Select, ButtonComponent: Button, PopoverComponent: PivotPopover, TextComponent: Text, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processColumnsForChartBuilder(Object.keys(rows[0] ?? {})), triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
|
|
2197
|
+
} }) }))] }), (0, jsx_runtime_1.jsx)("div", { style: { height: 28, width: '100%' } }), (0, jsx_runtime_1.jsx)(SidebarHeading, { label: "Pivot" }), (0, jsx_runtime_1.jsx)("div", { style: { height: 4, width: '100%' } }), (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: Select, ButtonComponent: Button, SecondaryButtonComponent: SecondaryButton, PopoverComponent: PivotPopover, TextComponent: Text, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processColumnsForChartBuilder(Object.keys(rows[0] ?? {})), triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
|
|
2122
2198
|
setPivot(null);
|
|
2123
2199
|
setPivotData(null);
|
|
2124
2200
|
}, selectPivot: (pivot) => {
|
|
@@ -2126,9 +2202,13 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
2126
2202
|
return;
|
|
2127
2203
|
const newAst = { ...baseAst };
|
|
2128
2204
|
newAst.orderby = null;
|
|
2205
|
+
if (pivot.rowFieldType === 'date') {
|
|
2206
|
+
pivot['sort'] = true;
|
|
2207
|
+
pivot['sortDirection'] = 'ASC';
|
|
2208
|
+
}
|
|
2129
2209
|
setBaseAst(newAst); // trigger refetch
|
|
2130
2210
|
setPivot(pivot);
|
|
2131
|
-
}, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: Label, HeaderComponent: Header, dateRange: [null, null, null], recommendPivotCount: 3 }), pivot && ((0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
|
|
2211
|
+
}, selectPivotOnEdit: true, showTrigger: !pivot || !pivotData, theme: theme, LabelComponent: Label, HeaderComponent: Header, dateRange: [null, null, null], recommendPivotCount: 3 }), pivot && pivotData && ((0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
|
|
2132
2212
|
pivot: pivot,
|
|
2133
2213
|
rows: pivotData?.rows || [],
|
|
2134
2214
|
columns: pivotData?.columns || [],
|
|
@@ -2229,28 +2309,78 @@ function ReportBuilder({ initialTableName = '', onAddToDashboardComplete = () =>
|
|
|
2229
2309
|
setActivePath(null);
|
|
2230
2310
|
setOpenPopover(null);
|
|
2231
2311
|
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
2232
|
-
} }) })
|
|
2312
|
+
} }) }), (0, jsx_runtime_1.jsx)("div", { style: { height: 28, width: '100%' } }), (0, jsx_runtime_1.jsx)(SidebarHeading, { label: "Limit" }), (0, jsx_runtime_1.jsx)("div", { style: { height: 4, width: '100%' } }), baseAst && baseAst.limit ? ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2313
|
+
display: 'flex',
|
|
2314
|
+
flexDirection: 'column',
|
|
2315
|
+
gap: 8,
|
|
2316
|
+
marginBottom: 12,
|
|
2317
|
+
}, children: (0, jsx_runtime_1.jsx)(AddLimitPopover_1.LimitSentence, { limit: baseAst.limit, setOpenPopover: setOpenPopover, LimitPopover: SortPopover, EditPopover: AddLimitPopover_1.AddLimitPopover, handleDelete: () => {
|
|
2318
|
+
const newAst = { ...baseAst };
|
|
2319
|
+
newAst.limit = null;
|
|
2320
|
+
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
2321
|
+
}, onSave: (limit) => {
|
|
2322
|
+
const newAst = { ...baseAst };
|
|
2323
|
+
newAst.limit = {
|
|
2324
|
+
seperator: '',
|
|
2325
|
+
value: [
|
|
2326
|
+
{
|
|
2327
|
+
type: 'number',
|
|
2328
|
+
value: limit,
|
|
2329
|
+
},
|
|
2330
|
+
],
|
|
2331
|
+
};
|
|
2332
|
+
setOpenPopover(null);
|
|
2333
|
+
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
2334
|
+
} }) })) : ((0, jsx_runtime_1.jsx)(Popover, { isOpen: openPopover === 'AddLimitPopover', setIsOpen: () => { }, trigger: (0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => {
|
|
2335
|
+
if (!baseAst) {
|
|
2336
|
+
return;
|
|
2337
|
+
}
|
|
2338
|
+
if (!openPopover) {
|
|
2339
|
+
setOpenPopover('AddLimitPopover');
|
|
2340
|
+
}
|
|
2341
|
+
}, label: 'Add limit' }), title: "Limit", onClose: () => {
|
|
2342
|
+
setIsPending(false);
|
|
2343
|
+
setActiveEditItem(null);
|
|
2344
|
+
setActivePath(null);
|
|
2345
|
+
setOpenPopover(null);
|
|
2346
|
+
}, children: (0, jsx_runtime_1.jsx)(AddLimitPopover_1.AddLimitPopover, { TextInput: TextInput, onSave: (limit) => {
|
|
2347
|
+
const newAst = { ...baseAst };
|
|
2348
|
+
newAst.limit = {
|
|
2349
|
+
seperator: '',
|
|
2350
|
+
value: [
|
|
2351
|
+
{
|
|
2352
|
+
type: 'number',
|
|
2353
|
+
value: Number(limit),
|
|
2354
|
+
},
|
|
2355
|
+
],
|
|
2356
|
+
};
|
|
2357
|
+
setOpenPopover(null);
|
|
2358
|
+
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
2359
|
+
} }) }))] }), (0, jsx_runtime_1.jsxs)(Container, { children: [!hideAi && ((0, jsx_runtime_1.jsxs)("form", { onSubmit: (event) => {
|
|
2360
|
+
event.preventDefault();
|
|
2361
|
+
handleAsk();
|
|
2362
|
+
}, style: {
|
|
2233
2363
|
display: 'flex',
|
|
2234
2364
|
flexDirection: 'row',
|
|
2235
2365
|
gap: 12,
|
|
2236
2366
|
padding: 1,
|
|
2237
|
-
}, children: [(0, jsx_runtime_1.jsx)(TextInput, { type: "text", value: aiPrompt, style: { width: '100%', fontSize: 14 }, onChange: (e) => setAiPrompt(e.target.value), placeholder: baseAst ? 'Ask a follow-up question...' : 'Ask a question...' }), (0, jsx_runtime_1.jsx)(Button, { onClick: handleAsk, label: 'Ask AI' }), baseAst && ((0, jsx_runtime_1.jsx)(SecondaryButton, { label: 'New report', onClick: clearAllState }))] })), baseAst && ((0, jsx_runtime_1.
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2367
|
+
}, children: [(0, jsx_runtime_1.jsx)(TextInput, { type: "text", value: aiPrompt, style: { width: '100%', fontSize: 14 }, onChange: (e) => setAiPrompt(e.target.value), placeholder: baseAst ? 'Ask a follow-up question...' : 'Ask a question...' }), (0, jsx_runtime_1.jsx)(Button, { onClick: handleAsk, label: 'Ask AI' }), baseAst && ((0, jsx_runtime_1.jsx)(SecondaryButton, { label: 'New report', onClick: clearAllState }))] })), baseAst && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: loading && errorMessage.length === 0 ? ((0, jsx_runtime_1.jsx)(TableLoadingState, {})) : ((0, jsx_runtime_1.jsx)(Table, { rows: applyFormatting({
|
|
2368
|
+
rows: pivotData?.rows || rows,
|
|
2369
|
+
fields: pivotData?.fields || fields,
|
|
2370
|
+
}, baseAst?.columns ?? []), columns: pivotData?.columns ||
|
|
2371
|
+
enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
|
|
2372
|
+
return { label: (0, textProcessing_1.snakeCaseToTitleCase)(c), field: c };
|
|
2373
|
+
}), error: errorMessage, rowsPerPage: 20 })) })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2374
|
+
display: 'flex',
|
|
2375
|
+
flexDirection: 'row',
|
|
2376
|
+
gap: '12px',
|
|
2377
|
+
}, children: [errorMessage && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2378
|
+
color: 'red',
|
|
2379
|
+
fontSize: 14,
|
|
2380
|
+
padding: '12px',
|
|
2381
|
+
whiteSpace: 'nowrap',
|
|
2382
|
+
}, children: errorMessage })), (0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } }), baseAst && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButton, { label: isCopying ? '✅ Copied' : 'Copy SQL', onClick: () => copyToClipboard(activeQuery) }), (0, jsx_runtime_1.jsx)(Button, { onClick: () => {
|
|
2253
2383
|
setIsChartBuilderOpen(true);
|
|
2254
|
-
}, label: 'Add to dashboard' })] })] })
|
|
2384
|
+
}, label: 'Add to dashboard' })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` }), (0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { rows: applyFormatting({ rows, fields }, baseAst?.columns ?? []), columns: processColumnsForChartBuilder(Object.keys(rows[0] ?? {})), fields: fields, pivot: pivot, query: activeQuery, showTableFormatOptions: admin ? true : false, showDateFieldOptions: admin ? true : false, showAccessControlOptions: admin ? true : false, title: "Add to dashboard", isEditMode: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: onAddToDashboardComplete, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData })] }));
|
|
2255
2385
|
}
|
|
2256
2386
|
exports.default = ReportBuilder;
|