@quillsql/react 2.13.40 → 2.13.41
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 +13 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +342 -138
- 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 +57 -38
- package/dist/cjs/Dashboard.d.ts +6 -3
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +70 -28
- package/dist/cjs/QuillProvider.d.ts +4 -8
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.d.ts +1 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +117 -45
- package/dist/cjs/SQLEditor.d.ts +7 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +53 -9
- 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 +4 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +31 -5
- 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/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +6 -7
- 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 +13 -3
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +73 -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 +5 -5
- 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 +71 -43
- 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 +28 -8
- package/dist/cjs/utils/schema.d.ts +26 -3
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +75 -43
- package/dist/cjs/utils/tableProcessing.d.ts +10 -3
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +4 -6
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +0 -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 +13 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +347 -143
- 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 +59 -40
- package/dist/esm/Dashboard.d.ts +6 -3
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +71 -29
- package/dist/esm/QuillProvider.d.ts +4 -8
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.d.ts +1 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +119 -47
- package/dist/esm/SQLEditor.d.ts +7 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +54 -10
- 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 +4 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +29 -4
- 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/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +6 -7
- 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 +13 -3
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +73 -16
- 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 +5 -5
- 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 +71 -43
- 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 +29 -9
- package/dist/esm/utils/schema.d.ts +26 -3
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +74 -43
- package/dist/esm/utils/tableProcessing.d.ts +10 -3
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +4 -6
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +0 -1
- package/package.json +8 -3
package/dist/cjs/ChartBuilder.js
CHANGED
|
@@ -35,7 +35,7 @@ const dataFetcher_1 = require("./utils/dataFetcher");
|
|
|
35
35
|
const QuillMultiSelectSectionList_1 = require("./components/QuillMultiSelectSectionList");
|
|
36
36
|
const constants_1 = require("./utils/constants");
|
|
37
37
|
const pivotConstructor_1 = require("./utils/pivotConstructor");
|
|
38
|
-
const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
|
|
38
|
+
const CHART_TYPES = ['column', 'line', 'table', 'metric', 'gauge', 'bar', 'pie', 'US map', 'World map'];
|
|
39
39
|
const CHART_TO_LABELS = {
|
|
40
40
|
column: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
|
|
41
41
|
line: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
|
|
@@ -43,8 +43,17 @@ const CHART_TO_LABELS = {
|
|
|
43
43
|
metric: { xAxisLabel: 'Value' },
|
|
44
44
|
bar: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
|
|
45
45
|
pie: { xAxisLabel: 'Category', yAxisLabel: 'Count' },
|
|
46
|
+
'US map': { xAxisLabel: 'State', yAxisLabel: 'Value' },
|
|
47
|
+
'World map': { xAxisLabel: 'Country', yAxisLabel: 'Value' },
|
|
48
|
+
gauge: { xAxisLabel: 'Value' },
|
|
46
49
|
};
|
|
47
|
-
function getPivotMetricOptions(pivot) {
|
|
50
|
+
function getPivotMetricOptions(pivot, selectedPivotTable, chartType) {
|
|
51
|
+
if (['metric', 'gauge'].includes(chartType) && selectedPivotTable) {
|
|
52
|
+
return selectedPivotTable.columns.map((elem) => ({
|
|
53
|
+
label: elem.field === pivot?.rowField ? `Pivot Row (${elem.field})` : elem.field,
|
|
54
|
+
value: elem.field,
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
48
57
|
if (!pivot.rowField) {
|
|
49
58
|
const valueField = (0, pivotConstructor_1.disambiguatedValueField)(pivot);
|
|
50
59
|
return [
|
|
@@ -83,17 +92,18 @@ function createInitialFormData(columns) {
|
|
|
83
92
|
chartType: firstNumberColumn ? 'line' : 'table',
|
|
84
93
|
pivot: null,
|
|
85
94
|
template: true,
|
|
95
|
+
referenceLines: [],
|
|
86
96
|
};
|
|
87
97
|
return formEmptyState;
|
|
88
98
|
}
|
|
89
99
|
function getChartTypeOptions(formData, dashboard) {
|
|
90
100
|
let viableCharts = CHART_TYPES;
|
|
91
101
|
if (dashboard && dashboard.dateFilter && dashboard.dateFilter.comparison) {
|
|
92
|
-
viableCharts = viableCharts.filter((chart) => !['table', 'metric', 'bar', 'pie'].includes(chart));
|
|
102
|
+
viableCharts = viableCharts.filter((chart) => !['table', 'metric', 'gauge', 'bar', 'pie', 'US map', 'World map'].includes(chart));
|
|
93
103
|
}
|
|
94
104
|
if (formData.pivot && !formData.pivot.rowField) {
|
|
95
105
|
return viableCharts
|
|
96
|
-
.filter((elem) =>
|
|
106
|
+
.filter((elem) => ['table', 'metric', 'gauge'].includes(elem))
|
|
97
107
|
.map((elem) => ({
|
|
98
108
|
label: elem,
|
|
99
109
|
value: elem,
|
|
@@ -101,14 +111,13 @@ function getChartTypeOptions(formData, dashboard) {
|
|
|
101
111
|
}
|
|
102
112
|
else {
|
|
103
113
|
return viableCharts
|
|
104
|
-
.filter((elem) => !((formData.pivot &&
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
(elem === 'bar' || elem === 'pie'))))
|
|
114
|
+
.filter((elem) => !((formData.pivot &&
|
|
115
|
+
formData.pivot.columnField &&
|
|
116
|
+
(elem === 'bar' || elem === 'pie' || elem === 'US map' || elem === 'World map'))))
|
|
108
117
|
.map((elem) => ({ label: elem, value: elem }));
|
|
109
118
|
}
|
|
110
119
|
}
|
|
111
|
-
function createReportFromForm(formData, report, selectedPivotTable, rows = [], filtersApplied = []) {
|
|
120
|
+
function createReportFromForm(formData, report, selectedPivotTable, rows = [], filtersApplied = [], referenceLineQueryResults) {
|
|
112
121
|
const newReport = (0, report_1.convertInternalReportToReport)((0, merge_1.mergeComparisonRange)({
|
|
113
122
|
...formData,
|
|
114
123
|
dashboardName: formData.dashboardName || '',
|
|
@@ -128,6 +137,14 @@ function createReportFromForm(formData, report, selectedPivotTable, rows = [], f
|
|
|
128
137
|
pivotColumns: selectedPivotTable?.columns ?? undefined,
|
|
129
138
|
pivotRows: selectedPivotTable?.rows ?? undefined,
|
|
130
139
|
columnInternal: report?.columnInternal ?? [],
|
|
140
|
+
referenceLines: formData.referenceLines?.map((elem) => ({
|
|
141
|
+
label: elem.label,
|
|
142
|
+
query: elem.label === constants_1.REFERENCE_LINE ? [Number(elem.y1) || 0, Number(elem.y2) || 0] : elem.label,
|
|
143
|
+
})) || [],
|
|
144
|
+
referenceLineYValues: formData.referenceLines?.map((elem, index) => ({
|
|
145
|
+
label: elem.label,
|
|
146
|
+
query: elem.label === constants_1.REFERENCE_LINE ? [Number(elem.y1) || 0, Number(elem.y2) || 0] : referenceLineQueryResults?.[index],
|
|
147
|
+
})) || [],
|
|
131
148
|
}), filtersApplied);
|
|
132
149
|
return newReport;
|
|
133
150
|
}
|
|
@@ -163,7 +180,7 @@ const DATE_OPTIONS = [
|
|
|
163
180
|
{ value: 'MMM_dd_hh:mm_ap_pm', label: 'day and time' },
|
|
164
181
|
{ value: 'hh_ap_pm', label: 'hour' },
|
|
165
182
|
];
|
|
166
|
-
const
|
|
183
|
+
const ALL_FORMAT_OPTIONS = [
|
|
167
184
|
...NUMBER_OPTIONS,
|
|
168
185
|
...DATE_OPTIONS,
|
|
169
186
|
{ value: 'string', label: 'string' },
|
|
@@ -246,7 +263,7 @@ function ChartBuilderWithModal(props) {
|
|
|
246
263
|
*/
|
|
247
264
|
function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent,
|
|
248
265
|
// 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,
|
|
266
|
+
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, 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,
|
|
250
267
|
// isLoading,
|
|
251
268
|
onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
252
269
|
const [client] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
@@ -272,14 +289,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
272
289
|
const inputRef = (0, react_1.useRef)(null);
|
|
273
290
|
const selectRef = (0, react_1.useRef)(null);
|
|
274
291
|
const processColumns = (columns) => {
|
|
275
|
-
if (schemaData.
|
|
292
|
+
if (schemaData.schemaWithCustomFields) {
|
|
276
293
|
const newProcessedColumns = columns?.map((col) => {
|
|
277
294
|
if (col.jsType) {
|
|
278
295
|
return col;
|
|
279
296
|
}
|
|
280
297
|
const newCol = { ...col };
|
|
281
298
|
let foundColumn;
|
|
282
|
-
schemaData.
|
|
299
|
+
schemaData.schemaWithCustomFields.forEach((table) => {
|
|
283
300
|
if (table.columns) {
|
|
284
301
|
const matchedColumn = table.columns.find((c) => c.field === col.field);
|
|
285
302
|
if (matchedColumn) {
|
|
@@ -364,6 +381,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
364
381
|
const [isEdittingPivot, setIsEdittingPivot] = (0, react_1.useState)(false);
|
|
365
382
|
const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
|
|
366
383
|
const [tableName, setTableName] = (0, react_1.useState)(undefined);
|
|
384
|
+
const [includeCustomFields, setIncludeCustomFields] = (0, react_1.useState)(report
|
|
385
|
+
? !!report.includeCustomFields
|
|
386
|
+
: !!client?.featureFlags?.customFieldsEnabled);
|
|
367
387
|
const selectedTable = schemaData.schema?.find((t) => t.displayName === tableName);
|
|
368
388
|
const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
|
|
369
389
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -386,11 +406,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
386
406
|
const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)(rp);
|
|
387
407
|
const [pivotRowField, setPivotRowField] = (0, react_1.useState)(report?.pivot?.rowField);
|
|
388
408
|
const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(report?.pivot?.columnField);
|
|
389
|
-
const [pivotAggregations, setPivotAggregations] = (0, react_1.useState)(report?.pivot?.aggregations ?? [
|
|
409
|
+
const [pivotAggregations, setPivotAggregations] = (0, react_1.useState)(report?.pivot?.aggregations ?? [
|
|
410
|
+
{
|
|
390
411
|
valueField: report?.pivot?.valueField,
|
|
391
412
|
valueField2: report?.pivot?.valueField2,
|
|
392
|
-
aggregationType: report?.pivot?.aggregationType
|
|
393
|
-
}
|
|
413
|
+
aggregationType: report?.pivot?.aggregationType,
|
|
414
|
+
},
|
|
415
|
+
]);
|
|
394
416
|
const baseProcessing = {
|
|
395
417
|
page: report?.pagination ?? {
|
|
396
418
|
page: 0,
|
|
@@ -405,6 +427,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
405
427
|
const [allTables, setAllTables] = (0, react_1.useState)([]);
|
|
406
428
|
const [customFieldTableRef, setCustomFieldTableRef] = (0, react_1.useState)(false);
|
|
407
429
|
const [referencedColumns, setReferencedColumns] = (0, react_1.useState)({});
|
|
430
|
+
const [referencedColumnsWithoutStar, setReferencedColumnsWithoutStar] = (0, react_1.useState)({});
|
|
408
431
|
const [filterMap, setFilterMap] = (0, react_1.useState)(report?.filterMap ?? {});
|
|
409
432
|
const canonicalFilterMap = (0, react_1.useMemo)(() => {
|
|
410
433
|
return Object.fromEntries(Object.entries(filterMap).filter((f) => f[1].table !== undefined && f[1].field !== undefined));
|
|
@@ -417,7 +440,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
417
440
|
}
|
|
418
441
|
acc[filter.label] =
|
|
419
442
|
!!allTables.find((table) => table === (filterMap[filter.label] ?? filter).table) &&
|
|
420
|
-
!!schemaData.
|
|
443
|
+
!!schemaData.schemaWithCustomFields
|
|
421
444
|
?.find((table) => {
|
|
422
445
|
return (table.displayName === (filterMap[filter.label] ?? filter).table);
|
|
423
446
|
})
|
|
@@ -461,6 +484,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
461
484
|
pivot: null,
|
|
462
485
|
dateField: defaultDateField,
|
|
463
486
|
template: true,
|
|
487
|
+
referenceLines: [],
|
|
464
488
|
};
|
|
465
489
|
const updateDashboardFilters = async (dashboardName) => {
|
|
466
490
|
if (dashboardConfig && dashboardConfig[dashboardName]) {
|
|
@@ -501,8 +525,8 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
501
525
|
const pivotFormData = (pivot) => {
|
|
502
526
|
const yAxisField = pivot.columnField ?? (0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '';
|
|
503
527
|
const yAxisLabel = report?.yAxisFields && report?.yAxisFields?.length > 0
|
|
504
|
-
? report.yAxisFields[0]?.label ?? ''
|
|
505
|
-
: (0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '';
|
|
528
|
+
? (report.yAxisFields[0]?.label ?? '')
|
|
529
|
+
: ((0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '');
|
|
506
530
|
// date labels for pivots should be treated like strings since they are
|
|
507
531
|
const yAxisIsDate = pivot.columnField
|
|
508
532
|
? (0, PivotModal_1.isDateField)(pivot.columnFieldType ?? '')
|
|
@@ -511,12 +535,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
511
535
|
const result = {
|
|
512
536
|
pivot,
|
|
513
537
|
chartType: chartType,
|
|
514
|
-
xAxisField: pivot.rowField
|
|
515
|
-
|
|
538
|
+
xAxisField: pivot.rowField
|
|
539
|
+
? pivot.rowField
|
|
540
|
+
: (0, pivotConstructor_1.disambiguatedValueField)(pivot),
|
|
541
|
+
xAxisFormat: (0, columnProcessing_1.isDateType)(pivot.rowFieldType ?? '')
|
|
516
542
|
? 'string'
|
|
517
|
-
:
|
|
518
|
-
|
|
519
|
-
'
|
|
543
|
+
: (0, columnProcessing_1.isNumberType)(pivot.rowFieldType ?? '')
|
|
544
|
+
? 'whole_number'
|
|
545
|
+
: 'string',
|
|
520
546
|
xAxisLabel: report?.xAxisLabel || pivot.rowField,
|
|
521
547
|
yAxisFields: [
|
|
522
548
|
{
|
|
@@ -525,43 +551,66 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
525
551
|
format: yAxisIsDate
|
|
526
552
|
? 'string'
|
|
527
553
|
: 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',
|
|
554
|
+
? (report?.yAxisFields[0]?.format ?? 'whole_number')
|
|
555
|
+
: (report?.columns.find((col) => col.field === (0, pivotConstructor_1.disambiguatedValueField)(pivot))?.format ?? 'whole_number'),
|
|
531
556
|
},
|
|
532
557
|
],
|
|
533
558
|
};
|
|
534
559
|
return result;
|
|
535
560
|
};
|
|
536
|
-
const getReferencedTables = async (client, sqlQuery, dbTables) => {
|
|
561
|
+
const getReferencedTables = async (client, sqlQuery, dbTables, skipStar) => {
|
|
537
562
|
const resp = await getDataFromCloud(client, `astify`, {
|
|
538
563
|
query: sqlQuery,
|
|
539
564
|
publicKey: client.publicKey,
|
|
540
565
|
useNewNodeSql: true,
|
|
541
566
|
});
|
|
542
567
|
if (resp.success === false) {
|
|
543
|
-
return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)({}), dbTables);
|
|
568
|
+
return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)({}), dbTables, skipStar);
|
|
544
569
|
}
|
|
545
|
-
return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)(resp.ast), dbTables);
|
|
570
|
+
return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)(resp.ast), dbTables, skipStar);
|
|
546
571
|
};
|
|
547
572
|
const formFormDataFromReport = (report) => {
|
|
548
|
-
let pivotData = {};
|
|
573
|
+
// let pivotData = {};
|
|
549
574
|
let dateField = defaultDateField;
|
|
550
|
-
if (report?.pivot) {
|
|
551
|
-
|
|
552
|
-
}
|
|
575
|
+
// if (report?.pivot) {
|
|
576
|
+
// pivotData = pivotFormData(report.pivot);
|
|
577
|
+
// }
|
|
553
578
|
if (report) {
|
|
554
579
|
dateField = report.dateField || defaultDateField;
|
|
555
580
|
}
|
|
556
581
|
return {
|
|
557
582
|
...formEmptyState,
|
|
558
583
|
...report,
|
|
559
|
-
...pivotData,
|
|
560
|
-
...(report?.dashboardName && { dashboardName: report?.dashboardName }),
|
|
584
|
+
// ...pivotData,
|
|
561
585
|
dateField: dateField,
|
|
586
|
+
referenceLines: report?.referenceLines ? report.referenceLines?.map(({ label, query }) => {
|
|
587
|
+
if (typeof query === 'string') {
|
|
588
|
+
return { label, y1: undefined, y2: undefined };
|
|
589
|
+
}
|
|
590
|
+
return {
|
|
591
|
+
label,
|
|
592
|
+
y1: query[0],
|
|
593
|
+
y2: query[1],
|
|
594
|
+
};
|
|
595
|
+
}) : [],
|
|
562
596
|
};
|
|
563
597
|
};
|
|
564
598
|
const [formData, setFormData] = (0, react_1.useState)(formFormDataFromReport(report));
|
|
599
|
+
const referenceLineQueryResults = (0, react_1.useMemo)(() => {
|
|
600
|
+
return formData?.referenceLines?.map((line) => {
|
|
601
|
+
if (line.label === constants_1.REFERENCE_LINE) {
|
|
602
|
+
return [Number(line.y1) || 0, Number(line.y2) || 0];
|
|
603
|
+
}
|
|
604
|
+
// line.label is a field
|
|
605
|
+
// Get the first and last row of the field
|
|
606
|
+
const field = formData.columns.find((col) => col.field === line.label);
|
|
607
|
+
if (!field) {
|
|
608
|
+
return [0, 0];
|
|
609
|
+
}
|
|
610
|
+
// return [Number(rows[0]?.[field.field]) || 0, Number(rows[rows.length - 1]?.[field.field]) || 0];
|
|
611
|
+
return (pivotData?.rows ? pivotData.rows : rows).map((row) => Number(row[field.field]) || 0);
|
|
612
|
+
});
|
|
613
|
+
}, [formData?.referenceLines]);
|
|
565
614
|
const currentDashboard = (0, react_1.useMemo)(() => {
|
|
566
615
|
return dashboardConfig[formData.dashboardName ?? report?.dashboardName ?? '']?.config;
|
|
567
616
|
}, [dashboardConfig, formData.dashboardName, report?.dashboardName]);
|
|
@@ -569,6 +618,19 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
569
618
|
return (currentDashboard?.tenantKeys?.map((tenantKey) => client?.allTenantTypes?.find((t) => t.tenantField === tenantKey)) ?? []);
|
|
570
619
|
}, [client?.allTenantTypes, currentDashboard?.tenantKeys]);
|
|
571
620
|
const dashboardOwner = currentDashboardTenants?.[0];
|
|
621
|
+
const currentTenantAsFormFlags = (0, react_1.useMemo)(() => {
|
|
622
|
+
if (!tenants || !tenants.length) {
|
|
623
|
+
return undefined;
|
|
624
|
+
}
|
|
625
|
+
const tenantField = typeof tenants[0] !== 'object'
|
|
626
|
+
? dashboardOwner?.name
|
|
627
|
+
: tenants[0]?.tenantField;
|
|
628
|
+
if (!tenantField) {
|
|
629
|
+
return undefined;
|
|
630
|
+
}
|
|
631
|
+
const tenantIds = typeof tenants[0] !== 'object' ? tenants : tenants[0]?.tenantIds;
|
|
632
|
+
return { [tenantField]: tenantIds };
|
|
633
|
+
}, [tenants, dashboardOwner]);
|
|
572
634
|
const invalidColumns = (0, react_1.useMemo)(() => {
|
|
573
635
|
if (!rows || !rows.length) {
|
|
574
636
|
return [];
|
|
@@ -583,6 +645,62 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
583
645
|
const data = formFormDataFromReport(report);
|
|
584
646
|
return getChartTypeOptions(data, dashboardConfig[data.dashboardName || '']);
|
|
585
647
|
})());
|
|
648
|
+
const reportContainsCustomFields = (0, react_1.useMemo)(() => {
|
|
649
|
+
// Check whether report query contains custom fields
|
|
650
|
+
const customFieldsMap = schemaData.customFields;
|
|
651
|
+
const reportQueryContainsCustomFields = allTables.some((table) => {
|
|
652
|
+
const tableColumns = referencedColumnsWithoutStar[table] ?? [];
|
|
653
|
+
const customFieldColumns = customFieldsMap?.[table] ?? [];
|
|
654
|
+
return tableColumns.some((column) => customFieldColumns.some((field) => field.field === column));
|
|
655
|
+
});
|
|
656
|
+
return reportQueryContainsCustomFields;
|
|
657
|
+
}, [allTables, referencedColumnsWithoutStar]);
|
|
658
|
+
const chartBuilderFormDataContainsCustomFields = (0, react_1.useMemo)(() => {
|
|
659
|
+
const customFields = allTables
|
|
660
|
+
.map((table) => schemaData.customFields?.[table] ?? [])
|
|
661
|
+
.flat();
|
|
662
|
+
const customFieldsMap = schemaData.customFields;
|
|
663
|
+
const pivotContainsCustomFields = customFields.some((field) => field.field === formData.pivot?.columnField ||
|
|
664
|
+
field.field === formData.pivot?.rowField ||
|
|
665
|
+
field.field === formData.pivot?.valueField);
|
|
666
|
+
const xAxisFieldContainsCustomFields = customFields.some((field) => field.field === formData.xAxisField);
|
|
667
|
+
const yAxisFieldsContainsCustomFields = formData.yAxisFields.some((yAxisField) => {
|
|
668
|
+
return customFields.some((field) => field.field === yAxisField.field);
|
|
669
|
+
});
|
|
670
|
+
const dateFieldContainsCustomFields = customFields.some((field) => field.field === formData.dateField?.field);
|
|
671
|
+
const canonicalFilterMapContainsCustomFields = Object.values(canonicalFilterMap).some((filter) => {
|
|
672
|
+
return customFieldsMap?.[filter.table || '']?.some((field) => field.field === filter.field);
|
|
673
|
+
});
|
|
674
|
+
return (pivotContainsCustomFields ||
|
|
675
|
+
xAxisFieldContainsCustomFields ||
|
|
676
|
+
yAxisFieldsContainsCustomFields ||
|
|
677
|
+
dateFieldContainsCustomFields ||
|
|
678
|
+
canonicalFilterMapContainsCustomFields);
|
|
679
|
+
}, [
|
|
680
|
+
allTables,
|
|
681
|
+
formData.pivot,
|
|
682
|
+
formData.xAxisField,
|
|
683
|
+
formData.yAxisFields,
|
|
684
|
+
formData.dateField,
|
|
685
|
+
canonicalFilterMap,
|
|
686
|
+
]);
|
|
687
|
+
const customFieldsInTabularColumns = (0, react_1.useMemo)(() => {
|
|
688
|
+
const customFields = allTables
|
|
689
|
+
.map((table) => schemaData.customFields?.[table] ?? [])
|
|
690
|
+
.flat();
|
|
691
|
+
return formData.columns.some((col) => {
|
|
692
|
+
return customFields.some((field) => field.field === col.field);
|
|
693
|
+
});
|
|
694
|
+
}, [allTables, formData.columns]);
|
|
695
|
+
const containsCustomFields = (0, react_1.useMemo)(() => {
|
|
696
|
+
return (reportContainsCustomFields ||
|
|
697
|
+
customFieldsInTabularColumns ||
|
|
698
|
+
chartBuilderFormDataContainsCustomFields);
|
|
699
|
+
}, [
|
|
700
|
+
reportContainsCustomFields,
|
|
701
|
+
customFieldsInTabularColumns,
|
|
702
|
+
chartBuilderFormDataContainsCustomFields,
|
|
703
|
+
]);
|
|
586
704
|
(0, react_1.useEffect)(() => {
|
|
587
705
|
if (!loadingFormData && triggeredEditChart) {
|
|
588
706
|
editChart();
|
|
@@ -620,12 +738,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
620
738
|
const curDashboard = await updateDashboardFilters(dashboardName);
|
|
621
739
|
setDashboardOptions(dashboardOptions);
|
|
622
740
|
curFormData.dashboardName = dashboardName;
|
|
623
|
-
const curSchemaData = schemaData.
|
|
741
|
+
const curSchemaData = schemaData.schemaWithCustomFields;
|
|
624
742
|
if (!query) {
|
|
625
743
|
setLoadingFormData(false);
|
|
626
744
|
return;
|
|
627
745
|
}
|
|
628
746
|
const result = await getReferencedTables(client, query, curSchemaData);
|
|
747
|
+
const referencedTablesWithoutStar = await getReferencedTables(client, query, curSchemaData, true);
|
|
629
748
|
setDateFieldOptions(result.dateFields);
|
|
630
749
|
if (result.dateFields[0] && result.dateFields[0].columns[0]) {
|
|
631
750
|
setDefaultDateField({
|
|
@@ -649,6 +768,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
649
768
|
acc[table.name] = table.columns.map((col) => col.field);
|
|
650
769
|
return acc;
|
|
651
770
|
}, {});
|
|
771
|
+
const referencedColumnsWithoutStar = referencedTablesWithoutStar.referencedTablesAndColumns.reduce((acc, table) => {
|
|
772
|
+
acc[table.name] = table.columns.map((col) => col.field);
|
|
773
|
+
return acc;
|
|
774
|
+
}, {});
|
|
775
|
+
setReferencedColumnsWithoutStar(referencedColumnsWithoutStar);
|
|
652
776
|
setReferencedColumns(referencedColumns);
|
|
653
777
|
setTableName(result.dateFields[0]?.name);
|
|
654
778
|
const dateField = {
|
|
@@ -706,12 +830,20 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
706
830
|
};
|
|
707
831
|
}, [selectedPivotTable, formData.pivot]);
|
|
708
832
|
const chartData = (0, react_1.useMemo)(() => {
|
|
709
|
-
const data = createReportFromForm(formData, report ? { ...report, rowCount } : tempReport, selectedPivotTable, rows, currentDashboardFilters);
|
|
833
|
+
const data = createReportFromForm(formData, report ? { ...report, rowCount } : tempReport, selectedPivotTable, rows, currentDashboardFilters, referenceLineQueryResults);
|
|
710
834
|
return {
|
|
711
835
|
...data,
|
|
712
836
|
filterMap: canonicalFilterMap,
|
|
713
837
|
};
|
|
714
838
|
}, [formData, selectedPivotTable, report, rows, rowCount]);
|
|
839
|
+
const xAxisFormatOptions = (0, react_1.useMemo)(() => {
|
|
840
|
+
return chartData?.chartType === 'gauge'
|
|
841
|
+
? [
|
|
842
|
+
{ value: 'whole_number', label: 'whole number' },
|
|
843
|
+
{ value: 'two_decimal_places', label: 'two decimal places' },
|
|
844
|
+
{ value: 'percent', label: 'percentage' },
|
|
845
|
+
] : ALL_FORMAT_OPTIONS;
|
|
846
|
+
}, [chartData?.chartType]);
|
|
715
847
|
const fetchPivotData = async (pivot, tableInfo, uniqueValues, overrideFilters) => {
|
|
716
848
|
const dashboardFilters = filtersEnabled
|
|
717
849
|
? (overrideFilters ?? currentDashboardFilters)
|
|
@@ -760,11 +892,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
760
892
|
if (selectedPivotTable &&
|
|
761
893
|
selectedPivotTable.columns &&
|
|
762
894
|
formData.chartType === 'table') {
|
|
763
|
-
console.log('selectedPivotTable', selectedPivotTable);
|
|
764
895
|
const columns = selectedPivotTable.columns;
|
|
765
896
|
columns.forEach((col, index) => {
|
|
766
897
|
// ADD THE RIGHT FIELD TYPE FOR THE VALUE COLUMNS
|
|
767
|
-
if (
|
|
898
|
+
if (['min', 'max'].includes(formData.pivot?.aggregations?.[0]?.aggregationType ?? '') &&
|
|
768
899
|
index !== 0) {
|
|
769
900
|
col.format = 'two_decimal_places';
|
|
770
901
|
}
|
|
@@ -882,7 +1013,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
882
1013
|
fetchRowCount(processing, overrideFilters);
|
|
883
1014
|
if (formData.pivot) {
|
|
884
1015
|
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 ??
|
|
1016
|
+
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, destinationDashboard);
|
|
886
1017
|
fetchPivotData(formData.pivot, tableInfo, uniqueValues, overrideFilters);
|
|
887
1018
|
}
|
|
888
1019
|
catch (e) {
|
|
@@ -1035,7 +1166,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1035
1166
|
else if (field === 'dateField' &&
|
|
1036
1167
|
subfield === 'table' &&
|
|
1037
1168
|
!formData.dateField?.field) {
|
|
1038
|
-
const field = schemaData.
|
|
1169
|
+
const field = schemaData.schemaWithCustomFields?.find((elem) => elem.name === value)?.columns?.[0]?.field;
|
|
1039
1170
|
updatedForm.dateField = {
|
|
1040
1171
|
// @ts-ignore
|
|
1041
1172
|
...updatedForm[field],
|
|
@@ -1053,6 +1184,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1053
1184
|
// For simple fields
|
|
1054
1185
|
updatedForm = { ...updatedForm, [fieldName]: value };
|
|
1055
1186
|
}
|
|
1187
|
+
if (fieldName === 'chartType') {
|
|
1188
|
+
if (value === 'metric') {
|
|
1189
|
+
updatedForm.xAxisFormat = 'whole_number';
|
|
1190
|
+
}
|
|
1191
|
+
else if (value === 'gauge') {
|
|
1192
|
+
updatedForm.xAxisFormat = 'percent';
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1056
1195
|
let dashboardName = updatedForm.dashboardName;
|
|
1057
1196
|
if (fieldName === 'dashboardName') {
|
|
1058
1197
|
dashboardName = value;
|
|
@@ -1113,7 +1252,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1113
1252
|
if (fieldName === 'columns') {
|
|
1114
1253
|
setFormData({
|
|
1115
1254
|
...formData,
|
|
1116
|
-
columns: [
|
|
1255
|
+
columns: [
|
|
1256
|
+
...formData.columns,
|
|
1257
|
+
{ label: '', field: '', format: 'string' },
|
|
1258
|
+
],
|
|
1117
1259
|
});
|
|
1118
1260
|
}
|
|
1119
1261
|
else if (fieldName === 'yAxisFields') {
|
|
@@ -1121,7 +1263,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1121
1263
|
...formData,
|
|
1122
1264
|
yAxisFields: [
|
|
1123
1265
|
...formData.yAxisFields,
|
|
1124
|
-
{ label: '', field: '', format: '
|
|
1266
|
+
{ label: '', field: '', format: 'string' },
|
|
1125
1267
|
],
|
|
1126
1268
|
});
|
|
1127
1269
|
}
|
|
@@ -1139,6 +1281,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1139
1281
|
},
|
|
1140
1282
|
});
|
|
1141
1283
|
}
|
|
1284
|
+
else if (fieldName === 'referenceLines') {
|
|
1285
|
+
setFormData({
|
|
1286
|
+
...formData,
|
|
1287
|
+
referenceLines: [
|
|
1288
|
+
...formData.referenceLines,
|
|
1289
|
+
{ label: '', y1: undefined, y2: undefined },
|
|
1290
|
+
],
|
|
1291
|
+
});
|
|
1292
|
+
}
|
|
1142
1293
|
};
|
|
1143
1294
|
const handleRemoveField = (fieldName, index) => {
|
|
1144
1295
|
if (fieldName === 'pivot') {
|
|
@@ -1193,24 +1344,33 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1193
1344
|
pivot: formData.pivot,
|
|
1194
1345
|
referencedTables: allTables,
|
|
1195
1346
|
referencedColumns,
|
|
1347
|
+
includeCustomFields: includeCustomFields || containsCustomFields,
|
|
1196
1348
|
template: tenants
|
|
1197
1349
|
? undefined
|
|
1198
1350
|
: report && !isAdmin && formData.template
|
|
1199
1351
|
? false
|
|
1200
1352
|
: formData.template,
|
|
1201
|
-
reportFlags:
|
|
1202
|
-
?
|
|
1203
|
-
|
|
1204
|
-
.
|
|
1205
|
-
|
|
1206
|
-
key,
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1353
|
+
reportFlags: containsCustomFields
|
|
1354
|
+
? currentTenantAsFormFlags
|
|
1355
|
+
: formFlags
|
|
1356
|
+
? Object.fromEntries(Object.entries(formFlags)
|
|
1357
|
+
.filter(([, value]) => value.length > 0)
|
|
1358
|
+
.map(([key, value]) => {
|
|
1359
|
+
return [
|
|
1360
|
+
key,
|
|
1361
|
+
Object.keys(allTenantMap).length > 1 &&
|
|
1362
|
+
allTenantMap[key]?.length === value.length
|
|
1363
|
+
? constants_1.ALL_TENANTS
|
|
1364
|
+
: value,
|
|
1365
|
+
];
|
|
1366
|
+
}))
|
|
1367
|
+
: undefined,
|
|
1368
|
+
referenceLines: formData.referenceLines.map((line) => {
|
|
1369
|
+
return {
|
|
1370
|
+
label: line.label,
|
|
1371
|
+
query: line.label === constants_1.REFERENCE_LINE ? [Number(line.y1 ?? 0) || 0, Number(line.y2 ?? 0) || 0] : ''
|
|
1372
|
+
};
|
|
1373
|
+
}),
|
|
1214
1374
|
};
|
|
1215
1375
|
const resp = await (0, report_1.saveReport)({
|
|
1216
1376
|
report: { ...newReport, rows: undefined, pivotRows: undefined }, // stop including rows in request
|
|
@@ -1289,7 +1449,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1289
1449
|
// formData.chartType === 'metric'
|
|
1290
1450
|
// ? 100
|
|
1291
1451
|
// : `calc(${filtersEnabled ? 50 : 70}%)`,
|
|
1292
|
-
...(isHorizontalView && { flexGrow: formData.chartType
|
|
1452
|
+
...(isHorizontalView && { flexGrow: !['table'].includes(formData.chartType) ? 1 : 0 }),
|
|
1293
1453
|
}, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }))),
|
|
1294
1454
|
// Make sure to display non-pivoted table when using pivot chart
|
|
1295
1455
|
(isHorizontalView || (!isOpen && windowWidth < 1200)) && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
@@ -1306,8 +1466,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1306
1466
|
onFiltersEnabledChanged(hide);
|
|
1307
1467
|
}, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
|
|
1308
1468
|
width: '100%',
|
|
1309
|
-
height: formData.chartType === 'table'
|
|
1310
|
-
|
|
1469
|
+
height: formData.chartType === 'table'
|
|
1470
|
+
? 200
|
|
1471
|
+
: formData.chartType === 'metric'
|
|
1472
|
+
? 300
|
|
1473
|
+
: formData.chartType === 'US map' || formData.chartType === 'World map'
|
|
1474
|
+
? 'fit-content'
|
|
1475
|
+
: 500,
|
|
1476
|
+
flexGrow: !['table'].includes(formData.chartType) ? 1 : 0,
|
|
1311
1477
|
}, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: formData.columns, onPageChange: (page) => {
|
|
1312
1478
|
onPageChange(page);
|
|
1313
1479
|
setCurrentPage(page);
|
|
@@ -1341,8 +1507,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1341
1507
|
onFiltersEnabledChanged(hide);
|
|
1342
1508
|
}, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
|
|
1343
1509
|
width: '100%',
|
|
1344
|
-
height: formData.chartType === 'table'
|
|
1345
|
-
|
|
1510
|
+
height: formData.chartType === 'table'
|
|
1511
|
+
? 200
|
|
1512
|
+
: formData.chartType === 'metric'
|
|
1513
|
+
? 300
|
|
1514
|
+
: formData.chartType === 'US map' || formData.chartType === 'World map'
|
|
1515
|
+
? 'fit-content'
|
|
1516
|
+
: 500,
|
|
1517
|
+
flexGrow: !['table'].includes(formData.chartType) ? 1 : 0,
|
|
1346
1518
|
}, 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
1519
|
// {...autofocusRefProp}
|
|
1348
1520
|
, {
|
|
@@ -1353,10 +1525,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1353
1525
|
}, options: dashboardOptions.map((elem) => ({
|
|
1354
1526
|
label: elem.label,
|
|
1355
1527
|
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: {
|
|
1528
|
+
})), 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 }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1360
1529
|
display: 'flex',
|
|
1361
1530
|
flexDirection: 'column',
|
|
1362
1531
|
gap: 6,
|
|
@@ -1372,33 +1541,40 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1372
1541
|
setShowPivotPopover(true);
|
|
1373
1542
|
setPivotRowField(formData.pivot?.rowField);
|
|
1374
1543
|
setPivotColumnField(formData.pivot?.columnField);
|
|
1375
|
-
setPivotAggregations(formData.pivot?.aggregations ?? [
|
|
1544
|
+
setPivotAggregations(formData.pivot?.aggregations ?? [
|
|
1545
|
+
{
|
|
1376
1546
|
valueField: formData.pivot?.valueField,
|
|
1377
1547
|
aggregationType: formData.pivot?.aggregationType,
|
|
1378
1548
|
valueField2: formData.pivot?.valueField2,
|
|
1379
|
-
}
|
|
1549
|
+
},
|
|
1550
|
+
]);
|
|
1380
1551
|
setPivotPopUpTitle('Edit pivot');
|
|
1381
1552
|
}, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (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
1553
|
display: 'flex',
|
|
1383
1554
|
flexDirection: 'column',
|
|
1384
1555
|
}, 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 ?? '' }), (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
|
|
1385
|
-
? getPivotMetricOptions(formData.pivot)
|
|
1556
|
+
? getPivotMetricOptions(formData.pivot, selectedPivotTable, formData.chartType)
|
|
1386
1557
|
: columns.map((elem) => ({
|
|
1387
1558
|
label: elem.field,
|
|
1388
1559
|
value: elem.field,
|
|
1389
1560
|
})), 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
|
-
? '
|
|
1561
|
+
(0, PivotModal_1.isDateField)(formData.xAxisField ?? '')
|
|
1562
|
+
? 'string'
|
|
1392
1563
|
: formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
|
|
1393
|
-
(0, PivotModal_1.isDateField)(formData.
|
|
1394
|
-
? [{ value: '
|
|
1395
|
-
:
|
|
1396
|
-
? formData.pivot.aggregations?.length
|
|
1564
|
+
(0, PivotModal_1.isDateField)(formData.xAxisField ?? '')
|
|
1565
|
+
? [{ value: 'string', label: 'date' }]
|
|
1566
|
+
: 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 ?? '' }), (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
|
|
1567
|
+
? formData.pivot.aggregations?.length
|
|
1568
|
+
? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count')
|
|
1569
|
+
: 'count'
|
|
1397
1570
|
: yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
|
|
1398
1571
|
? [
|
|
1399
1572
|
{
|
|
1400
|
-
label: `Pivot Column (${formData.pivot.aggregations?.length ? (0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count' : 'count'})`,
|
|
1401
|
-
value: formData.pivot.aggregations
|
|
1573
|
+
label: `Pivot Column (${formData.pivot.aggregations?.length ? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count') : 'count'})`,
|
|
1574
|
+
value: formData.pivot.aggregations
|
|
1575
|
+
?.length
|
|
1576
|
+
? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count')
|
|
1577
|
+
: 'count',
|
|
1402
1578
|
},
|
|
1403
1579
|
]
|
|
1404
1580
|
: columns
|
|
@@ -1409,12 +1585,20 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1409
1585
|
label: elem.field,
|
|
1410
1586
|
value: elem.field,
|
|
1411
1587
|
})), 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) => {
|
|
1588
|
+
? (NUMBER_OPTIONS.find((option) => {
|
|
1413
1589
|
return (option.value === yAxisField.format);
|
|
1414
|
-
})?.value ?? NUMBER_OPTIONS[0].value
|
|
1590
|
+
})?.value ?? NUMBER_OPTIONS[0].value)
|
|
1415
1591
|
: yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
|
|
1416
1592
|
? NUMBER_OPTIONS
|
|
1417
|
-
:
|
|
1593
|
+
: 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'] && (chartData.chartType === 'line' || 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),
|
|
1594
|
+
// only include numeric columns
|
|
1595
|
+
options: [{
|
|
1596
|
+
label: 'Custom Values',
|
|
1597
|
+
value: constants_1.REFERENCE_LINE
|
|
1598
|
+
}].concat((selectedPivotTable?.columns ? selectedPivotTable.columns : columns).filter((c) => valueFormatter_1.NUMBER_FORMAT_TYPES.includes(c.format)).map((elem) => ({
|
|
1599
|
+
label: elem.field,
|
|
1600
|
+
value: elem.field,
|
|
1601
|
+
}))) }), 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
1602
|
width: '100%',
|
|
1419
1603
|
height: isHorizontalView || !isOpen ? 'calc(50% - 10px)' : 400,
|
|
1420
1604
|
flexGrow: 1,
|
|
@@ -1447,14 +1631,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1447
1631
|
column.field === formData.pivot.rowField
|
|
1448
1632
|
? formData.pivot &&
|
|
1449
1633
|
(0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
|
|
1450
|
-
? '
|
|
1634
|
+
? 'string'
|
|
1451
1635
|
: 'string'
|
|
1452
1636
|
: formData.pivot?.aggregationType ===
|
|
1453
1637
|
'percentage'
|
|
1454
1638
|
? 'percent'
|
|
1455
1639
|
: 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
|
|
1456
1640
|
? (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
|
|
1457
|
-
? [{ label: 'date', value: '
|
|
1641
|
+
? [{ label: 'date', value: 'string' }]
|
|
1458
1642
|
: [{ label: 'string', value: 'string' }]
|
|
1459
1643
|
: [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
|
|
1460
1644
|
: 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 +1649,17 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1465
1649
|
: columns.map((elem) => ({
|
|
1466
1650
|
label: elem.field,
|
|
1467
1651
|
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:
|
|
1652
|
+
})), 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
1653
|
// hide when pivoted and chartType === 'table'
|
|
1470
1654
|
(formData.pivot &&
|
|
1471
1655
|
selectedPivotTable &&
|
|
1472
1656
|
selectedPivotTable.columns &&
|
|
1473
|
-
formData.chartType === 'table')) && ((0, jsx_runtime_1.
|
|
1657
|
+
formData.chartType === 'table')) && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1658
|
+
display: 'flex',
|
|
1659
|
+
flexDirection: 'row',
|
|
1660
|
+
gap: 10,
|
|
1661
|
+
}, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" }), isAdmin &&
|
|
1662
|
+
client?.featureFlags?.customFieldsEnabled && ((0, jsx_runtime_1.jsx)(CheckboxComponent, { isChecked: containsCustomFields || includeCustomFields, label: "Include Custom Fields", onChange: () => setIncludeCustomFields((prev) => !prev), disabled: containsCustomFields }))] })) })] })] })), isAdmin && tenants && dashboardOwner && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1474
1663
|
display: 'flex',
|
|
1475
1664
|
flexDirection: 'column',
|
|
1476
1665
|
gap: 12,
|
|
@@ -1484,54 +1673,61 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1484
1673
|
width: 'fit-content',
|
|
1485
1674
|
gap: 12,
|
|
1486
1675
|
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
|
-
|
|
1676
|
+
}, 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: {
|
|
1677
|
+
maxWidth: '200px',
|
|
1678
|
+
whiteSpace: 'normal',
|
|
1679
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1680
|
+
outline: '1px solid #E7E7E7',
|
|
1681
|
+
borderRadius: 6,
|
|
1682
|
+
padding: 4,
|
|
1683
|
+
display: 'flex',
|
|
1684
|
+
flexDirection: 'row',
|
|
1685
|
+
marginLeft: 2,
|
|
1686
|
+
backgroundColor: '#FCFCFC',
|
|
1687
|
+
height: 38,
|
|
1688
|
+
width: 'fit-content',
|
|
1689
|
+
}, children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
1690
|
+
if (!containsCustomFields) {
|
|
1691
|
+
setCustomTenantAccess(false);
|
|
1692
|
+
setFormFlags(undefined);
|
|
1693
|
+
}
|
|
1694
|
+
}, style: {
|
|
1695
|
+
width: 95,
|
|
1696
|
+
outline: !(customTenantAccess || containsCustomFields)
|
|
1697
|
+
? '1px solid #E7E7E7'
|
|
1698
|
+
: undefined,
|
|
1699
|
+
backgroundColor: !(customTenantAccess || containsCustomFields)
|
|
1700
|
+
? 'white'
|
|
1701
|
+
: undefined,
|
|
1702
|
+
// Center text vertically and horizontally
|
|
1703
|
+
display: 'flex',
|
|
1704
|
+
justifyContent: 'center',
|
|
1705
|
+
alignItems: 'center',
|
|
1706
|
+
borderRadius: 6,
|
|
1707
|
+
fontSize: 14,
|
|
1708
|
+
fontWeight: 500,
|
|
1709
|
+
userSelect: 'none',
|
|
1710
|
+
}, children: "Global" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
1711
|
+
setCustomTenantAccess(true);
|
|
1712
|
+
}, style: {
|
|
1713
|
+
width: 95,
|
|
1714
|
+
outline: customTenantAccess || containsCustomFields
|
|
1715
|
+
? '1px solid #E7E7E7'
|
|
1716
|
+
: undefined,
|
|
1717
|
+
backgroundColor: customTenantAccess || containsCustomFields
|
|
1718
|
+
? 'white'
|
|
1719
|
+
: undefined,
|
|
1720
|
+
// Center text vertically and horizontally
|
|
1721
|
+
display: 'flex',
|
|
1722
|
+
justifyContent: 'center',
|
|
1723
|
+
alignItems: 'center',
|
|
1724
|
+
borderRadius: 6,
|
|
1725
|
+
fontSize: 14,
|
|
1726
|
+
fontWeight: 500,
|
|
1727
|
+
userSelect: 'none',
|
|
1728
|
+
}, children: "Custom" })] }) }), client?.allTenantTypes?.length === 1 ? ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { disabled: containsCustomFields, value: containsCustomFields
|
|
1729
|
+
? (currentTenantAsFormFlags?.[dashboardOwner.tenantField] ?? []) // Even though value requires string[], turns out flags can be numbers
|
|
1730
|
+
: (formFlags?.[dashboardOwner.tenantField] ?? []), onChange: (e) => setFormFlags({
|
|
1535
1731
|
...formFlags,
|
|
1536
1732
|
[dashboardOwner.tenantField]: e.target
|
|
1537
1733
|
.value,
|
|
@@ -1548,7 +1744,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1548
1744
|
})) ?? []), width: 200, emptyLabel: dashboardOwner.scope === 'database'
|
|
1549
1745
|
? 'No flags supplied'
|
|
1550
1746
|
: undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
|
|
1551
|
-
display: customTenantAccess
|
|
1747
|
+
display: customTenantAccess || containsCustomFields
|
|
1748
|
+
? 'inline'
|
|
1749
|
+
: 'none',
|
|
1552
1750
|
marginTop: -1,
|
|
1553
1751
|
marginBottom: -4,
|
|
1554
1752
|
} })) : ((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 +1757,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1559
1757
|
acc[tenantType.tenantField] = tenantType.name;
|
|
1560
1758
|
return acc;
|
|
1561
1759
|
}, {}) ?? {}, width: 200, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
|
|
1562
|
-
display: customTenantAccess
|
|
1760
|
+
display: customTenantAccess || containsCustomFields
|
|
1761
|
+
? 'inline'
|
|
1762
|
+
: 'none',
|
|
1563
1763
|
marginTop: -1,
|
|
1564
1764
|
marginBottom: -4,
|
|
1565
1765
|
}, owner: dashboardOwner.tenantField }))] }) })] })), specificDashboardFilters.length > 0 && isAdmin && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
@@ -1604,7 +1804,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1604
1804
|
...filterMap,
|
|
1605
1805
|
[filter.label]: {
|
|
1606
1806
|
table: e.target.value,
|
|
1607
|
-
field: schemaData.
|
|
1807
|
+
field: schemaData.schemaWithCustomFields
|
|
1608
1808
|
.find((t) => t.name == e.target.value)
|
|
1609
1809
|
?.columns.find((elem) => elem.field ===
|
|
1610
1810
|
(filterMap[filter.label]?.field ??
|
|
@@ -1625,7 +1825,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1625
1825
|
filter.table,
|
|
1626
1826
|
field: e.target.value,
|
|
1627
1827
|
},
|
|
1628
|
-
}), options: schemaData.
|
|
1828
|
+
}), options: schemaData.schemaWithCustomFields
|
|
1629
1829
|
.find((t) => t.name ==
|
|
1630
1830
|
(filterMap[filter.label]?.table ??
|
|
1631
1831
|
filter.table) &&
|
|
@@ -1655,8 +1855,12 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
|
|
|
1655
1855
|
justifyContent: 'space-between',
|
|
1656
1856
|
alignItems: 'center',
|
|
1657
1857
|
gap: 6,
|
|
1658
|
-
}, children: [!!filterIssues?.length &&
|
|
1659
|
-
|
|
1858
|
+
}, children: [!!filterIssues?.length && ((0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
1859
|
+
display: 'flex',
|
|
1860
|
+
flexDirection: 'row',
|
|
1861
|
+
gap: 10,
|
|
1862
|
+
backgroundColor: 'white',
|
|
1863
|
+
}, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
|
|
1660
1864
|
setIsOpen(false);
|
|
1661
1865
|
onDiscardChanges && onDiscardChanges();
|
|
1662
1866
|
}, label: 'Discard changes' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
|