@quillsql/react 2.13.48 → 2.13.49
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 -2
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +28 -41
- package/dist/cjs/ChartBuilder.d.ts +2 -2
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +157 -134
- package/dist/cjs/ChartEditor.d.ts +2 -2
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +3 -1
- package/dist/cjs/Context.d.ts +10 -3
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +324 -249
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +10 -23
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +0 -3
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +24 -10
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +472 -96
- package/dist/cjs/QuillProvider.d.ts +3 -1
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +2 -2
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +19 -10
- package/dist/cjs/SQLEditor.d.ts +1 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +50 -16
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +20 -7
- package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +2 -1
- package/dist/cjs/components/Chart/CustomReferenceLine.d.ts +1 -1
- package/dist/cjs/components/Chart/CustomReferenceLine.d.ts.map +1 -1
- package/dist/cjs/components/Chart/CustomReferenceLine.js +7 -6
- package/dist/cjs/components/Chart/GaugeChart.d.ts +1 -1
- package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/GaugeChart.js +62 -35
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +30 -33
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +3 -1
- package/dist/cjs/components/Chart/MapChart.d.ts +3 -3
- package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/MapChart.js +62 -34
- package/dist/cjs/components/Chart/PieChart.d.ts +3 -1
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/PieChart.js +80 -39
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +4 -20
- package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardTemplate.js +2 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +4 -4
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +31 -14
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +2 -2
- package/dist/cjs/components/Dashboard/util.d.ts +1 -1
- package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/util.js +7 -6
- package/dist/cjs/components/QuillMultiSelectSectionList.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectSectionList.js +32 -22
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +186 -159
- package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelect.js +83 -75
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +18 -11
- 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 +3 -4
- package/dist/cjs/components/ReportBuilder/ui.d.ts +2 -2
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +4 -7
- package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useAskQuill.js +5 -1
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +96 -58
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +23 -13
- package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +8 -10
- package/dist/cjs/hooks/useReport.d.ts.map +1 -1
- package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/cjs/hooks/useVirtualTables.js +16 -22
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +19 -7
- package/dist/cjs/models/Client.d.ts +0 -1
- package/dist/cjs/models/Client.d.ts.map +1 -1
- package/dist/cjs/models/Data.d.ts +20 -0
- package/dist/cjs/models/Data.d.ts.map +1 -0
- package/dist/cjs/models/Data.js +2 -0
- package/dist/cjs/models/Filter.d.ts +42 -4
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Pivot.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.d.ts +3 -2
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +28 -37
- package/dist/cjs/utils/client.d.ts +3 -2
- package/dist/cjs/utils/client.d.ts.map +1 -1
- package/dist/cjs/utils/client.js +38 -39
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +14 -3
- package/dist/cjs/utils/constants.d.ts +1 -0
- package/dist/cjs/utils/constants.d.ts.map +1 -1
- package/dist/cjs/utils/constants.js +2 -1
- package/dist/cjs/utils/dashboard.d.ts +3 -2
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +30 -12
- package/dist/cjs/utils/dataFetcher.d.ts +8 -5
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +189 -65
- package/dist/cjs/utils/filterProcessing.d.ts +2 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +24 -38
- package/dist/cjs/utils/getDomain.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +15 -11
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +3 -5
- package/dist/cjs/utils/queryConstructor.js +1 -1
- package/dist/cjs/utils/report.d.ts +10 -7
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +52 -60
- package/dist/cjs/utils/schema.d.ts +4 -3
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +30 -44
- package/dist/cjs/utils/tableProcessing.d.ts +16 -10
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +91 -90
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +2 -1
- package/dist/cjs/utils/ui.d.ts.map +1 -1
- package/dist/esm/Chart.d.ts +2 -2
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +30 -43
- package/dist/esm/ChartBuilder.d.ts +2 -2
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +158 -135
- package/dist/esm/ChartEditor.d.ts +2 -2
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +4 -2
- package/dist/esm/Context.d.ts +10 -3
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +326 -251
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +12 -25
- package/dist/esm/DateRangePicker/QuillDateRangePicker.js +0 -3
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +24 -10
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.js +471 -95
- package/dist/esm/QuillProvider.d.ts +3 -1
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +2 -2
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +21 -12
- package/dist/esm/SQLEditor.d.ts +1 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +53 -19
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +21 -8
- package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +2 -1
- package/dist/esm/components/Chart/CustomReferenceLine.d.ts +1 -1
- package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -1
- package/dist/esm/components/Chart/CustomReferenceLine.js +8 -7
- package/dist/esm/components/Chart/GaugeChart.d.ts +1 -1
- package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/GaugeChart.js +64 -37
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +32 -35
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +3 -1
- package/dist/esm/components/Chart/MapChart.d.ts +3 -3
- package/dist/esm/components/Chart/MapChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/MapChart.js +67 -39
- package/dist/esm/components/Chart/PieChart.d.ts +3 -1
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.js +80 -39
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +5 -21
- package/dist/esm/components/Dashboard/DashboardSection.js +2 -2
- package/dist/esm/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardTemplate.js +3 -2
- package/dist/esm/components/Dashboard/DataLoader.d.ts +4 -4
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +32 -15
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +2 -2
- package/dist/esm/components/Dashboard/util.d.ts +1 -1
- package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/util.js +8 -7
- package/dist/esm/components/QuillMultiSelectSectionList.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectSectionList.js +32 -22
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +187 -160
- package/dist/esm/components/QuillSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillSelect.js +85 -77
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +18 -11
- 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 +3 -4
- package/dist/esm/components/ReportBuilder/ui.d.ts +2 -2
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +4 -7
- package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useAskQuill.js +6 -2
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +98 -60
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +25 -15
- package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +9 -11
- package/dist/esm/hooks/useReport.d.ts.map +1 -1
- package/dist/esm/hooks/useReport.js +1 -1
- package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/esm/hooks/useVirtualTables.js +17 -23
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +20 -8
- package/dist/esm/models/Client.d.ts +0 -1
- package/dist/esm/models/Client.d.ts.map +1 -1
- package/dist/esm/models/Data.d.ts +20 -0
- package/dist/esm/models/Data.d.ts.map +1 -0
- package/dist/esm/models/Data.js +1 -0
- package/dist/esm/models/Filter.d.ts +42 -4
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Pivot.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.d.ts +3 -2
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +28 -37
- package/dist/esm/utils/client.d.ts +3 -2
- package/dist/esm/utils/client.d.ts.map +1 -1
- package/dist/esm/utils/client.js +38 -39
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +14 -3
- package/dist/esm/utils/constants.d.ts +1 -0
- package/dist/esm/utils/constants.d.ts.map +1 -1
- package/dist/esm/utils/constants.js +1 -0
- package/dist/esm/utils/dashboard.d.ts +3 -2
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +31 -13
- package/dist/esm/utils/dataFetcher.d.ts +8 -5
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +187 -65
- package/dist/esm/utils/filterProcessing.d.ts +2 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +25 -39
- package/dist/esm/utils/getDomain.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.d.ts +2 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +16 -12
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +5 -7
- package/dist/esm/utils/queryConstructor.js +1 -1
- package/dist/esm/utils/report.d.ts +10 -7
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +53 -61
- package/dist/esm/utils/schema.d.ts +4 -3
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +30 -44
- package/dist/esm/utils/tableProcessing.d.ts +16 -10
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +93 -92
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +2 -1
- package/dist/esm/utils/ui.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/esm/Context.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import equal from 'fast-deep-equal';
|
|
3
3
|
import { createContext, useEffect, useMemo, useReducer, useRef, useState, } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { convertPresetOptionsToSelectableList, defaultOptionsV2, } from './DateRangePicker/dateRangePickerUtils';
|
|
5
5
|
import { InternalFilterType, } from './models/Filter';
|
|
6
6
|
import { fetchClient } from './utils/client';
|
|
7
7
|
import { getDashboard as requestGetDashboard } from './utils/dashboard';
|
|
8
|
-
import {
|
|
8
|
+
import { quillFetch, parseFetchResponse } from './utils/dataFetcher';
|
|
9
9
|
import { createDefaultDateFilter, mergeCustomFilters, } from './utils/filterProcessing';
|
|
10
10
|
import { processReportResponse } from './utils/report';
|
|
11
11
|
import { getSchemaInfo } from './utils/schema';
|
|
@@ -313,8 +313,12 @@ export const DashboardFiltersContext = createContext({
|
|
|
313
313
|
loadFiltersForDashboard: async () => { },
|
|
314
314
|
});
|
|
315
315
|
export const TenantContext = createContext({});
|
|
316
|
+
export const FetchContext = createContext({
|
|
317
|
+
getToken: async () => '',
|
|
318
|
+
quillFetchWithToken: async () => ({ data: null }),
|
|
319
|
+
});
|
|
316
320
|
// TODO: track errors per dashboard in the same way as loading state
|
|
317
|
-
export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, queryHeaders, withCredentials, tenants, flags, }) => {
|
|
321
|
+
export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, queryHeaders, withCredentials, tenants, flags, isAdmin, getAuthorizationToken = async () => '', }) => {
|
|
318
322
|
// get client from session storage
|
|
319
323
|
const [client, setClient] = useState(typeof window !== 'undefined' && sessionStorage
|
|
320
324
|
? JSON.parse(sessionStorage.getItem('quill-client') ?? 'null')
|
|
@@ -365,6 +369,8 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
365
369
|
const reportsAbortControllers = useRef({});
|
|
366
370
|
const fetchSchemaAbortController = useRef(null);
|
|
367
371
|
const fetchSchemaProcessId = useRef(0);
|
|
372
|
+
const currentTenant = useRef(null);
|
|
373
|
+
const currentPublicKey = useRef(null);
|
|
368
374
|
// SETS INITIAL THEME
|
|
369
375
|
useEffect(() => {
|
|
370
376
|
if (!theme) {
|
|
@@ -437,56 +443,54 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
437
443
|
const filterOptionsAbortController = new AbortController();
|
|
438
444
|
reportFilterOptionsAbortControllers.current[reportId]?.requests.add(filterOptionsAbortController);
|
|
439
445
|
try {
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
446
|
+
const result = await quillFetch({
|
|
447
|
+
client: {
|
|
448
|
+
clientId: publicKey,
|
|
449
|
+
queryEndpoint,
|
|
450
|
+
queryHeaders,
|
|
451
|
+
withCredentials: !!withCredentials,
|
|
452
|
+
},
|
|
453
|
+
task: 'filter-options',
|
|
454
|
+
metadata: {
|
|
455
|
+
clientId: publicKey,
|
|
456
|
+
publicKey: publicKey,
|
|
457
|
+
reportId: dashboardName ? undefined : reportId,
|
|
458
|
+
name: dashboardName,
|
|
459
|
+
useNewNodeSql: true,
|
|
460
|
+
filter: {
|
|
461
|
+
...filter,
|
|
462
|
+
query: undefined,
|
|
463
|
+
options: undefined,
|
|
464
|
+
},
|
|
465
|
+
appliedFilters: filters
|
|
466
|
+
.filter((f) => f.label !== filter.label)
|
|
467
|
+
.map((f) => ({
|
|
468
|
+
...f,
|
|
469
|
+
query: undefined,
|
|
470
|
+
options: undefined,
|
|
471
|
+
})),
|
|
472
|
+
customFilters: customFilters?.filter((f) => f.filterType !== InternalFilterType.DateCustomFilter &&
|
|
473
|
+
f.filterType !== InternalFilterType.DateFilter &&
|
|
474
|
+
f.filterType !== InternalFilterType.DateComparisonFilter),
|
|
475
|
+
tenants,
|
|
445
476
|
},
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
477
|
+
abortSignal: filterOptionsAbortController?.signal,
|
|
478
|
+
getToken: getAuthorizationToken,
|
|
479
|
+
});
|
|
480
|
+
const filterOptions = result.data?.filters[0]?.options ?? [];
|
|
481
|
+
if (!filterOptionsAbortController.signal.aborted) {
|
|
482
|
+
reportFiltersDispatch({
|
|
483
|
+
type: 'UPDATE_REPORT_FILTER',
|
|
484
|
+
id: reportId,
|
|
485
|
+
data: {
|
|
454
486
|
filter: {
|
|
455
487
|
...filter,
|
|
456
|
-
options:
|
|
488
|
+
options: filterOptions,
|
|
457
489
|
},
|
|
458
|
-
|
|
459
|
-
.filter((f) => f.label !== filter.label)
|
|
460
|
-
.map((f) => ({
|
|
461
|
-
...f,
|
|
462
|
-
query: undefined,
|
|
463
|
-
options: undefined,
|
|
464
|
-
})),
|
|
465
|
-
customFilters: customFilters?.filter((f) => f.filterType !== InternalFilterType.DateCustomFilter &&
|
|
466
|
-
f.filterType !== InternalFilterType.DateFilter &&
|
|
467
|
-
f.filterType !== InternalFilterType.DateComparisonFilter),
|
|
468
|
-
tenants,
|
|
490
|
+
loading: false,
|
|
469
491
|
},
|
|
470
|
-
})
|
|
471
|
-
|
|
472
|
-
credentials: withCredentials ? 'include' : 'omit',
|
|
473
|
-
});
|
|
474
|
-
return response.json().then((result) => {
|
|
475
|
-
const filterOptions = result.data?.filters[0]?.options ?? [];
|
|
476
|
-
if (!filterOptionsAbortController.signal.aborted) {
|
|
477
|
-
reportFiltersDispatch({
|
|
478
|
-
type: 'UPDATE_REPORT_FILTER',
|
|
479
|
-
id: reportId,
|
|
480
|
-
data: {
|
|
481
|
-
filter: {
|
|
482
|
-
...filter,
|
|
483
|
-
options: filterOptions,
|
|
484
|
-
},
|
|
485
|
-
loading: false,
|
|
486
|
-
},
|
|
487
|
-
});
|
|
488
|
-
}
|
|
489
|
-
});
|
|
492
|
+
});
|
|
493
|
+
}
|
|
490
494
|
}
|
|
491
495
|
catch (error) {
|
|
492
496
|
if (error instanceof Error && error.name === 'AbortError') {
|
|
@@ -509,7 +513,7 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
509
513
|
delete reportFilterOptionsAbortControllers.current[reportId];
|
|
510
514
|
}
|
|
511
515
|
}
|
|
512
|
-
async function fetchIndividualReport({ reportId, initiator, fetchRows = true, dashboardFilters, customFilters, additionalProcessing, dateBucket, reportAbortController, customFields,
|
|
516
|
+
async function fetchIndividualReport({ reportId, initiator, fetchRows = true, dashboardFilters, customFilters, additionalProcessing, dateBucket, reportAbortController, customFields, propagateChanges, }) {
|
|
513
517
|
if (!populatedClient) {
|
|
514
518
|
return;
|
|
515
519
|
}
|
|
@@ -531,55 +535,33 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
531
535
|
request: abortController,
|
|
532
536
|
};
|
|
533
537
|
try {
|
|
534
|
-
const
|
|
538
|
+
const resp = await quillFetch({
|
|
539
|
+
client: {
|
|
540
|
+
clientId: publicKey,
|
|
541
|
+
queryEndpoint,
|
|
542
|
+
queryHeaders,
|
|
543
|
+
withCredentials: !!withCredentials,
|
|
544
|
+
},
|
|
545
|
+
task: fetchRows ? 'report' : 'report-info',
|
|
535
546
|
metadata: {
|
|
536
547
|
reportId,
|
|
537
|
-
dashboardItemId: reportId,
|
|
538
548
|
clientId: populatedClient.publicKey,
|
|
539
|
-
task: 'report',
|
|
540
|
-
databaseType: populatedClient.databaseType,
|
|
541
|
-
filters: filters.map((filter) => ({ ...filter, options: undefined })),
|
|
542
|
-
additionalProcessing,
|
|
543
549
|
useNewNodeSql: true,
|
|
544
|
-
|
|
550
|
+
filters: filters?.map((f) => ({ ...f, options: undefined })),
|
|
551
|
+
additionalProcessing,
|
|
552
|
+
dateBucket,
|
|
553
|
+
databaseType: populatedClient.databaseType,
|
|
545
554
|
tenants,
|
|
546
555
|
flags,
|
|
547
556
|
customFields,
|
|
548
557
|
},
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
? await getData(populatedClient, 'itempost', 'omit', hostedBody, cloudBody, 'POST', 'fetch-data', abortController.signal)
|
|
557
|
-
: await fetch(`${queryEndpoint}`, {
|
|
558
|
-
method: 'POST',
|
|
559
|
-
headers: {
|
|
560
|
-
'Content-Type': 'application/json',
|
|
561
|
-
...queryHeaders,
|
|
562
|
-
},
|
|
563
|
-
body: JSON.stringify({
|
|
564
|
-
metadata: {
|
|
565
|
-
task: fetchRows ? 'report' : 'report-info',
|
|
566
|
-
reportId,
|
|
567
|
-
clientId: populatedClient.publicKey,
|
|
568
|
-
useNewNodeSql: true,
|
|
569
|
-
filters: filters?.map((f) => ({ ...f, options: undefined })),
|
|
570
|
-
getDefaultDashboardFilters: !filters.length,
|
|
571
|
-
additionalProcessing,
|
|
572
|
-
dateBucket,
|
|
573
|
-
databaseType: populatedClient.databaseType,
|
|
574
|
-
tenants,
|
|
575
|
-
flags,
|
|
576
|
-
customFields,
|
|
577
|
-
},
|
|
578
|
-
}),
|
|
579
|
-
signal: abortController.signal,
|
|
580
|
-
credentials: withCredentials ? 'include' : 'omit',
|
|
581
|
-
});
|
|
582
|
-
const results = fetchRows ? resp : await resp.json();
|
|
558
|
+
abortSignal: abortController.signal,
|
|
559
|
+
getToken: getAuthorizationToken,
|
|
560
|
+
urlParameters: `caller=fetchReport&task=report`,
|
|
561
|
+
});
|
|
562
|
+
const results = fetchRows
|
|
563
|
+
? await parseFetchResponse(populatedClient, 'report', resp, getAuthorizationToken)
|
|
564
|
+
: resp;
|
|
583
565
|
if (results.error) {
|
|
584
566
|
console.error('Error fetching report:', results.error);
|
|
585
567
|
return;
|
|
@@ -593,6 +575,7 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
593
575
|
dateBucket,
|
|
594
576
|
additionalProcessing,
|
|
595
577
|
customFields,
|
|
578
|
+
getToken: getAuthorizationToken,
|
|
596
579
|
});
|
|
597
580
|
reportsDispatch({
|
|
598
581
|
type: 'ADD_REPORT',
|
|
@@ -604,7 +587,7 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
604
587
|
},
|
|
605
588
|
});
|
|
606
589
|
// If the report matches the active dashboard, update the dashboard state
|
|
607
|
-
if (
|
|
590
|
+
if (propagateChanges) {
|
|
608
591
|
if (dashboard[report.dashboardName]) {
|
|
609
592
|
dispatch({
|
|
610
593
|
type: 'UPDATE_DASHBOARD_ITEM',
|
|
@@ -622,7 +605,26 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
622
605
|
const returnedFilters = !fetchRows
|
|
623
606
|
? results.data.filters
|
|
624
607
|
: results.filters;
|
|
625
|
-
|
|
608
|
+
let dateFilterTemplate = returnedFilters.find((f) => f.filterType === 'date_range');
|
|
609
|
+
if (dateFilterTemplate) {
|
|
610
|
+
dateFilterTemplate = {
|
|
611
|
+
...dateFilterTemplate,
|
|
612
|
+
presetOptions: dateFilterTemplate?.presetOptions?.map((preset) => ({
|
|
613
|
+
...preset,
|
|
614
|
+
loopStart: preset.loopStart
|
|
615
|
+
? new Date(preset.loopStart)
|
|
616
|
+
: undefined,
|
|
617
|
+
loopEnd: preset.loopEnd ? new Date(preset.loopEnd) : undefined,
|
|
618
|
+
})),
|
|
619
|
+
defaultPresetRanges: dateFilterTemplate?.defaultPresetRanges?.map((preset) => ({
|
|
620
|
+
...preset,
|
|
621
|
+
loopStart: preset.loopStart
|
|
622
|
+
? new Date(preset.loopStart)
|
|
623
|
+
: undefined,
|
|
624
|
+
loopEnd: preset.loopEnd ? new Date(preset.loopEnd) : undefined,
|
|
625
|
+
})),
|
|
626
|
+
};
|
|
627
|
+
}
|
|
626
628
|
const dateFilter = dateFilterTemplate
|
|
627
629
|
? createDefaultDateFilter(dateFilterTemplate, [report], report.dashboardName)
|
|
628
630
|
: undefined;
|
|
@@ -690,64 +692,63 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
690
692
|
const filterOptionsAbortController = new AbortController();
|
|
691
693
|
filterOptionsAbortControllers.current.add(filterOptionsAbortController);
|
|
692
694
|
try {
|
|
693
|
-
const
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
695
|
+
const result = await quillFetch({
|
|
696
|
+
client: {
|
|
697
|
+
clientId: publicKey,
|
|
698
|
+
queryEndpoint,
|
|
699
|
+
queryHeaders,
|
|
700
|
+
withCredentials: !!withCredentials,
|
|
698
701
|
},
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
filter
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
},
|
|
710
|
-
appliedFilters: filters
|
|
711
|
-
.filter((f) => f.label !== filter.label)
|
|
712
|
-
.map((f) => ({
|
|
713
|
-
...f,
|
|
714
|
-
query: undefined,
|
|
715
|
-
options: undefined,
|
|
716
|
-
})),
|
|
717
|
-
customFilters,
|
|
718
|
-
tenants: tenants,
|
|
702
|
+
task: 'filter-options',
|
|
703
|
+
metadata: {
|
|
704
|
+
clientId: publicKey,
|
|
705
|
+
publicKey,
|
|
706
|
+
name: dashboardName,
|
|
707
|
+
useNewNodeSql: true,
|
|
708
|
+
filter: {
|
|
709
|
+
...filter,
|
|
710
|
+
query: undefined,
|
|
711
|
+
options: undefined,
|
|
719
712
|
},
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
713
|
+
appliedFilters: filters
|
|
714
|
+
.filter((f) => f.label !== filter.label)
|
|
715
|
+
.map((f) => ({
|
|
716
|
+
...f,
|
|
717
|
+
query: undefined,
|
|
718
|
+
options: undefined,
|
|
719
|
+
})),
|
|
720
|
+
customFilters,
|
|
721
|
+
tenants,
|
|
722
|
+
},
|
|
723
|
+
abortSignal: filterOptionsAbortController?.signal,
|
|
724
|
+
getToken: getAuthorizationToken,
|
|
723
725
|
});
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
filter
|
|
732
|
-
|
|
733
|
-
options: filterOptions,
|
|
734
|
-
},
|
|
735
|
-
loading: false,
|
|
726
|
+
const filterOptions = result.data?.filters[0]?.options ?? [];
|
|
727
|
+
dashboardFiltersDispatch({
|
|
728
|
+
type: 'UPDATE_DASHBOARD_FILTER',
|
|
729
|
+
dashboardName,
|
|
730
|
+
filterName: filter.label,
|
|
731
|
+
data: {
|
|
732
|
+
filter: {
|
|
733
|
+
...filter,
|
|
734
|
+
options: filterOptions,
|
|
736
735
|
},
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
736
|
+
loading: false,
|
|
737
|
+
},
|
|
738
|
+
});
|
|
739
|
+
// Should we be updating the filters for all attached reports when the dashboard filters change?
|
|
740
|
+
reportFiltersDispatch({
|
|
741
|
+
type: 'UPDATE_REPORT_FILTER',
|
|
742
|
+
id: filter.label,
|
|
743
|
+
data: {
|
|
744
|
+
filter: {
|
|
745
|
+
...filter,
|
|
746
|
+
options: filterOptions,
|
|
748
747
|
},
|
|
749
|
-
|
|
748
|
+
loading: false,
|
|
749
|
+
},
|
|
750
750
|
});
|
|
751
|
+
return null;
|
|
751
752
|
}
|
|
752
753
|
catch (error) {
|
|
753
754
|
if (error instanceof Error && error.name === 'AbortError') {
|
|
@@ -854,15 +855,12 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
854
855
|
sectionOrder: newSectionOrder,
|
|
855
856
|
};
|
|
856
857
|
try {
|
|
857
|
-
await
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
body: JSON.stringify({ metadata: body }),
|
|
864
|
-
credentials: client.withCredentials ? 'include' : 'omit',
|
|
865
|
-
}).then((res) => res.json());
|
|
858
|
+
await quillFetch({
|
|
859
|
+
client,
|
|
860
|
+
task: 'set-section-order',
|
|
861
|
+
metadata: body,
|
|
862
|
+
getToken: getAuthorizationToken,
|
|
863
|
+
});
|
|
866
864
|
}
|
|
867
865
|
catch (e) {
|
|
868
866
|
console.error(e);
|
|
@@ -900,7 +898,7 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
900
898
|
id: dashboardName,
|
|
901
899
|
data: true,
|
|
902
900
|
});
|
|
903
|
-
const resp = await requestGetDashboard(dashboardName, populatedClient, tenants, flags);
|
|
901
|
+
const resp = await requestGetDashboard(dashboardName, populatedClient, getAuthorizationToken, tenants, flags);
|
|
904
902
|
// if dashboard has changed
|
|
905
903
|
if (!equal(resp, curDashboardConfig)) {
|
|
906
904
|
dashboardConfigDispatch({
|
|
@@ -948,6 +946,7 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
948
946
|
tenants,
|
|
949
947
|
caller,
|
|
950
948
|
abortSignal: fetchSchemaAbortController.current.signal,
|
|
949
|
+
getToken: getAuthorizationToken,
|
|
951
950
|
});
|
|
952
951
|
if (currentProcessId === fetchSchemaProcessId.current) {
|
|
953
952
|
setSchemaData({
|
|
@@ -981,62 +980,100 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
981
980
|
fetchDashboardsAbortController.current = new AbortController();
|
|
982
981
|
dashboardConfigDispatch({ type: 'CLEAR_DASHBOARDS' });
|
|
983
982
|
try {
|
|
984
|
-
const
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
983
|
+
const result = await quillFetch({
|
|
984
|
+
client: {
|
|
985
|
+
clientId: publicKey,
|
|
986
|
+
queryEndpoint,
|
|
987
|
+
queryHeaders,
|
|
988
|
+
withCredentials: !!withCredentials,
|
|
989
989
|
},
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
}),
|
|
998
|
-
credentials: withCredentials ? 'include' : 'omit',
|
|
999
|
-
signal: fetchDashboardsAbortController.current.signal,
|
|
990
|
+
task: 'dashboards',
|
|
991
|
+
metadata: {
|
|
992
|
+
clientId: publicKey,
|
|
993
|
+
// getSections: true, // skip fetching reports since 'dashboard' always does anyway
|
|
994
|
+
},
|
|
995
|
+
abortSignal: fetchDashboardsAbortController.current.signal,
|
|
996
|
+
getToken: getAuthorizationToken,
|
|
1000
997
|
});
|
|
1001
|
-
const result = await response.json();
|
|
1002
998
|
dashboardConfigDispatch({
|
|
1003
999
|
type: 'SET_DASHBOARD_DATA',
|
|
1004
1000
|
data: result.data.dashboards.map((dashboard) => ({
|
|
1005
1001
|
...dashboard,
|
|
1002
|
+
dateFilter: dashboard.dateFilter
|
|
1003
|
+
? {
|
|
1004
|
+
...dashboard.dateFilter,
|
|
1005
|
+
presetOptions: dashboard.dateFilter.presetOptions?.map((preset) => ({
|
|
1006
|
+
...preset,
|
|
1007
|
+
loopStart: preset.loopStart
|
|
1008
|
+
? new Date(preset.loopStart)
|
|
1009
|
+
: undefined,
|
|
1010
|
+
loopEnd: preset.loopEnd
|
|
1011
|
+
? new Date(preset.loopEnd)
|
|
1012
|
+
: undefined,
|
|
1013
|
+
})),
|
|
1014
|
+
defaultPresetRanges: dashboard.dateFilter.defaultPresetRanges?.map((preset) => ({
|
|
1015
|
+
...preset,
|
|
1016
|
+
loopStart: preset.loopStart
|
|
1017
|
+
? new Date(preset.loopStart)
|
|
1018
|
+
: undefined,
|
|
1019
|
+
loopEnd: preset.loopEnd
|
|
1020
|
+
? new Date(preset.loopEnd)
|
|
1021
|
+
: undefined,
|
|
1022
|
+
})),
|
|
1023
|
+
}
|
|
1024
|
+
: undefined,
|
|
1006
1025
|
createdAt: new Date(dashboard.createdAt),
|
|
1007
1026
|
})),
|
|
1008
1027
|
});
|
|
1009
1028
|
dashboardFiltersDispatch({
|
|
1010
1029
|
type: 'SET_INITIAL_DASHBOARD_FILTERS',
|
|
1011
1030
|
data: result.data.dashboards.reduce((acc, dashboard) => {
|
|
1012
|
-
let
|
|
1013
|
-
if (dashboard.dateFilter?.
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
});
|
|
1031
|
+
let presetOptions = defaultOptionsV2;
|
|
1032
|
+
if (dashboard.dateFilter?.presetOptions ||
|
|
1033
|
+
dashboard.dateFilter?.defaultPresetRanges) {
|
|
1034
|
+
presetOptions = convertPresetOptionsToSelectableList((dashboard.dateFilter.presetOptions ?? []).map((preset) => ({
|
|
1035
|
+
...preset,
|
|
1036
|
+
loopStart: preset.loopStart
|
|
1037
|
+
? new Date(preset.loopStart)
|
|
1038
|
+
: undefined,
|
|
1039
|
+
loopEnd: preset.loopEnd
|
|
1040
|
+
? new Date(preset.loopEnd)
|
|
1041
|
+
: undefined,
|
|
1042
|
+
})), (dashboard.dateFilter.defaultPresetRanges ?? []).map((preset) => ({
|
|
1043
|
+
...preset,
|
|
1044
|
+
loopStart: preset.loopStart
|
|
1045
|
+
? new Date(preset.loopStart)
|
|
1046
|
+
: undefined,
|
|
1047
|
+
loopEnd: preset.loopEnd
|
|
1048
|
+
? new Date(preset.loopEnd)
|
|
1049
|
+
: undefined,
|
|
1050
|
+
})));
|
|
1032
1051
|
}
|
|
1033
1052
|
acc[dashboard.name] = {};
|
|
1034
1053
|
if (dashboard.dateFilter) {
|
|
1035
1054
|
dashboard.dateFilter = {
|
|
1036
1055
|
...dashboard.dateFilter,
|
|
1037
|
-
startDate:
|
|
1038
|
-
endDate:
|
|
1056
|
+
startDate: presetOptions.find((elem) => elem.value === dashboard.dateFilter.primaryRange?.value)?.startDate,
|
|
1057
|
+
endDate: presetOptions.find((elem) => elem.value === dashboard.dateFilter.primaryRange?.value)?.endDate,
|
|
1039
1058
|
filterType: 'date_range',
|
|
1059
|
+
presetOptions: dashboard.dateFilter.presetOptions?.map((preset) => ({
|
|
1060
|
+
...preset,
|
|
1061
|
+
loopStart: preset.loopStart
|
|
1062
|
+
? new Date(preset.loopStart)
|
|
1063
|
+
: undefined,
|
|
1064
|
+
loopEnd: preset.loopEnd
|
|
1065
|
+
? new Date(preset.loopEnd)
|
|
1066
|
+
: undefined,
|
|
1067
|
+
})),
|
|
1068
|
+
defaultPresetRanges: dashboard.dateFilter.defaultPresetRanges?.map((preset) => ({
|
|
1069
|
+
...preset,
|
|
1070
|
+
loopStart: preset.loopStart
|
|
1071
|
+
? new Date(preset.loopStart)
|
|
1072
|
+
: undefined,
|
|
1073
|
+
loopEnd: preset.loopEnd
|
|
1074
|
+
? new Date(preset.loopEnd)
|
|
1075
|
+
: undefined,
|
|
1076
|
+
})),
|
|
1040
1077
|
};
|
|
1041
1078
|
acc[dashboard.name][dashboard.dateFilter.label] = {
|
|
1042
1079
|
filter: dashboard.dateFilter,
|
|
@@ -1067,6 +1104,33 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
1067
1104
|
}
|
|
1068
1105
|
}
|
|
1069
1106
|
}
|
|
1107
|
+
async function quillFetchWithToken({ client, task, method = 'POST', metadata, abortSignal, credentials = 'omit', urlParameters, includeFlags = false, includeTenants = false, adminMode, }) {
|
|
1108
|
+
try {
|
|
1109
|
+
const result = await quillFetch({
|
|
1110
|
+
client,
|
|
1111
|
+
task,
|
|
1112
|
+
method,
|
|
1113
|
+
metadata: {
|
|
1114
|
+
flags: includeFlags ? flags : undefined,
|
|
1115
|
+
tenants: includeTenants ? tenants : undefined,
|
|
1116
|
+
adminMode,
|
|
1117
|
+
...metadata,
|
|
1118
|
+
},
|
|
1119
|
+
abortSignal,
|
|
1120
|
+
credentials,
|
|
1121
|
+
urlParameters,
|
|
1122
|
+
getToken: getAuthorizationToken,
|
|
1123
|
+
});
|
|
1124
|
+
return result;
|
|
1125
|
+
}
|
|
1126
|
+
catch (e) {
|
|
1127
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
1128
|
+
throw e;
|
|
1129
|
+
}
|
|
1130
|
+
console.error('Failed to fetch:', e);
|
|
1131
|
+
return { error: 'Failed to fetch data' };
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1070
1134
|
useEffect(() => {
|
|
1071
1135
|
async function updateClientAndSchema(publicKey) {
|
|
1072
1136
|
if (populatedClient?.clientId === publicKey &&
|
|
@@ -1074,8 +1138,8 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
1074
1138
|
return;
|
|
1075
1139
|
setIsClientLoading(true);
|
|
1076
1140
|
setSchemaData({ ...schemaData, isSchemaLoading: true });
|
|
1077
|
-
const newClient = await fetchClient(publicKey, queryEndpoint, withCredentials, queryHeaders);
|
|
1078
|
-
if (!newClient.allTenantTypes?.every((t) => t.defaultId)) {
|
|
1141
|
+
const newClient = await fetchClient(publicKey, queryEndpoint, withCredentials, getAuthorizationToken, queryHeaders, isAdmin);
|
|
1142
|
+
if (!newClient.allTenantTypes?.every((t) => t.defaultId || t.scope === 'database')) {
|
|
1079
1143
|
console.error('Default organization not found. Please select a default organization for ', newClient.allTenantTypes?.find((t) => !t.defaultId));
|
|
1080
1144
|
}
|
|
1081
1145
|
setClient({
|
|
@@ -1090,78 +1154,89 @@ export const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoi
|
|
|
1090
1154
|
featureFlags: newClient.featureFlags,
|
|
1091
1155
|
domainName: newClient.domainName,
|
|
1092
1156
|
allTenantTypes: newClient.allTenantTypes,
|
|
1093
|
-
// @ts-ignore
|
|
1094
|
-
maintenanceMode: newClient?.maintenanceMode || false,
|
|
1095
1157
|
});
|
|
1096
1158
|
setIsClientLoading(false);
|
|
1097
1159
|
}
|
|
1098
1160
|
updateClientAndSchema(publicKey);
|
|
1099
1161
|
}, [publicKey]);
|
|
1100
1162
|
useEffect(() => {
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1163
|
+
if (populatedClient?.publicKey &&
|
|
1164
|
+
currentPublicKey.current !== populatedClient?.publicKey) {
|
|
1165
|
+
// CLEAR ALL DASHBOARD DATA AND REPORTS AND THEIR FILTERS
|
|
1166
|
+
dispatch({ type: 'CLEAR_DASHBOARDS' });
|
|
1167
|
+
dashboardFiltersDispatch({ type: 'CLEAR_DASHBOARD_FILTERS' });
|
|
1168
|
+
reportFiltersDispatch({ type: 'CLEAR_REPORT_FILTERS' });
|
|
1169
|
+
reportsDispatch({ type: 'CLEAR_REPORTS' });
|
|
1170
|
+
// TODO: this is yet another unfortunate hack where the answer is to unify the admin and react state
|
|
1171
|
+
// currently, we fetch the dashboards twice if both the client and default org change
|
|
1172
|
+
// because if we didn't, we would fetch 0 times if the client changed but the org didn't
|
|
1173
|
+
if (isAdmin) {
|
|
1174
|
+
setIsDashboardsLoading(true);
|
|
1175
|
+
fetchDashboards(populatedClient?.publicKey);
|
|
1176
|
+
}
|
|
1177
|
+
else {
|
|
1178
|
+
setIsDashboardsLoading(false);
|
|
1179
|
+
}
|
|
1180
|
+
if (typeof window !== 'undefined' && sessionStorage) {
|
|
1181
|
+
sessionStorage.setItem('quill-client', JSON.stringify({
|
|
1182
|
+
...populatedClient,
|
|
1183
|
+
allTenantTypes: undefined,
|
|
1184
|
+
}));
|
|
1185
|
+
}
|
|
1186
|
+
currentPublicKey.current = publicKey;
|
|
1114
1187
|
}
|
|
1115
|
-
}, [populatedClient?.publicKey
|
|
1116
|
-
// FIXME: fetchDashboards needs to rerun every time the tenant changes so that we filter reports on their flags
|
|
1188
|
+
}, [populatedClient?.publicKey]);
|
|
1117
1189
|
useEffect(() => {
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1190
|
+
if (populatedClient?.currentTenants &&
|
|
1191
|
+
!equal(currentTenant.current, populatedClient?.currentTenants)) {
|
|
1192
|
+
dispatch({ type: 'CLEAR_DASHBOARDS' });
|
|
1193
|
+
dashboardFiltersDispatch({ type: 'CLEAR_DASHBOARD_FILTERS' });
|
|
1194
|
+
reportFiltersDispatch({ type: 'CLEAR_REPORT_FILTERS' });
|
|
1195
|
+
reportsDispatch({ type: 'CLEAR_REPORTS' });
|
|
1196
|
+
if (populatedClient) {
|
|
1197
|
+
fetchSchema({
|
|
1198
|
+
client: populatedClient,
|
|
1199
|
+
tenants: populatedClient.currentTenants,
|
|
1200
|
+
caller: 'context',
|
|
1201
|
+
});
|
|
1202
|
+
}
|
|
1203
|
+
currentTenant.current = populatedClient?.currentTenants ?? null;
|
|
1204
|
+
}
|
|
1205
|
+
}, [populatedClient?.currentTenants]);
|
|
1128
1206
|
if (!theme) {
|
|
1129
1207
|
return null;
|
|
1130
1208
|
}
|
|
1131
1209
|
if (!tenants) {
|
|
1132
1210
|
throw new Error('Quill Error: QuillProvider prop organizationId is deprecated. Please use QuillProvider tenants prop instead');
|
|
1133
1211
|
}
|
|
1134
|
-
if (populatedClient?.maintenanceMode) {
|
|
1135
|
-
return (_jsxs("div", { children: [_jsx("h1", { children: "Dashboard is currently in maintenance mode" }), _jsx("p", { children: "Please check back later or contact your administrator for more information." })] }));
|
|
1136
|
-
}
|
|
1137
1212
|
return (_jsx(ClientContext.Provider, { value: [
|
|
1138
1213
|
isClientLoading || !populatedClient ? null : populatedClient,
|
|
1139
1214
|
isClientLoading,
|
|
1140
1215
|
setClient,
|
|
1141
|
-
], children: _jsx(ThemeContext.Provider, { value: [theme, setTheme], children: _jsx(SchemaDataContext.Provider, { value: [schemaData, setSchemaData], children: _jsx(DashboardContext.Provider, { value: [dashboard, dispatch], children: _jsx(DashboardConfigContext.Provider, { value: {
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1216
|
+
], children: _jsx(ThemeContext.Provider, { value: [theme, setTheme], children: _jsx(FetchContext.Provider, { value: { getToken: getAuthorizationToken, quillFetchWithToken }, children: _jsx(SchemaDataContext.Provider, { value: [schemaData, setSchemaData], children: _jsx(DashboardContext.Provider, { value: [dashboard, dispatch], children: _jsx(DashboardConfigContext.Provider, { value: {
|
|
1217
|
+
dashboardConfig: isDashboardsLoading ? {} : dashboardConfig,
|
|
1218
|
+
isLoading: isDashboardsLoading,
|
|
1219
|
+
dashboardConfigDispatch,
|
|
1220
|
+
loadDashboard,
|
|
1221
|
+
}, children: _jsx(DashboardFiltersContext.Provider, { value: {
|
|
1222
|
+
dashboardFilters,
|
|
1223
|
+
dashboardCustomFilters,
|
|
1224
|
+
customFilterDispatch,
|
|
1225
|
+
dispatch: dashboardFiltersDispatch,
|
|
1226
|
+
loadFiltersForDashboard,
|
|
1227
|
+
}, children: _jsx(ReportFiltersContext.Provider, { value: {
|
|
1228
|
+
reportFilters,
|
|
1229
|
+
customReportFilters,
|
|
1230
|
+
reportFiltersDispatch,
|
|
1231
|
+
customReportFiltersDispatch,
|
|
1232
|
+
loadFiltersForReport,
|
|
1233
|
+
abortLoadingFilters,
|
|
1234
|
+
}, children: _jsx(ReportsContext.Provider, { value: {
|
|
1235
|
+
reports,
|
|
1236
|
+
reportsDispatch,
|
|
1237
|
+
fetchIndividualReport,
|
|
1238
|
+
}, children: _jsx(TenantContext.Provider, { value: {
|
|
1239
|
+
tenants: populatedClient?.currentTenants ?? tenants,
|
|
1240
|
+
flags: populatedClient?.currentFlags ?? flags,
|
|
1241
|
+
}, children: children }) }) }) }) }) }) }) }) }) }));
|
|
1167
1242
|
};
|