@quillsql/react 2.13.47 → 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 +56 -49
- package/dist/cjs/ChartBuilder.d.ts +3 -2
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +172 -138
- package/dist/cjs/ChartEditor.d.ts +2 -2
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +5 -2
- package/dist/cjs/Context.d.ts +121 -41
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +449 -261
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +26 -25
- 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 +25 -14
- package/dist/cjs/SQLEditor.d.ts +1 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +51 -16
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +85 -14
- 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 +63 -36
- 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 +101 -65
- 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/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +59 -61
- 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/components/UiComponents.d.ts +1 -1
- 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 +2 -2
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +160 -69
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +29 -15
- package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.d.ts +1 -0
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +22 -12
- package/dist/cjs/hooks/useReport.d.ts +2 -2
- package/dist/cjs/hooks/useReport.d.ts.map +1 -1
- package/dist/cjs/hooks/useReport.js +3 -4
- 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/paginationProcessing.d.ts +1 -0
- package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/paginationProcessing.js +6 -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 -9
- 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 +92 -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 +60 -53
- package/dist/esm/ChartBuilder.d.ts +3 -2
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +173 -139
- package/dist/esm/ChartEditor.d.ts +2 -2
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +6 -3
- package/dist/esm/Context.d.ts +121 -41
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +450 -262
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +28 -27
- 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 +28 -17
- package/dist/esm/SQLEditor.d.ts +1 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +54 -19
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +88 -17
- 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 +65 -38
- 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 +102 -66
- 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/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +59 -61
- 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/components/UiComponents.d.ts +1 -1
- 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 +2 -2
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +162 -71
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +31 -17
- package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.d.ts +1 -0
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +23 -13
- package/dist/esm/hooks/useReport.d.ts +2 -2
- package/dist/esm/hooks/useReport.d.ts.map +1 -1
- package/dist/esm/hooks/useReport.js +4 -5
- 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/paginationProcessing.d.ts +1 -0
- package/dist/esm/utils/paginationProcessing.d.ts.map +1 -1
- package/dist/esm/utils/paginationProcessing.js +5 -0
- 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 -10
- 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 +94 -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/ChartBuilder.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState, useContext, useMemo, } from 'react';
|
|
3
|
-
import { ClientContext, DashboardConfigContext, DashboardFiltersContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, ThemeContext, } from './Context';
|
|
3
|
+
import { ClientContext, DashboardConfigContext, DashboardFiltersContext, FetchContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, ThemeContext, } from './Context';
|
|
4
4
|
import { PivotModal, generatePivotTable, isDateField, } from './internals/ReportBuilder/PivotModal';
|
|
5
5
|
import { PivotCard } from './internals/ReportBuilder/PivotList';
|
|
6
6
|
import { MemoizedModal, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, QuillTableComponent, QuillChartBuilderInputRowContainer, QuillChartBuilderInputColumnContainer, MemoizedSubHeader, QuillErrorMessageComponent, QuillPivotRowContainer, QuillPivotColumnContainer, QuillChartBuilderFormContainer, QuillLoadingComponent, QuillToolTip, QuillChartBuilderCheckboxComponent, } from './components/UiComponents';
|
|
@@ -23,7 +23,6 @@ import { shouldFetchMore,
|
|
|
23
23
|
import { fetchResultsByQuery, getUniqueValuesByQuery, } from './utils/tableProcessing';
|
|
24
24
|
import { getDateBucketFromRange } from './utils/dates';
|
|
25
25
|
import { QuillMultiSelectComponentWithCombo as MultiSelectComponent } from './components/QuillMultiSelectWithCombo';
|
|
26
|
-
import { useQuillCloud } from './utils/dataFetcher';
|
|
27
26
|
import { QuillMultiSelectSectionList } from './components/QuillMultiSelectSectionList';
|
|
28
27
|
import { ALL_TENANTS, REFERENCE_LINE, SINGLE_TENANT } from './utils/constants';
|
|
29
28
|
import { disambiguatedValueField } from './utils/pivotConstructor';
|
|
@@ -268,7 +267,9 @@ export function ChartBuilderWithModal(props) {
|
|
|
268
267
|
return (_jsx("div", { style: { height: '100%' }, ref: parentRef, children: _jsx(Modal, { isOpen: isOpen, setIsOpen: setIsOpen, title: title || 'Add to dashboard',
|
|
269
268
|
// For isHorizontalView, use full viewport size minus 80px for padding,
|
|
270
269
|
// otherwise use the default layout method of the modal (contents).
|
|
271
|
-
width: isHorizontalView ? modalWidth : undefined, height: isHorizontalView ? modalHeight : undefined, children: (props.reportId
|
|
270
|
+
width: isHorizontalView ? modalWidth : undefined, height: isHorizontalView ? modalHeight : undefined, children: (props.reportId
|
|
271
|
+
? (dashboard[props.reportId] ?? props.tempReport)
|
|
272
|
+
: props.tempReport) ? (_jsx(ChartBuilder, { ...props })) : (_jsx("div", { style: { padding: 20 }, children: _jsx(QuillLoadingComponent, {}) })) }) }));
|
|
272
273
|
}
|
|
273
274
|
/**
|
|
274
275
|
* ### Quill Chart Builder
|
|
@@ -302,11 +303,11 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
302
303
|
const [client] = useContext(ClientContext);
|
|
303
304
|
const [theme] = useContext(ThemeContext);
|
|
304
305
|
const [schemaData] = useContext(SchemaDataContext);
|
|
306
|
+
const { getToken, quillFetchWithToken } = useContext(FetchContext);
|
|
305
307
|
const { addReport } = useDashboardReports(destinationDashboard);
|
|
306
308
|
const { allReportsById } = useAllReports();
|
|
307
309
|
const { dashboardConfig } = useContext(DashboardConfigContext);
|
|
308
310
|
const { tenants, flags } = useContext(TenantContext);
|
|
309
|
-
const { getDataFromCloud } = useQuillCloud();
|
|
310
311
|
const report = useMemo(() => {
|
|
311
312
|
return reportId && !tempReport ? allReportsById[reportId] : tempReport;
|
|
312
313
|
}, [reportId]);
|
|
@@ -395,12 +396,12 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
395
396
|
};
|
|
396
397
|
}, [isOpen]);
|
|
397
398
|
const [dashboardOptions, setDashboardOptions] = useState([]);
|
|
398
|
-
const { reportFilters, loadFiltersForReport, reportFiltersDispatch, abortLoadingFilters } = useContext(ReportFiltersContext);
|
|
399
|
+
const { reportFilters, loadFiltersForReport, reportFiltersDispatch, abortLoadingFilters, } = useContext(ReportFiltersContext);
|
|
399
400
|
const { reportsDispatch } = useContext(ReportsContext);
|
|
400
401
|
const initialFilters = useRef(reportFilters[report?.id ?? TEMP_REPORT_ID]);
|
|
401
402
|
useEffect(() => {
|
|
402
403
|
if (!reportFilters[report?.id ?? TEMP_REPORT_ID]) {
|
|
403
|
-
loadFiltersForReport(report?.id ?? TEMP_REPORT_ID, 'ChartBuilder', specificDashboardFilters, undefined, undefined,
|
|
404
|
+
loadFiltersForReport(report?.id ?? TEMP_REPORT_ID, 'ChartBuilder', specificDashboardFilters, undefined, undefined, report?.dashboardName);
|
|
404
405
|
}
|
|
405
406
|
return () => {
|
|
406
407
|
abortLoadingFilters(report?.id ?? tempReport?.id ?? TEMP_REPORT_ID);
|
|
@@ -411,6 +412,12 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
411
412
|
data: Object.values(initialFilters.current),
|
|
412
413
|
});
|
|
413
414
|
}
|
|
415
|
+
else {
|
|
416
|
+
reportFiltersDispatch({
|
|
417
|
+
type: 'CLEAR_REPORT_FILTERS',
|
|
418
|
+
id: report?.id ?? TEMP_REPORT_ID,
|
|
419
|
+
});
|
|
420
|
+
}
|
|
414
421
|
};
|
|
415
422
|
}, []);
|
|
416
423
|
const currentDashboardFilters = useMemo(() => {
|
|
@@ -493,7 +500,12 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
493
500
|
? Object.fromEntries(Object.entries(report.flags).map(([key, value]) => {
|
|
494
501
|
if (value === ALL_TENANTS) {
|
|
495
502
|
const tenantType = client?.allTenantTypes?.find((t) => t.tenantField === key);
|
|
496
|
-
return [
|
|
503
|
+
return [
|
|
504
|
+
key,
|
|
505
|
+
tenantType?.tenantField === SINGLE_TENANT
|
|
506
|
+
? (tenantType?.flags ?? [])
|
|
507
|
+
: (tenantType?.tenantIds?.map((id) => id.flag) ?? []),
|
|
508
|
+
];
|
|
497
509
|
}
|
|
498
510
|
else {
|
|
499
511
|
return [key, value];
|
|
@@ -508,7 +520,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
508
520
|
const formEmptyState = {
|
|
509
521
|
name: report?.name ?? '',
|
|
510
522
|
dashboardName: dashboardOptions[0]?.label ?? '',
|
|
511
|
-
columns: report?.columns
|
|
523
|
+
columns: report?.columns?.map((col) => {
|
|
512
524
|
return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
|
|
513
525
|
}) ?? [],
|
|
514
526
|
xAxisField: report?.columns?.[0]?.field ?? '',
|
|
@@ -534,33 +546,45 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
534
546
|
if (!client) {
|
|
535
547
|
return;
|
|
536
548
|
}
|
|
537
|
-
const {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
549
|
+
const { data: responseData } = await quillFetchWithToken({
|
|
550
|
+
client,
|
|
551
|
+
task: 'dashboard',
|
|
552
|
+
metadata: {
|
|
553
|
+
name: dashboardName,
|
|
554
|
+
clientId: client.clientId,
|
|
555
|
+
databaseType: client.databaseType,
|
|
556
|
+
useNewNodeSql: true,
|
|
557
|
+
tenants,
|
|
558
|
+
},
|
|
559
|
+
});
|
|
560
|
+
if (responseData) {
|
|
561
|
+
return {
|
|
562
|
+
...responseData,
|
|
563
|
+
createdAt: responseData.createdAt && new Date(responseData.createdAt),
|
|
564
|
+
dateFilter: responseData.dateFilter
|
|
565
|
+
? {
|
|
566
|
+
...responseData.dateFilter,
|
|
567
|
+
presetOptions: responseData.dateFilter.presetOptions?.map((preset) => ({
|
|
568
|
+
...preset,
|
|
569
|
+
loopStart: preset.loopStart
|
|
570
|
+
? new Date(preset.loopStart)
|
|
571
|
+
: undefined,
|
|
572
|
+
loopEnd: preset.loopEnd
|
|
573
|
+
? new Date(preset.loopEnd)
|
|
574
|
+
: undefined,
|
|
575
|
+
})),
|
|
576
|
+
defaultPresetRanges: responseData.dateFilter.defaultPresetRanges?.map((preset) => ({
|
|
577
|
+
...preset,
|
|
578
|
+
loopStart: preset.loopStart
|
|
579
|
+
? new Date(preset.loopStart)
|
|
580
|
+
: undefined,
|
|
581
|
+
loopEnd: preset.loopEnd
|
|
582
|
+
? new Date(preset.loopEnd)
|
|
583
|
+
: undefined,
|
|
584
|
+
})),
|
|
585
|
+
}
|
|
586
|
+
: undefined,
|
|
587
|
+
};
|
|
564
588
|
}
|
|
565
589
|
};
|
|
566
590
|
const pivotFormData = (pivot) => {
|
|
@@ -574,21 +598,26 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
574
598
|
: false;
|
|
575
599
|
const chartType = formData?.chartType ?? (pivot.rowField ? 'column' : 'metric');
|
|
576
600
|
const rowColumn = (selectedPivotTable?.columns ?? columns).find((col) => col.field === pivot.rowField);
|
|
577
|
-
const xAxisField = pivot.rowField &&
|
|
601
|
+
const xAxisField = pivot.rowField &&
|
|
602
|
+
!(['metric', 'gauge'].includes(chartType) &&
|
|
603
|
+
!NUMBER_FORMAT_TYPES.includes(rowColumn?.format ?? ''))
|
|
578
604
|
? pivot.rowField
|
|
579
605
|
: disambiguatedValueField(pivot);
|
|
580
606
|
const result = {
|
|
581
607
|
pivot,
|
|
582
608
|
chartType: chartType,
|
|
583
609
|
xAxisField,
|
|
584
|
-
xAxisFormat: chartType === 'gauge'
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
610
|
+
xAxisFormat: chartType === 'gauge'
|
|
611
|
+
? 'percent'
|
|
612
|
+
: chartType === 'metric'
|
|
613
|
+
? 'whole_number'
|
|
614
|
+
: isDateType(pivot.rowFieldType ?? '')
|
|
615
|
+
? 'string'
|
|
616
|
+
: isNumberType(pivot.rowFieldType ?? '')
|
|
590
617
|
? 'whole_number'
|
|
591
|
-
: '
|
|
618
|
+
: isNumberType(disambiguatedValueField(pivot) ?? '')
|
|
619
|
+
? 'whole_number'
|
|
620
|
+
: 'string',
|
|
592
621
|
xAxisLabel: report?.xAxisLabel || pivot.rowField,
|
|
593
622
|
yAxisFields: [
|
|
594
623
|
{
|
|
@@ -605,17 +634,22 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
605
634
|
return result;
|
|
606
635
|
};
|
|
607
636
|
const getReferencedTables = async (client, sqlQuery, dbTables, skipStar) => {
|
|
608
|
-
const resp = await
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
637
|
+
const { data: resp } = await quillFetchWithToken({
|
|
638
|
+
client,
|
|
639
|
+
task: 'astify',
|
|
640
|
+
metadata: {
|
|
641
|
+
query: sqlQuery,
|
|
642
|
+
clientId: client.clientId,
|
|
643
|
+
useNewNodeSql: true,
|
|
644
|
+
},
|
|
612
645
|
});
|
|
613
646
|
if (resp.success === false) {
|
|
614
647
|
return getTablesHelper(getSelectFromAST({}), dbTables, skipStar);
|
|
615
648
|
}
|
|
616
649
|
return getTablesHelper(getSelectFromAST(resp.ast), dbTables, skipStar);
|
|
617
650
|
};
|
|
618
|
-
const
|
|
651
|
+
const getCurrentSection = () => dashboardConfig[destinationDashboard]?.config.sectionOrder?.find((section) => section.reportOrder?.includes(report?.id ?? ''))?.section ?? '';
|
|
652
|
+
const formFormDataFromReport = (report, section) => {
|
|
619
653
|
// let pivotData = {};
|
|
620
654
|
let dateField = defaultDateField;
|
|
621
655
|
// if (report?.pivot) {
|
|
@@ -641,9 +675,10 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
641
675
|
};
|
|
642
676
|
})
|
|
643
677
|
: [],
|
|
678
|
+
section,
|
|
644
679
|
};
|
|
645
680
|
};
|
|
646
|
-
const [formData, setFormData] = useState(formFormDataFromReport(report));
|
|
681
|
+
const [formData, setFormData] = useState(formFormDataFromReport(report, getCurrentSection()));
|
|
647
682
|
const reportCustomFields = useMemo(() => {
|
|
648
683
|
return (report?.columnsWithCustomFields?.filter((col) => !report?.columns?.some((c) => col.field === c.field)) ?? []);
|
|
649
684
|
}, [report?.columnsWithCustomFields, report?.columns]);
|
|
@@ -693,7 +728,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
693
728
|
return columns.filter((col) => !columnsObservedInRows.includes(col.field));
|
|
694
729
|
}, [rows]);
|
|
695
730
|
const [chartTypes, setChartTypes] = useState((() => {
|
|
696
|
-
const data = formFormDataFromReport(report);
|
|
731
|
+
const data = formFormDataFromReport(report, getCurrentSection());
|
|
697
732
|
return getChartTypeOptions(data, dashboardConfig[data.dashboardName || '']);
|
|
698
733
|
})());
|
|
699
734
|
const reportContainsCustomFields = useMemo(() => {
|
|
@@ -766,7 +801,13 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
766
801
|
const curFormData = formData;
|
|
767
802
|
let dashNames = Object.keys(dashboardConfig);
|
|
768
803
|
if (dashNames.length === 0) {
|
|
769
|
-
const resp = await
|
|
804
|
+
const { data: resp } = await quillFetchWithToken({
|
|
805
|
+
client,
|
|
806
|
+
task: 'dashnames',
|
|
807
|
+
metadata: {
|
|
808
|
+
clientId: client.clientId,
|
|
809
|
+
},
|
|
810
|
+
});
|
|
770
811
|
dashNames = resp.dashboardNames;
|
|
771
812
|
}
|
|
772
813
|
let dashboardOptions = dashNames
|
|
@@ -926,6 +967,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
926
967
|
dashboardName: destinationDashboardName,
|
|
927
968
|
tenants,
|
|
928
969
|
additionalProcessing: baseProcessing,
|
|
970
|
+
getToken,
|
|
929
971
|
});
|
|
930
972
|
setSelectedPivotTable(pivotTable);
|
|
931
973
|
return pivotTable;
|
|
@@ -1000,6 +1042,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1000
1042
|
const tableInfo = await fetchResultsByQuery({
|
|
1001
1043
|
query,
|
|
1002
1044
|
client,
|
|
1045
|
+
getToken,
|
|
1003
1046
|
tenants,
|
|
1004
1047
|
processing,
|
|
1005
1048
|
customFields: schemaData.customFields,
|
|
@@ -1027,7 +1070,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1027
1070
|
}
|
|
1028
1071
|
return filter;
|
|
1029
1072
|
});
|
|
1030
|
-
loadFiltersForReport(report?.id ?? TEMP_REPORT_ID, 'ChartBuilder', updatedFilters, label, undefined,
|
|
1073
|
+
loadFiltersForReport(report?.id ?? TEMP_REPORT_ID, 'ChartBuilder', updatedFilters, label, undefined, report?.dashboardName).then(() => {
|
|
1031
1074
|
setCurrentPage(0);
|
|
1032
1075
|
setMaxPage(0);
|
|
1033
1076
|
handleRunQuery(baseProcessing, updatedFilters);
|
|
@@ -1063,6 +1106,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1063
1106
|
rowCountOnly: false,
|
|
1064
1107
|
filterMap: canonicalFilterMap,
|
|
1065
1108
|
dashboardName: destinationDashboardName,
|
|
1109
|
+
getToken,
|
|
1066
1110
|
});
|
|
1067
1111
|
setCurrentProcessing(processing);
|
|
1068
1112
|
setRows(tableInfo.rows);
|
|
@@ -1075,6 +1119,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1075
1119
|
columns: tableInfo.columns.filter((column) => column.field === formData.pivot?.columnField),
|
|
1076
1120
|
query: report.queryString,
|
|
1077
1121
|
client,
|
|
1122
|
+
getToken,
|
|
1078
1123
|
tenants,
|
|
1079
1124
|
customFields: schemaData.customFields ?? {},
|
|
1080
1125
|
filters: overrideFilters,
|
|
@@ -1138,6 +1183,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1138
1183
|
? report.comparisonPivotQuery
|
|
1139
1184
|
: undefined,
|
|
1140
1185
|
client,
|
|
1186
|
+
getToken,
|
|
1141
1187
|
tenants,
|
|
1142
1188
|
processing: updatedProcessing,
|
|
1143
1189
|
customFields: schemaData.customFields,
|
|
@@ -1181,71 +1227,53 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1181
1227
|
const handleChange = async (value, fieldName, index) => {
|
|
1182
1228
|
let updatedForm = { ...formData };
|
|
1183
1229
|
try {
|
|
1184
|
-
|
|
1185
|
-
// WE NEED TO UPDATE BOTH VALUEFIELDTYPE AND COLUMN FIELD TYPES
|
|
1186
|
-
if (fieldName === 'pivotColumn') {
|
|
1187
|
-
// CAN'T EDIT THE TYPE OF THE RowField
|
|
1188
|
-
if (index === 0) {
|
|
1189
|
-
return;
|
|
1190
|
-
}
|
|
1191
|
-
const updatedPivot = {
|
|
1192
|
-
...formData.pivot,
|
|
1193
|
-
valueFieldType: value,
|
|
1194
|
-
};
|
|
1195
|
-
// @ts-ignore
|
|
1196
|
-
updatedForm.pivot = updatedPivot;
|
|
1197
|
-
}
|
|
1198
|
-
else if (index !== undefined) {
|
|
1230
|
+
if (index !== undefined) {
|
|
1199
1231
|
// For dynamic array fields
|
|
1200
1232
|
const [field, subfield] = fieldName.split('.');
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1233
|
+
if (field === 'pivot' && !!subfield) {
|
|
1234
|
+
if (!selectedPivotTable) {
|
|
1235
|
+
return;
|
|
1236
|
+
}
|
|
1237
|
+
let newLabel = undefined;
|
|
1238
|
+
if (subfield === 'field') {
|
|
1204
1239
|
newLabel = snakeAndCamelCaseToTitleCase(value);
|
|
1205
1240
|
}
|
|
1241
|
+
const newColumns = selectedPivotTable.columns.map((col, i) => i === index
|
|
1242
|
+
? {
|
|
1243
|
+
...col,
|
|
1244
|
+
label: newLabel ? newLabel : col.label,
|
|
1245
|
+
[subfield]: value,
|
|
1246
|
+
}
|
|
1247
|
+
: col);
|
|
1248
|
+
setSelectedPivotTable({
|
|
1249
|
+
...selectedPivotTable,
|
|
1250
|
+
columns: newColumns,
|
|
1251
|
+
});
|
|
1206
1252
|
}
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1253
|
+
else {
|
|
1254
|
+
let newLabel = undefined;
|
|
1255
|
+
if (field === 'columns' && subfield === 'field') {
|
|
1256
|
+
if (!formData['columns'][index]?.label) {
|
|
1257
|
+
newLabel = snakeAndCamelCaseToTitleCase(value);
|
|
1258
|
+
}
|
|
1213
1259
|
}
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1260
|
+
// @ts-ignore
|
|
1261
|
+
const updatedArray = formData[field].map((item, i) => i === index
|
|
1262
|
+
? {
|
|
1263
|
+
...item,
|
|
1264
|
+
label: newLabel ? newLabel : item.label,
|
|
1265
|
+
[subfield]: value,
|
|
1266
|
+
}
|
|
1267
|
+
: item);
|
|
1268
|
+
updatedForm = { ...formData, [field]: updatedArray };
|
|
1269
|
+
setFormData(updatedForm);
|
|
1270
|
+
setChartTypes(getChartTypeOptions(updatedForm, dashboardConfig[updatedForm.dashboardName ?? '']));
|
|
1271
|
+
}
|
|
1218
1272
|
}
|
|
1219
1273
|
else if (fieldName.includes('.')) {
|
|
1220
1274
|
// For nested fields
|
|
1221
1275
|
const [field, subfield] = fieldName.split('.');
|
|
1222
|
-
if (field === '
|
|
1223
|
-
const subfieldTypeFieldName = subfield + 'Type';
|
|
1224
|
-
if (value.length) {
|
|
1225
|
-
const subFieldType = columns.find((columns) => columns.field === value).fieldType;
|
|
1226
|
-
updatedForm = {
|
|
1227
|
-
...updatedForm,
|
|
1228
|
-
// @ts-ignore
|
|
1229
|
-
[field]: {
|
|
1230
|
-
...updatedForm[field],
|
|
1231
|
-
[subfield]: value,
|
|
1232
|
-
[subfieldTypeFieldName]: subFieldType,
|
|
1233
|
-
},
|
|
1234
|
-
};
|
|
1235
|
-
}
|
|
1236
|
-
else {
|
|
1237
|
-
updatedForm = {
|
|
1238
|
-
...formData,
|
|
1239
|
-
// @ts-ignore
|
|
1240
|
-
[field]: {
|
|
1241
|
-
...formData[field],
|
|
1242
|
-
[subfield]: '',
|
|
1243
|
-
[subfieldTypeFieldName]: '',
|
|
1244
|
-
},
|
|
1245
|
-
};
|
|
1246
|
-
}
|
|
1247
|
-
}
|
|
1248
|
-
else if (field === 'dateField' &&
|
|
1276
|
+
if (field === 'dateField' &&
|
|
1249
1277
|
subfield === 'table' &&
|
|
1250
1278
|
!formData.dateField?.field) {
|
|
1251
1279
|
const field = schemaData.schemaWithCustomFields?.find((elem) => elem.name === value)?.columns?.[0]?.field;
|
|
@@ -1271,14 +1299,16 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1271
1299
|
updatedForm.xAxisFormat = 'whole_number';
|
|
1272
1300
|
const currentXAxisColumn = (selectedPivotTable?.columns ?? columns).find((c) => c.field === updatedForm.xAxisField);
|
|
1273
1301
|
if (!NUMBER_FORMAT_TYPES.includes(currentXAxisColumn?.format ?? '')) {
|
|
1274
|
-
updatedForm.xAxisField =
|
|
1302
|
+
updatedForm.xAxisField =
|
|
1303
|
+
(selectedPivotTable?.columns ?? columns).find((c) => NUMBER_FORMAT_TYPES.includes(c.format))?.field ?? updatedForm.xAxisField;
|
|
1275
1304
|
}
|
|
1276
1305
|
}
|
|
1277
1306
|
else if (value === 'gauge') {
|
|
1278
1307
|
updatedForm.xAxisFormat = 'percent';
|
|
1279
1308
|
const currentXAxisColumn = (selectedPivotTable?.columns ?? columns).find((c) => c.field === updatedForm.xAxisField);
|
|
1280
1309
|
if (!NUMBER_FORMAT_TYPES.includes(currentXAxisColumn?.format ?? '')) {
|
|
1281
|
-
updatedForm.xAxisField =
|
|
1310
|
+
updatedForm.xAxisField =
|
|
1311
|
+
(selectedPivotTable?.columns ?? columns).find((c) => NUMBER_FORMAT_TYPES.includes(c.format))?.field ?? updatedForm.xAxisField;
|
|
1282
1312
|
}
|
|
1283
1313
|
}
|
|
1284
1314
|
}
|
|
@@ -1320,9 +1350,11 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1320
1350
|
// This method is *potentially* flawed because it chooses the first matching field it finds
|
|
1321
1351
|
// which may not be robust to joins, aliases, disambiguations, etc.
|
|
1322
1352
|
// unfortunately the pivot doesn't store the table of the rowField so we can't do better
|
|
1323
|
-
const dateField = pivot.rowField && isDateField(pivot.rowFieldType ?? '')
|
|
1324
|
-
|
|
1325
|
-
|
|
1353
|
+
const dateField = pivot.rowField && isDateField(pivot.rowFieldType ?? '')
|
|
1354
|
+
? dateFieldOptions.find((table) => {
|
|
1355
|
+
return table.columns.find((col) => col.field === pivot.rowField);
|
|
1356
|
+
})
|
|
1357
|
+
: undefined;
|
|
1326
1358
|
setFormData((formData) => ({
|
|
1327
1359
|
...formData,
|
|
1328
1360
|
...newPivotFormData,
|
|
@@ -1481,6 +1513,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1481
1513
|
report: { ...newReport, rows: undefined, pivotRows: undefined }, // stop including rows in request
|
|
1482
1514
|
dashboardItemId,
|
|
1483
1515
|
client,
|
|
1516
|
+
getToken,
|
|
1484
1517
|
});
|
|
1485
1518
|
if (resp && resp.name !== 'error') {
|
|
1486
1519
|
const data = {
|
|
@@ -1507,6 +1540,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1507
1540
|
...resp,
|
|
1508
1541
|
rows,
|
|
1509
1542
|
columns: formData.columns.filter((col) => !invalidColumns.includes(col)),
|
|
1543
|
+
section: formData.section,
|
|
1510
1544
|
});
|
|
1511
1545
|
}
|
|
1512
1546
|
};
|
|
@@ -1539,9 +1573,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1539
1573
|
height: isHorizontalView || !isOpen ? '100%' : 800,
|
|
1540
1574
|
...(isHorizontalView && {
|
|
1541
1575
|
// flexGrow: 1,
|
|
1542
|
-
width: !isOpen
|
|
1543
|
-
? '100%'
|
|
1544
|
-
: `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
|
|
1576
|
+
width: !isOpen ? '100%' : `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
|
|
1545
1577
|
}),
|
|
1546
1578
|
...(!isHorizontalView && isOpen && { width: formWidth }),
|
|
1547
1579
|
}, children: [!isEditingMode && (report?.adminError || report?.error) ? (_jsx(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : ((isHorizontalView || (!isOpen && windowWidth > 1200)) && (_jsx(InternalChart, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
|
|
@@ -1555,7 +1587,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1555
1587
|
...(isHorizontalView && {
|
|
1556
1588
|
flexGrow: !['table'].includes(formData.chartType) ? 1 : 0,
|
|
1557
1589
|
}),
|
|
1558
|
-
}, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }))),
|
|
1590
|
+
}, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, LoadingComponent: LoadingComponent }))),
|
|
1559
1591
|
// Make sure to display non-pivoted table when using pivot chart
|
|
1560
1592
|
!hideChartView &&
|
|
1561
1593
|
(isHorizontalView || (!isOpen && windowWidth < 1200)) && (_jsxs("div", { style: {
|
|
@@ -1638,7 +1670,17 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1638
1670
|
}, options: dashboardOptions.map((elem) => ({
|
|
1639
1671
|
label: elem.label,
|
|
1640
1672
|
value: elem.label,
|
|
1641
|
-
})), width: 200 }) })), hideChartType ? (_jsx("div", { style: { width: 200 } })) : (_jsx("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'), options: chartTypes, width: 200 }) })
|
|
1673
|
+
})), width: 200 }) })), hideChartType ? (_jsx("div", { style: { width: 200 } })) : (_jsxs(_Fragment, { children: [_jsx("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'), options: chartTypes, width: 200 }) }), currentDashboard?.sectionOrder?.some((s) => s.section) && (_jsx("div", { style: {
|
|
1674
|
+
display: currentDashboard?.sectionOrder?.length
|
|
1675
|
+
? 'flex'
|
|
1676
|
+
: 'none',
|
|
1677
|
+
flexDirection: 'column',
|
|
1678
|
+
}, children: _jsx(SelectComponent, { label: "Section", value: formData.section ?? '', options: currentDashboard?.sectionOrder?.map((s) => ({
|
|
1679
|
+
label: s.section ? s.section : 'No section',
|
|
1680
|
+
value: s.section,
|
|
1681
|
+
})) ?? [], onChange: (e) => {
|
|
1682
|
+
handleChange(e.target.value ?? '', 'section');
|
|
1683
|
+
}, width: 200, hideEmptyOption: true }) }))] }))] }), hidePivotForm ? null : (_jsxs("div", { style: {
|
|
1642
1684
|
display: 'flex',
|
|
1643
1685
|
flexDirection: 'column',
|
|
1644
1686
|
gap: 6,
|
|
@@ -1647,7 +1689,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1647
1689
|
// marginTop: 6,
|
|
1648
1690
|
display: 'flex',
|
|
1649
1691
|
flexDirection: 'column',
|
|
1650
|
-
}, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotAggregations: pivotAggregations, setPivotAggregations: setPivotAggregations, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, SubheaderComponent: SubHeaderComponent, DeleteButtonComponent: DeleteButtonComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processedColumns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot, query: query, pivotCountRequest: 4, initialUniqueValues: initialUniqueValues, uniqueValuesIsLoading: initialUniqueValuesIsLoading, initialSelectedPivotTable: selectedPivotTable, pivotRecommendationsEnabled: pivotRecommendationsEnabled, report: report, dashboardName: destinationDashboardName || '', dateFilter: filtersEnabled
|
|
1692
|
+
}, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotAggregations: pivotAggregations, setPivotAggregations: setPivotAggregations, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, SubheaderComponent: SubHeaderComponent, DeleteButtonComponent: DeleteButtonComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processedColumns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot, query: query, pivotCountRequest: 4, initialUniqueValues: initialUniqueValues, uniqueValuesIsLoading: initialUniqueValuesIsLoading, initialSelectedPivotTable: selectedPivotTable, pivotRecommendationsEnabled: pivotRecommendationsEnabled, report: report ? { ...report, ...{ itemQuery } } : undefined, dashboardName: destinationDashboardName || '', dateFilter: filtersEnabled
|
|
1651
1693
|
? currentDashboardFilters?.find((f) => f.filterType === 'date_range')
|
|
1652
1694
|
: undefined }) }), formData.pivot && (_jsx("div", { children: _jsx("div", { style: { width: pivotCardWidth }, children: _jsx(PivotCard, { pivotTable: pivotCardTable, theme: theme, index: 0, onSelectPivot: () => {
|
|
1653
1695
|
setIsEdittingPivot(true);
|
|
@@ -1754,25 +1796,16 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1754
1796
|
selectedPivotTable.columns &&
|
|
1755
1797
|
formData.chartType === 'table'
|
|
1756
1798
|
? // THIS CASE IF FOR PIVOT TABLES ONLY
|
|
1757
|
-
selectedPivotTable.columns.map((column, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: column.
|
|
1758
|
-
label: elem.
|
|
1759
|
-
value: elem.
|
|
1760
|
-
})), width: 200 }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, '
|
|
1799
|
+
selectedPivotTable.columns.map((column, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'pivot.field', index), options: selectedPivotTable.columns.map((elem) => ({
|
|
1800
|
+
label: elem.field,
|
|
1801
|
+
value: elem.field,
|
|
1802
|
+
})), disabled: index === 0, width: 200, hideEmptyOption: true }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'pivot.label', index) }), _jsx(SelectComponent, { value:
|
|
1761
1803
|
// The first index use rowField for the rest of them use value fields
|
|
1762
|
-
formData.pivot &&
|
|
1763
|
-
column.field === formData.pivot.rowField
|
|
1764
|
-
? formData.pivot &&
|
|
1765
|
-
isDateField(formData.pivot.rowFieldType || '')
|
|
1766
|
-
? 'string'
|
|
1767
|
-
: 'string'
|
|
1768
|
-
: formData.pivot?.aggregationType ===
|
|
1769
|
-
'percentage'
|
|
1770
|
-
? 'percent'
|
|
1771
|
-
: 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
|
|
1804
|
+
column.format, onChange: (e) => handleChange(e.target.value, 'pivot.format', index), options: formData.pivot && index === 0
|
|
1772
1805
|
? isDateField(formData.pivot.rowFieldType || '')
|
|
1773
1806
|
? [{ label: 'date', value: 'string' }]
|
|
1774
1807
|
: [{ label: 'string', value: 'string' }]
|
|
1775
|
-
: [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
|
|
1808
|
+
: [...NUMBER_OPTIONS], width: 200, hideEmptyOption: true })] }, 'column' + index)))
|
|
1776
1809
|
: formData.columns.map((column, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: rows[0]
|
|
1777
1810
|
? Object.keys(rows[0]).map((elem) => ({
|
|
1778
1811
|
label: elem,
|
|
@@ -1781,7 +1814,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1781
1814
|
: columns.map((elem) => ({
|
|
1782
1815
|
label: elem.field,
|
|
1783
1816
|
value: elem.field,
|
|
1784
|
-
})), width: 200 }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: ALL_FORMAT_OPTIONS, width: 200 }), _jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))), _jsx("div", { children: !(
|
|
1817
|
+
})), width: 200, hideEmptyOption: true }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: ALL_FORMAT_OPTIONS, width: 200, hideEmptyOption: true }), _jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))), _jsx("div", { children: !(
|
|
1785
1818
|
// hide when pivoted and chartType === 'table'
|
|
1786
1819
|
(formData.pivot &&
|
|
1787
1820
|
selectedPivotTable &&
|
|
@@ -1881,7 +1914,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1881
1914
|
label: t.label ?? t.flag,
|
|
1882
1915
|
value: t.flag,
|
|
1883
1916
|
})) ?? []), width: 200, emptyLabel: dashboardOwner.scope === 'database'
|
|
1884
|
-
? 'No
|
|
1917
|
+
? 'No tags supplied'
|
|
1885
1918
|
: undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
|
|
1886
1919
|
display: customTenantAccess || containsCustomFields
|
|
1887
1920
|
? 'inline'
|
|
@@ -1905,6 +1938,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1905
1938
|
display: 'flex',
|
|
1906
1939
|
flexDirection: 'column',
|
|
1907
1940
|
gap: 6,
|
|
1941
|
+
marginBottom: 128,
|
|
1908
1942
|
}, children: [_jsx(HeaderComponent, { label: "Dashboard filter fields" }), isAdmin &&
|
|
1909
1943
|
formData.dateField &&
|
|
1910
1944
|
dashboardConfig[formData.dashboardName ?? destinationDashboardName ?? '']?.config.dateFilter?.label && (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(TextInputComponent, { id: 'filterMap.dateFilter.' +
|
|
@@ -1913,12 +1947,12 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1913
1947
|
?.config.dateFilter?.label ?? 'Date', width: 200, onChange: () => { }, label: 'Filter', disabled: true }), _jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Virtual Table", value: formData.dateField?.table, onChange: (e) => handleChange(e.target.value, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
|
|
1914
1948
|
label: elem.name,
|
|
1915
1949
|
value: elem.name,
|
|
1916
|
-
})), width: 200 }) }), _jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Field", value: removeDoubleQuotes(formData.dateField?.field), onChange: (e) => handleChange(e.target.value, 'dateField.field'), options: dateFieldOptions
|
|
1950
|
+
})), width: 200, hideEmptyOption: true }) }), _jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Field", value: removeDoubleQuotes(formData.dateField?.field), onChange: (e) => handleChange(e.target.value, 'dateField.field'), options: dateFieldOptions
|
|
1917
1951
|
?.find((elem) => elem.name === formData.dateField?.table)
|
|
1918
1952
|
?.columns?.map((elem) => ({
|
|
1919
1953
|
label: elem.field,
|
|
1920
1954
|
value: elem.field,
|
|
1921
|
-
})) || [], width: 200 }) }), (!formData.dateField?.table ||
|
|
1955
|
+
})) || [], width: 200, hideEmptyOption: true }) }), (!formData.dateField?.table ||
|
|
1922
1956
|
!formData.dateField?.field) && (_jsx("div", { style: { marginBottom: 8, marginTop: 'auto' }, children: _jsx(ExclamationFilledIcon, { height: 28, width: 28, style: {
|
|
1923
1957
|
color: '#dc143c',
|
|
1924
1958
|
} }) }))] })), specificDashboardFilters.length > 0 && (_jsx("div", { style: {
|
|
@@ -1954,7 +1988,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1954
1988
|
}), options: allTables.map((elem) => ({
|
|
1955
1989
|
label: elem,
|
|
1956
1990
|
value: elem,
|
|
1957
|
-
})), width: 200 }), _jsx(SelectComponent, { label: index === 0 &&
|
|
1991
|
+
})), width: 200, hideEmptyOption: true }), _jsx(SelectComponent, { label: index === 0 &&
|
|
1958
1992
|
!(isAdmin &&
|
|
1959
1993
|
formData.dateField &&
|
|
1960
1994
|
dashboardConfig[formData.dashboardName ?? '']
|
|
@@ -1976,7 +2010,7 @@ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort =
|
|
|
1976
2010
|
.map((elem) => ({
|
|
1977
2011
|
label: elem.label,
|
|
1978
2012
|
value: elem.field,
|
|
1979
|
-
})) ?? [], width: 200 }), !validFilter[filter.label] && (_jsx("div", { style: { marginBottom: 8, marginTop: 'auto' }, children: _jsx(ExclamationFilledIcon, { height: 28, width: 28, style: {
|
|
2013
|
+
})) ?? [], width: 200, hideEmptyOption: true }), !validFilter[filter.label] && (_jsx("div", { style: { marginBottom: 8, marginTop: 'auto' }, children: _jsx(ExclamationFilledIcon, { height: 28, width: 28, style: {
|
|
1980
2014
|
color: '#dc143c',
|
|
1981
2015
|
} }) }))] }, filter.label))) }))] })), isAdmin && !tenants && !flags && (_jsxs("div", { style: {
|
|
1982
2016
|
display: 'flex',
|
|
@@ -27,10 +27,10 @@ export interface ChartEditorProps {
|
|
|
27
27
|
/** A callback function triggered when the chart error button is clicked */
|
|
28
28
|
onClickChartError?: (element: any) => void;
|
|
29
29
|
/** A callback that is fired when the item is deleted. */
|
|
30
|
-
onDelete?: () => boolean
|
|
30
|
+
onDelete?: () => boolean | Promise<boolean>;
|
|
31
31
|
/** A select component. */
|
|
32
32
|
SelectComponent?: (props: {
|
|
33
|
-
value: string;
|
|
33
|
+
value: string | null | undefined;
|
|
34
34
|
label?: string;
|
|
35
35
|
options: {
|
|
36
36
|
value: string;
|