@quillsql/react 2.13.27 → 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 +1 -1
- 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 +3 -2
- 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 +1 -1
- 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 +4 -3
- 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
|
@@ -54,7 +54,7 @@ export declare const createBasicSelectASTFromColumns: (columns: ColumnInternal[]
|
|
|
54
54
|
orderby: null;
|
|
55
55
|
limit: null;
|
|
56
56
|
};
|
|
57
|
-
export declare const fetchAndProcessASTFromPrompt: (aiPrompt: string, schema: Table[], client: QuillProviderClient, prevPivot?: Pivot, currentQuery?: string, prevTable?: string) => Promise<{
|
|
57
|
+
export declare const fetchAndProcessASTFromPrompt: (aiPrompt: string, schema: Table[], client: QuillProviderClient, prevPivot?: Pivot, currentQuery?: string, prevTable?: string, dashboardName?: string) => Promise<{
|
|
58
58
|
ast: any;
|
|
59
59
|
pivot: Pivot | null | undefined;
|
|
60
60
|
whereAST: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getTableNames } from '../components/ReportBuilder/ast';
|
|
2
|
-
import { convertBigQuery, convertGroupBy, convertRemoveSimpleParentheses, convertStringComparison, convertUnaryToBinary, convertWildcardColumns, } from '../components/ReportBuilder/convert';
|
|
2
|
+
import { convertBigQuery, convertGroupBy, convertOrderBy, convertRemoveSimpleParentheses, convertStringComparison, convertUnaryToBinary, convertWildcardColumns, } from '../components/ReportBuilder/convert';
|
|
3
3
|
import { deepCopy, removeNonSelectedTableReferences, removeTableNameAlias, } from '../components/ReportBuilder/util';
|
|
4
4
|
import { QUILL_SERVER } from './constants';
|
|
5
5
|
import { getUniqueStringValues } from './tableProcessing';
|
|
@@ -326,7 +326,7 @@ export const createBasicSelectASTFromColumns = (columns, tableName) => {
|
|
|
326
326
|
limit: null,
|
|
327
327
|
};
|
|
328
328
|
};
|
|
329
|
-
export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, prevPivot, currentQuery, prevTable) => {
|
|
329
|
+
export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, prevPivot, currentQuery, prevTable, dashboardName) => {
|
|
330
330
|
let res, data, ast, newAst, pivot;
|
|
331
331
|
let numRetries = 0;
|
|
332
332
|
let whereAST;
|
|
@@ -379,6 +379,7 @@ export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, pre
|
|
|
379
379
|
newAst = removeTableNameAlias(newAst);
|
|
380
380
|
newAst = convertWildcardColumns(newAst, schema); // must go before groupby
|
|
381
381
|
({ ast: newAst, pivot } = convertGroupBy(newAst, schema, prevPivot, prevTable));
|
|
382
|
+
newAst = convertOrderBy(newAst, schema);
|
|
382
383
|
newAst = convertStringComparison(newAst, client.databaseType || 'postgresql');
|
|
383
384
|
newAst = convertRemoveSimpleParentheses(newAst);
|
|
384
385
|
const table = getTableNames(newAst)[0];
|
|
@@ -390,7 +391,7 @@ export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, pre
|
|
|
390
391
|
if (!tableInfo) {
|
|
391
392
|
throw new Error('Table info not found');
|
|
392
393
|
}
|
|
393
|
-
const uniqueValues = await getUniqueStringValues(tableInfo.columns, processedName, client);
|
|
394
|
+
const uniqueValues = await getUniqueStringValues(tableInfo.columns, processedName, client, undefined, undefined, undefined, undefined, dashboardName);
|
|
394
395
|
newAst = convertUnaryToBinary(newAst);
|
|
395
396
|
newAst = removeNonSelectedTableReferences(newAst, processedName, tableInfo.columns.map((col) => col.field), uniqueValues);
|
|
396
397
|
if (pivot) {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { Client } from '../models/Client';
|
|
1
|
+
import { Client, QuillDatabaseTenant, QuillTenant } from '../models/Client';
|
|
2
2
|
export declare const EMPTY_CLIENT: Client;
|
|
3
|
-
export declare function fetchClient(publicKey: string, queryEndpoint: string, withCredentials?: boolean, queryHeaders?: HeadersInit): Promise<Client
|
|
3
|
+
export declare function fetchClient(publicKey: string, queryEndpoint: string, withCredentials?: boolean, queryHeaders?: HeadersInit): Promise<Client & {
|
|
4
|
+
allTenantTypes?: (QuillTenant | QuillDatabaseTenant)[];
|
|
5
|
+
}>;
|
|
4
6
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5E,eAAO,MAAM,YAAY,EAAE,MAM1B,CAAC;AAEF,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,eAAe,UAAQ,EACvB,YAAY,CAAC,EAAE,WAAW,GACzB,OAAO,CACR,MAAM,GAAG;IAAE,cAAc,CAAC,EAAE,CAAC,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAA;CAAE,CACpE,CA+EA"}
|
package/dist/esm/utils/client.js
CHANGED
|
@@ -7,6 +7,7 @@ export const EMPTY_CLIENT = {
|
|
|
7
7
|
};
|
|
8
8
|
export async function fetchClient(publicKey, queryEndpoint, withCredentials = false, queryHeaders) {
|
|
9
9
|
let result = EMPTY_CLIENT;
|
|
10
|
+
let clientTenantIds = [];
|
|
10
11
|
try {
|
|
11
12
|
const response = await fetch(`${queryEndpoint}`, {
|
|
12
13
|
method: 'POST',
|
|
@@ -25,9 +26,54 @@ export async function fetchClient(publicKey, queryEndpoint, withCredentials = fa
|
|
|
25
26
|
});
|
|
26
27
|
const json = await response.json();
|
|
27
28
|
result = json.data?.data?.client || json.data?.client;
|
|
29
|
+
clientTenantIds = await Promise.all(result.allTenantTypes?.map(async (tenant) => {
|
|
30
|
+
const tenantResponse = await fetch(queryEndpoint, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
...queryHeaders,
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify({
|
|
37
|
+
metadata: {
|
|
38
|
+
tenantId: tenant.id,
|
|
39
|
+
task: 'tenant-query',
|
|
40
|
+
clientId: result.id,
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
43
|
+
});
|
|
44
|
+
const data = await tenantResponse.json();
|
|
45
|
+
if (!data.data?.rows) {
|
|
46
|
+
return {
|
|
47
|
+
id: tenant.id,
|
|
48
|
+
tenantIds: [],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
id: tenant.id,
|
|
53
|
+
tenantIds: data.data.rows.map((row) => ({
|
|
54
|
+
id: row[tenant.tenantField],
|
|
55
|
+
flag: row['quill_flag'],
|
|
56
|
+
label: row['quill_label'],
|
|
57
|
+
})),
|
|
58
|
+
};
|
|
59
|
+
}));
|
|
28
60
|
}
|
|
29
61
|
catch (error) {
|
|
30
62
|
console.error('ERROR:', error);
|
|
31
63
|
}
|
|
32
|
-
return
|
|
64
|
+
return {
|
|
65
|
+
...result,
|
|
66
|
+
allTenantTypes: result.multiTenancyDisabled
|
|
67
|
+
? [
|
|
68
|
+
{
|
|
69
|
+
scope: 'database',
|
|
70
|
+
flags: [],
|
|
71
|
+
tenantField: 'QUILL_SINGLE_TENANT',
|
|
72
|
+
},
|
|
73
|
+
]
|
|
74
|
+
: result.allTenantTypes?.map((tenant) => ({
|
|
75
|
+
...tenant,
|
|
76
|
+
tenantIds: clientTenantIds?.find((clientTenant) => clientTenant.id === tenant.id)?.tenantIds || [],
|
|
77
|
+
})),
|
|
78
|
+
};
|
|
33
79
|
}
|
|
@@ -17,6 +17,9 @@ export declare function convertFieldTypeToJSType(fieldType: string): string;
|
|
|
17
17
|
export declare function convertFormatToJsType(column: Column): string;
|
|
18
18
|
export declare function processColumnName(columnName: string): string;
|
|
19
19
|
export declare function isStringType(fieldType: string): boolean;
|
|
20
|
+
export declare function isDateType(fieldType: string): boolean;
|
|
21
|
+
export declare function isNumberType(fieldType: string): boolean;
|
|
22
|
+
export declare function isBoolType(fieldType: string): boolean;
|
|
20
23
|
export declare const getYAxisFields: (report: QuillReportInternal, dashboardFilters: DashboardFilter[]) => any[];
|
|
21
24
|
export {};
|
|
22
25
|
//# sourceMappingURL=columnProcessing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,UAAU,6CAA6C;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oCAAoC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,2BAA2B,GAC5B,6CAA6C,GAC7C,oCAAoC,CAAC;AAEzC,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,2BAA2B,GACjC,cAAc,
|
|
1
|
+
{"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,UAAU,6CAA6C;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oCAAoC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,2BAA2B,GAC5B,6CAA6C,GAC7C,oCAAoC,CAAC;AAEzC,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,2BAA2B,GACjC,cAAc,CAmJhB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AAsED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwDlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAIvD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CASrD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAavD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,eAAO,MAAM,cAAc,WACjB,mBAAmB,oBACT,eAAe,EAAE,UAqDpC,CAAC"}
|
|
@@ -91,6 +91,9 @@ export function convertPostgresColumn(field) {
|
|
|
91
91
|
case 3807: // jsonb[]
|
|
92
92
|
fieldType = 'jsonb[]';
|
|
93
93
|
break;
|
|
94
|
+
case 2277: // anyarray
|
|
95
|
+
fieldType = 'anyarray';
|
|
96
|
+
break;
|
|
94
97
|
case 1043: // varchar
|
|
95
98
|
default:
|
|
96
99
|
fieldType = 'varchar';
|
|
@@ -291,7 +294,34 @@ export function processColumnName(columnName) {
|
|
|
291
294
|
return removeBigQuerySpecialChars(columnName);
|
|
292
295
|
}
|
|
293
296
|
export function isStringType(fieldType) {
|
|
294
|
-
return ['string', 'varchar', 'text', 'char'].includes(fieldType);
|
|
297
|
+
return ['string', 'varchar', 'text', 'char', 'bpchar', 'citext'].includes(fieldType);
|
|
298
|
+
}
|
|
299
|
+
export function isDateType(fieldType) {
|
|
300
|
+
return [
|
|
301
|
+
'date',
|
|
302
|
+
'datetime',
|
|
303
|
+
'time',
|
|
304
|
+
'timestamptz',
|
|
305
|
+
'timestamp',
|
|
306
|
+
'interval',
|
|
307
|
+
].includes(fieldType);
|
|
308
|
+
}
|
|
309
|
+
export function isNumberType(fieldType) {
|
|
310
|
+
return [
|
|
311
|
+
'int8',
|
|
312
|
+
'int2',
|
|
313
|
+
'int4',
|
|
314
|
+
'float4',
|
|
315
|
+
'float8',
|
|
316
|
+
'numeric',
|
|
317
|
+
'number',
|
|
318
|
+
'smallint',
|
|
319
|
+
'float2',
|
|
320
|
+
'float16',
|
|
321
|
+
].includes(fieldType);
|
|
322
|
+
}
|
|
323
|
+
export function isBoolType(fieldType) {
|
|
324
|
+
return ['bool', 'boolean'].includes(fieldType);
|
|
295
325
|
}
|
|
296
326
|
export const getYAxisFields = (report, dashboardFilters) => {
|
|
297
327
|
try {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { QuillReportInternal } from '../models/Report';
|
|
2
2
|
import { QuillProviderClient } from '../models/Client';
|
|
3
|
-
import { DashboardFilter } from '../models/Filter';
|
|
4
3
|
/**
|
|
5
4
|
* Returns a cleaned version of the dashboard item we store in state. We clean
|
|
6
5
|
* the dashboard item so that we aren't exposing unnecessary details to the
|
|
@@ -11,6 +10,8 @@ import { DashboardFilter } from '../models/Filter';
|
|
|
11
10
|
export declare function cleanDashboardItem(item: {
|
|
12
11
|
[key: string]: any;
|
|
13
12
|
} | undefined, dashboardFilters: any, client: QuillProviderClient, dateBucket?: string): Promise<QuillReportInternal>;
|
|
14
|
-
export declare function getDashboard(dashboardName: string, client: QuillProviderClient
|
|
15
|
-
|
|
13
|
+
export declare function getDashboard(dashboardName: string, client: QuillProviderClient, tenants?: {
|
|
14
|
+
tenantField: string;
|
|
15
|
+
tenantIds: (string | number)[];
|
|
16
|
+
}[] | (string | number)[], flags?: string[]): Promise<any>;
|
|
16
17
|
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAWvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAWvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAuBvD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAiE9B;AA4HD,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA0Bd"}
|
|
@@ -3,7 +3,6 @@ import { snakeAndCamelCaseToTitleCase } from './textProcessing';
|
|
|
3
3
|
import { getData } from './dataFetcher';
|
|
4
4
|
import { getDateBucketFromRange } from './dates';
|
|
5
5
|
import { generatePivotWithSQL } from './pivotConstructor';
|
|
6
|
-
import { COMPARISON_RANGE, defaultOptionsV2, PRIMARY_RANGE, } from '../DateRangePicker/dateRangePickerUtils';
|
|
7
6
|
const defaultDashboardItem = {
|
|
8
7
|
id: '',
|
|
9
8
|
name: '',
|
|
@@ -46,7 +45,7 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
46
45
|
let pivotTable;
|
|
47
46
|
let pivotError;
|
|
48
47
|
try {
|
|
49
|
-
pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket);
|
|
48
|
+
pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket, item.dashboardName);
|
|
50
49
|
}
|
|
51
50
|
catch (e) {
|
|
52
51
|
pivotTable = undefined;
|
|
@@ -81,6 +80,7 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
81
80
|
order: item.order,
|
|
82
81
|
filtersApplied: item.filtersApplied,
|
|
83
82
|
filterMap: item.filterMap,
|
|
83
|
+
flags: item.flags,
|
|
84
84
|
rowCount: item.rowCount ? parseInt(item.rowCount) : item.rows.length,
|
|
85
85
|
template: item.template,
|
|
86
86
|
sort: item.sort,
|
|
@@ -94,7 +94,7 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
94
94
|
/**
|
|
95
95
|
* Extract and transform the data from itemInfo.
|
|
96
96
|
*/
|
|
97
|
-
async function getPivotTable(report, dashboardFilters, client, dateBucketInitial) {
|
|
97
|
+
async function getPivotTable(report, dashboardFilters, client, dateBucketInitial, dashboardName, tenants) {
|
|
98
98
|
if (!report)
|
|
99
99
|
return undefined;
|
|
100
100
|
const dateFilter = Object.values(dashboardFilters ?? {}).find((filter) => filter.filterType === 'date_range' || filter.operator === 'BETWEEN');
|
|
@@ -142,7 +142,7 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
142
142
|
if (!dateBucket && filterDateRange) {
|
|
143
143
|
dateBucket = getDateBucketFromRange(filterDateRange);
|
|
144
144
|
}
|
|
145
|
-
const pivotTable = await generatePivotWithSQL(pivot, report, client, dateBucket, dateFilter, report.distinctStrings);
|
|
145
|
+
const pivotTable = await generatePivotWithSQL(pivot, report, client, dateBucket, dateFilter, report.distinctStrings, undefined, dashboardName, tenants);
|
|
146
146
|
return pivotTable;
|
|
147
147
|
}
|
|
148
148
|
catch (e) {
|
|
@@ -155,6 +155,8 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
155
155
|
pivot,
|
|
156
156
|
report,
|
|
157
157
|
client,
|
|
158
|
+
dashboardName,
|
|
159
|
+
tenants,
|
|
158
160
|
})
|
|
159
161
|
: undefined;
|
|
160
162
|
}
|
|
@@ -181,104 +183,22 @@ function extractPivotedYAxis(pivotTable, itemInfo, config = undefined) {
|
|
|
181
183
|
// }
|
|
182
184
|
// return fields;
|
|
183
185
|
}
|
|
184
|
-
export async function getDashboard(dashboardName, client) {
|
|
185
|
-
const searchParams = new URLSearchParams({
|
|
186
|
-
publicKey: client.publicKey,
|
|
187
|
-
orgId: client?.organizationId || '*',
|
|
188
|
-
name: dashboardName,
|
|
189
|
-
}).toString();
|
|
186
|
+
export async function getDashboard(dashboardName, client, tenants, flags) {
|
|
190
187
|
const hostedBody = {
|
|
191
188
|
metadata: {
|
|
192
189
|
name: dashboardName,
|
|
193
190
|
task: 'dashboard',
|
|
194
191
|
clientId: client.publicKey,
|
|
195
|
-
orgId: client.organizationId || '*',
|
|
196
192
|
databaseType: client.databaseType,
|
|
197
193
|
useNewNodeSql: true,
|
|
194
|
+
tenants,
|
|
195
|
+
flags,
|
|
198
196
|
},
|
|
199
197
|
};
|
|
200
|
-
const resp = await getData(client, `dashconfig?${searchParams}`, 'omit', hostedBody, null, 'GET');
|
|
201
|
-
return resp;
|
|
202
|
-
}
|
|
203
|
-
export async function getDashboardFilters(dashboardName, client) {
|
|
204
198
|
const searchParams = new URLSearchParams({
|
|
205
199
|
publicKey: client.publicKey,
|
|
206
|
-
orgId: client.organizationId || '*',
|
|
207
200
|
name: dashboardName,
|
|
208
201
|
}).toString();
|
|
209
|
-
const hostedBody = {
|
|
210
|
-
metadata: {
|
|
211
|
-
name: dashboardName,
|
|
212
|
-
task: 'dashboard-filters-options',
|
|
213
|
-
clientId: client.publicKey,
|
|
214
|
-
orgId: client.organizationId || '*',
|
|
215
|
-
databaseType: client.databaseType,
|
|
216
|
-
useNewNodeSql: true,
|
|
217
|
-
},
|
|
218
|
-
};
|
|
219
202
|
const resp = await getData(client, `dashconfig?${searchParams}`, 'omit', hostedBody, null, 'GET');
|
|
220
|
-
|
|
221
|
-
if (resp.dateFilter && Object.keys(resp.dateFilter).length) {
|
|
222
|
-
let presetsOptions = defaultOptionsV2;
|
|
223
|
-
if (resp.dateFilter.presetRanges) {
|
|
224
|
-
presetsOptions = resp.dateFilter.presetRanges.map((elem) => {
|
|
225
|
-
if (!elem.isStatic) {
|
|
226
|
-
return {
|
|
227
|
-
label: elem.label,
|
|
228
|
-
value: elem.value,
|
|
229
|
-
startDate: (PRIMARY_RANGE[elem.value] ??
|
|
230
|
-
PRIMARY_RANGE['LAST_30_DAYS']).startDate,
|
|
231
|
-
endDate: (PRIMARY_RANGE[elem.value] ??
|
|
232
|
-
PRIMARY_RANGE['LAST_30_DAYS']).endDate,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
return {
|
|
236
|
-
label: elem.label,
|
|
237
|
-
value: elem.value,
|
|
238
|
-
startDate: new Date(elem.startDate),
|
|
239
|
-
endDate: new Date(elem.endDate),
|
|
240
|
-
};
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
const key = resp.dateFilter?.primaryRange?.value || 'LAST_6_MONTHS';
|
|
244
|
-
const primaryPreset = presetsOptions.find((option) => {
|
|
245
|
-
return option.value === key;
|
|
246
|
-
});
|
|
247
|
-
const filter = {
|
|
248
|
-
startDate: primaryPreset.startDate,
|
|
249
|
-
endDate: primaryPreset.endDate,
|
|
250
|
-
filterType: 'date_range',
|
|
251
|
-
options: presetsOptions.map((elem) => {
|
|
252
|
-
return {
|
|
253
|
-
label: elem.label,
|
|
254
|
-
value: elem.value,
|
|
255
|
-
};
|
|
256
|
-
}),
|
|
257
|
-
field: 'date_range',
|
|
258
|
-
label: resp.dateFilter.label,
|
|
259
|
-
preset: {
|
|
260
|
-
label: primaryPreset.label,
|
|
261
|
-
value: primaryPreset.value,
|
|
262
|
-
},
|
|
263
|
-
dashboardName: dashboardName,
|
|
264
|
-
};
|
|
265
|
-
if (resp.dateFilter.comparison) {
|
|
266
|
-
filter.comparison = true;
|
|
267
|
-
const compKey = resp.dateFilter.defaultComparisonRange ?? 'PREV_PERIOD';
|
|
268
|
-
const range = { startDate: filter.startDate, endDate: filter.endDate };
|
|
269
|
-
filter.comparisonRange = {
|
|
270
|
-
startDate: COMPARISON_RANGE[compKey](range)?.startDate,
|
|
271
|
-
endDate: COMPARISON_RANGE[compKey](range)?.endDate,
|
|
272
|
-
value: compKey,
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
filter.comparison = false;
|
|
277
|
-
}
|
|
278
|
-
filterArray.push(filter);
|
|
279
|
-
}
|
|
280
|
-
filterArray.push(...resp.filters.map((f) => {
|
|
281
|
-
return { ...f, dashboardName: dashboardName };
|
|
282
|
-
}));
|
|
283
|
-
return filterArray;
|
|
203
|
+
return resp;
|
|
284
204
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { QuillProviderClient } from '../models/Client';
|
|
2
2
|
export declare function getData(client: QuillProviderClient, cloudQueryEndpoint: string, noCred: RequestCredentials, hostedRequestBody: any, cloudRequestBody: any, method?: string, queryParam?: string, abortSignal?: AbortSignal): Promise<any>;
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function useQuillCloud(): {
|
|
4
|
+
getDataFromCloud: (client: QuillProviderClient, cloudQueryEndpoint: string, cloudRequestBody: any, method?: string, abortSignal?: AbortSignal) => Promise<any>;
|
|
5
|
+
};
|
|
4
6
|
export declare function fetchSqlQuery(ast: any, client: QuillProviderClient, formData?: any): Promise<{
|
|
5
7
|
query: string;
|
|
6
8
|
error?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAgFvD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,gBA0K1B;AAED,wBAAgB,aAAa;+BAGjB,mBAAmB,sBACP,MAAM,oBACR,GAAG,iCAEP,WAAW;EAoC5B;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
1
2
|
import { QUILL_SERVER } from './constants';
|
|
3
|
+
import { TenantContext } from '../Context';
|
|
2
4
|
function fetchQuillData(responseData) {
|
|
3
5
|
if (!responseData) {
|
|
4
6
|
return null;
|
|
@@ -61,6 +63,7 @@ async function testSqlViewState(hostedRequestBody, client, referencedTables) {
|
|
|
61
63
|
}
|
|
62
64
|
// this function gets the data either from the self hosted endpoint or
|
|
63
65
|
// our cloud server
|
|
66
|
+
// Tenants and Flags must be passed in as part of the body explicity
|
|
64
67
|
export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST', queryParam, abortSignal) {
|
|
65
68
|
if (!client) {
|
|
66
69
|
return null;
|
|
@@ -171,7 +174,33 @@ export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestB
|
|
|
171
174
|
}
|
|
172
175
|
else {
|
|
173
176
|
// cloud
|
|
174
|
-
|
|
177
|
+
try {
|
|
178
|
+
const url = `${QUILL_SERVER}/${cloudQueryEndpoint}`;
|
|
179
|
+
const resp = await fetch(url, {
|
|
180
|
+
method,
|
|
181
|
+
headers: {
|
|
182
|
+
Authorization: 'Bearer ',
|
|
183
|
+
'Content-Type': 'application/json',
|
|
184
|
+
},
|
|
185
|
+
body: method === 'POST'
|
|
186
|
+
? JSON.stringify({
|
|
187
|
+
...cloudRequestBody,
|
|
188
|
+
...{
|
|
189
|
+
publicKey: client?.publicKey,
|
|
190
|
+
},
|
|
191
|
+
})
|
|
192
|
+
: null,
|
|
193
|
+
signal: abortSignal,
|
|
194
|
+
});
|
|
195
|
+
return await resp.json();
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
199
|
+
throw e;
|
|
200
|
+
}
|
|
201
|
+
console.error('Failed to parse JSON:', e);
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
175
204
|
}
|
|
176
205
|
}
|
|
177
206
|
catch (e) {
|
|
@@ -182,35 +211,42 @@ export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestB
|
|
|
182
211
|
return null;
|
|
183
212
|
}
|
|
184
213
|
}
|
|
185
|
-
export
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
throw e;
|
|
214
|
+
export function useQuillCloud() {
|
|
215
|
+
const { tenants, flags } = useContext(TenantContext);
|
|
216
|
+
const getDataFromCloud = async (client, cloudQueryEndpoint, cloudRequestBody, method = 'POST', abortSignal) => {
|
|
217
|
+
try {
|
|
218
|
+
const url = `${QUILL_SERVER}/${cloudQueryEndpoint}`;
|
|
219
|
+
const resp = await fetch(url, {
|
|
220
|
+
method,
|
|
221
|
+
headers: {
|
|
222
|
+
Authorization: 'Bearer ',
|
|
223
|
+
'Content-Type': 'application/json',
|
|
224
|
+
},
|
|
225
|
+
body: method === 'POST'
|
|
226
|
+
? JSON.stringify({
|
|
227
|
+
...cloudRequestBody,
|
|
228
|
+
...{
|
|
229
|
+
publicKey: client?.publicKey,
|
|
230
|
+
tenants: tenants,
|
|
231
|
+
flags: flags,
|
|
232
|
+
},
|
|
233
|
+
})
|
|
234
|
+
: null,
|
|
235
|
+
signal: abortSignal,
|
|
236
|
+
});
|
|
237
|
+
return await resp.json();
|
|
210
238
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
239
|
+
catch (e) {
|
|
240
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
241
|
+
throw e;
|
|
242
|
+
}
|
|
243
|
+
console.error('Failed to parse JSON:', e);
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
return {
|
|
248
|
+
getDataFromCloud,
|
|
249
|
+
};
|
|
214
250
|
}
|
|
215
251
|
export async function fetchSqlQuery(ast, client, formData) {
|
|
216
252
|
try {
|
|
@@ -4,7 +4,7 @@ import { FilterTreeNode } from './astFilterProcessing';
|
|
|
4
4
|
export declare function findAndProcessDateFilter(filters: any[]): any;
|
|
5
5
|
export declare function processFilterFromBackend(filter: any): any;
|
|
6
6
|
export declare function updateFilter(filter: any, value: any, comparison: any, dashboardName: string): any;
|
|
7
|
-
export declare const getType: (t: string) => FieldType
|
|
7
|
+
export declare const getType: (t: string) => FieldType;
|
|
8
8
|
/**
|
|
9
9
|
* Returns a sentence to describe a Filter
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAU,EACjB,UAAU,EAAE,GAAU,EACtB,aAAa,EAAE,MAAM,OAmGtB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAU,EACjB,UAAU,EAAE,GAAU,EACtB,aAAa,EAAE,MAAM,OAmGtB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,cA0DhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,cAAc,EAAE,CAoCrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,yBAgCnD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B/D;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,mBAAmB,GACvC,mBAAmB,CAkKrB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,cAAc,EAAE,GAC9B,GAAG,EAAE,CA+CP;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,EAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CA+BT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE;IACpD,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAChD,GAAG;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACzB,CASA;AAED,eAAO,MAAM,uBAAuB,WAC1B,mBAAmB,WAClB,WAAW,EAAE,iBACP,MAAM,KACpB,CAAC,mBAAmB,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAAG,SAqDpD,CAAC"}
|
|
@@ -2,7 +2,10 @@ import { QuillProviderClient } from '../models/Client';
|
|
|
2
2
|
import { ColumnInternal } from '../models/Columns';
|
|
3
3
|
import { Pivot } from '../models/Pivot';
|
|
4
4
|
import { QuillReportInternal } from '../models/Report';
|
|
5
|
-
export declare function generatePivotWithSQL(pivot: Pivot, report: QuillReportInternal, client: QuillProviderClient, dateBucket?: string, dateFilter?: any, distinctStrings?: string[], rowLimit?: number
|
|
5
|
+
export declare function generatePivotWithSQL(pivot: Pivot, report: QuillReportInternal, client: QuillProviderClient, dateBucket?: string, dateFilter?: any, distinctStrings?: string[], rowLimit?: number, dashboardName?: string, tenants?: {
|
|
6
|
+
tenantField: string;
|
|
7
|
+
tenantIds: (string | number)[];
|
|
8
|
+
}[] | (string | number)[]): Promise<{
|
|
6
9
|
rows: any[];
|
|
7
10
|
columns: ColumnInternal[];
|
|
8
11
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AASvD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,QAAQ,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AASvD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,QAAQ,CAAC,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACtB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CA8OrD"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { getDateString } from '../internals/ReportBuilder/PivotModal';
|
|
2
|
-
import { processColumnName } from './columnProcessing';
|
|
2
|
+
import { isStringType, processColumnName } from './columnProcessing';
|
|
3
3
|
import { MAX_PIVOT_UNIQUE_VALUES } from './constants';
|
|
4
4
|
import { getData } from './dataFetcher';
|
|
5
5
|
import { getComparisonInterval } from './dates';
|
|
6
6
|
import { generatePivotQuery } from './queryConstructor';
|
|
7
7
|
import { snakeCaseToTitleCase } from './textProcessing';
|
|
8
8
|
import { compareValues } from './valueFormatter';
|
|
9
|
-
export async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilter, distinctStrings, rowLimit) {
|
|
9
|
+
export async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilter, distinctStrings, rowLimit, dashboardName, tenants) {
|
|
10
10
|
let comparisonInterval = undefined;
|
|
11
11
|
if (dateFilter && dateFilter.comparisonRange) {
|
|
12
12
|
comparisonInterval = getComparisonInterval({
|
|
@@ -31,14 +31,13 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
|
|
|
31
31
|
const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined);
|
|
32
32
|
const sqlQuery = generatePivotQuery(pivot, report.itemQuery, client.databaseType || 'postgresql', comparisonInterval, filteredDistinctStrings?.slice(0, MAX_PIVOT_UNIQUE_VALUES) ??
|
|
33
33
|
distinctStringValues?.slice(0, MAX_PIVOT_UNIQUE_VALUES), dateBucket, rowLimit);
|
|
34
|
-
if (!sqlQuery
|
|
35
|
-
throw '
|
|
34
|
+
if (!sqlQuery) {
|
|
35
|
+
throw 'Error generating pivot query';
|
|
36
36
|
}
|
|
37
37
|
const hostedBody = {
|
|
38
38
|
metadata: {
|
|
39
39
|
preQueries: [sqlQuery],
|
|
40
40
|
task: 'query',
|
|
41
|
-
orgId: client.organizationId || '*',
|
|
42
41
|
clientId: client.publicKey,
|
|
43
42
|
databaseType: client?.databaseType,
|
|
44
43
|
getCustomFields: false,
|
|
@@ -47,6 +46,8 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
|
|
|
47
46
|
convertDatatypes: true,
|
|
48
47
|
},
|
|
49
48
|
useNewNodeSql: true,
|
|
49
|
+
dashboardName: dashboardName && tenants ? dashboardName : undefined,
|
|
50
|
+
tenants: dashboardName && tenants ? tenants : undefined,
|
|
50
51
|
},
|
|
51
52
|
};
|
|
52
53
|
const cloudBody = { ...hostedBody };
|
|
@@ -92,8 +93,7 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
|
|
|
92
93
|
}
|
|
93
94
|
return 0;
|
|
94
95
|
});
|
|
95
|
-
if (pivot.rowField &&
|
|
96
|
-
!['string', 'varchar', 'text', 'char'].includes(pivot.rowFieldType || '')) {
|
|
96
|
+
if (pivot.rowField && !isStringType(pivot.rowFieldType || '')) {
|
|
97
97
|
rows.forEach((row) => {
|
|
98
98
|
row.__quillRawDate =
|
|
99
99
|
typeof row[pivot.rowField || ''] === 'object' // BigQuery
|
|
@@ -122,7 +122,7 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
|
|
|
122
122
|
// add a row for each date in the range that doesn't have a value
|
|
123
123
|
if (pivot.rowField &&
|
|
124
124
|
pivot.rowFieldType &&
|
|
125
|
-
!
|
|
125
|
+
!isStringType(pivot.rowFieldType) &&
|
|
126
126
|
dateFilter?.startDate &&
|
|
127
127
|
dateFilter?.endDate) {
|
|
128
128
|
const dateSet = new Set(rows.map((row) => row[pivot.rowField || '']));
|