@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
|
@@ -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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"}
|
|
@@ -343,7 +343,8 @@ const createBasicSelectASTFromColumns = (columns, tableName) => {
|
|
|
343
343
|
};
|
|
344
344
|
};
|
|
345
345
|
exports.createBasicSelectASTFromColumns = createBasicSelectASTFromColumns;
|
|
346
|
-
|
|
346
|
+
//TODO: Move all fetches to a /sdk route
|
|
347
|
+
const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, prevPivot, currentQuery, prevTable, dashboardName) => {
|
|
347
348
|
let res, data, ast, newAst, pivot;
|
|
348
349
|
let numRetries = 0;
|
|
349
350
|
let whereAST;
|
|
@@ -396,6 +397,7 @@ const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, prevPivot,
|
|
|
396
397
|
newAst = (0, util_1.removeTableNameAlias)(newAst);
|
|
397
398
|
newAst = (0, convert_1.convertWildcardColumns)(newAst, schema); // must go before groupby
|
|
398
399
|
({ ast: newAst, pivot } = (0, convert_1.convertGroupBy)(newAst, schema, prevPivot, prevTable));
|
|
400
|
+
newAst = (0, convert_1.convertOrderBy)(newAst, schema);
|
|
399
401
|
newAst = (0, convert_1.convertStringComparison)(newAst, client.databaseType || 'postgresql');
|
|
400
402
|
newAst = (0, convert_1.convertRemoveSimpleParentheses)(newAst);
|
|
401
403
|
const table = (0, ast_1.getTableNames)(newAst)[0];
|
|
@@ -407,7 +409,7 @@ const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, prevPivot,
|
|
|
407
409
|
if (!tableInfo) {
|
|
408
410
|
throw new Error('Table info not found');
|
|
409
411
|
}
|
|
410
|
-
const uniqueValues = await (0, tableProcessing_1.getUniqueStringValues)(tableInfo.columns, processedName, client);
|
|
412
|
+
const uniqueValues = await (0, tableProcessing_1.getUniqueStringValues)(tableInfo.columns, processedName, client, undefined, undefined, undefined, undefined, dashboardName);
|
|
411
413
|
newAst = (0, convert_1.convertUnaryToBinary)(newAst);
|
|
412
414
|
newAst = (0, util_1.removeNonSelectedTableReferences)(newAst, processedName, tableInfo.columns.map((col) => col.field), uniqueValues);
|
|
413
415
|
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,CAgFA"}
|
package/dist/cjs/utils/client.js
CHANGED
|
@@ -11,6 +11,7 @@ exports.EMPTY_CLIENT = {
|
|
|
11
11
|
};
|
|
12
12
|
async function fetchClient(publicKey, queryEndpoint, withCredentials = false, queryHeaders) {
|
|
13
13
|
let result = exports.EMPTY_CLIENT;
|
|
14
|
+
let clientTenantIds = [];
|
|
14
15
|
try {
|
|
15
16
|
const response = await fetch(`${queryEndpoint}`, {
|
|
16
17
|
method: 'POST',
|
|
@@ -29,9 +30,55 @@ async function fetchClient(publicKey, queryEndpoint, withCredentials = false, qu
|
|
|
29
30
|
});
|
|
30
31
|
const json = await response.json();
|
|
31
32
|
result = json.data?.data?.client || json.data?.client;
|
|
33
|
+
clientTenantIds = await Promise.all(result.allTenantTypes?.map(async (tenant) => {
|
|
34
|
+
const tenantResponse = await fetch(queryEndpoint, {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: {
|
|
37
|
+
...queryHeaders,
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify({
|
|
41
|
+
metadata: {
|
|
42
|
+
tenantId: tenant.id,
|
|
43
|
+
task: 'tenant-query',
|
|
44
|
+
clientId: result.id,
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
credentials: withCredentials ? 'include' : 'omit',
|
|
48
|
+
});
|
|
49
|
+
const data = await tenantResponse.json();
|
|
50
|
+
if (!data.data?.rows) {
|
|
51
|
+
return {
|
|
52
|
+
id: tenant.id,
|
|
53
|
+
tenantIds: [],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
id: tenant.id,
|
|
58
|
+
tenantIds: data.data.rows.map((row) => ({
|
|
59
|
+
id: row[tenant.tenantField],
|
|
60
|
+
flag: row['quill_flag'],
|
|
61
|
+
label: row['quill_label'],
|
|
62
|
+
})),
|
|
63
|
+
};
|
|
64
|
+
}));
|
|
32
65
|
}
|
|
33
66
|
catch (error) {
|
|
34
67
|
console.error('ERROR:', error);
|
|
35
68
|
}
|
|
36
|
-
return
|
|
69
|
+
return {
|
|
70
|
+
...result,
|
|
71
|
+
allTenantTypes: result.multiTenancyDisabled
|
|
72
|
+
? [
|
|
73
|
+
{
|
|
74
|
+
scope: 'database',
|
|
75
|
+
flags: [],
|
|
76
|
+
tenantField: 'QUILL_SINGLE_TENANT',
|
|
77
|
+
},
|
|
78
|
+
]
|
|
79
|
+
: result.allTenantTypes?.map((tenant) => ({
|
|
80
|
+
...tenant,
|
|
81
|
+
tenantIds: clientTenantIds?.find((clientTenant) => clientTenant.id === tenant.id)?.tenantIds || [],
|
|
82
|
+
})),
|
|
83
|
+
};
|
|
37
84
|
}
|
|
@@ -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"}
|
|
@@ -7,6 +7,9 @@ exports.convertFieldTypeToJSType = convertFieldTypeToJSType;
|
|
|
7
7
|
exports.convertFormatToJsType = convertFormatToJsType;
|
|
8
8
|
exports.processColumnName = processColumnName;
|
|
9
9
|
exports.isStringType = isStringType;
|
|
10
|
+
exports.isDateType = isDateType;
|
|
11
|
+
exports.isNumberType = isNumberType;
|
|
12
|
+
exports.isBoolType = isBoolType;
|
|
10
13
|
const filterProcessing_1 = require("./filterProcessing");
|
|
11
14
|
const textProcessing_1 = require("./textProcessing");
|
|
12
15
|
function removeBigQuerySpecialChars(columnName) {
|
|
@@ -100,6 +103,9 @@ function convertPostgresColumn(field) {
|
|
|
100
103
|
case 3807: // jsonb[]
|
|
101
104
|
fieldType = 'jsonb[]';
|
|
102
105
|
break;
|
|
106
|
+
case 2277: // anyarray
|
|
107
|
+
fieldType = 'anyarray';
|
|
108
|
+
break;
|
|
103
109
|
case 1043: // varchar
|
|
104
110
|
default:
|
|
105
111
|
fieldType = 'varchar';
|
|
@@ -300,7 +306,34 @@ function processColumnName(columnName) {
|
|
|
300
306
|
return removeBigQuerySpecialChars(columnName);
|
|
301
307
|
}
|
|
302
308
|
function isStringType(fieldType) {
|
|
303
|
-
return ['string', 'varchar', 'text', 'char'].includes(fieldType);
|
|
309
|
+
return ['string', 'varchar', 'text', 'char', 'bpchar', 'citext'].includes(fieldType);
|
|
310
|
+
}
|
|
311
|
+
function isDateType(fieldType) {
|
|
312
|
+
return [
|
|
313
|
+
'date',
|
|
314
|
+
'datetime',
|
|
315
|
+
'time',
|
|
316
|
+
'timestamptz',
|
|
317
|
+
'timestamp',
|
|
318
|
+
'interval',
|
|
319
|
+
].includes(fieldType);
|
|
320
|
+
}
|
|
321
|
+
function isNumberType(fieldType) {
|
|
322
|
+
return [
|
|
323
|
+
'int8',
|
|
324
|
+
'int2',
|
|
325
|
+
'int4',
|
|
326
|
+
'float4',
|
|
327
|
+
'float8',
|
|
328
|
+
'numeric',
|
|
329
|
+
'number',
|
|
330
|
+
'smallint',
|
|
331
|
+
'float2',
|
|
332
|
+
'float16',
|
|
333
|
+
].includes(fieldType);
|
|
334
|
+
}
|
|
335
|
+
function isBoolType(fieldType) {
|
|
336
|
+
return ['bool', 'boolean'].includes(fieldType);
|
|
304
337
|
}
|
|
305
338
|
const getYAxisFields = (report, dashboardFilters) => {
|
|
306
339
|
try {
|
|
@@ -2,4 +2,6 @@ export declare const MAX_COLUMN_ROWS_LIMIT = 500;
|
|
|
2
2
|
export declare const MAX_PIVOT_UNIQUE_VALUES = 250;
|
|
3
3
|
export declare const QUILL_SERVER: string;
|
|
4
4
|
export declare const QUILL_QUERY_ENDPOINT: string;
|
|
5
|
+
export declare const ALL_TENANTS = "QUILL_ALL_TENANTS";
|
|
6
|
+
export declare const SINGLE_TENANT = "QUILL_SINGLE_TENANT";
|
|
5
7
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,YAAY,QAGoB,CAAC;AAC9C,eAAO,MAAM,oBAAoB,QAGnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,YAAY,QAGoB,CAAC;AAC9C,eAAO,MAAM,oBAAoB,QAGnB,CAAC;AACf,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,aAAa,wBAAwB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.QUILL_QUERY_ENDPOINT = exports.QUILL_SERVER = exports.MAX_PIVOT_UNIQUE_VALUES = exports.MAX_COLUMN_ROWS_LIMIT = void 0;
|
|
3
|
+
exports.SINGLE_TENANT = exports.ALL_TENANTS = exports.QUILL_QUERY_ENDPOINT = exports.QUILL_SERVER = exports.MAX_PIVOT_UNIQUE_VALUES = exports.MAX_COLUMN_ROWS_LIMIT = void 0;
|
|
4
4
|
exports.MAX_COLUMN_ROWS_LIMIT = 500;
|
|
5
5
|
exports.MAX_PIVOT_UNIQUE_VALUES = 250;
|
|
6
6
|
exports.QUILL_SERVER = typeof process !== 'undefined' && process.env
|
|
@@ -9,3 +9,5 @@ exports.QUILL_SERVER = typeof process !== 'undefined' && process.env
|
|
|
9
9
|
exports.QUILL_QUERY_ENDPOINT = typeof process !== 'undefined' && process.env
|
|
10
10
|
? (process.env.QUILL_QUERY_ENDPOINT ?? '/cloud')
|
|
11
11
|
: '/cloud';
|
|
12
|
+
exports.ALL_TENANTS = 'QUILL_ALL_TENANTS';
|
|
13
|
+
exports.SINGLE_TENANT = 'QUILL_SINGLE_TENANT';
|
|
@@ -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,CA6Bd"}
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cleanDashboardItem = cleanDashboardItem;
|
|
4
4
|
exports.getDashboard = getDashboard;
|
|
5
|
-
exports.getDashboardFilters = getDashboardFilters;
|
|
6
5
|
const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
|
|
7
6
|
const textProcessing_1 = require("./textProcessing");
|
|
8
7
|
const dataFetcher_1 = require("./dataFetcher");
|
|
9
8
|
const dates_1 = require("./dates");
|
|
10
9
|
const pivotConstructor_1 = require("./pivotConstructor");
|
|
11
|
-
const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
|
|
12
10
|
const defaultDashboardItem = {
|
|
13
11
|
id: '',
|
|
14
12
|
name: '',
|
|
@@ -51,7 +49,7 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
|
51
49
|
let pivotTable;
|
|
52
50
|
let pivotError;
|
|
53
51
|
try {
|
|
54
|
-
pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket);
|
|
52
|
+
pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket, item.dashboardName);
|
|
55
53
|
}
|
|
56
54
|
catch (e) {
|
|
57
55
|
pivotTable = undefined;
|
|
@@ -86,6 +84,7 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
|
86
84
|
order: item.order,
|
|
87
85
|
filtersApplied: item.filtersApplied,
|
|
88
86
|
filterMap: item.filterMap,
|
|
87
|
+
flags: item.flags,
|
|
89
88
|
rowCount: item.rowCount ? parseInt(item.rowCount) : item.rows.length,
|
|
90
89
|
template: item.template,
|
|
91
90
|
sort: item.sort,
|
|
@@ -99,7 +98,7 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
|
99
98
|
/**
|
|
100
99
|
* Extract and transform the data from itemInfo.
|
|
101
100
|
*/
|
|
102
|
-
async function getPivotTable(report, dashboardFilters, client, dateBucketInitial) {
|
|
101
|
+
async function getPivotTable(report, dashboardFilters, client, dateBucketInitial, dashboardName, tenants) {
|
|
103
102
|
if (!report)
|
|
104
103
|
return undefined;
|
|
105
104
|
const dateFilter = Object.values(dashboardFilters ?? {}).find((filter) => filter.filterType === 'date_range' || filter.operator === 'BETWEEN');
|
|
@@ -147,7 +146,7 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
147
146
|
if (!dateBucket && filterDateRange) {
|
|
148
147
|
dateBucket = (0, dates_1.getDateBucketFromRange)(filterDateRange);
|
|
149
148
|
}
|
|
150
|
-
const pivotTable = await (0, pivotConstructor_1.generatePivotWithSQL)(pivot, report, client, dateBucket, dateFilter, report.distinctStrings);
|
|
149
|
+
const pivotTable = await (0, pivotConstructor_1.generatePivotWithSQL)(pivot, report, client, dateBucket, dateFilter, report.distinctStrings, undefined, dashboardName, tenants);
|
|
151
150
|
return pivotTable;
|
|
152
151
|
}
|
|
153
152
|
catch (e) {
|
|
@@ -160,6 +159,8 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
160
159
|
pivot,
|
|
161
160
|
report,
|
|
162
161
|
client,
|
|
162
|
+
dashboardName,
|
|
163
|
+
tenants,
|
|
163
164
|
})
|
|
164
165
|
: undefined;
|
|
165
166
|
}
|
|
@@ -186,104 +187,25 @@ function extractPivotedYAxis(pivotTable, itemInfo, config = undefined) {
|
|
|
186
187
|
// }
|
|
187
188
|
// return fields;
|
|
188
189
|
}
|
|
189
|
-
async function getDashboard(dashboardName, client) {
|
|
190
|
-
const searchParams = new URLSearchParams({
|
|
191
|
-
publicKey: client.publicKey,
|
|
192
|
-
orgId: client?.organizationId || '*',
|
|
193
|
-
name: dashboardName,
|
|
194
|
-
}).toString();
|
|
190
|
+
async function getDashboard(dashboardName, client, tenants, flags) {
|
|
195
191
|
const hostedBody = {
|
|
196
192
|
metadata: {
|
|
197
193
|
name: dashboardName,
|
|
198
194
|
task: 'dashboard',
|
|
199
195
|
clientId: client.publicKey,
|
|
200
|
-
orgId: client.organizationId || '*',
|
|
201
196
|
databaseType: client.databaseType,
|
|
202
197
|
useNewNodeSql: true,
|
|
198
|
+
tenants,
|
|
199
|
+
flags,
|
|
203
200
|
},
|
|
204
201
|
};
|
|
205
|
-
const resp = await (0, dataFetcher_1.getData)(client, `dashconfig?${searchParams}`, 'omit', hostedBody, null, 'GET');
|
|
206
|
-
return resp;
|
|
207
|
-
}
|
|
208
|
-
async function getDashboardFilters(dashboardName, client) {
|
|
209
202
|
const searchParams = new URLSearchParams({
|
|
210
203
|
publicKey: client.publicKey,
|
|
211
|
-
orgId: client.organizationId || '*',
|
|
212
204
|
name: dashboardName,
|
|
213
205
|
}).toString();
|
|
214
|
-
const hostedBody = {
|
|
215
|
-
metadata: {
|
|
216
|
-
name: dashboardName,
|
|
217
|
-
task: 'dashboard-filters-options',
|
|
218
|
-
clientId: client.publicKey,
|
|
219
|
-
orgId: client.organizationId || '*',
|
|
220
|
-
databaseType: client.databaseType,
|
|
221
|
-
useNewNodeSql: true,
|
|
222
|
-
},
|
|
223
|
-
};
|
|
224
206
|
const resp = await (0, dataFetcher_1.getData)(client, `dashconfig?${searchParams}`, 'omit', hostedBody, null, 'GET');
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
presetsOptions = resp.dateFilter.presetRanges.map((elem) => {
|
|
230
|
-
if (!elem.isStatic) {
|
|
231
|
-
return {
|
|
232
|
-
label: elem.label,
|
|
233
|
-
value: elem.value,
|
|
234
|
-
startDate: (dateRangePickerUtils_1.PRIMARY_RANGE[elem.value] ??
|
|
235
|
-
dateRangePickerUtils_1.PRIMARY_RANGE['LAST_30_DAYS']).startDate,
|
|
236
|
-
endDate: (dateRangePickerUtils_1.PRIMARY_RANGE[elem.value] ??
|
|
237
|
-
dateRangePickerUtils_1.PRIMARY_RANGE['LAST_30_DAYS']).endDate,
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
label: elem.label,
|
|
242
|
-
value: elem.value,
|
|
243
|
-
startDate: new Date(elem.startDate),
|
|
244
|
-
endDate: new Date(elem.endDate),
|
|
245
|
-
};
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
const key = resp.dateFilter?.primaryRange?.value || 'LAST_6_MONTHS';
|
|
249
|
-
const primaryPreset = presetsOptions.find((option) => {
|
|
250
|
-
return option.value === key;
|
|
251
|
-
});
|
|
252
|
-
const filter = {
|
|
253
|
-
startDate: primaryPreset.startDate,
|
|
254
|
-
endDate: primaryPreset.endDate,
|
|
255
|
-
filterType: 'date_range',
|
|
256
|
-
options: presetsOptions.map((elem) => {
|
|
257
|
-
return {
|
|
258
|
-
label: elem.label,
|
|
259
|
-
value: elem.value,
|
|
260
|
-
};
|
|
261
|
-
}),
|
|
262
|
-
field: 'date_range',
|
|
263
|
-
label: resp.dateFilter.label,
|
|
264
|
-
preset: {
|
|
265
|
-
label: primaryPreset.label,
|
|
266
|
-
value: primaryPreset.value,
|
|
267
|
-
},
|
|
268
|
-
dashboardName: dashboardName,
|
|
269
|
-
};
|
|
270
|
-
if (resp.dateFilter.comparison) {
|
|
271
|
-
filter.comparison = true;
|
|
272
|
-
const compKey = resp.dateFilter.defaultComparisonRange ?? 'PREV_PERIOD';
|
|
273
|
-
const range = { startDate: filter.startDate, endDate: filter.endDate };
|
|
274
|
-
filter.comparisonRange = {
|
|
275
|
-
startDate: dateRangePickerUtils_1.COMPARISON_RANGE[compKey](range)?.startDate,
|
|
276
|
-
endDate: dateRangePickerUtils_1.COMPARISON_RANGE[compKey](range)?.endDate,
|
|
277
|
-
value: compKey,
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
filter.comparison = false;
|
|
282
|
-
}
|
|
283
|
-
filterArray.push(filter);
|
|
284
|
-
}
|
|
285
|
-
filterArray.push(...resp.filters.map((f) => {
|
|
286
|
-
return { ...f, dashboardName: dashboardName };
|
|
287
|
-
}));
|
|
288
|
-
return filterArray;
|
|
207
|
+
return {
|
|
208
|
+
...resp,
|
|
209
|
+
createdAt: resp.createdAt && new Date(resp.createdAt),
|
|
210
|
+
};
|
|
289
211
|
}
|
|
@@ -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,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getData = getData;
|
|
4
|
-
exports.
|
|
4
|
+
exports.useQuillCloud = useQuillCloud;
|
|
5
5
|
exports.fetchSqlQuery = fetchSqlQuery;
|
|
6
|
+
const react_1 = require("react");
|
|
6
7
|
const constants_1 = require("./constants");
|
|
8
|
+
const Context_1 = require("../Context");
|
|
7
9
|
function fetchQuillData(responseData) {
|
|
8
10
|
if (!responseData) {
|
|
9
11
|
return null;
|
|
@@ -66,6 +68,7 @@ async function testSqlViewState(hostedRequestBody, client, referencedTables) {
|
|
|
66
68
|
}
|
|
67
69
|
// this function gets the data either from the self hosted endpoint or
|
|
68
70
|
// our cloud server
|
|
71
|
+
// Tenants and Flags must be passed in as part of the body explicity
|
|
69
72
|
async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST', queryParam, abortSignal) {
|
|
70
73
|
if (!client) {
|
|
71
74
|
return null;
|
|
@@ -176,7 +179,33 @@ async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cl
|
|
|
176
179
|
}
|
|
177
180
|
else {
|
|
178
181
|
// cloud
|
|
179
|
-
|
|
182
|
+
try {
|
|
183
|
+
const url = `${constants_1.QUILL_SERVER}/${cloudQueryEndpoint}`;
|
|
184
|
+
const resp = await fetch(url, {
|
|
185
|
+
method,
|
|
186
|
+
headers: {
|
|
187
|
+
Authorization: 'Bearer ',
|
|
188
|
+
'Content-Type': 'application/json',
|
|
189
|
+
},
|
|
190
|
+
body: method === 'POST'
|
|
191
|
+
? JSON.stringify({
|
|
192
|
+
...cloudRequestBody,
|
|
193
|
+
...{
|
|
194
|
+
publicKey: client?.publicKey,
|
|
195
|
+
},
|
|
196
|
+
})
|
|
197
|
+
: null,
|
|
198
|
+
signal: abortSignal,
|
|
199
|
+
});
|
|
200
|
+
return await resp.json();
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
204
|
+
throw e;
|
|
205
|
+
}
|
|
206
|
+
console.error('Failed to parse JSON:', e);
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
180
209
|
}
|
|
181
210
|
}
|
|
182
211
|
catch (e) {
|
|
@@ -187,35 +216,42 @@ async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cl
|
|
|
187
216
|
return null;
|
|
188
217
|
}
|
|
189
218
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
throw e;
|
|
219
|
+
function useQuillCloud() {
|
|
220
|
+
const { tenants, flags } = (0, react_1.useContext)(Context_1.TenantContext);
|
|
221
|
+
const getDataFromCloud = async (client, cloudQueryEndpoint, cloudRequestBody, method = 'POST', abortSignal) => {
|
|
222
|
+
try {
|
|
223
|
+
const url = `${constants_1.QUILL_SERVER}/${cloudQueryEndpoint}`;
|
|
224
|
+
const resp = await fetch(url, {
|
|
225
|
+
method,
|
|
226
|
+
headers: {
|
|
227
|
+
Authorization: 'Bearer ',
|
|
228
|
+
'Content-Type': 'application/json',
|
|
229
|
+
},
|
|
230
|
+
body: method === 'POST'
|
|
231
|
+
? JSON.stringify({
|
|
232
|
+
...cloudRequestBody,
|
|
233
|
+
...{
|
|
234
|
+
publicKey: client?.publicKey,
|
|
235
|
+
tenants: tenants,
|
|
236
|
+
flags: flags,
|
|
237
|
+
},
|
|
238
|
+
})
|
|
239
|
+
: null,
|
|
240
|
+
signal: abortSignal,
|
|
241
|
+
});
|
|
242
|
+
return await resp.json();
|
|
215
243
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
244
|
+
catch (e) {
|
|
245
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
246
|
+
throw e;
|
|
247
|
+
}
|
|
248
|
+
console.error('Failed to parse JSON:', e);
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
return {
|
|
253
|
+
getDataFromCloud,
|
|
254
|
+
};
|
|
219
255
|
}
|
|
220
256
|
async function fetchSqlQuery(ast, client, formData) {
|
|
221
257
|
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,CA4B/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"}
|
|
@@ -206,6 +206,8 @@ const getType = (t) => {
|
|
|
206
206
|
case 'bool':
|
|
207
207
|
case 'boolean':
|
|
208
208
|
return Filter_1.FieldType.Boolean;
|
|
209
|
+
case 'anyarray':
|
|
210
|
+
return Filter_1.FieldType.Null;
|
|
209
211
|
default:
|
|
210
212
|
return Filter_1.FieldType.String;
|
|
211
213
|
}
|
|
@@ -337,6 +339,7 @@ async function buildQueryFromFilters(baseAst, filters, endpoint, client) {
|
|
|
337
339
|
publicKey: client.publicKey,
|
|
338
340
|
useNewNodeSql: true,
|
|
339
341
|
}),
|
|
342
|
+
credentials: client.withCredentials ? 'include' : 'omit',
|
|
340
343
|
});
|
|
341
344
|
const data = await response.json();
|
|
342
345
|
const query = data.query;
|
|
@@ -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"}
|