@quillsql/react 2.13.40 → 2.13.42
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 +5 -1
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +51 -28
- package/dist/cjs/ChartBuilder.d.ts +30 -3
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +483 -182
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +11 -1
- package/dist/cjs/Context.d.ts +16 -4
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +95 -46
- package/dist/cjs/Dashboard.d.ts +6 -3
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +69 -28
- package/dist/cjs/QuillProvider.d.ts +4 -8
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.d.ts +2 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +190 -48
- package/dist/cjs/SQLEditor.d.ts +8 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +94 -10
- package/dist/cjs/Table.d.ts +21 -1
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +30 -192
- package/dist/cjs/components/Chart/BarChart.d.ts +5 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +4 -3
- package/dist/cjs/components/Chart/CustomReferenceLine.d.ts +2 -0
- package/dist/cjs/components/Chart/CustomReferenceLine.d.ts.map +1 -0
- package/dist/cjs/components/Chart/CustomReferenceLine.js +26 -0
- package/dist/cjs/components/Chart/GaugeChart.d.ts +11 -0
- package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -0
- package/dist/cjs/components/Chart/GaugeChart.js +198 -0
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +14 -11
- package/dist/cjs/components/Chart/LineChart.d.ts +5 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +4 -3
- package/dist/cjs/components/Chart/MapChart.d.ts +36 -0
- package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -0
- package/dist/cjs/components/Chart/MapChart.js +548 -0
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +114 -42
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +57 -54
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +5 -4
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +12 -11
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +2 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +13 -13
- 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 +4 -4
- package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -0
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +28 -7
- package/dist/cjs/components/ReportBuilder/util.d.ts +1 -1
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +15 -2
- package/dist/cjs/components/UiComponents.d.ts +5 -2
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +34 -7
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +11 -9
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +18 -4
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +16 -3
- package/dist/cjs/hooks/useReport.d.ts.map +1 -1
- package/dist/cjs/hooks/useReport.js +1 -7
- package/dist/cjs/hooks/useVirtualTables.d.ts +6 -2
- package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/cjs/hooks/useVirtualTables.js +5 -2
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +7 -8
- package/dist/cjs/models/Columns.d.ts +1 -0
- package/dist/cjs/models/Columns.d.ts.map +1 -1
- package/dist/cjs/models/Filter.d.ts +20 -13
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +161 -87
- package/dist/cjs/models/Report.d.ts +12 -1
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/models/Schema.d.ts +12 -1
- package/dist/cjs/models/Schema.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +22 -22
- package/dist/cjs/utils/astProcessing.d.ts +2 -2
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +25 -6
- package/dist/cjs/utils/axisFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/axisFormatter.js +25 -0
- package/dist/cjs/utils/color.d.ts +159 -0
- package/dist/cjs/utils/color.d.ts.map +1 -1
- package/dist/cjs/utils/color.js +14 -5
- package/dist/cjs/utils/columnProcessing.js +3 -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 +14 -3
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +79 -16
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +3 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +9 -9
- package/dist/cjs/utils/getDomain.d.ts +4 -1
- package/dist/cjs/utils/getDomain.d.ts.map +1 -1
- package/dist/cjs/utils/getDomain.js +11 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +9 -6
- package/dist/cjs/utils/queryConstructor.d.ts +1 -1
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +83 -49
- package/dist/cjs/utils/report.d.ts +23 -5
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +36 -14
- package/dist/cjs/utils/schema.d.ts +28 -3
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +79 -43
- package/dist/cjs/utils/tableProcessing.d.ts +12 -3
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +36 -8
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +0 -1
- package/dist/cjs/utils/valueFormatter.d.ts +1 -0
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +55 -1
- package/dist/esm/Chart.d.ts +5 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +52 -29
- package/dist/esm/ChartBuilder.d.ts +30 -3
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +487 -187
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +11 -1
- package/dist/esm/Context.d.ts +16 -4
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +97 -48
- package/dist/esm/Dashboard.d.ts +6 -3
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +70 -29
- package/dist/esm/QuillProvider.d.ts +4 -8
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.d.ts +2 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +192 -50
- package/dist/esm/SQLEditor.d.ts +8 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +95 -11
- package/dist/esm/Table.d.ts +21 -1
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +34 -196
- package/dist/esm/components/Chart/BarChart.d.ts +5 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +5 -4
- package/dist/esm/components/Chart/CustomReferenceLine.d.ts +2 -0
- package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -0
- package/dist/esm/components/Chart/CustomReferenceLine.js +23 -0
- package/dist/esm/components/Chart/GaugeChart.d.ts +11 -0
- package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -0
- package/dist/esm/components/Chart/GaugeChart.js +195 -0
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +14 -11
- package/dist/esm/components/Chart/LineChart.d.ts +5 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +5 -4
- package/dist/esm/components/Chart/MapChart.d.ts +36 -0
- package/dist/esm/components/Chart/MapChart.d.ts.map +1 -0
- package/dist/esm/components/Chart/MapChart.js +541 -0
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +114 -42
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +57 -54
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +5 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +5 -4
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +12 -11
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.js +2 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +14 -14
- 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 +4 -4
- package/dist/esm/components/ReportBuilder/convert.d.ts +2 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +26 -7
- package/dist/esm/components/ReportBuilder/util.d.ts +1 -1
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +15 -2
- package/dist/esm/components/UiComponents.d.ts +5 -2
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +32 -6
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +11 -9
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +19 -5
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +16 -3
- package/dist/esm/hooks/useReport.d.ts.map +1 -1
- package/dist/esm/hooks/useReport.js +1 -7
- package/dist/esm/hooks/useVirtualTables.d.ts +6 -2
- package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/esm/hooks/useVirtualTables.js +6 -3
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +7 -8
- package/dist/esm/models/Columns.d.ts +1 -0
- package/dist/esm/models/Columns.d.ts.map +1 -1
- package/dist/esm/models/Filter.d.ts +20 -13
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +160 -86
- package/dist/esm/models/Report.d.ts +12 -1
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/models/Schema.d.ts +12 -1
- package/dist/esm/models/Schema.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +23 -23
- package/dist/esm/utils/astProcessing.d.ts +2 -2
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +25 -6
- package/dist/esm/utils/axisFormatter.d.ts.map +1 -1
- package/dist/esm/utils/axisFormatter.js +25 -0
- package/dist/esm/utils/color.d.ts +159 -0
- package/dist/esm/utils/color.d.ts.map +1 -1
- package/dist/esm/utils/color.js +8 -2
- package/dist/esm/utils/columnProcessing.js +3 -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 +14 -3
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +80 -17
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +3 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +10 -10
- package/dist/esm/utils/getDomain.d.ts +4 -1
- package/dist/esm/utils/getDomain.d.ts.map +1 -1
- package/dist/esm/utils/getDomain.js +11 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +9 -6
- package/dist/esm/utils/queryConstructor.d.ts +1 -1
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +83 -49
- package/dist/esm/utils/report.d.ts +23 -5
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +38 -16
- package/dist/esm/utils/schema.d.ts +28 -3
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +78 -43
- package/dist/esm/utils/tableProcessing.d.ts +12 -3
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +36 -8
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +0 -1
- package/dist/esm/utils/valueFormatter.d.ts +1 -0
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +53 -0
- package/package.json +10 -3
package/dist/cjs/ChartBuilder.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.dateFormatOptions = exports.numberFormatOptions = void 0;
|
|
7
7
|
exports.createInitialFormData = createInitialFormData;
|
|
8
|
+
exports.createReportFromForm = createReportFromForm;
|
|
8
9
|
exports.ChartBuilderWithModal = ChartBuilderWithModal;
|
|
9
10
|
exports.default = ChartBuilder;
|
|
10
11
|
exports.DashboardFilterModal = DashboardFilterModal;
|
|
@@ -35,7 +36,17 @@ const dataFetcher_1 = require("./utils/dataFetcher");
|
|
|
35
36
|
const QuillMultiSelectSectionList_1 = require("./components/QuillMultiSelectSectionList");
|
|
36
37
|
const constants_1 = require("./utils/constants");
|
|
37
38
|
const pivotConstructor_1 = require("./utils/pivotConstructor");
|
|
38
|
-
const CHART_TYPES = [
|
|
39
|
+
const CHART_TYPES = [
|
|
40
|
+
'column',
|
|
41
|
+
'line',
|
|
42
|
+
'table',
|
|
43
|
+
'metric',
|
|
44
|
+
'gauge',
|
|
45
|
+
'bar',
|
|
46
|
+
'pie',
|
|
47
|
+
'US map',
|
|
48
|
+
'World map',
|
|
49
|
+
];
|
|
39
50
|
const CHART_TO_LABELS = {
|
|
40
51
|
column: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
|
|
41
52
|
line: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
|
|
@@ -43,8 +54,19 @@ const CHART_TO_LABELS = {
|
|
|
43
54
|
metric: { xAxisLabel: 'Value' },
|
|
44
55
|
bar: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
|
|
45
56
|
pie: { xAxisLabel: 'Category', yAxisLabel: 'Count' },
|
|
57
|
+
'US map': { xAxisLabel: 'State', yAxisLabel: 'Value' },
|
|
58
|
+
'World map': { xAxisLabel: 'Country', yAxisLabel: 'Value' },
|
|
59
|
+
gauge: { xAxisLabel: 'Value' },
|
|
46
60
|
};
|
|
47
|
-
function getPivotMetricOptions(pivot) {
|
|
61
|
+
function getPivotMetricOptions(pivot, selectedPivotTable, chartType) {
|
|
62
|
+
if (['metric', 'gauge'].includes(chartType) && selectedPivotTable) {
|
|
63
|
+
return selectedPivotTable.columns.map((elem) => ({
|
|
64
|
+
label: elem.field === pivot?.rowField
|
|
65
|
+
? `Pivot Row (${elem.field})`
|
|
66
|
+
: elem.field,
|
|
67
|
+
value: elem.field,
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
48
70
|
if (!pivot.rowField) {
|
|
49
71
|
const valueField = (0, pivotConstructor_1.disambiguatedValueField)(pivot);
|
|
50
72
|
return [
|
|
@@ -83,17 +105,26 @@ function createInitialFormData(columns) {
|
|
|
83
105
|
chartType: firstNumberColumn ? 'line' : 'table',
|
|
84
106
|
pivot: null,
|
|
85
107
|
template: true,
|
|
108
|
+
referenceLines: [],
|
|
86
109
|
};
|
|
87
110
|
return formEmptyState;
|
|
88
111
|
}
|
|
89
112
|
function getChartTypeOptions(formData, dashboard) {
|
|
90
113
|
let viableCharts = CHART_TYPES;
|
|
91
114
|
if (dashboard && dashboard.dateFilter && dashboard.dateFilter.comparison) {
|
|
92
|
-
viableCharts = viableCharts.filter((chart) => ![
|
|
115
|
+
viableCharts = viableCharts.filter((chart) => ![
|
|
116
|
+
'table',
|
|
117
|
+
'metric',
|
|
118
|
+
'gauge',
|
|
119
|
+
'bar',
|
|
120
|
+
'pie',
|
|
121
|
+
'US map',
|
|
122
|
+
'World map',
|
|
123
|
+
].includes(chart));
|
|
93
124
|
}
|
|
94
125
|
if (formData.pivot && !formData.pivot.rowField) {
|
|
95
126
|
return viableCharts
|
|
96
|
-
.filter((elem) =>
|
|
127
|
+
.filter((elem) => ['table', 'metric', 'gauge'].includes(elem))
|
|
97
128
|
.map((elem) => ({
|
|
98
129
|
label: elem,
|
|
99
130
|
value: elem,
|
|
@@ -101,14 +132,16 @@ function getChartTypeOptions(formData, dashboard) {
|
|
|
101
132
|
}
|
|
102
133
|
else {
|
|
103
134
|
return viableCharts
|
|
104
|
-
.filter((elem) => !(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
135
|
+
.filter((elem) => !(formData.pivot &&
|
|
136
|
+
formData.pivot.columnField &&
|
|
137
|
+
(elem === 'bar' ||
|
|
138
|
+
elem === 'pie' ||
|
|
139
|
+
elem === 'US map' ||
|
|
140
|
+
elem === 'World map')))
|
|
108
141
|
.map((elem) => ({ label: elem, value: elem }));
|
|
109
142
|
}
|
|
110
143
|
}
|
|
111
|
-
function createReportFromForm(formData, report, selectedPivotTable, rows = [], filtersApplied = []) {
|
|
144
|
+
function createReportFromForm(formData, report, selectedPivotTable, rows = [], filtersApplied = [], referenceLineQueryResults) {
|
|
112
145
|
const newReport = (0, report_1.convertInternalReportToReport)((0, merge_1.mergeComparisonRange)({
|
|
113
146
|
...formData,
|
|
114
147
|
dashboardName: formData.dashboardName || '',
|
|
@@ -128,6 +161,18 @@ function createReportFromForm(formData, report, selectedPivotTable, rows = [], f
|
|
|
128
161
|
pivotColumns: selectedPivotTable?.columns ?? undefined,
|
|
129
162
|
pivotRows: selectedPivotTable?.rows ?? undefined,
|
|
130
163
|
columnInternal: report?.columnInternal ?? [],
|
|
164
|
+
referenceLines: formData.referenceLines?.map((elem) => ({
|
|
165
|
+
label: elem.label,
|
|
166
|
+
query: elem.label === constants_1.REFERENCE_LINE
|
|
167
|
+
? [Number(elem.y1) || 0, Number(elem.y2) || 0]
|
|
168
|
+
: elem.label,
|
|
169
|
+
})) || [],
|
|
170
|
+
referenceLineYValues: formData.referenceLines?.map((elem, index) => ({
|
|
171
|
+
label: elem.label,
|
|
172
|
+
query: elem.label === constants_1.REFERENCE_LINE
|
|
173
|
+
? [Number(elem.y1) || 0, Number(elem.y2) || 0]
|
|
174
|
+
: referenceLineQueryResults?.[index],
|
|
175
|
+
})) || [],
|
|
131
176
|
}), filtersApplied);
|
|
132
177
|
return newReport;
|
|
133
178
|
}
|
|
@@ -163,7 +208,7 @@ const DATE_OPTIONS = [
|
|
|
163
208
|
{ value: 'MMM_dd_hh:mm_ap_pm', label: 'day and time' },
|
|
164
209
|
{ value: 'hh_ap_pm', label: 'hour' },
|
|
165
210
|
];
|
|
166
|
-
const
|
|
211
|
+
const ALL_FORMAT_OPTIONS = [
|
|
167
212
|
...NUMBER_OPTIONS,
|
|
168
213
|
...DATE_OPTIONS,
|
|
169
214
|
{ value: 'string', label: 'string' },
|
|
@@ -246,9 +291,9 @@ function ChartBuilderWithModal(props) {
|
|
|
246
291
|
*/
|
|
247
292
|
function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent,
|
|
248
293
|
// MultiSelectComponent = QuillMultiSelectComponentWithCombo,
|
|
249
|
-
ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, LabelComponent = UiComponents_1.MemoizedLabel, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextComponent = UiComponents_1.MemoizedText, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, TableComponent = UiComponents_1.QuillTableComponent, ModalComponent = UiComponents_1.MemoizedModal, LoadingComponent = UiComponents_1.QuillLoadingComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, FormContainer = UiComponents_1.QuillChartBuilderFormContainer, ErrorComponent = ChartError_1.QuillChartErrorWithAction, onClickChartError, isOpen, isHorizontalView = true, setIsOpen, dateRange, isAdmin = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, onDiscardChanges, reportId, tempReport, recommendedPivots: rp = [], createdPivots: cp = [], dateColumn, buttonLabel, organizationName, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, showTableFormatOptions, initialUniqueValues, initialUniqueValuesIsLoading, pivotRecommendationsEnabled = true, filtersEnabled, onFiltersEnabledChanged,
|
|
294
|
+
ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, LabelComponent = UiComponents_1.MemoizedLabel, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextComponent = UiComponents_1.MemoizedText, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, TableComponent = UiComponents_1.QuillTableComponent, ModalComponent = UiComponents_1.MemoizedModal, LoadingComponent = UiComponents_1.QuillLoadingComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, FormContainer = UiComponents_1.QuillChartBuilderFormContainer, ErrorComponent = ChartError_1.QuillChartErrorWithAction, CheckboxComponent = UiComponents_1.QuillChartBuilderCheckboxComponent, onClickChartError, isOpen, isHorizontalView = true, setIsOpen, dateRange, isAdmin = false, showDashboardDropdown = true, hidePivotForm = false, onAddToDashboardComplete, onDelete, onDiscardChanges, reportId, tempReport, recommendedPivots: rp = [], createdPivots: cp = [], dateColumn, buttonLabel, organizationName, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, showTableFormatOptions, initialUniqueValues, initialUniqueValuesIsLoading, pivotRecommendationsEnabled = true, hideTableView = false, hideChartView = false, hideChartType = false, hideDiscardChanges = false, filtersEnabled, onFiltersEnabledChanged,
|
|
250
295
|
// isLoading,
|
|
251
|
-
onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
296
|
+
destinationDashboard, onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
252
297
|
const [client] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
253
298
|
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
254
299
|
const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
|
|
@@ -272,14 +317,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
272
317
|
const inputRef = (0, react_1.useRef)(null);
|
|
273
318
|
const selectRef = (0, react_1.useRef)(null);
|
|
274
319
|
const processColumns = (columns) => {
|
|
275
|
-
if (schemaData.
|
|
320
|
+
if (schemaData.schemaWithCustomFields) {
|
|
276
321
|
const newProcessedColumns = columns?.map((col) => {
|
|
277
322
|
if (col.jsType) {
|
|
278
323
|
return col;
|
|
279
324
|
}
|
|
280
325
|
const newCol = { ...col };
|
|
281
326
|
let foundColumn;
|
|
282
|
-
schemaData.
|
|
327
|
+
schemaData.schemaWithCustomFields.forEach((table) => {
|
|
283
328
|
if (table.columns) {
|
|
284
329
|
const matchedColumn = table.columns.find((c) => c.field === col.field);
|
|
285
330
|
if (matchedColumn) {
|
|
@@ -364,6 +409,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
364
409
|
const [isEdittingPivot, setIsEdittingPivot] = (0, react_1.useState)(false);
|
|
365
410
|
const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
|
|
366
411
|
const [tableName, setTableName] = (0, react_1.useState)(undefined);
|
|
412
|
+
const [includeCustomFields, setIncludeCustomFields] = (0, react_1.useState)(report
|
|
413
|
+
? !!report.includeCustomFields
|
|
414
|
+
: !!client?.featureFlags?.customFieldsEnabled);
|
|
367
415
|
const selectedTable = schemaData.schema?.find((t) => t.displayName === tableName);
|
|
368
416
|
const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
|
|
369
417
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -378,7 +426,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
378
426
|
}
|
|
379
427
|
: undefined;
|
|
380
428
|
const columns = report?.columnInternal ?? [];
|
|
381
|
-
const
|
|
429
|
+
const destinationDashboardName = destinationDashboard || report?.dashboardName;
|
|
382
430
|
const query = report?.queryString;
|
|
383
431
|
const [loadingFormData, setLoadingFormData] = (0, react_1.useState)(false);
|
|
384
432
|
const [triggeredEditChart, setTriggeredEditChart] = (0, react_1.useState)(false);
|
|
@@ -386,11 +434,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
386
434
|
const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)(rp);
|
|
387
435
|
const [pivotRowField, setPivotRowField] = (0, react_1.useState)(report?.pivot?.rowField);
|
|
388
436
|
const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(report?.pivot?.columnField);
|
|
389
|
-
const [pivotAggregations, setPivotAggregations] = (0, react_1.useState)(report?.pivot?.aggregations ?? [
|
|
437
|
+
const [pivotAggregations, setPivotAggregations] = (0, react_1.useState)(report?.pivot?.aggregations ?? [
|
|
438
|
+
{
|
|
390
439
|
valueField: report?.pivot?.valueField,
|
|
391
440
|
valueField2: report?.pivot?.valueField2,
|
|
392
|
-
aggregationType: report?.pivot?.aggregationType
|
|
393
|
-
}
|
|
441
|
+
aggregationType: report?.pivot?.aggregationType,
|
|
442
|
+
},
|
|
443
|
+
]);
|
|
394
444
|
const baseProcessing = {
|
|
395
445
|
page: report?.pagination ?? {
|
|
396
446
|
page: 0,
|
|
@@ -405,6 +455,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
405
455
|
const [allTables, setAllTables] = (0, react_1.useState)([]);
|
|
406
456
|
const [customFieldTableRef, setCustomFieldTableRef] = (0, react_1.useState)(false);
|
|
407
457
|
const [referencedColumns, setReferencedColumns] = (0, react_1.useState)({});
|
|
458
|
+
const [referencedColumnsWithoutStar, setReferencedColumnsWithoutStar] = (0, react_1.useState)({});
|
|
408
459
|
const [filterMap, setFilterMap] = (0, react_1.useState)(report?.filterMap ?? {});
|
|
409
460
|
const canonicalFilterMap = (0, react_1.useMemo)(() => {
|
|
410
461
|
return Object.fromEntries(Object.entries(filterMap).filter((f) => f[1].table !== undefined && f[1].field !== undefined));
|
|
@@ -417,7 +468,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
417
468
|
}
|
|
418
469
|
acc[filter.label] =
|
|
419
470
|
!!allTables.find((table) => table === (filterMap[filter.label] ?? filter).table) &&
|
|
420
|
-
!!schemaData.
|
|
471
|
+
!!schemaData.schemaWithCustomFields
|
|
421
472
|
?.find((table) => {
|
|
422
473
|
return (table.displayName === (filterMap[filter.label] ?? filter).table);
|
|
423
474
|
})
|
|
@@ -461,6 +512,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
461
512
|
pivot: null,
|
|
462
513
|
dateField: defaultDateField,
|
|
463
514
|
template: true,
|
|
515
|
+
referenceLines: [],
|
|
464
516
|
};
|
|
465
517
|
const updateDashboardFilters = async (dashboardName) => {
|
|
466
518
|
if (dashboardConfig && dashboardConfig[dashboardName]) {
|
|
@@ -501,8 +553,8 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
501
553
|
const pivotFormData = (pivot) => {
|
|
502
554
|
const yAxisField = pivot.columnField ?? (0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '';
|
|
503
555
|
const yAxisLabel = report?.yAxisFields && report?.yAxisFields?.length > 0
|
|
504
|
-
? report.yAxisFields[0]?.label ?? ''
|
|
505
|
-
: (0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '';
|
|
556
|
+
? (report.yAxisFields[0]?.label ?? '')
|
|
557
|
+
: ((0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '');
|
|
506
558
|
// date labels for pivots should be treated like strings since they are
|
|
507
559
|
const yAxisIsDate = pivot.columnField
|
|
508
560
|
? (0, PivotModal_1.isDateField)(pivot.columnFieldType ?? '')
|
|
@@ -511,12 +563,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
511
563
|
const result = {
|
|
512
564
|
pivot,
|
|
513
565
|
chartType: chartType,
|
|
514
|
-
xAxisField: pivot.rowField
|
|
515
|
-
|
|
566
|
+
xAxisField: pivot.rowField
|
|
567
|
+
? pivot.rowField
|
|
568
|
+
: (0, pivotConstructor_1.disambiguatedValueField)(pivot),
|
|
569
|
+
xAxisFormat: (0, columnProcessing_1.isDateType)(pivot.rowFieldType ?? '')
|
|
516
570
|
? 'string'
|
|
517
|
-
:
|
|
518
|
-
|
|
519
|
-
'
|
|
571
|
+
: (0, columnProcessing_1.isNumberType)(pivot.rowFieldType ?? '')
|
|
572
|
+
? 'whole_number'
|
|
573
|
+
: 'string',
|
|
520
574
|
xAxisLabel: report?.xAxisLabel || pivot.rowField,
|
|
521
575
|
yAxisFields: [
|
|
522
576
|
{
|
|
@@ -525,43 +579,71 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
525
579
|
format: yAxisIsDate
|
|
526
580
|
? 'string'
|
|
527
581
|
: report?.yAxisFields && report?.yAxisFields?.length > 0
|
|
528
|
-
? report?.yAxisFields[0]?.format ?? 'whole_number'
|
|
529
|
-
: report?.columns.find((col) => col.field === (0, pivotConstructor_1.disambiguatedValueField)(pivot))
|
|
530
|
-
?.format ?? 'whole_number',
|
|
582
|
+
? (report?.yAxisFields[0]?.format ?? 'whole_number')
|
|
583
|
+
: (report?.columns.find((col) => col.field === (0, pivotConstructor_1.disambiguatedValueField)(pivot))?.format ?? 'whole_number'),
|
|
531
584
|
},
|
|
532
585
|
],
|
|
533
586
|
};
|
|
534
587
|
return result;
|
|
535
588
|
};
|
|
536
|
-
const getReferencedTables = async (client, sqlQuery, dbTables) => {
|
|
589
|
+
const getReferencedTables = async (client, sqlQuery, dbTables, skipStar) => {
|
|
537
590
|
const resp = await getDataFromCloud(client, `astify`, {
|
|
538
591
|
query: sqlQuery,
|
|
539
592
|
publicKey: client.publicKey,
|
|
540
593
|
useNewNodeSql: true,
|
|
541
594
|
});
|
|
542
595
|
if (resp.success === false) {
|
|
543
|
-
return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)({}), dbTables);
|
|
596
|
+
return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)({}), dbTables, skipStar);
|
|
544
597
|
}
|
|
545
|
-
return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)(resp.ast), dbTables);
|
|
598
|
+
return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)(resp.ast), dbTables, skipStar);
|
|
546
599
|
};
|
|
547
600
|
const formFormDataFromReport = (report) => {
|
|
548
|
-
let pivotData = {};
|
|
601
|
+
// let pivotData = {};
|
|
549
602
|
let dateField = defaultDateField;
|
|
550
|
-
if (report?.pivot) {
|
|
551
|
-
|
|
552
|
-
}
|
|
603
|
+
// if (report?.pivot) {
|
|
604
|
+
// pivotData = pivotFormData(report.pivot);
|
|
605
|
+
// }
|
|
553
606
|
if (report) {
|
|
554
607
|
dateField = report.dateField || defaultDateField;
|
|
555
608
|
}
|
|
556
609
|
return {
|
|
557
610
|
...formEmptyState,
|
|
558
611
|
...report,
|
|
559
|
-
...pivotData,
|
|
560
|
-
...(report?.dashboardName && { dashboardName: report?.dashboardName }),
|
|
612
|
+
// ...pivotData,
|
|
561
613
|
dateField: dateField,
|
|
614
|
+
referenceLines: report?.referenceLines
|
|
615
|
+
? report.referenceLines?.map(({ label, query }) => {
|
|
616
|
+
if (typeof query === 'string') {
|
|
617
|
+
return { label, y1: undefined, y2: undefined };
|
|
618
|
+
}
|
|
619
|
+
return {
|
|
620
|
+
label,
|
|
621
|
+
y1: query[0],
|
|
622
|
+
y2: query[1],
|
|
623
|
+
};
|
|
624
|
+
})
|
|
625
|
+
: [],
|
|
562
626
|
};
|
|
563
627
|
};
|
|
564
628
|
const [formData, setFormData] = (0, react_1.useState)(formFormDataFromReport(report));
|
|
629
|
+
const reportCustomFields = (0, react_1.useMemo)(() => {
|
|
630
|
+
return (report?.columnsWithCustomFields?.filter((col) => !report?.columns?.some((c) => col.field === c.field)) ?? []);
|
|
631
|
+
}, [report?.columnsWithCustomFields, report?.columns]);
|
|
632
|
+
const referenceLineQueryResults = (0, react_1.useMemo)(() => {
|
|
633
|
+
return formData?.referenceLines?.map((line) => {
|
|
634
|
+
if (line.label === constants_1.REFERENCE_LINE) {
|
|
635
|
+
return [Number(line.y1) || 0, Number(line.y2) || 0];
|
|
636
|
+
}
|
|
637
|
+
// line.label is a field
|
|
638
|
+
// Get the first and last row of the field
|
|
639
|
+
const field = formData.columns.find((col) => col.field === line.label);
|
|
640
|
+
if (!field) {
|
|
641
|
+
return [0, 0];
|
|
642
|
+
}
|
|
643
|
+
// return [Number(rows[0]?.[field.field]) || 0, Number(rows[rows.length - 1]?.[field.field]) || 0];
|
|
644
|
+
return (pivotData?.rows ? pivotData.rows : rows).map((row) => Number(row[field.field]) || 0);
|
|
645
|
+
});
|
|
646
|
+
}, [formData?.referenceLines]);
|
|
565
647
|
const currentDashboard = (0, react_1.useMemo)(() => {
|
|
566
648
|
return dashboardConfig[formData.dashboardName ?? report?.dashboardName ?? '']?.config;
|
|
567
649
|
}, [dashboardConfig, formData.dashboardName, report?.dashboardName]);
|
|
@@ -569,6 +651,19 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
569
651
|
return (currentDashboard?.tenantKeys?.map((tenantKey) => client?.allTenantTypes?.find((t) => t.tenantField === tenantKey)) ?? []);
|
|
570
652
|
}, [client?.allTenantTypes, currentDashboard?.tenantKeys]);
|
|
571
653
|
const dashboardOwner = currentDashboardTenants?.[0];
|
|
654
|
+
const currentTenantAsFormFlags = (0, react_1.useMemo)(() => {
|
|
655
|
+
if (!tenants || !tenants.length) {
|
|
656
|
+
return undefined;
|
|
657
|
+
}
|
|
658
|
+
const tenantField = typeof tenants[0] !== 'object'
|
|
659
|
+
? dashboardOwner?.name
|
|
660
|
+
: tenants[0]?.tenantField;
|
|
661
|
+
if (!tenantField) {
|
|
662
|
+
return undefined;
|
|
663
|
+
}
|
|
664
|
+
const tenantIds = typeof tenants[0] !== 'object' ? tenants : tenants[0]?.tenantIds;
|
|
665
|
+
return { [tenantField]: tenantIds };
|
|
666
|
+
}, [tenants, dashboardOwner]);
|
|
572
667
|
const invalidColumns = (0, react_1.useMemo)(() => {
|
|
573
668
|
if (!rows || !rows.length) {
|
|
574
669
|
return [];
|
|
@@ -583,6 +678,62 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
583
678
|
const data = formFormDataFromReport(report);
|
|
584
679
|
return getChartTypeOptions(data, dashboardConfig[data.dashboardName || '']);
|
|
585
680
|
})());
|
|
681
|
+
const reportContainsCustomFields = (0, react_1.useMemo)(() => {
|
|
682
|
+
// Check whether report query contains custom fields
|
|
683
|
+
const customFieldsMap = schemaData.customFields;
|
|
684
|
+
const reportQueryContainsCustomFields = allTables.some((table) => {
|
|
685
|
+
const tableColumns = referencedColumnsWithoutStar[table] ?? [];
|
|
686
|
+
const customFieldColumns = customFieldsMap?.[table] ?? [];
|
|
687
|
+
return tableColumns.some((column) => customFieldColumns.some((field) => field.field === column));
|
|
688
|
+
});
|
|
689
|
+
return reportQueryContainsCustomFields;
|
|
690
|
+
}, [allTables, referencedColumnsWithoutStar]);
|
|
691
|
+
const chartBuilderFormDataContainsCustomFields = (0, react_1.useMemo)(() => {
|
|
692
|
+
const customFields = allTables
|
|
693
|
+
.map((table) => schemaData.customFields?.[table] ?? [])
|
|
694
|
+
.flat();
|
|
695
|
+
const customFieldsMap = schemaData.customFields;
|
|
696
|
+
const pivotContainsCustomFields = customFields.some((field) => field.field === formData.pivot?.columnField ||
|
|
697
|
+
field.field === formData.pivot?.rowField ||
|
|
698
|
+
field.field === formData.pivot?.valueField);
|
|
699
|
+
const xAxisFieldContainsCustomFields = customFields.some((field) => field.field === formData.xAxisField);
|
|
700
|
+
const yAxisFieldsContainsCustomFields = formData.yAxisFields.some((yAxisField) => {
|
|
701
|
+
return customFields.some((field) => field.field === yAxisField.field);
|
|
702
|
+
});
|
|
703
|
+
const dateFieldContainsCustomFields = customFields.some((field) => field.field === formData.dateField?.field);
|
|
704
|
+
const canonicalFilterMapContainsCustomFields = Object.values(canonicalFilterMap).some((filter) => {
|
|
705
|
+
return customFieldsMap?.[filter.table || '']?.some((field) => field.field === filter.field);
|
|
706
|
+
});
|
|
707
|
+
return (pivotContainsCustomFields ||
|
|
708
|
+
xAxisFieldContainsCustomFields ||
|
|
709
|
+
yAxisFieldsContainsCustomFields ||
|
|
710
|
+
dateFieldContainsCustomFields ||
|
|
711
|
+
canonicalFilterMapContainsCustomFields);
|
|
712
|
+
}, [
|
|
713
|
+
allTables,
|
|
714
|
+
formData.pivot,
|
|
715
|
+
formData.xAxisField,
|
|
716
|
+
formData.yAxisFields,
|
|
717
|
+
formData.dateField,
|
|
718
|
+
canonicalFilterMap,
|
|
719
|
+
]);
|
|
720
|
+
const customFieldsInTabularColumns = (0, react_1.useMemo)(() => {
|
|
721
|
+
const customFields = allTables
|
|
722
|
+
.map((table) => schemaData.customFields?.[table] ?? [])
|
|
723
|
+
.flat();
|
|
724
|
+
return formData.columns.some((col) => {
|
|
725
|
+
return customFields.some((field) => field.field === col.field);
|
|
726
|
+
});
|
|
727
|
+
}, [allTables, formData.columns]);
|
|
728
|
+
const containsCustomFields = (0, react_1.useMemo)(() => {
|
|
729
|
+
return (reportContainsCustomFields ||
|
|
730
|
+
customFieldsInTabularColumns ||
|
|
731
|
+
chartBuilderFormDataContainsCustomFields);
|
|
732
|
+
}, [
|
|
733
|
+
reportContainsCustomFields,
|
|
734
|
+
customFieldsInTabularColumns,
|
|
735
|
+
chartBuilderFormDataContainsCustomFields,
|
|
736
|
+
]);
|
|
586
737
|
(0, react_1.useEffect)(() => {
|
|
587
738
|
if (!loadingFormData && triggeredEditChart) {
|
|
588
739
|
editChart();
|
|
@@ -608,24 +759,25 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
608
759
|
{ label: 'New - Dashboard', value: 'New - Dashboard' },
|
|
609
760
|
];
|
|
610
761
|
}
|
|
611
|
-
if (
|
|
762
|
+
if (destinationDashboardName) {
|
|
612
763
|
dashboardOptions = [
|
|
613
|
-
{ label:
|
|
764
|
+
{ label: destinationDashboardName, value: destinationDashboardName },
|
|
614
765
|
];
|
|
615
766
|
}
|
|
616
767
|
let dashboardName = report?.dashboardName ?? dashboardOptions[0]?.label ?? '';
|
|
617
|
-
if (
|
|
618
|
-
dashboardName =
|
|
768
|
+
if (destinationDashboardName) {
|
|
769
|
+
dashboardName = destinationDashboardName;
|
|
619
770
|
}
|
|
620
771
|
const curDashboard = await updateDashboardFilters(dashboardName);
|
|
621
772
|
setDashboardOptions(dashboardOptions);
|
|
622
773
|
curFormData.dashboardName = dashboardName;
|
|
623
|
-
const curSchemaData = schemaData.
|
|
774
|
+
const curSchemaData = schemaData.schemaWithCustomFields;
|
|
624
775
|
if (!query) {
|
|
625
776
|
setLoadingFormData(false);
|
|
626
777
|
return;
|
|
627
778
|
}
|
|
628
779
|
const result = await getReferencedTables(client, query, curSchemaData);
|
|
780
|
+
const referencedTablesWithoutStar = await getReferencedTables(client, query, curSchemaData, true);
|
|
629
781
|
setDateFieldOptions(result.dateFields);
|
|
630
782
|
if (result.dateFields[0] && result.dateFields[0].columns[0]) {
|
|
631
783
|
setDefaultDateField({
|
|
@@ -649,6 +801,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
649
801
|
acc[table.name] = table.columns.map((col) => col.field);
|
|
650
802
|
return acc;
|
|
651
803
|
}, {});
|
|
804
|
+
const referencedColumnsWithoutStar = referencedTablesWithoutStar.referencedTablesAndColumns.reduce((acc, table) => {
|
|
805
|
+
acc[table.name] = table.columns.map((col) => col.field);
|
|
806
|
+
return acc;
|
|
807
|
+
}, {});
|
|
808
|
+
setReferencedColumnsWithoutStar(referencedColumnsWithoutStar);
|
|
652
809
|
setReferencedColumns(referencedColumns);
|
|
653
810
|
setTableName(result.dateFields[0]?.name);
|
|
654
811
|
const dateField = {
|
|
@@ -706,12 +863,21 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
706
863
|
};
|
|
707
864
|
}, [selectedPivotTable, formData.pivot]);
|
|
708
865
|
const chartData = (0, react_1.useMemo)(() => {
|
|
709
|
-
const data = createReportFromForm(formData, report ? { ...report, rowCount } : tempReport, selectedPivotTable, rows, currentDashboardFilters);
|
|
866
|
+
const data = createReportFromForm(formData, report ? { ...report, rowCount } : tempReport, selectedPivotTable, rows, currentDashboardFilters, referenceLineQueryResults);
|
|
710
867
|
return {
|
|
711
868
|
...data,
|
|
712
869
|
filterMap: canonicalFilterMap,
|
|
713
870
|
};
|
|
714
871
|
}, [formData, selectedPivotTable, report, rows, rowCount]);
|
|
872
|
+
const xAxisFormatOptions = (0, react_1.useMemo)(() => {
|
|
873
|
+
return chartData?.chartType === 'gauge'
|
|
874
|
+
? [
|
|
875
|
+
{ value: 'whole_number', label: 'whole number' },
|
|
876
|
+
{ value: 'two_decimal_places', label: 'two decimal places' },
|
|
877
|
+
{ value: 'percent', label: 'percentage' },
|
|
878
|
+
]
|
|
879
|
+
: ALL_FORMAT_OPTIONS;
|
|
880
|
+
}, [chartData?.chartType]);
|
|
715
881
|
const fetchPivotData = async (pivot, tableInfo, uniqueValues, overrideFilters) => {
|
|
716
882
|
const dashboardFilters = filtersEnabled
|
|
717
883
|
? (overrideFilters ?? currentDashboardFilters)
|
|
@@ -739,7 +905,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
739
905
|
: undefined,
|
|
740
906
|
client,
|
|
741
907
|
uniqueValues,
|
|
742
|
-
dashboardName:
|
|
908
|
+
dashboardName: destinationDashboardName,
|
|
743
909
|
tenants,
|
|
744
910
|
additionalProcessing: baseProcessing,
|
|
745
911
|
});
|
|
@@ -760,11 +926,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
760
926
|
if (selectedPivotTable &&
|
|
761
927
|
selectedPivotTable.columns &&
|
|
762
928
|
formData.chartType === 'table') {
|
|
763
|
-
console.log('selectedPivotTable', selectedPivotTable);
|
|
764
929
|
const columns = selectedPivotTable.columns;
|
|
765
930
|
columns.forEach((col, index) => {
|
|
766
931
|
// ADD THE RIGHT FIELD TYPE FOR THE VALUE COLUMNS
|
|
767
|
-
if (
|
|
932
|
+
if (['min', 'max'].includes(formData.pivot?.aggregations?.[0]?.aggregationType ?? '') &&
|
|
768
933
|
index !== 0) {
|
|
769
934
|
col.format = 'two_decimal_places';
|
|
770
935
|
}
|
|
@@ -785,12 +950,17 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
785
950
|
if (!rows)
|
|
786
951
|
return [];
|
|
787
952
|
return rows.map((row) => {
|
|
788
|
-
|
|
953
|
+
const columns = formData.includeCustomFields && !containsCustomFields
|
|
954
|
+
? formData.columns.concat(reportCustomFields)
|
|
955
|
+
: formData.columns;
|
|
956
|
+
return columns.reduce((formattedRow, column) => {
|
|
789
957
|
// Apply the format function to each field in the row
|
|
790
|
-
const formattedValue =
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
958
|
+
const formattedValue = column.inferFormat
|
|
959
|
+
? (0, valueFormatter_1.quillAutoFormat)(row[column.field])
|
|
960
|
+
: (0, valueFormatter_1.quillFormat)({
|
|
961
|
+
value: row[column.field],
|
|
962
|
+
format: column.format,
|
|
963
|
+
});
|
|
794
964
|
formattedRow[column.field] = formattedValue;
|
|
795
965
|
return formattedRow;
|
|
796
966
|
}, {});
|
|
@@ -821,7 +991,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
821
991
|
rowsOnly: false,
|
|
822
992
|
rowCountOnly: true,
|
|
823
993
|
filterMap: canonicalFilterMap,
|
|
824
|
-
dashboardName:
|
|
994
|
+
dashboardName: destinationDashboardName,
|
|
825
995
|
});
|
|
826
996
|
if (tableInfo.rowCount !== undefined) {
|
|
827
997
|
setRowCount(tableInfo.rowCount);
|
|
@@ -873,7 +1043,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
873
1043
|
rowsOnly: true,
|
|
874
1044
|
rowCountOnly: false,
|
|
875
1045
|
filterMap: canonicalFilterMap,
|
|
876
|
-
dashboardName:
|
|
1046
|
+
dashboardName: destinationDashboardName,
|
|
877
1047
|
});
|
|
878
1048
|
setCurrentProcessing(processing);
|
|
879
1049
|
setRows(tableInfo.rows);
|
|
@@ -882,7 +1052,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
882
1052
|
fetchRowCount(processing, overrideFilters);
|
|
883
1053
|
if (formData.pivot) {
|
|
884
1054
|
try {
|
|
885
|
-
const uniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(tableInfo.columns.filter((column) => column.field === formData.pivot?.columnField), report.queryString, tableInfo.rows, client, tenants, schemaData.customFields ??
|
|
1055
|
+
const uniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(tableInfo.columns.filter((column) => column.field === formData.pivot?.columnField), report.queryString, tableInfo.rows, client, tenants, schemaData.customFields ?? {}, overrideFilters, destinationDashboardName);
|
|
886
1056
|
fetchPivotData(formData.pivot, tableInfo, uniqueValues, overrideFilters);
|
|
887
1057
|
}
|
|
888
1058
|
catch (e) {
|
|
@@ -949,7 +1119,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
949
1119
|
rowsOnly: false,
|
|
950
1120
|
rowCountOnly: false,
|
|
951
1121
|
filterMap: canonicalFilterMap,
|
|
952
|
-
dashboardName:
|
|
1122
|
+
dashboardName: destinationDashboardName,
|
|
953
1123
|
pivot: isPivotTable ? report.pivot : undefined,
|
|
954
1124
|
getPivotRowCount: false,
|
|
955
1125
|
});
|
|
@@ -997,8 +1167,20 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
997
1167
|
else if (index !== undefined) {
|
|
998
1168
|
// For dynamic array fields
|
|
999
1169
|
const [field, subfield] = fieldName.split('.');
|
|
1170
|
+
let newLabel = undefined;
|
|
1171
|
+
if (field === 'columns' && subfield === 'field') {
|
|
1172
|
+
if (!formData['columns'][index]?.label) {
|
|
1173
|
+
newLabel = (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(value);
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1000
1176
|
// @ts-ignore
|
|
1001
|
-
const updatedArray = formData[field].map((item, i) => i === index
|
|
1177
|
+
const updatedArray = formData[field].map((item, i) => i === index
|
|
1178
|
+
? {
|
|
1179
|
+
...item,
|
|
1180
|
+
label: newLabel ? newLabel : item.label,
|
|
1181
|
+
[subfield]: value,
|
|
1182
|
+
}
|
|
1183
|
+
: item);
|
|
1002
1184
|
updatedForm = { ...formData, [field]: updatedArray };
|
|
1003
1185
|
setFormData(updatedForm);
|
|
1004
1186
|
setChartTypes(getChartTypeOptions(updatedForm, dashboardConfig[updatedForm.dashboardName ?? '']));
|
|
@@ -1035,7 +1217,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1035
1217
|
else if (field === 'dateField' &&
|
|
1036
1218
|
subfield === 'table' &&
|
|
1037
1219
|
!formData.dateField?.field) {
|
|
1038
|
-
const field = schemaData.
|
|
1220
|
+
const field = schemaData.schemaWithCustomFields?.find((elem) => elem.name === value)?.columns?.[0]?.field;
|
|
1039
1221
|
updatedForm.dateField = {
|
|
1040
1222
|
// @ts-ignore
|
|
1041
1223
|
...updatedForm[field],
|
|
@@ -1053,6 +1235,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1053
1235
|
// For simple fields
|
|
1054
1236
|
updatedForm = { ...updatedForm, [fieldName]: value };
|
|
1055
1237
|
}
|
|
1238
|
+
if (fieldName === 'chartType') {
|
|
1239
|
+
if (value === 'metric') {
|
|
1240
|
+
updatedForm.xAxisFormat = 'whole_number';
|
|
1241
|
+
}
|
|
1242
|
+
else if (value === 'gauge') {
|
|
1243
|
+
updatedForm.xAxisFormat = 'percent';
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1056
1246
|
let dashboardName = updatedForm.dashboardName;
|
|
1057
1247
|
if (fieldName === 'dashboardName') {
|
|
1058
1248
|
dashboardName = value;
|
|
@@ -1104,6 +1294,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1104
1294
|
...formData,
|
|
1105
1295
|
dashboardName: formData.dashboardName,
|
|
1106
1296
|
pivot: null,
|
|
1297
|
+
chartType: formEmptyState.chartType,
|
|
1298
|
+
xAxisField: formEmptyState.xAxisField,
|
|
1299
|
+
xAxisFormat: formEmptyState.xAxisFormat,
|
|
1300
|
+
xAxisLabel: formEmptyState.xAxisLabel,
|
|
1301
|
+
yAxisFields: formEmptyState.yAxisFields,
|
|
1107
1302
|
});
|
|
1108
1303
|
// maybe validate
|
|
1109
1304
|
setSelectedPivotTable(undefined);
|
|
@@ -1113,7 +1308,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1113
1308
|
if (fieldName === 'columns') {
|
|
1114
1309
|
setFormData({
|
|
1115
1310
|
...formData,
|
|
1116
|
-
columns: [
|
|
1311
|
+
columns: [
|
|
1312
|
+
...formData.columns,
|
|
1313
|
+
{ label: '', field: '', format: 'string' },
|
|
1314
|
+
],
|
|
1117
1315
|
});
|
|
1118
1316
|
}
|
|
1119
1317
|
else if (fieldName === 'yAxisFields') {
|
|
@@ -1121,7 +1319,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1121
1319
|
...formData,
|
|
1122
1320
|
yAxisFields: [
|
|
1123
1321
|
...formData.yAxisFields,
|
|
1124
|
-
{ label: '', field: '', format: '
|
|
1322
|
+
{ label: '', field: '', format: 'string' },
|
|
1125
1323
|
],
|
|
1126
1324
|
});
|
|
1127
1325
|
}
|
|
@@ -1139,6 +1337,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1139
1337
|
},
|
|
1140
1338
|
});
|
|
1141
1339
|
}
|
|
1340
|
+
else if (fieldName === 'referenceLines') {
|
|
1341
|
+
setFormData({
|
|
1342
|
+
...formData,
|
|
1343
|
+
referenceLines: [
|
|
1344
|
+
...formData.referenceLines,
|
|
1345
|
+
{ label: '', y1: undefined, y2: undefined },
|
|
1346
|
+
],
|
|
1347
|
+
});
|
|
1348
|
+
}
|
|
1142
1349
|
};
|
|
1143
1350
|
const handleRemoveField = (fieldName, index) => {
|
|
1144
1351
|
if (fieldName === 'pivot') {
|
|
@@ -1186,31 +1393,40 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1186
1393
|
...(formData.dateField?.table
|
|
1187
1394
|
? {}
|
|
1188
1395
|
: { dateField: { ...defaultDateField } }),
|
|
1189
|
-
|
|
1190
|
-
? {}
|
|
1191
|
-
: { dashboardName: report?.dashboardName }),
|
|
1396
|
+
dashboardName: destinationDashboardName,
|
|
1192
1397
|
query: report?.queryString ?? '',
|
|
1193
1398
|
pivot: formData.pivot,
|
|
1194
1399
|
referencedTables: allTables,
|
|
1195
1400
|
referencedColumns,
|
|
1401
|
+
includeCustomFields: includeCustomFields || containsCustomFields,
|
|
1196
1402
|
template: tenants
|
|
1197
1403
|
? undefined
|
|
1198
1404
|
: report && !isAdmin && formData.template
|
|
1199
1405
|
? false
|
|
1200
1406
|
: formData.template,
|
|
1201
|
-
reportFlags:
|
|
1202
|
-
?
|
|
1203
|
-
|
|
1204
|
-
.
|
|
1205
|
-
|
|
1206
|
-
key,
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1407
|
+
reportFlags: containsCustomFields
|
|
1408
|
+
? currentTenantAsFormFlags
|
|
1409
|
+
: formFlags
|
|
1410
|
+
? Object.fromEntries(Object.entries(formFlags)
|
|
1411
|
+
.filter(([, value]) => value.length > 0)
|
|
1412
|
+
.map(([key, value]) => {
|
|
1413
|
+
return [
|
|
1414
|
+
key,
|
|
1415
|
+
Object.keys(allTenantMap).length > 1 &&
|
|
1416
|
+
allTenantMap[key]?.length === value.length
|
|
1417
|
+
? constants_1.ALL_TENANTS
|
|
1418
|
+
: value,
|
|
1419
|
+
];
|
|
1420
|
+
}))
|
|
1421
|
+
: undefined,
|
|
1422
|
+
referenceLines: formData.referenceLines.map((line) => {
|
|
1423
|
+
return {
|
|
1424
|
+
label: line.label,
|
|
1425
|
+
query: line.label === constants_1.REFERENCE_LINE
|
|
1426
|
+
? [Number(line.y1 ?? 0) || 0, Number(line.y2 ?? 0) || 0]
|
|
1427
|
+
: '',
|
|
1428
|
+
};
|
|
1429
|
+
}),
|
|
1214
1430
|
};
|
|
1215
1431
|
const resp = await (0, report_1.saveReport)({
|
|
1216
1432
|
report: { ...newReport, rows: undefined, pivotRows: undefined }, // stop including rows in request
|
|
@@ -1270,15 +1486,17 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1270
1486
|
gap: '20px',
|
|
1271
1487
|
flexDirection: isHorizontalView ? 'row' : 'column',
|
|
1272
1488
|
boxSizing: 'border-box',
|
|
1273
|
-
}, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1489
|
+
}, children: [hideChartView ? null : ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1274
1490
|
display: 'flex',
|
|
1275
1491
|
flexDirection: 'column',
|
|
1276
1492
|
gap: isOpen ? 16 : 20,
|
|
1277
1493
|
overflowY: 'scroll',
|
|
1278
1494
|
height: isHorizontalView || !isOpen ? '100%' : 800,
|
|
1279
1495
|
...(isHorizontalView && {
|
|
1280
|
-
flexGrow: 1,
|
|
1281
|
-
|
|
1496
|
+
// flexGrow: 1,
|
|
1497
|
+
width: !isOpen
|
|
1498
|
+
? '100%'
|
|
1499
|
+
: `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
|
|
1282
1500
|
}),
|
|
1283
1501
|
...(!isHorizontalView && isOpen && { width: formWidth }),
|
|
1284
1502
|
}, children: [!isEditingMode && (report?.adminError || report?.error) ? ((0, jsx_runtime_1.jsx)(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : ((isHorizontalView || (!isOpen && windowWidth > 1200)) && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
|
|
@@ -1289,10 +1507,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1289
1507
|
// formData.chartType === 'metric'
|
|
1290
1508
|
// ? 100
|
|
1291
1509
|
// : `calc(${filtersEnabled ? 50 : 70}%)`,
|
|
1292
|
-
...(isHorizontalView && {
|
|
1510
|
+
...(isHorizontalView && {
|
|
1511
|
+
flexGrow: !['table'].includes(formData.chartType) ? 1 : 0,
|
|
1512
|
+
}),
|
|
1293
1513
|
}, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }))),
|
|
1294
1514
|
// Make sure to display non-pivoted table when using pivot chart
|
|
1295
|
-
|
|
1515
|
+
!hideChartView &&
|
|
1516
|
+
(isHorizontalView || (!isOpen && windowWidth < 1200)) && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1296
1517
|
width: '100%',
|
|
1297
1518
|
// height:
|
|
1298
1519
|
// isHorizontalView || !isOpen
|
|
@@ -1306,21 +1527,29 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1306
1527
|
onFiltersEnabledChanged(hide);
|
|
1307
1528
|
}, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
|
|
1308
1529
|
width: '100%',
|
|
1309
|
-
height: formData.chartType === 'table'
|
|
1530
|
+
height: formData.chartType === 'table'
|
|
1531
|
+
? 200
|
|
1532
|
+
: formData.chartType === 'metric'
|
|
1533
|
+
? 300
|
|
1534
|
+
: 500,
|
|
1310
1535
|
flexGrow: formData.chartType !== 'table' ? 1 : 0,
|
|
1311
|
-
}, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns:
|
|
1536
|
+
}, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), hideTableView ? null : formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: includeCustomFields && !containsCustomFields
|
|
1537
|
+
? formData.columns.concat(reportCustomFields)
|
|
1538
|
+
: formData.columns, onPageChange: (page) => {
|
|
1312
1539
|
onPageChange(page);
|
|
1313
1540
|
setCurrentPage(page);
|
|
1314
1541
|
}, onSortChange: (sort) => {
|
|
1315
1542
|
onSortChange && onSortChange(sort);
|
|
1316
|
-
}, currentPage: currentPage, rowCount: rowCount, isLoading: isLoading, rowCountIsLoading: rowCountIsLoading, disableSort: disableSort })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
|
|
1543
|
+
}, currentPage: currentPage, rowCount: rowCount, isLoading: isLoading, rowCountIsLoading: rowCountIsLoading, disableSort: disableSort, hideLabels: false })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
|
|
1317
1544
|
? selectedPivotTable.columns
|
|
1318
|
-
:
|
|
1545
|
+
: includeCustomFields && !containsCustomFields
|
|
1546
|
+
? formData.columns.concat(reportCustomFields)
|
|
1547
|
+
: formData.columns, onPageChange: (page) => {
|
|
1319
1548
|
onPageChange(page, true);
|
|
1320
1549
|
setCurrentPage(page);
|
|
1321
1550
|
}, onSortChange: (sort) => {
|
|
1322
1551
|
onSortChange && onSortChange(sort, true);
|
|
1323
|
-
}, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort }))] }))] }), isOpen && ((0, jsx_runtime_1.jsxs)("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
|
|
1552
|
+
}, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort, hideLabels: false }))] }))] })), isOpen && ((0, jsx_runtime_1.jsxs)("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
|
|
1324
1553
|
display: 'flex',
|
|
1325
1554
|
flexDirection: 'column',
|
|
1326
1555
|
gap: 20,
|
|
@@ -1336,27 +1565,35 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1336
1565
|
paddingTop: modalPadding,
|
|
1337
1566
|
paddingBottom: modalPadding,
|
|
1338
1567
|
}),
|
|
1339
|
-
}, children: [(0, jsx_runtime_1.jsxs)(FormContainer, { children: [
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1568
|
+
}, children: [(0, jsx_runtime_1.jsxs)(FormContainer, { children: [hideChartView
|
|
1569
|
+
? null
|
|
1570
|
+
: (formData.pivot || formData.chartType !== 'table') &&
|
|
1571
|
+
windowWidth < 1200 && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
|
|
1572
|
+
onFiltersEnabledChanged(hide);
|
|
1573
|
+
}, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
|
|
1574
|
+
width: '100%',
|
|
1575
|
+
height: formData.chartType === 'table'
|
|
1576
|
+
? 200
|
|
1577
|
+
: formData.chartType === 'metric'
|
|
1578
|
+
? 300
|
|
1579
|
+
: formData.chartType === 'US map' ||
|
|
1580
|
+
formData.chartType === 'World map'
|
|
1581
|
+
? 'fit-content'
|
|
1582
|
+
: 500,
|
|
1583
|
+
flexGrow: !['table'].includes(formData.chartType)
|
|
1584
|
+
? 1
|
|
1585
|
+
: 0,
|
|
1586
|
+
}, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)("div", { ref: inputRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(TextInputComponent
|
|
1347
1587
|
// {...autofocusRefProp}
|
|
1348
1588
|
, {
|
|
1349
1589
|
// {...autofocusRefProp}
|
|
1350
|
-
id: "chart-builder-name", label: "Name", width: 200, value: formData.name, onChange: (e) => handleChange(e.target.value, 'name'), placeholder: "Name" }) }), showDashboardDropdown && !
|
|
1590
|
+
id: "chart-builder-name", label: "Name", width: 200, value: formData.name, onChange: (e) => handleChange(e.target.value, 'name'), placeholder: "Name" }) }), showDashboardDropdown && !destinationDashboardName && ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Dashboard", value: formData.dashboardName || '', onChange: async (e) => {
|
|
1351
1591
|
handleChange(e.target.value, 'dashboardName');
|
|
1352
1592
|
await updateDashboardFilters(e.target.value);
|
|
1353
1593
|
}, options: dashboardOptions.map((elem) => ({
|
|
1354
1594
|
label: elem.label,
|
|
1355
1595
|
value: elem.label,
|
|
1356
|
-
})), width: 200 }) })), (0, jsx_runtime_1.jsx)("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
|
|
1357
|
-
// filter out metric for all pivots
|
|
1358
|
-
// filter out bar and pie for row and column pivot
|
|
1359
|
-
options: chartTypes, width: 200 }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1596
|
+
})), width: 200 }) })), hideChartType ? ((0, jsx_runtime_1.jsx)("div", { style: { width: 200 } })) : ((0, jsx_runtime_1.jsx)("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'), options: chartTypes, width: 200 }) }))] }), hidePivotForm ? null : ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1360
1597
|
display: 'flex',
|
|
1361
1598
|
flexDirection: 'column',
|
|
1362
1599
|
gap: 6,
|
|
@@ -1372,33 +1609,43 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1372
1609
|
setShowPivotPopover(true);
|
|
1373
1610
|
setPivotRowField(formData.pivot?.rowField);
|
|
1374
1611
|
setPivotColumnField(formData.pivot?.columnField);
|
|
1375
|
-
setPivotAggregations(formData.pivot?.aggregations ?? [
|
|
1612
|
+
setPivotAggregations(formData.pivot?.aggregations ?? [
|
|
1613
|
+
{
|
|
1376
1614
|
valueField: formData.pivot?.valueField,
|
|
1377
1615
|
aggregationType: formData.pivot?.aggregationType,
|
|
1378
1616
|
valueField2: formData.pivot?.valueField2,
|
|
1379
|
-
}
|
|
1617
|
+
},
|
|
1618
|
+
]);
|
|
1380
1619
|
setPivotPopUpTitle('Edit pivot');
|
|
1381
|
-
}, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] })
|
|
1620
|
+
}, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] })), !hideChartView &&
|
|
1621
|
+
(formData.pivot || formData.chartType !== 'table') && ((0, jsx_runtime_1.jsxs)("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
1382
1622
|
display: 'flex',
|
|
1383
1623
|
flexDirection: 'column',
|
|
1384
|
-
}, children: (0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ??
|
|
1385
|
-
|
|
1624
|
+
}, children: (0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ??
|
|
1625
|
+
'' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.xAxisField, onChange: (e) => handleChange(e.target.value, 'xAxisField'), options: formData.pivot
|
|
1626
|
+
? getPivotMetricOptions(formData.pivot, selectedPivotTable, formData.chartType)
|
|
1386
1627
|
: columns.map((elem) => ({
|
|
1387
1628
|
label: elem.field,
|
|
1388
1629
|
value: elem.field,
|
|
1389
1630
|
})), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot &&
|
|
1390
|
-
(0, PivotModal_1.isDateField)(formData.
|
|
1391
|
-
? '
|
|
1631
|
+
(0, PivotModal_1.isDateField)(formData.xAxisField ?? '')
|
|
1632
|
+
? 'string'
|
|
1392
1633
|
: formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
|
|
1393
|
-
(0, PivotModal_1.isDateField)(formData.
|
|
1394
|
-
? [{ value: '
|
|
1395
|
-
:
|
|
1396
|
-
|
|
1634
|
+
(0, PivotModal_1.isDateField)(formData.xAxisField ?? '')
|
|
1635
|
+
? [{ value: 'string', label: 'date' }]
|
|
1636
|
+
: xAxisFormatOptions, width: 200, hideEmptyOption: true })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ??
|
|
1637
|
+
'' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields.map((yAxisField, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
|
|
1638
|
+
? formData.pivot.aggregations?.length
|
|
1639
|
+
? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count')
|
|
1640
|
+
: 'count'
|
|
1397
1641
|
: yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
|
|
1398
1642
|
? [
|
|
1399
1643
|
{
|
|
1400
|
-
label: `Pivot Column (${formData.pivot.aggregations?.length ? (0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count' : 'count'})`,
|
|
1401
|
-
value: formData.pivot.aggregations
|
|
1644
|
+
label: `Pivot Column (${formData.pivot.aggregations?.length ? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count') : 'count'})`,
|
|
1645
|
+
value: formData.pivot.aggregations
|
|
1646
|
+
?.length
|
|
1647
|
+
? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count')
|
|
1648
|
+
: 'count',
|
|
1402
1649
|
},
|
|
1403
1650
|
]
|
|
1404
1651
|
: columns
|
|
@@ -1409,28 +1656,52 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1409
1656
|
label: elem.field,
|
|
1410
1657
|
value: elem.field,
|
|
1411
1658
|
})), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-y-axis-label", width: 200, value: yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'yAxisFields.label', index) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
|
|
1412
|
-
? NUMBER_OPTIONS.find((option) => {
|
|
1659
|
+
? (NUMBER_OPTIONS.find((option) => {
|
|
1413
1660
|
return (option.value === yAxisField.format);
|
|
1414
|
-
})?.value ?? NUMBER_OPTIONS[0].value
|
|
1661
|
+
})?.value ?? NUMBER_OPTIONS[0].value)
|
|
1415
1662
|
: yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
|
|
1416
1663
|
? NUMBER_OPTIONS
|
|
1417
|
-
:
|
|
1664
|
+
: ALL_FORMAT_OPTIONS, width: 200, hideEmptyOption: true }), !formData.pivot && ((0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), !formData.pivot && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] })), client?.featureFlags?.['referenceLines'] &&
|
|
1665
|
+
(chartData.chartType === 'line' ||
|
|
1666
|
+
chartData.chartType === 'column') && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: 'Reference Lines' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.referenceLines?.map((refLine, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { width: 200, value: refLine.label, onChange: (e) => handleChange(e.target.value, 'referenceLines.label', index),
|
|
1667
|
+
// only include numeric columns
|
|
1668
|
+
options: [
|
|
1669
|
+
{
|
|
1670
|
+
label: 'Custom Values',
|
|
1671
|
+
value: constants_1.REFERENCE_LINE,
|
|
1672
|
+
},
|
|
1673
|
+
].concat((selectedPivotTable?.columns
|
|
1674
|
+
? selectedPivotTable.columns
|
|
1675
|
+
: columns)
|
|
1676
|
+
.filter((c) => valueFormatter_1.NUMBER_FORMAT_TYPES.includes(c.format))
|
|
1677
|
+
.map((elem) => ({
|
|
1678
|
+
label: elem.field,
|
|
1679
|
+
value: elem.field,
|
|
1680
|
+
}))) }), refLine.label === constants_1.REFERENCE_LINE && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-ref-line-y1", width: 200, value: refLine.y1?.toString() ?? '', placeholder: "Start value", onChange: (e) => handleChange(e.target.value, 'referenceLines.y1', index) }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-ref-line-y2", width: 200, value: refLine.y2?.toString() ?? '', placeholder: "End value", onChange: (e) => handleChange(e.target.value, 'referenceLines.y2', index) })] })), (0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('referenceLines', index) }) })] }, 'referenceLine' + index))), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('referenceLines'), label: "Add line +" }) })] })] }))] })), windowWidth < 1200 && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
1418
1681
|
width: '100%',
|
|
1419
1682
|
height: isHorizontalView || !isOpen ? 'calc(50% - 10px)' : 400,
|
|
1420
1683
|
flexGrow: 1,
|
|
1421
|
-
}, children: formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns:
|
|
1684
|
+
}, children: formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: includeCustomFields && !containsCustomFields
|
|
1685
|
+
? formData.columns.concat(reportCustomFields)
|
|
1686
|
+
: formData.columns, onPageChange: (page) => {
|
|
1422
1687
|
onPageChange(page);
|
|
1423
1688
|
setCurrentPage(page);
|
|
1424
1689
|
}, onSortChange: (sort) => {
|
|
1425
1690
|
onSortChange && onSortChange(sort);
|
|
1426
|
-
}, currentPage: currentPage, rowCount: rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
|
|
1691
|
+
}, currentPage: currentPage, rowCount: rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort, hideLabels: false })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
|
|
1427
1692
|
? selectedPivotTable.columns
|
|
1428
|
-
:
|
|
1693
|
+
: includeCustomFields && !containsCustomFields
|
|
1694
|
+
? formData.columns.concat(reportCustomFields)
|
|
1695
|
+
: formData.columns, onPageChange: (page) => {
|
|
1429
1696
|
onPageChange(page, true);
|
|
1430
1697
|
setCurrentPage(page);
|
|
1431
1698
|
}, onSortChange: (sort) => {
|
|
1432
1699
|
onSortChange && onSortChange(sort, true);
|
|
1433
|
-
}, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) })), (showTableFormatOptions || isAdmin) && ((0, jsx_runtime_1.jsxs)("div", {
|
|
1700
|
+
}, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort, hideLabels: false })) })), (showTableFormatOptions || isAdmin) && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1701
|
+
display: 'flex',
|
|
1702
|
+
flexDirection: 'column',
|
|
1703
|
+
gap: 6,
|
|
1704
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1434
1705
|
display: 'flex',
|
|
1435
1706
|
flexDirection: 'column',
|
|
1436
1707
|
}, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Table" }), (0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: "Columns" })] }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.pivot &&
|
|
@@ -1447,14 +1718,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1447
1718
|
column.field === formData.pivot.rowField
|
|
1448
1719
|
? formData.pivot &&
|
|
1449
1720
|
(0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
|
|
1450
|
-
? '
|
|
1721
|
+
? 'string'
|
|
1451
1722
|
: 'string'
|
|
1452
1723
|
: formData.pivot?.aggregationType ===
|
|
1453
1724
|
'percentage'
|
|
1454
1725
|
? 'percent'
|
|
1455
1726
|
: 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
|
|
1456
1727
|
? (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
|
|
1457
|
-
? [{ label: 'date', value: '
|
|
1728
|
+
? [{ label: 'date', value: 'string' }]
|
|
1458
1729
|
: [{ label: 'string', value: 'string' }]
|
|
1459
1730
|
: [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
|
|
1460
1731
|
: formData.columns.map((column, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: rows[0]
|
|
@@ -1465,12 +1736,24 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1465
1736
|
: columns.map((elem) => ({
|
|
1466
1737
|
label: elem.field,
|
|
1467
1738
|
value: elem.field,
|
|
1468
|
-
})), width: 200 }), (0, jsx_runtime_1.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) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options:
|
|
1739
|
+
})), width: 200 }), (0, jsx_runtime_1.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) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: ALL_FORMAT_OPTIONS, width: 200 }), (0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))), (0, jsx_runtime_1.jsx)("div", { children: !(
|
|
1469
1740
|
// hide when pivoted and chartType === 'table'
|
|
1470
1741
|
(formData.pivot &&
|
|
1471
1742
|
selectedPivotTable &&
|
|
1472
1743
|
selectedPivotTable.columns &&
|
|
1473
|
-
formData.chartType === 'table')) && ((0, jsx_runtime_1.
|
|
1744
|
+
formData.chartType === 'table')) && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1745
|
+
display: 'flex',
|
|
1746
|
+
flexDirection: 'row',
|
|
1747
|
+
gap: 10,
|
|
1748
|
+
}, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" }), isAdmin &&
|
|
1749
|
+
client?.featureFlags?.customFieldsEnabled && ((0, jsx_runtime_1.jsx)(UiComponents_1.QuillToolTip, { text: "Custom field directly referenced in report", enabled: containsCustomFields, textStyle: {
|
|
1750
|
+
maxWidth: '200px',
|
|
1751
|
+
whiteSpace: 'normal',
|
|
1752
|
+
}, children: (0, jsx_runtime_1.jsx)(CheckboxComponent, { isChecked: containsCustomFields || includeCustomFields, label: "Include Custom Fields", onChange: () => setIncludeCustomFields((prev) => !prev), disabled: containsCustomFields, containerStyle: {
|
|
1753
|
+
height: containsCustomFields
|
|
1754
|
+
? '100%' // required when wrapped with QuillToolTip
|
|
1755
|
+
: undefined,
|
|
1756
|
+
} }) }))] })) })] })] })), isAdmin && tenants && dashboardOwner && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1474
1757
|
display: 'flex',
|
|
1475
1758
|
flexDirection: 'column',
|
|
1476
1759
|
gap: 12,
|
|
@@ -1484,54 +1767,61 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1484
1767
|
width: 'fit-content',
|
|
1485
1768
|
gap: 12,
|
|
1486
1769
|
marginBottom: 8,
|
|
1487
|
-
}, children: [(0, jsx_runtime_1.
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
:
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
:
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1770
|
+
}, children: [(0, jsx_runtime_1.jsx)(UiComponents_1.QuillToolTip, { text: 'Tenant access is restricted to current tenant with direct custom field reference.', enabled: containsCustomFields, textStyle: {
|
|
1771
|
+
maxWidth: '200px',
|
|
1772
|
+
whiteSpace: 'normal',
|
|
1773
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1774
|
+
outline: '1px solid #E7E7E7',
|
|
1775
|
+
borderRadius: 6,
|
|
1776
|
+
padding: 4,
|
|
1777
|
+
display: 'flex',
|
|
1778
|
+
flexDirection: 'row',
|
|
1779
|
+
marginLeft: 2,
|
|
1780
|
+
backgroundColor: '#FCFCFC',
|
|
1781
|
+
height: 38,
|
|
1782
|
+
width: 'fit-content',
|
|
1783
|
+
}, children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
1784
|
+
if (!containsCustomFields) {
|
|
1785
|
+
setCustomTenantAccess(false);
|
|
1786
|
+
setFormFlags(undefined);
|
|
1787
|
+
}
|
|
1788
|
+
}, style: {
|
|
1789
|
+
width: 95,
|
|
1790
|
+
outline: !(customTenantAccess || containsCustomFields)
|
|
1791
|
+
? '1px solid #E7E7E7'
|
|
1792
|
+
: undefined,
|
|
1793
|
+
backgroundColor: !(customTenantAccess || containsCustomFields)
|
|
1794
|
+
? 'white'
|
|
1795
|
+
: undefined,
|
|
1796
|
+
// Center text vertically and horizontally
|
|
1797
|
+
display: 'flex',
|
|
1798
|
+
justifyContent: 'center',
|
|
1799
|
+
alignItems: 'center',
|
|
1800
|
+
borderRadius: 6,
|
|
1801
|
+
fontSize: 14,
|
|
1802
|
+
fontWeight: 500,
|
|
1803
|
+
userSelect: 'none',
|
|
1804
|
+
}, children: "Global" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
1805
|
+
setCustomTenantAccess(true);
|
|
1806
|
+
}, style: {
|
|
1807
|
+
width: 95,
|
|
1808
|
+
outline: customTenantAccess || containsCustomFields
|
|
1809
|
+
? '1px solid #E7E7E7'
|
|
1810
|
+
: undefined,
|
|
1811
|
+
backgroundColor: customTenantAccess || containsCustomFields
|
|
1812
|
+
? 'white'
|
|
1813
|
+
: undefined,
|
|
1814
|
+
// Center text vertically and horizontally
|
|
1815
|
+
display: 'flex',
|
|
1816
|
+
justifyContent: 'center',
|
|
1817
|
+
alignItems: 'center',
|
|
1818
|
+
borderRadius: 6,
|
|
1819
|
+
fontSize: 14,
|
|
1820
|
+
fontWeight: 500,
|
|
1821
|
+
userSelect: 'none',
|
|
1822
|
+
}, children: "Custom" })] }) }), client?.allTenantTypes?.length === 1 ? ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { disabled: containsCustomFields, value: containsCustomFields
|
|
1823
|
+
? (currentTenantAsFormFlags?.[dashboardOwner.tenantField] ?? []) // Even though value requires string[], turns out flags can be numbers
|
|
1824
|
+
: (formFlags?.[dashboardOwner.tenantField] ?? []), onChange: (e) => setFormFlags({
|
|
1535
1825
|
...formFlags,
|
|
1536
1826
|
[dashboardOwner.tenantField]: e.target
|
|
1537
1827
|
.value,
|
|
@@ -1548,7 +1838,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1548
1838
|
})) ?? []), width: 200, emptyLabel: dashboardOwner.scope === 'database'
|
|
1549
1839
|
? 'No flags supplied'
|
|
1550
1840
|
: undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
|
|
1551
|
-
display: customTenantAccess
|
|
1841
|
+
display: customTenantAccess || containsCustomFields
|
|
1842
|
+
? 'inline'
|
|
1843
|
+
: 'none',
|
|
1552
1844
|
marginTop: -1,
|
|
1553
1845
|
marginBottom: -4,
|
|
1554
1846
|
} })) : ((0, jsx_runtime_1.jsx)(QuillMultiSelectSectionList_1.QuillMultiSelectSectionList, { value: formFlags ?? {}, onChange: (e) => setFormFlags(e.target.value), options: allTenantMap, sectionHeaderMap: client?.allTenantTypes?.reduce((acc, tenantType) => {
|
|
@@ -1559,7 +1851,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1559
1851
|
acc[tenantType.tenantField] = tenantType.name;
|
|
1560
1852
|
return acc;
|
|
1561
1853
|
}, {}) ?? {}, width: 200, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
|
|
1562
|
-
display: customTenantAccess
|
|
1854
|
+
display: customTenantAccess || containsCustomFields
|
|
1855
|
+
? 'inline'
|
|
1856
|
+
: 'none',
|
|
1563
1857
|
marginTop: -1,
|
|
1564
1858
|
marginBottom: -4,
|
|
1565
1859
|
}, owner: dashboardOwner.tenantField }))] }) })] })), specificDashboardFilters.length > 0 && isAdmin && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
@@ -1568,7 +1862,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1568
1862
|
gap: 6,
|
|
1569
1863
|
}, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Dashboard filter fields" }), isAdmin &&
|
|
1570
1864
|
formData.dateField &&
|
|
1571
|
-
dashboardConfig[formData.dashboardName ??
|
|
1865
|
+
dashboardConfig[formData.dashboardName ?? destinationDashboardName ?? '']?.config.dateFilter?.label && ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: 'filterMap.dateFilter.' +
|
|
1572
1866
|
(dashboardConfig[formData.dashboardName ?? '']
|
|
1573
1867
|
?.config.dateFilter?.label ?? 'Date'), value: dashboardConfig[formData.dashboardName ?? '']
|
|
1574
1868
|
?.config.dateFilter?.label ?? 'Date', width: 200, onChange: () => { }, label: 'Filter', disabled: true }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Virtual Table", value: formData.dateField?.table, onChange: (e) => handleChange(e.target.value, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
|
|
@@ -1593,18 +1887,20 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1593
1887
|
.map((filter, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: 'filterMap.' + filter.label, value: filter.label, width: 200, onChange: () => { }, label: index === 0 &&
|
|
1594
1888
|
!(isAdmin &&
|
|
1595
1889
|
formData.dateField &&
|
|
1596
|
-
dashboardConfig[formData.dashboardName ?? '']
|
|
1890
|
+
dashboardConfig[formData.dashboardName ?? '']
|
|
1891
|
+
?.config.dateFilter?.label)
|
|
1597
1892
|
? 'Filter'
|
|
1598
1893
|
: '', disabled: true }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: index === 0 &&
|
|
1599
1894
|
!(isAdmin &&
|
|
1600
1895
|
formData.dateField &&
|
|
1601
|
-
dashboardConfig[formData.dashboardName ?? '']
|
|
1896
|
+
dashboardConfig[formData.dashboardName ?? '']
|
|
1897
|
+
?.config.dateFilter?.label)
|
|
1602
1898
|
? 'Virtual Table'
|
|
1603
1899
|
: '', value: filterMap[filter.label]?.table ?? filter.table, onChange: (e) => setFilterMap({
|
|
1604
1900
|
...filterMap,
|
|
1605
1901
|
[filter.label]: {
|
|
1606
1902
|
table: e.target.value,
|
|
1607
|
-
field: schemaData.
|
|
1903
|
+
field: schemaData.schemaWithCustomFields
|
|
1608
1904
|
.find((t) => t.name == e.target.value)
|
|
1609
1905
|
?.columns.find((elem) => elem.field ===
|
|
1610
1906
|
(filterMap[filter.label]?.field ??
|
|
@@ -1616,7 +1912,8 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1616
1912
|
})), width: 200 }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: index === 0 &&
|
|
1617
1913
|
!(isAdmin &&
|
|
1618
1914
|
formData.dateField &&
|
|
1619
|
-
dashboardConfig[formData.dashboardName ?? '']
|
|
1915
|
+
dashboardConfig[formData.dashboardName ?? '']
|
|
1916
|
+
?.config.dateFilter?.label)
|
|
1620
1917
|
? 'Field'
|
|
1621
1918
|
: '', value: filterMap[filter.label]?.field ?? filter.field, onChange: (e) => setFilterMap({
|
|
1622
1919
|
...filterMap,
|
|
@@ -1625,7 +1922,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1625
1922
|
filter.table,
|
|
1626
1923
|
field: e.target.value,
|
|
1627
1924
|
},
|
|
1628
|
-
}), options: schemaData.
|
|
1925
|
+
}), options: schemaData.schemaWithCustomFields
|
|
1629
1926
|
.find((t) => t.name ==
|
|
1630
1927
|
(filterMap[filter.label]?.table ??
|
|
1631
1928
|
filter.table) &&
|
|
@@ -1655,11 +1952,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1655
1952
|
justifyContent: 'space-between',
|
|
1656
1953
|
alignItems: 'center',
|
|
1657
1954
|
gap: 6,
|
|
1658
|
-
}, children: [!!filterIssues?.length &&
|
|
1659
|
-
|
|
1955
|
+
}, children: [!!filterIssues?.length && ((0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashboard - Report issues', containerStyle: { height: '100%' } })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1956
|
+
display: 'flex',
|
|
1957
|
+
flexDirection: 'row',
|
|
1958
|
+
gap: 10,
|
|
1959
|
+
backgroundColor: 'white',
|
|
1960
|
+
}, children: [hideDiscardChanges ? null : ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
|
|
1660
1961
|
setIsOpen(false);
|
|
1661
1962
|
onDiscardChanges && onDiscardChanges();
|
|
1662
|
-
}, label: 'Discard changes' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
|
|
1963
|
+
}, label: 'Discard changes' })), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
|
|
1663
1964
|
if (loadingFormData) {
|
|
1664
1965
|
setTriggeredEditChart(true);
|
|
1665
1966
|
}
|