@quillsql/react 2.13.26 → 2.13.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +2 -2
- package/dist/cjs/ChartBuilder.d.ts +20 -2
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +130 -36
- 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 +37 -60
- package/dist/cjs/Dashboard.d.ts +4 -0
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +78 -23
- package/dist/cjs/QuillProvider.d.ts +12 -9
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +2 -2
- 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 +5 -4
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +106 -27
- 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 +65 -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/util.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/util.js +6 -2
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +17 -18
- 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 +5 -2
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +21 -7
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +6 -4
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -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 +1 -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 +3 -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 +47 -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/dashboard.d.ts +4 -3
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +10 -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 +2 -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 +101 -85
- 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 +45 -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.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 +131 -40
- 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 +36 -59
- package/dist/esm/Dashboard.d.ts +4 -0
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +79 -24
- package/dist/esm/QuillProvider.d.ts +12 -9
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +2 -2
- 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 +6 -5
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +107 -28
- 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 +65 -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/util.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/util.js +6 -2
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +17 -18
- 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 +5 -2
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +21 -7
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +7 -5
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- 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 +1 -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 +4 -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 +47 -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/dashboard.d.ts +4 -3
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +10 -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 +2 -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 +101 -85
- 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 +46 -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,16 @@ 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
|
-
export const fetchResultsByQuery = async (query, client, processing, customFields, filters, dateField, rowsOnly, rowCountOnly, filterMap) => {
|
|
274
|
+
export const fetchResultsByQuery = async (query, client, tenants, processing, customFields, filters, dateField, rowsOnly, rowCountOnly, filterMap, dashboardName) => {
|
|
268
275
|
let rows = [];
|
|
269
276
|
let columns = [];
|
|
270
277
|
let error = undefined;
|
|
@@ -276,12 +283,9 @@ export const fetchResultsByQuery = async (query, client, processing, customField
|
|
|
276
283
|
query,
|
|
277
284
|
task: 'query',
|
|
278
285
|
filterMap,
|
|
279
|
-
orgId: client.organizationId || '*',
|
|
280
286
|
clientId: client.publicKey,
|
|
281
287
|
databaseType: client?.databaseType,
|
|
282
|
-
getCustomFields:
|
|
283
|
-
? false
|
|
284
|
-
: true,
|
|
288
|
+
getCustomFields: !!tenants?.length,
|
|
285
289
|
customFieldsByTable: customFields,
|
|
286
290
|
additionalProcessing: processing,
|
|
287
291
|
useUpdatedDataGathering: processing ? true : false,
|
|
@@ -290,6 +294,8 @@ export const fetchResultsByQuery = async (query, client, processing, customField
|
|
|
290
294
|
dateField: dateField ?? undefined,
|
|
291
295
|
rowsOnly,
|
|
292
296
|
rowCountOnly,
|
|
297
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
298
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
293
299
|
},
|
|
294
300
|
};
|
|
295
301
|
const cloudBody = { query };
|
|
@@ -318,7 +324,7 @@ export const fetchResultsByQuery = async (query, client, processing, customField
|
|
|
318
324
|
if (resp && resp.errorMessage) {
|
|
319
325
|
throw new Error(resp.errorMessage);
|
|
320
326
|
}
|
|
321
|
-
if (resp.rowCount) {
|
|
327
|
+
if (resp.rowCount !== undefined) {
|
|
322
328
|
rowCount = resp.rowCount;
|
|
323
329
|
}
|
|
324
330
|
if (!resp.error && !parsedSuccessfully) {
|
|
@@ -352,7 +358,7 @@ export const fetchResultsByQuery = async (query, client, processing, customField
|
|
|
352
358
|
}
|
|
353
359
|
return { rows, columns, rowCount, error, itemQuery };
|
|
354
360
|
};
|
|
355
|
-
export const fetchResultsByReport = async (reportId, client, processing, filters, customFields, rowsOnly, rowCountOnly, abortSignal) => {
|
|
361
|
+
export const fetchResultsByReport = async (reportId, client, tenants, processing, filters, customFields, rowsOnly, rowCountOnly, abortSignal) => {
|
|
356
362
|
const updatedProcessing = { ...processing };
|
|
357
363
|
let rows = [];
|
|
358
364
|
let columns = [];
|
|
@@ -378,7 +384,6 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
|
|
|
378
384
|
const hostedBody = {
|
|
379
385
|
metadata: {
|
|
380
386
|
dashboardItemId: reportId,
|
|
381
|
-
orgId: client?.organizationId || '*',
|
|
382
387
|
task: 'item',
|
|
383
388
|
filters: minimalFilters,
|
|
384
389
|
clientId: client?.publicKey,
|
|
@@ -389,6 +394,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
|
|
|
389
394
|
useNewNodeSql: true,
|
|
390
395
|
rowsOnly,
|
|
391
396
|
rowCountOnly,
|
|
397
|
+
tenants,
|
|
392
398
|
},
|
|
393
399
|
};
|
|
394
400
|
const cloudBody = {
|
|
@@ -401,7 +407,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
|
|
|
401
407
|
throw new Error(resp.errorMessage);
|
|
402
408
|
}
|
|
403
409
|
processFilterErrorList(resp);
|
|
404
|
-
if (resp.rowCount) {
|
|
410
|
+
if (resp.rowCount !== undefined) {
|
|
405
411
|
rowCount = resp.rowCount;
|
|
406
412
|
}
|
|
407
413
|
const gatheredRows = resp.rows && resp.rows.length ? resp.rows : [];
|
|
@@ -425,7 +431,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
|
|
|
425
431
|
}
|
|
426
432
|
return { rows, columns, rowCount, error };
|
|
427
433
|
};
|
|
428
|
-
export const fetchTableByAST = async (ast, client, processing, customFields, rowsOnly, rowCountOnly) => {
|
|
434
|
+
export const fetchTableByAST = async (ast, client, tenants, processing, customFields, rowsOnly, rowCountOnly, dashboardName) => {
|
|
429
435
|
let rows = [];
|
|
430
436
|
let columns = [];
|
|
431
437
|
let rowCount;
|
|
@@ -437,7 +443,6 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
|
|
|
437
443
|
clientId: client.publicKey,
|
|
438
444
|
ast,
|
|
439
445
|
publicKey: client.publicKey,
|
|
440
|
-
orgId: client.organizationId || '*',
|
|
441
446
|
task: 'patterns',
|
|
442
447
|
getCustomFields: false,
|
|
443
448
|
customFields,
|
|
@@ -446,6 +451,8 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
|
|
|
446
451
|
useNewNodeSql: true,
|
|
447
452
|
rowsOnly,
|
|
448
453
|
rowCountOnly,
|
|
454
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
455
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
449
456
|
},
|
|
450
457
|
};
|
|
451
458
|
const cloudBody = {};
|
|
@@ -454,7 +461,7 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
|
|
|
454
461
|
throw new Error(resp.errorMessage);
|
|
455
462
|
}
|
|
456
463
|
processFilterErrorList(resp);
|
|
457
|
-
if (resp.rowCount) {
|
|
464
|
+
if (resp.rowCount !== undefined) {
|
|
458
465
|
rowCount = resp.rowCount;
|
|
459
466
|
}
|
|
460
467
|
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;
|