@quillsql/react 2.13.27 → 2.13.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts +2 -1
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +2 -2
- package/dist/cjs/ChartBuilder.d.ts +20 -2
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +140 -45
- package/dist/cjs/ChartEditor.d.ts +5 -3
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +4 -5
- package/dist/cjs/Context.d.ts +15 -4
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +43 -61
- package/dist/cjs/Dashboard.d.ts +4 -0
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +49 -9
- package/dist/cjs/QuillProvider.d.ts +7 -46
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +2 -4
- package/dist/cjs/ReportBuilder.d.ts +9 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +198 -80
- package/dist/cjs/SQLEditor.d.ts +5 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +81 -18
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +3 -2
- package/dist/cjs/components/Chart/InternalChart.d.ts +2 -1
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +110 -28
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/PieChart.js +10 -7
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +3 -2
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +66 -65
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +81 -34
- package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +3 -3
- package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/util.js +6 -2
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +3 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +29 -20
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +9 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +25 -3
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.js +2 -2
- package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -0
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +54 -4
- package/dist/cjs/components/ReportBuilder/ui.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +3 -2
- package/dist/cjs/components/UiComponents.d.ts +1 -0
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/hooks/useAskQuill.d.ts +1 -1
- package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useAskQuill.js +6 -5
- package/dist/cjs/hooks/useAstToFilterTree.d.ts +2 -1
- package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
- package/dist/cjs/hooks/useAstToFilterTree.js +3 -3
- package/dist/cjs/hooks/useDashboard.d.ts +6 -2
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +34 -10
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +6 -4
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +4 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +8 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +59 -30
- package/dist/cjs/models/Client.d.ts +22 -3
- package/dist/cjs/models/Client.d.ts.map +1 -1
- package/dist/cjs/models/Dashboard.d.ts +2 -0
- package/dist/cjs/models/Dashboard.d.ts.map +1 -1
- package/dist/cjs/models/Report.d.ts +4 -0
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts +3 -2
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +3323 -977
- package/dist/cjs/utils/astProcessing.d.ts +1 -1
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +4 -2
- package/dist/cjs/utils/client.d.ts +4 -2
- package/dist/cjs/utils/client.d.ts.map +1 -1
- package/dist/cjs/utils/client.js +48 -1
- package/dist/cjs/utils/columnProcessing.d.ts +3 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +34 -1
- package/dist/cjs/utils/constants.d.ts +2 -0
- package/dist/cjs/utils/constants.d.ts.map +1 -1
- package/dist/cjs/utils/constants.js +3 -1
- package/dist/cjs/utils/dashboard.d.ts +4 -3
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +13 -91
- package/dist/cjs/utils/dataFetcher.d.ts +3 -1
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +66 -30
- package/dist/cjs/utils/filterProcessing.d.ts +1 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +3 -0
- package/dist/cjs/utils/pivotConstructor.d.ts +4 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +7 -7
- package/dist/cjs/utils/pivotProcessing.d.ts +4 -1
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +27 -20
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +104 -88
- package/dist/cjs/utils/report.d.ts +17 -5
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +23 -23
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +21 -21
- package/dist/cjs/utils/tableProcessing.d.ts +37 -10
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +46 -38
- package/dist/cjs/utils/tenants.d.ts +11 -0
- package/dist/cjs/utils/tenants.d.ts.map +1 -0
- package/dist/cjs/utils/tenants.js +13 -0
- package/dist/cjs/utils/textProcessing.d.ts +1 -0
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +49 -0
- package/dist/cjs/utils/validation.js +1 -1
- package/dist/esm/Chart.d.ts +2 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +2 -2
- package/dist/esm/ChartBuilder.d.ts +20 -2
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +144 -50
- package/dist/esm/ChartEditor.d.ts +5 -3
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +5 -6
- package/dist/esm/Context.d.ts +15 -4
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +42 -60
- package/dist/esm/Dashboard.d.ts +4 -0
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +50 -10
- package/dist/esm/QuillProvider.d.ts +7 -46
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +2 -4
- package/dist/esm/ReportBuilder.d.ts +9 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +200 -84
- package/dist/esm/SQLEditor.d.ts +5 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +80 -17
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +4 -3
- package/dist/esm/components/Chart/InternalChart.d.ts +2 -1
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +111 -29
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.js +10 -7
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts +3 -2
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +66 -65
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +82 -35
- package/dist/esm/components/Dashboard/MetricComponent.js +3 -3
- package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +3 -3
- package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/util.js +6 -2
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +3 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +29 -20
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +9 -1
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +26 -4
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterStack.js +2 -2
- package/dist/esm/components/ReportBuilder/convert.d.ts +1 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +54 -5
- package/dist/esm/components/ReportBuilder/ui.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +4 -3
- package/dist/esm/components/UiComponents.d.ts +1 -0
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/hooks/useAskQuill.d.ts +1 -1
- package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useAskQuill.js +7 -6
- package/dist/esm/hooks/useAstToFilterTree.d.ts +2 -1
- package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
- package/dist/esm/hooks/useAstToFilterTree.js +3 -3
- package/dist/esm/hooks/useDashboard.d.ts +6 -2
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +34 -10
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +7 -5
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +8 -2
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +59 -30
- package/dist/esm/models/Client.d.ts +22 -3
- package/dist/esm/models/Client.d.ts.map +1 -1
- package/dist/esm/models/Dashboard.d.ts +2 -0
- package/dist/esm/models/Dashboard.d.ts.map +1 -1
- package/dist/esm/models/Report.d.ts +4 -0
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts +3 -2
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +3323 -977
- package/dist/esm/utils/astProcessing.d.ts +1 -1
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +5 -3
- package/dist/esm/utils/client.d.ts +4 -2
- package/dist/esm/utils/client.d.ts.map +1 -1
- package/dist/esm/utils/client.js +48 -1
- package/dist/esm/utils/columnProcessing.d.ts +3 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +31 -1
- package/dist/esm/utils/constants.d.ts +2 -0
- package/dist/esm/utils/constants.d.ts.map +1 -1
- package/dist/esm/utils/constants.js +2 -0
- package/dist/esm/utils/dashboard.d.ts +4 -3
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +13 -90
- package/dist/esm/utils/dataFetcher.d.ts +3 -1
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +65 -29
- package/dist/esm/utils/filterProcessing.d.ts +1 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +3 -0
- package/dist/esm/utils/pivotConstructor.d.ts +4 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +8 -8
- package/dist/esm/utils/pivotProcessing.d.ts +4 -1
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +27 -20
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +104 -88
- package/dist/esm/utils/report.d.ts +17 -5
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +20 -23
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +21 -21
- package/dist/esm/utils/tableProcessing.d.ts +37 -10
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +47 -39
- package/dist/esm/utils/tenants.d.ts +11 -0
- package/dist/esm/utils/tenants.d.ts.map +1 -0
- package/dist/esm/utils/tenants.js +9 -0
- package/dist/esm/utils/textProcessing.d.ts +1 -0
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +48 -0
- package/dist/esm/utils/validation.js +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { isTextColumnType, } from '../components/ReportBuilder/ast';
|
|
2
1
|
import { deepCopy } from '../components/ReportBuilder/util';
|
|
3
|
-
import { convertPostgresColumn } from './columnProcessing';
|
|
2
|
+
import { convertPostgresColumn, isStringType } from './columnProcessing';
|
|
4
3
|
import { MAX_PIVOT_UNIQUE_VALUES, QUILL_QUERY_ENDPOINT, QUILL_SERVER, } from './constants';
|
|
5
4
|
import { getData } from './dataFetcher';
|
|
6
5
|
import { parseValueFromBigQueryDates } from './dataProcessing';
|
|
@@ -19,7 +18,7 @@ export const hasColumnAlias = (columns, referencedColumns) => {
|
|
|
19
18
|
}
|
|
20
19
|
return false;
|
|
21
20
|
};
|
|
22
|
-
export const getUniqueValuesByColumns = async (columns, query, rows, client, customFields, filters) => {
|
|
21
|
+
export const getUniqueValuesByColumns = async (columns, query, rows, client, tenants, customFields, filters, dashboardName) => {
|
|
23
22
|
const stringNames = columns.map((column) => column.field);
|
|
24
23
|
const uniqueValues = {};
|
|
25
24
|
//TODO: this bigquery case is wack, we should be able to generate a distinct query for bigquery
|
|
@@ -30,13 +29,14 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client, cus
|
|
|
30
29
|
metadata: {
|
|
31
30
|
query: query,
|
|
32
31
|
task: 'query',
|
|
33
|
-
orgId: client.organizationId || '*',
|
|
34
32
|
clientId: client.publicKey,
|
|
35
33
|
databaseType: client?.databaseType,
|
|
36
34
|
customFieldsByTable: customFields,
|
|
37
35
|
useNewNodeSql: true,
|
|
38
36
|
dateField: filters?.find((filter) => filter.filterType === 'date_range')?.dateField,
|
|
39
37
|
filters,
|
|
38
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
39
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
40
40
|
},
|
|
41
41
|
};
|
|
42
42
|
const cloudBody = { query };
|
|
@@ -59,7 +59,7 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client, cus
|
|
|
59
59
|
}
|
|
60
60
|
else {
|
|
61
61
|
const distinctValueQuery = generateDistinctQuery(stringNames, query, client.databaseType);
|
|
62
|
-
const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client, customFields, filters);
|
|
62
|
+
const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client, tenants, customFields, filters, dashboardName);
|
|
63
63
|
if (!distinctStrings) {
|
|
64
64
|
return {};
|
|
65
65
|
}
|
|
@@ -69,16 +69,20 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client, cus
|
|
|
69
69
|
}
|
|
70
70
|
return uniqueValues;
|
|
71
71
|
};
|
|
72
|
-
export const getUniqueStringValues = async (columns, tableName, client, customFields, previousUniqueValues, withExceededColumns, query) => {
|
|
72
|
+
export const getUniqueStringValues = async (columns, tableName, client, tenants, customFields, previousUniqueValues, withExceededColumns, query, dashboardName) => {
|
|
73
73
|
const convertedStringColumns = columns.filter((column) => {
|
|
74
|
-
return
|
|
74
|
+
return isStringType(column.fieldType);
|
|
75
75
|
});
|
|
76
76
|
const stringNames = convertedStringColumns.map((column) => processColumnReference(column.field, client.databaseType));
|
|
77
|
-
const { filteredColumns: smallStringColumns, exceededColumns } =
|
|
77
|
+
const { filteredColumns: smallStringColumns, exceededColumns } = query || stringNames.length > 0
|
|
78
|
+
? await getCountsByColumns(convertedStringColumns, query || `Select ${stringNames.join(', ')} from ${tableName}`, client, tenants, customFields ?? [], dashboardName)
|
|
79
|
+
: { filteredColumns: [], exceededColumns: undefined };
|
|
78
80
|
const smallStringNames = smallStringColumns.map((column) => processColumnReference(column.field, client.databaseType));
|
|
79
|
-
const newUniqueValues =
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
const newUniqueValues = query || smallStringColumns.length > 0
|
|
82
|
+
? await getUniqueValuesByColumns(
|
|
83
|
+
// returns null if data error
|
|
84
|
+
smallStringColumns, query || `Select ${smallStringNames.join(', ')} from ${tableName}`, [], client, tenants, customFields ?? [], undefined, dashboardName)
|
|
85
|
+
: null;
|
|
82
86
|
if (!newUniqueValues) {
|
|
83
87
|
return {};
|
|
84
88
|
}
|
|
@@ -100,24 +104,24 @@ export const getUniqueStringValues = async (columns, tableName, client, customFi
|
|
|
100
104
|
return newUniqueValues;
|
|
101
105
|
}
|
|
102
106
|
};
|
|
103
|
-
export const getRelevantInfoFromQuery = async (columns, client, query, customFields) => {
|
|
107
|
+
export const getRelevantInfoFromQuery = async (columns, client, tenants, query, customFields, dashboardName) => {
|
|
104
108
|
let dateRanges = {};
|
|
105
109
|
let uniqueStrings = {};
|
|
106
110
|
let error = undefined;
|
|
107
111
|
try {
|
|
108
112
|
const convertedStringColumns = columns.filter((column) => {
|
|
109
|
-
return
|
|
113
|
+
return isStringType(column.fieldType);
|
|
110
114
|
});
|
|
111
115
|
const stringNames = convertedStringColumns.map((column) => column.field);
|
|
112
116
|
if (stringNames.length > 0) {
|
|
113
|
-
const { filteredColumns: smallStringColumns } = await getCountsByColumns(convertedStringColumns, query, client, customFields);
|
|
114
|
-
uniqueStrings = await getUniqueValuesByColumns(smallStringColumns, query, [], client, customFields);
|
|
117
|
+
const { filteredColumns: smallStringColumns } = await getCountsByColumns(convertedStringColumns, query, client, tenants, customFields, dashboardName);
|
|
118
|
+
uniqueStrings = await getUniqueValuesByColumns(smallStringColumns, query, [], client, tenants, customFields, undefined, dashboardName);
|
|
115
119
|
}
|
|
116
120
|
const dateColumns = columns.filter((column) => {
|
|
117
121
|
return column.fieldType === 'date';
|
|
118
122
|
});
|
|
119
123
|
if (dateColumns.length > 0) {
|
|
120
|
-
dateRanges = await getQueryDateRangeByColumns(dateColumns, query, client, customFields);
|
|
124
|
+
dateRanges = await getQueryDateRangeByColumns(dateColumns, query, client, tenants, customFields, dashboardName);
|
|
121
125
|
if (dateRanges === null) {
|
|
122
126
|
throw new Error("Couldn't fetch date ranges");
|
|
123
127
|
}
|
|
@@ -132,7 +136,7 @@ export const getRelevantInfoFromQuery = async (columns, client, query, customFie
|
|
|
132
136
|
error,
|
|
133
137
|
};
|
|
134
138
|
};
|
|
135
|
-
export const getCountsByColumns = async (columns, query, client, customFields) => {
|
|
139
|
+
export const getCountsByColumns = async (columns, query, client, tenants, customFields, dashboardName) => {
|
|
136
140
|
const stringNames = columns.map((column) => column.field);
|
|
137
141
|
const countQuery = generateCountQuery(stringNames, query, client.databaseType || 'postgresql');
|
|
138
142
|
try {
|
|
@@ -140,11 +144,12 @@ export const getCountsByColumns = async (columns, query, client, customFields) =
|
|
|
140
144
|
metadata: {
|
|
141
145
|
query: countQuery,
|
|
142
146
|
task: 'query',
|
|
143
|
-
orgId: client.organizationId || '*',
|
|
144
147
|
clientId: client.publicKey,
|
|
145
148
|
databaseType: client?.databaseType,
|
|
146
149
|
customFieldsByTable: customFields,
|
|
147
150
|
useNewNodeSql: true,
|
|
151
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
152
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
148
153
|
},
|
|
149
154
|
};
|
|
150
155
|
const cloudBody = { countQuery };
|
|
@@ -173,13 +178,12 @@ export const getCountsByColumns = async (columns, query, client, customFields) =
|
|
|
173
178
|
return { filteredColumns: columns, exceededColumns: undefined };
|
|
174
179
|
}
|
|
175
180
|
};
|
|
176
|
-
const fetchDistinctStrings = async (query, client, customFields, filters) => {
|
|
181
|
+
const fetchDistinctStrings = async (query, client, tenants, customFields, filters, dashboardName) => {
|
|
177
182
|
try {
|
|
178
183
|
const hostedBody = {
|
|
179
184
|
metadata: {
|
|
180
185
|
query,
|
|
181
186
|
task: 'query',
|
|
182
|
-
orgId: client.organizationId || '*',
|
|
183
187
|
clientId: client.publicKey,
|
|
184
188
|
databaseType: client?.databaseType,
|
|
185
189
|
customFieldsByTable: customFields,
|
|
@@ -187,6 +191,8 @@ const fetchDistinctStrings = async (query, client, customFields, filters) => {
|
|
|
187
191
|
filters,
|
|
188
192
|
// @ts-ignore
|
|
189
193
|
dateField: filters?.find((filter) => filter.filterType === 'date_range')?.dateField,
|
|
194
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
195
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
190
196
|
},
|
|
191
197
|
};
|
|
192
198
|
const cloudBody = { query };
|
|
@@ -217,25 +223,26 @@ const fetchDistinctStrings = async (query, client, customFields, filters) => {
|
|
|
217
223
|
return null;
|
|
218
224
|
}
|
|
219
225
|
};
|
|
220
|
-
export const getQueryDateRangeByColumns = async (columns, query, client, customFields) => {
|
|
226
|
+
export const getQueryDateRangeByColumns = async (columns, query, client, tenants, customFields, dashboardName) => {
|
|
221
227
|
const columnNames = columns.map(
|
|
222
228
|
// @ts-ignore
|
|
223
229
|
(column) => column.field || column.name);
|
|
224
230
|
const distinctValueQuery = generateMinMaxDateRangeQueries(columnNames, query, client.databaseType || 'postgresql');
|
|
225
|
-
const dateRanges = await fetchQueryDateRanges(distinctValueQuery, client, customFields);
|
|
231
|
+
const dateRanges = await fetchQueryDateRanges(distinctValueQuery, client, tenants, customFields, dashboardName);
|
|
226
232
|
return dateRanges;
|
|
227
233
|
};
|
|
228
|
-
const fetchQueryDateRanges = async (query, client, customFields) => {
|
|
234
|
+
const fetchQueryDateRanges = async (query, client, tenants, customFields, dashboardName) => {
|
|
229
235
|
try {
|
|
230
236
|
const hostedBody = {
|
|
231
237
|
metadata: {
|
|
232
238
|
query,
|
|
233
239
|
task: 'query',
|
|
234
|
-
orgId: client.organizationId || '*',
|
|
235
240
|
clientId: client.publicKey,
|
|
236
241
|
databaseType: client?.databaseType,
|
|
237
242
|
customFieldsByTable: customFields,
|
|
238
243
|
useNewNodeSql: true,
|
|
244
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
245
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
239
246
|
},
|
|
240
247
|
};
|
|
241
248
|
const cloudBody = { query };
|
|
@@ -255,16 +262,17 @@ const fetchQueryDateRanges = async (query, client, customFields) => {
|
|
|
255
262
|
return null;
|
|
256
263
|
}
|
|
257
264
|
};
|
|
258
|
-
export const getPaginatedRows = async (client, query, reportId, processing, filters, customFields) => {
|
|
265
|
+
export const getPaginatedRows = async (client, tenants, query, reportId, processing, filters, customFields, dashboardName) => {
|
|
259
266
|
if (query) {
|
|
260
|
-
return await fetchResultsByQuery(query, client, processing, customFields);
|
|
267
|
+
return await fetchResultsByQuery(query, client, tenants, processing, customFields, filters, undefined, undefined, undefined, undefined, dashboardName);
|
|
261
268
|
}
|
|
262
269
|
else if (reportId) {
|
|
263
|
-
return await fetchResultsByReport(reportId, client, processing, filters, customFields);
|
|
270
|
+
return await fetchResultsByReport(reportId, client, tenants, processing, filters, customFields);
|
|
264
271
|
}
|
|
265
272
|
return { rows: [], columns: [] };
|
|
266
273
|
};
|
|
267
|
-
|
|
274
|
+
// TODO: Move these to call through the sdk
|
|
275
|
+
export const fetchResultsByQuery = async (query, client, tenants, processing, customFields, filters, dateField, rowsOnly, rowCountOnly, filterMap, dashboardName) => {
|
|
268
276
|
let rows = [];
|
|
269
277
|
let columns = [];
|
|
270
278
|
let error = undefined;
|
|
@@ -276,12 +284,9 @@ export const fetchResultsByQuery = async (query, client, processing, customField
|
|
|
276
284
|
query,
|
|
277
285
|
task: 'query',
|
|
278
286
|
filterMap,
|
|
279
|
-
orgId: client.organizationId || '*',
|
|
280
287
|
clientId: client.publicKey,
|
|
281
288
|
databaseType: client?.databaseType,
|
|
282
|
-
getCustomFields:
|
|
283
|
-
? false
|
|
284
|
-
: true,
|
|
289
|
+
getCustomFields: !!tenants?.length,
|
|
285
290
|
customFieldsByTable: customFields,
|
|
286
291
|
additionalProcessing: processing,
|
|
287
292
|
useUpdatedDataGathering: processing ? true : false,
|
|
@@ -290,6 +295,8 @@ export const fetchResultsByQuery = async (query, client, processing, customField
|
|
|
290
295
|
dateField: dateField ?? undefined,
|
|
291
296
|
rowsOnly,
|
|
292
297
|
rowCountOnly,
|
|
298
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
299
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
293
300
|
},
|
|
294
301
|
};
|
|
295
302
|
const cloudBody = { query };
|
|
@@ -318,7 +325,7 @@ export const fetchResultsByQuery = async (query, client, processing, customField
|
|
|
318
325
|
if (resp && resp.errorMessage) {
|
|
319
326
|
throw new Error(resp.errorMessage);
|
|
320
327
|
}
|
|
321
|
-
if (resp.rowCount) {
|
|
328
|
+
if (resp.rowCount !== undefined) {
|
|
322
329
|
rowCount = resp.rowCount;
|
|
323
330
|
}
|
|
324
331
|
if (!resp.error && !parsedSuccessfully) {
|
|
@@ -352,7 +359,7 @@ export const fetchResultsByQuery = async (query, client, processing, customField
|
|
|
352
359
|
}
|
|
353
360
|
return { rows, columns, rowCount, error, itemQuery };
|
|
354
361
|
};
|
|
355
|
-
export const fetchResultsByReport = async (reportId, client, processing, filters, customFields, rowsOnly, rowCountOnly, abortSignal) => {
|
|
362
|
+
export const fetchResultsByReport = async (reportId, client, tenants, processing, filters, customFields, rowsOnly, rowCountOnly, abortSignal) => {
|
|
356
363
|
const updatedProcessing = { ...processing };
|
|
357
364
|
let rows = [];
|
|
358
365
|
let columns = [];
|
|
@@ -378,7 +385,6 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
|
|
|
378
385
|
const hostedBody = {
|
|
379
386
|
metadata: {
|
|
380
387
|
dashboardItemId: reportId,
|
|
381
|
-
orgId: client?.organizationId || '*',
|
|
382
388
|
task: 'item',
|
|
383
389
|
filters: minimalFilters,
|
|
384
390
|
clientId: client?.publicKey,
|
|
@@ -389,6 +395,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
|
|
|
389
395
|
useNewNodeSql: true,
|
|
390
396
|
rowsOnly,
|
|
391
397
|
rowCountOnly,
|
|
398
|
+
tenants,
|
|
392
399
|
},
|
|
393
400
|
};
|
|
394
401
|
const cloudBody = {
|
|
@@ -401,7 +408,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
|
|
|
401
408
|
throw new Error(resp.errorMessage);
|
|
402
409
|
}
|
|
403
410
|
processFilterErrorList(resp);
|
|
404
|
-
if (resp.rowCount) {
|
|
411
|
+
if (resp.rowCount !== undefined) {
|
|
405
412
|
rowCount = resp.rowCount;
|
|
406
413
|
}
|
|
407
414
|
const gatheredRows = resp.rows && resp.rows.length ? resp.rows : [];
|
|
@@ -425,7 +432,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
|
|
|
425
432
|
}
|
|
426
433
|
return { rows, columns, rowCount, error };
|
|
427
434
|
};
|
|
428
|
-
export const fetchTableByAST = async (ast, client, processing, customFields, rowsOnly, rowCountOnly) => {
|
|
435
|
+
export const fetchTableByAST = async (ast, client, tenants, processing, customFields, rowsOnly, rowCountOnly, dashboardName) => {
|
|
429
436
|
let rows = [];
|
|
430
437
|
let columns = [];
|
|
431
438
|
let rowCount;
|
|
@@ -437,7 +444,6 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
|
|
|
437
444
|
clientId: client.publicKey,
|
|
438
445
|
ast,
|
|
439
446
|
publicKey: client.publicKey,
|
|
440
|
-
orgId: client.organizationId || '*',
|
|
441
447
|
task: 'patterns',
|
|
442
448
|
getCustomFields: false,
|
|
443
449
|
customFields,
|
|
@@ -446,6 +452,8 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
|
|
|
446
452
|
useNewNodeSql: true,
|
|
447
453
|
rowsOnly,
|
|
448
454
|
rowCountOnly,
|
|
455
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
456
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
449
457
|
},
|
|
450
458
|
};
|
|
451
459
|
const cloudBody = {};
|
|
@@ -454,7 +462,7 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
|
|
|
454
462
|
throw new Error(resp.errorMessage);
|
|
455
463
|
}
|
|
456
464
|
processFilterErrorList(resp);
|
|
457
|
-
if (resp.rowCount) {
|
|
465
|
+
if (resp.rowCount !== undefined) {
|
|
458
466
|
rowCount = resp.rowCount;
|
|
459
467
|
}
|
|
460
468
|
const gatheredRows = resp.rows && resp.rows.length ? resp.rows : [];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { QuillDatabaseTenant, QuillProviderClient } from '../models/Client';
|
|
2
|
+
export type TenantValue = {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string | number;
|
|
5
|
+
};
|
|
6
|
+
export type Tenant = {
|
|
7
|
+
name: string;
|
|
8
|
+
tenantField: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const asSingleDatabaseTenant: (client: QuillProviderClient | undefined) => QuillDatabaseTenant | undefined;
|
|
11
|
+
//# sourceMappingURL=tenants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenants.d.ts","sourceRoot":"","sources":["../../../src/utils/tenants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,mBAAmB,GAAG,SAAS,KACtC,mBAAmB,GAAG,SASxB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare function capitalize(text: string): string;
|
|
2
2
|
export declare function depluralize(text: string): string;
|
|
3
|
+
export declare function matchCasing(text: string, template: string): string;
|
|
3
4
|
export declare function snakeCaseToTitleCase(str: string): string;
|
|
4
5
|
export declare function snakeAndCamelCaseToTitleCase(str: string): string;
|
|
5
6
|
export declare function removeDoubleQuotes(str: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/textProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,UAa/C;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,UAiBvD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAK7C"}
|
|
1
|
+
{"version":3,"file":"textProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/textProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyDlE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,UAa/C;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,UAiBvD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAK7C"}
|
|
@@ -10,6 +10,54 @@ export function depluralize(text) {
|
|
|
10
10
|
}
|
|
11
11
|
return text;
|
|
12
12
|
}
|
|
13
|
+
export function matchCasing(text, template) {
|
|
14
|
+
// Detect TitleCase
|
|
15
|
+
const isTitleCase = (str) => /^[A-Z][a-z]*([A-Z][a-z]*)*$/.test(str);
|
|
16
|
+
// Detect camelCase
|
|
17
|
+
const isCamelCase = (str) => /^[a-z]+([A-Z][a-z]*)*$/.test(str);
|
|
18
|
+
// Detect snake_case
|
|
19
|
+
const isSnakeCase = (str) => /^[a-z0-9]+(_[a-z0-9]+)*$/.test(str);
|
|
20
|
+
// Detect all lowercase
|
|
21
|
+
const isAllLowerCase = (str) => /^[a-z]+$/.test(str);
|
|
22
|
+
// Detect all uppercase
|
|
23
|
+
const isAllUpperCase = (str) => /^[A-Z]+$/.test(str);
|
|
24
|
+
// Detect capitalized (first letter uppercase, rest lowercase)
|
|
25
|
+
const isCapitalized = (str) => /^[A-Z][a-z]*$/.test(str);
|
|
26
|
+
// Function to convert to TitleCase
|
|
27
|
+
const toTitleCase = (str) => str.toLowerCase().replace(/\b\w/g, (char) => char.toUpperCase());
|
|
28
|
+
// Function to convert to camelCase
|
|
29
|
+
const toCamelCase = (str) => str.replace(/_./g, (match) => match.charAt(1).toUpperCase()).toLowerCase();
|
|
30
|
+
// Function to convert to snake_case
|
|
31
|
+
const toSnakeCase = (str) => str.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`);
|
|
32
|
+
// Function to convert to all lowercase
|
|
33
|
+
const toLowerCase = (str) => str.toLowerCase();
|
|
34
|
+
// Function to convert to all uppercase
|
|
35
|
+
const toUpperCase = (str) => str.toUpperCase();
|
|
36
|
+
// Function to convert to capitalized (first letter uppercase, rest lowercase)
|
|
37
|
+
const toCapitalized = (str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
38
|
+
// Match casing of the template and apply to the text
|
|
39
|
+
if (isTitleCase(template)) {
|
|
40
|
+
return toTitleCase(text);
|
|
41
|
+
}
|
|
42
|
+
else if (isCamelCase(template)) {
|
|
43
|
+
return toCamelCase(text);
|
|
44
|
+
}
|
|
45
|
+
else if (isSnakeCase(template)) {
|
|
46
|
+
return toSnakeCase(text);
|
|
47
|
+
}
|
|
48
|
+
else if (isAllLowerCase(template)) {
|
|
49
|
+
return toLowerCase(text);
|
|
50
|
+
}
|
|
51
|
+
else if (isAllUpperCase(template)) {
|
|
52
|
+
return toUpperCase(text);
|
|
53
|
+
}
|
|
54
|
+
else if (isCapitalized(template)) {
|
|
55
|
+
return toCapitalized(text);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return text; // Default case if no specific pattern is detected
|
|
59
|
+
}
|
|
60
|
+
}
|
|
13
61
|
export function snakeCaseToTitleCase(str) {
|
|
14
62
|
if (!str) {
|
|
15
63
|
return str;
|
|
@@ -19,7 +19,7 @@ export const validateReport = (formData, dashboardData, defaultDateFilter, allTa
|
|
|
19
19
|
issues.push(`Delete the "${filter.label}" filter on "${formData.dashboardName}" or add to another dashboard.`);
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
|
-
if (formData.pivot && !isValidPivot(formData.pivot)) {
|
|
22
|
+
if (formData.pivot && !isValidPivot(formData.pivot).valid) {
|
|
23
23
|
issues.push(`Pivot is invalid.`);
|
|
24
24
|
}
|
|
25
25
|
return issues;
|