@quillsql/react 2.11.19 → 2.11.21
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 +6 -0
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +13 -13
- package/dist/cjs/ChartBuilder.d.ts +27 -6
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +86 -57
- package/dist/cjs/ChartEditor.d.ts +12 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +3 -3
- package/dist/cjs/Dashboard.d.ts +3 -2
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +1 -1
- package/dist/cjs/ReportBuilder.d.ts +9 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +56 -41
- package/dist/cjs/SQLEditor.d.ts +7 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +3 -6
- package/dist/cjs/Table.d.ts +6 -0
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +4 -4
- package/dist/cjs/components/Chart/BarChart.d.ts +2 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +6 -4
- package/dist/cjs/components/Chart/BarList.d.ts +3 -2
- package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarList.js +3 -3
- package/dist/cjs/components/Chart/ChartError.d.ts +1 -1
- package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartError.js +2 -2
- package/dist/cjs/components/Chart/ChartSkeleton.d.ts +2 -1
- package/dist/cjs/components/Chart/ChartSkeleton.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartSkeleton.js +2 -2
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +3 -3
- package/dist/cjs/components/Chart/PieChart.d.ts +1 -0
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/PieChart.js +4 -100
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +2 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +2 -2
- package/dist/cjs/components/QuillCard.d.ts +1 -1
- package/dist/cjs/components/QuillCard.d.ts.map +1 -1
- package/dist/cjs/components/QuillCard.js +1 -1
- package/dist/cjs/components/QuillSelect.d.ts +1 -1
- package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelect.js +5 -3
- package/dist/cjs/components/QuillTable.d.ts +2 -1
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +5 -5
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +2 -9
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -2
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +4 -16
- package/dist/cjs/components/UiComponents.d.ts +9 -9
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +32 -17
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.js +3 -3
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +25 -24
- package/dist/cjs/utils/color.d.ts +6 -0
- package/dist/cjs/utils/color.d.ts.map +1 -1
- package/dist/cjs/utils/color.js +98 -1
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +32 -2
- package/dist/esm/Chart.d.ts +6 -0
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +13 -13
- package/dist/esm/ChartBuilder.d.ts +27 -6
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +87 -58
- package/dist/esm/ChartEditor.d.ts +12 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +4 -4
- package/dist/esm/Dashboard.d.ts +3 -2
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.js +1 -1
- package/dist/esm/ReportBuilder.d.ts +9 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +56 -41
- package/dist/esm/SQLEditor.d.ts +7 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +3 -6
- package/dist/esm/Table.d.ts +6 -0
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +4 -4
- package/dist/esm/components/Chart/BarChart.d.ts +2 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +7 -5
- package/dist/esm/components/Chart/BarList.d.ts +3 -2
- package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarList.js +3 -3
- package/dist/esm/components/Chart/ChartError.d.ts +1 -1
- package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartError.js +2 -2
- package/dist/esm/components/Chart/ChartSkeleton.d.ts +2 -1
- package/dist/esm/components/Chart/ChartSkeleton.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartSkeleton.js +2 -2
- package/dist/esm/components/Chart/LineChart.d.ts +2 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +3 -3
- package/dist/esm/components/Chart/PieChart.d.ts +1 -0
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.js +3 -99
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts +2 -1
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +2 -2
- package/dist/esm/components/QuillCard.d.ts +1 -1
- package/dist/esm/components/QuillCard.d.ts.map +1 -1
- package/dist/esm/components/QuillCard.js +1 -1
- package/dist/esm/components/QuillSelect.d.ts +1 -1
- package/dist/esm/components/QuillSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillSelect.js +5 -3
- package/dist/esm/components/QuillTable.d.ts +2 -1
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +5 -5
- package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnPopover.js +2 -9
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +2 -2
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +4 -16
- package/dist/esm/components/UiComponents.d.ts +9 -9
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +32 -17
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts +1 -1
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +25 -24
- package/dist/esm/utils/color.d.ts +6 -0
- package/dist/esm/utils/color.d.ts.map +1 -1
- package/dist/esm/utils/color.js +96 -0
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +32 -2
- package/package.json +1 -1
|
@@ -223,6 +223,26 @@ const format_wo_yyyy = (value) => {
|
|
|
223
223
|
return 'Invalid date';
|
|
224
224
|
return `${(0, date_fns_1.getWeek)(utcDate)},${utcDate.getFullYear()}`;
|
|
225
225
|
};
|
|
226
|
+
/**
|
|
227
|
+
* Parses a numeric string back into a number, taking into account that
|
|
228
|
+
* users in different locales will format numbers differently (eg. 1,234 means
|
|
229
|
+
* something different from 1.234 in different countries).
|
|
230
|
+
*
|
|
231
|
+
* see: https://stackoverflow.com/a/45309230/9566888
|
|
232
|
+
*/
|
|
233
|
+
function parseNumber(value) {
|
|
234
|
+
if (typeof value === 'number')
|
|
235
|
+
return value;
|
|
236
|
+
if (typeof value !== 'string')
|
|
237
|
+
return Number.NaN;
|
|
238
|
+
const example = localeFormatter.format(1.1);
|
|
239
|
+
const cleanPattern = new RegExp(`[^-+0-9${example.charAt(1)}]`, 'g');
|
|
240
|
+
const cleaned = value.replace(cleanPattern, '');
|
|
241
|
+
const normalized = cleaned.replace(example.charAt(1), '.');
|
|
242
|
+
return parseFloat(normalized);
|
|
243
|
+
}
|
|
244
|
+
// Moved this out of parseNumber for perf reasons
|
|
245
|
+
const localeFormatter = Intl.NumberFormat(typeof navigator !== 'undefined' ? navigator.language : 'en-US');
|
|
226
246
|
const compareValues = (a, b, column) => {
|
|
227
247
|
const valueA = a[column];
|
|
228
248
|
const valueB = b[column];
|
|
@@ -236,9 +256,19 @@ const compareValues = (a, b, column) => {
|
|
|
236
256
|
else if (valueB === null) {
|
|
237
257
|
return 1; // ValueB is null, consider it smaller
|
|
238
258
|
}
|
|
259
|
+
// Undefined checks
|
|
260
|
+
if (valueA === undefined && valueB === undefined) {
|
|
261
|
+
return 0; // Both values are undefined, consider them equal
|
|
262
|
+
}
|
|
263
|
+
else if (valueA === undefined) {
|
|
264
|
+
return -1; // ValueA is undefined, consider it smaller
|
|
265
|
+
}
|
|
266
|
+
else if (valueB === undefined) {
|
|
267
|
+
return 1; // ValueB is undefined, consider it smaller
|
|
268
|
+
}
|
|
239
269
|
// For numbers
|
|
240
|
-
if (!isNaN(valueA) && !isNaN(valueB)) {
|
|
241
|
-
return valueA - valueB;
|
|
270
|
+
if (!isNaN(parseNumber(valueA)) && !isNaN(parseNumber(valueB))) {
|
|
271
|
+
return parseNumber(valueA) - parseNumber(valueB);
|
|
242
272
|
}
|
|
243
273
|
// For dates
|
|
244
274
|
const dateA = new Date(valueA);
|
package/dist/esm/Chart.d.ts
CHANGED
|
@@ -94,6 +94,12 @@ export interface ChartProps {
|
|
|
94
94
|
* ```
|
|
95
95
|
*/
|
|
96
96
|
mapColorsToFields?: (dashboardItem: DashboardItem, theme: QuillTheme) => ColorMapType;
|
|
97
|
+
/**
|
|
98
|
+
* Styles the top-level container of the Chart.
|
|
99
|
+
*
|
|
100
|
+
* This can be useful for TailwindCSS-style classname strings.
|
|
101
|
+
*/
|
|
102
|
+
className?: string;
|
|
97
103
|
/**
|
|
98
104
|
* Styles the top-level container of the Chart.
|
|
99
105
|
*/
|
package/dist/esm/Chart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgB7C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgB7C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAgGjD,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,WAQhE;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;CACH,CAAC;AAeF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,aAAa,GAAG,GAAG,CAAC;IAE7B;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,iBAAiB,CAAC,EAAE,CAClB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,UAAU,KACd,YAAY,CAAC;IAElB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,KAAK,UAAW,UAAU,4CAsC/B,CAAC;AAyiBF,eAAe,KAAK,CAAC"}
|
package/dist/esm/Chart.js
CHANGED
|
@@ -112,9 +112,9 @@ const Chart = (props) => {
|
|
|
112
112
|
? theme.chartColors
|
|
113
113
|
: ['#4E80EE', '#E14F62', '#55B5A6', '#E9A23B', '#6466E9', '#55B685'];
|
|
114
114
|
}, [data.colors]);
|
|
115
|
-
return (_jsx(ChartUpdater, { chartId: data.chartId, containerStyle: data.containerStyle, colors: chartColors, isAnimationActive: data.isAnimationActive, hideXAxis: data.hideXAxis, hideYAxis: data.hideYAxis, hideCartesianGrid: data.hideCartesianGrid, hideDateRangeFilter: data.hideDateRangeFilter, comparisonLineStyle: data.comparisonLineStyle, mapColorsToFields: data.mapColorsToFields ?? fallbackMapColorsToFields }));
|
|
115
|
+
return (_jsx(ChartUpdater, { chartId: data.chartId, className: data.className, containerStyle: data.containerStyle, colors: chartColors, isAnimationActive: data.isAnimationActive, hideXAxis: data.hideXAxis, hideYAxis: data.hideYAxis, hideCartesianGrid: data.hideCartesianGrid, hideDateRangeFilter: data.hideDateRangeFilter, comparisonLineStyle: data.comparisonLineStyle, mapColorsToFields: data.mapColorsToFields ?? fallbackMapColorsToFields }));
|
|
116
116
|
};
|
|
117
|
-
const ChartUpdater = ({ colors, chartId, containerStyle, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, comparisonLineStyle, hideDateRangeFilter, mapColorsToFields, }) => {
|
|
117
|
+
const ChartUpdater = ({ colors, chartId, className, containerStyle, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, comparisonLineStyle, hideDateRangeFilter, mapColorsToFields, }) => {
|
|
118
118
|
const { dispatch, dashboard } = useContext(DashboardContext);
|
|
119
119
|
const { dashboardFilters } = useContext(DashboardFiltersContext);
|
|
120
120
|
const [initialLoad, setInitialLoad] = useState(true);
|
|
@@ -191,9 +191,9 @@ const ChartUpdater = ({ colors, chartId, containerStyle, isAnimationActive, hide
|
|
|
191
191
|
setInitialLoad(false);
|
|
192
192
|
getChartOptions();
|
|
193
193
|
}, [dashboardFilters, client, chartId]);
|
|
194
|
-
return (_jsx(ChartDisplay, { config: dashboard[chartId], colors: colors, containerStyle: containerStyle, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, comparisonLineStyle: comparisonLineStyle, isAnimationActive: isAnimationActive, isComparison: isComparison, loading: loading || initialLoad, error: error, colorMap: colorMap }));
|
|
194
|
+
return (_jsx(ChartDisplay, { config: dashboard[chartId], colors: colors, className: className, containerStyle: containerStyle, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, comparisonLineStyle: comparisonLineStyle, isAnimationActive: isAnimationActive, isComparison: isComparison, loading: loading || initialLoad, error: error, colorMap: colorMap }));
|
|
195
195
|
};
|
|
196
|
-
const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hideCartesianGrid, comparisonLineStyle, isAnimationActive, loading = false, error = undefined, isComparison = false, colorMap, }) => {
|
|
196
|
+
const ChartDisplay = ({ config, colors, className, containerStyle, hideXAxis, hideYAxis, hideCartesianGrid, comparisonLineStyle, isAnimationActive, loading = false, error = undefined, isComparison = false, colorMap, }) => {
|
|
197
197
|
const { dashboardFilters } = useContext(DashboardFiltersContext);
|
|
198
198
|
const theme = useTheme();
|
|
199
199
|
const chartColors = useMemo(() => {
|
|
@@ -232,10 +232,10 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
232
232
|
: null;
|
|
233
233
|
}, [pivotTable, config?.yAxisFields]);
|
|
234
234
|
if (error) {
|
|
235
|
-
return _jsx(ChartError, { containerStyle: containerStyle });
|
|
235
|
+
return _jsx(ChartError, { className: className, containerStyle: containerStyle });
|
|
236
236
|
}
|
|
237
237
|
else if (!config || loading) {
|
|
238
|
-
return _jsx(ChartSkeleton, { containerStyle: containerStyle });
|
|
238
|
+
return _jsx(ChartSkeleton, { className: className, containerStyle: containerStyle });
|
|
239
239
|
}
|
|
240
240
|
// TODO: Figure out if we can use ?? to coalesce these into the variable.
|
|
241
241
|
const chartTypes = [config?.chartType];
|
|
@@ -243,7 +243,7 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
243
243
|
const rows = pivotTable ? pivotTable.rows : config.rows;
|
|
244
244
|
const yAxisFields = pivotTableYAxis ? pivotTableYAxis : config.yAxisFields;
|
|
245
245
|
const xAxisField = config.xAxisField;
|
|
246
|
-
return (_jsx(PieChart, { containerStyle: containerStyle, data: rows.map((row) => {
|
|
246
|
+
return (_jsx(PieChart, { className: className, containerStyle: containerStyle, data: rows.map((row) => {
|
|
247
247
|
return {
|
|
248
248
|
...row,
|
|
249
249
|
count: parseInt(row[yAxisFields[0].field]) /
|
|
@@ -285,7 +285,7 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
285
285
|
return (_jsx(QuillTable, { rows: formattedRows ?? [], columns: columns ?? data.yAxisFields, rowsPerPage: config?.rowsPerPage || 10, containerStyle: {
|
|
286
286
|
width: containerStyle?.width || '100%',
|
|
287
287
|
height: containerStyle?.height || '400px',
|
|
288
|
-
}, showDownloadCSVButton: true, downloadCSV: () => {
|
|
288
|
+
}, className: className, showDownloadCSVButton: true, downloadCSV: () => {
|
|
289
289
|
downloadCSV({
|
|
290
290
|
rows: pivotTable?.rows ?? data.rows ?? [],
|
|
291
291
|
fields: columns ?? data.yAxisFields,
|
|
@@ -294,7 +294,7 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
294
294
|
} }));
|
|
295
295
|
}
|
|
296
296
|
if (chartTypes.includes('bar')) {
|
|
297
|
-
return (_jsx(BarList, { data: pivotTable ? pivotTable.rows : config.rows, theme: theme, yAxisFields: pivotTableYAxis ? pivotTableYAxis : config.yAxisFields, colors: chartColors, xAxisField: config.xAxisField, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, colorMap: colorMap }));
|
|
297
|
+
return (_jsx(BarList, { data: pivotTable ? pivotTable.rows : config.rows, theme: theme, yAxisFields: pivotTableYAxis ? pivotTableYAxis : config.yAxisFields, colors: chartColors, xAxisField: config.xAxisField, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, className: className, colorMap: colorMap }));
|
|
298
298
|
}
|
|
299
299
|
const yAxisFields = pivotTableYAxis
|
|
300
300
|
? pivotTableYAxis
|
|
@@ -320,7 +320,7 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
320
320
|
const yAxis = yAxisFields[0]?.field;
|
|
321
321
|
barChartData = [{ [xAxis]: '', [yAxis]: '0' }];
|
|
322
322
|
}
|
|
323
|
-
return (_jsx(BarChart, { colors: chartColors, theme: theme, isStacked: isPivot && yAxisFields.length > (dateFilter?.comparison ? 2 : 1), yAxisFields: yAxisFields, data: barChartData, xAxisField: config.xAxisField, xAxisLabel: config.xAxisLabel, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, colorMap: colorMap }));
|
|
323
|
+
return (_jsx(BarChart, { colors: chartColors, theme: theme, isStacked: isPivot && yAxisFields.length > (dateFilter?.comparison ? 2 : 1), yAxisFields: yAxisFields, data: barChartData, xAxisField: config.xAxisField, xAxisLabel: config.xAxisLabel, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, className: className, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, colorMap: colorMap }));
|
|
324
324
|
}
|
|
325
325
|
if (chartTypes.includes('metric')) {
|
|
326
326
|
const data = config;
|
|
@@ -343,7 +343,7 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
343
343
|
maxWidth: '100%',
|
|
344
344
|
width: '100%',
|
|
345
345
|
...containerStyle,
|
|
346
|
-
}, children: "No results" }));
|
|
346
|
+
}, className: className, children: "No results" }));
|
|
347
347
|
}
|
|
348
348
|
return (_jsxs("div", { style: {
|
|
349
349
|
fontFamily: theme?.fontFamily,
|
|
@@ -361,7 +361,7 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
361
361
|
display: 'flex',
|
|
362
362
|
width: '100%',
|
|
363
363
|
flexDirection: 'row',
|
|
364
|
-
}, children: [_jsxs("div", { style: {
|
|
364
|
+
}, className: className, children: [_jsxs("div", { style: {
|
|
365
365
|
display: 'flex',
|
|
366
366
|
gap: 4,
|
|
367
367
|
alignItems: 'baseline',
|
|
@@ -433,6 +433,6 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
433
433
|
{ [xAxis]: endDate, [yAxis]: '0' },
|
|
434
434
|
];
|
|
435
435
|
}
|
|
436
|
-
return (_jsx(LineChart, { colors: chartColors, colorMap: colorMap, yAxisFields: yAxisFields, data: lineChartData, xAxisField: config.xAxisField, xAxisLabel: config.xAxisLabel, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, comparisonLineStyle: comparisonLineStyle ?? 'solid' }));
|
|
436
|
+
return (_jsx(LineChart, { colors: chartColors, colorMap: colorMap, yAxisFields: yAxisFields, data: lineChartData, xAxisField: config.xAxisField, xAxisLabel: config.xAxisLabel, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, className: className, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, comparisonLineStyle: comparisonLineStyle ?? 'solid' }));
|
|
437
437
|
};
|
|
438
438
|
export default Chart;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
|
-
import { QuillTheme } from './QuillProvider';
|
|
3
2
|
import { DashboardItem } from './Dashboard';
|
|
4
3
|
export declare const numberFormatOptions: string[];
|
|
5
4
|
export declare const dateFormatOptions: string[];
|
|
@@ -15,6 +14,7 @@ export interface ChartBuilderProps {
|
|
|
15
14
|
SelectComponent?: (props: {
|
|
16
15
|
value: string;
|
|
17
16
|
label?: string;
|
|
17
|
+
width: number;
|
|
18
18
|
options: {
|
|
19
19
|
value: string;
|
|
20
20
|
label: string;
|
|
@@ -82,6 +82,17 @@ export interface ChartBuilderProps {
|
|
|
82
82
|
popoverTitle?: string;
|
|
83
83
|
popoverChildren: ReactNode;
|
|
84
84
|
}) => JSX.Element;
|
|
85
|
+
/** A table component. */
|
|
86
|
+
TableComponent?: (props: {
|
|
87
|
+
rows: {
|
|
88
|
+
[key: string]: any;
|
|
89
|
+
}[];
|
|
90
|
+
columns: {
|
|
91
|
+
field: string;
|
|
92
|
+
label: string;
|
|
93
|
+
}[];
|
|
94
|
+
isLoading?: boolean;
|
|
95
|
+
}) => JSX.Element;
|
|
85
96
|
/** The rows of the query response for this query. */
|
|
86
97
|
rows: {
|
|
87
98
|
[key: string]: any;
|
|
@@ -233,12 +244,22 @@ export declare function ChartBuilderWithModal(props: ChartBuilderProps): import(
|
|
|
233
244
|
* ### Chart Builder API
|
|
234
245
|
* @see https://docs.quillsql.com/components/chart-builder
|
|
235
246
|
*/
|
|
236
|
-
export default function ChartBuilder({ TextInputComponent, SelectComponent, ButtonComponent, SecondaryButtonComponent, HeaderComponent, LabelComponent, DeleteButtonComponent, TextComponent, PopoverComponent, CardComponent, isOpen, isHorizontalView, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, showDashboardDropdown, onAddToDashboardComplete, onDelete, fields: fieldsProp, dashboardItem, recommendedPivots: rp, createdPivots: cp, destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton, hideSubmitButton, }: ChartBuilderProps): import("react/jsx-runtime").JSX.Element | null;
|
|
237
|
-
export declare function DashboardFilterModal({ isOpen, setIsOpen,
|
|
247
|
+
export default function ChartBuilder({ TextInputComponent, SelectComponent, ButtonComponent, SecondaryButtonComponent, HeaderComponent, LabelComponent, DeleteButtonComponent, TextComponent, PopoverComponent, CardComponent, TableComponent, ModalComponent, isOpen, isHorizontalView, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, showDashboardDropdown, onAddToDashboardComplete, onDelete, fields: fieldsProp, dashboardItem, recommendedPivots: rp, createdPivots: cp, destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton, hideSubmitButton, }: ChartBuilderProps): import("react/jsx-runtime").JSX.Element | null;
|
|
248
|
+
export declare function DashboardFilterModal({ isOpen, setIsOpen, issues, ModalComponent, ButtonComponent, }: {
|
|
238
249
|
isOpen: boolean;
|
|
239
250
|
setIsOpen: (e: boolean) => void;
|
|
240
|
-
override: () => void;
|
|
241
|
-
theme: QuillTheme;
|
|
242
251
|
issues: string[];
|
|
243
|
-
|
|
252
|
+
ButtonComponent?: (props: {
|
|
253
|
+
onClick: () => void;
|
|
254
|
+
label: string;
|
|
255
|
+
}) => JSX.Element;
|
|
256
|
+
ModalComponent?: (props: {
|
|
257
|
+
isOpen: boolean;
|
|
258
|
+
setIsOpen: (isOpen: boolean) => void;
|
|
259
|
+
title?: string;
|
|
260
|
+
children: ReactNode;
|
|
261
|
+
width?: number;
|
|
262
|
+
height?: number;
|
|
263
|
+
}) => JSX.Element;
|
|
264
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
244
265
|
//# sourceMappingURL=ChartBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilder.d.ts","sourceRoot":"","sources":["../../src/ChartBuilder.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAOZ,SAAS,EACV,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartBuilder.d.ts","sourceRoot":"","sources":["../../src/ChartBuilder.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/ChartBuilder.js
CHANGED
|
@@ -7,11 +7,12 @@ import { getPostgresBasicType } from './components/ReportBuilder/util';
|
|
|
7
7
|
import { PivotModal, generatePivotTable, isDateField, } from './internals/ReportBuilder/PivotModal';
|
|
8
8
|
import { PivotCard } from './internals/ReportBuilder/PivotList';
|
|
9
9
|
import Chart from './Chart';
|
|
10
|
-
import { MemoizedModal, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, } from './components/UiComponents';
|
|
10
|
+
import { MemoizedModal, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, QuillTableComponent, } from './components/UiComponents';
|
|
11
11
|
import { mergeComparisonRange } from './utils/merge';
|
|
12
12
|
import { removeDoubleQuotes, snakeCaseToTitleCase, } from './utils/textProcessing';
|
|
13
13
|
import { QuillSelectComponent } from './components/QuillSelect';
|
|
14
14
|
import { QuillCard } from './components/QuillCard';
|
|
15
|
+
import { quillFormat } from './utils/valueFormatter';
|
|
15
16
|
const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
|
|
16
17
|
const POSTGRES_DATE_TYPES = [
|
|
17
18
|
'timestamp',
|
|
@@ -208,13 +209,14 @@ export function ChartBuilderWithModal(props) {
|
|
|
208
209
|
* ### Chart Builder API
|
|
209
210
|
* @see https://docs.quillsql.com/components/chart-builder
|
|
210
211
|
*/
|
|
211
|
-
export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, isOpen, isHorizontalView = true, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, fields: fieldsProp, dashboardItem = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton = false, hideSubmitButton = false, }) {
|
|
212
|
+
export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, TableComponent = QuillTableComponent, ModalComponent, isOpen, isHorizontalView = true, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, fields: fieldsProp, dashboardItem = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton = false, hideSubmitButton = false, }) {
|
|
212
213
|
const dateRange = dr || [null, null, null];
|
|
213
214
|
const [client] = useContext(ClientContext);
|
|
214
215
|
const [theme] = useContext(ThemeContext);
|
|
215
216
|
const [schema, setSchema] = useContext(SchemaContext);
|
|
217
|
+
const [windowWidth, setWindowWidth] = useState(1200);
|
|
216
218
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
217
|
-
const [divWidth, setDivWidth] = useState(
|
|
219
|
+
const [divWidth, setDivWidth] = useState('auto');
|
|
218
220
|
const { dispatch } = useContext(DashboardContext);
|
|
219
221
|
const fields = fieldsProp?.map((field) => ({
|
|
220
222
|
field: field.name,
|
|
@@ -224,33 +226,30 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
224
226
|
})) || [];
|
|
225
227
|
const parentRef = useRef(null);
|
|
226
228
|
const deleteRef = useRef(null);
|
|
229
|
+
const pivotCardContainer = useRef(null);
|
|
227
230
|
const modalPadding = 20;
|
|
228
231
|
const deleteButtonMargin = -13;
|
|
229
232
|
useEffect(() => {
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
? deleteRef?.current.offsetWidth - deleteButtonMargin
|
|
236
|
-
: 0));
|
|
233
|
+
const handleResize = () => setWindowWidth(window.innerWidth);
|
|
234
|
+
handleResize();
|
|
235
|
+
window.addEventListener('resize', handleResize);
|
|
236
|
+
return () => {
|
|
237
|
+
window.removeEventListener('resize', handleResize);
|
|
237
238
|
};
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
// Optional: Handle window resize
|
|
239
|
+
}, []);
|
|
240
|
+
useEffect(() => {
|
|
241
|
+
const calculateWidth = () => pivotCardContainer.current?.getBoundingClientRect().width ?? 'auto';
|
|
243
242
|
const handleResize = () => {
|
|
244
|
-
if (
|
|
243
|
+
if (pivotCardContainer.current) {
|
|
245
244
|
setDivWidth(calculateWidth());
|
|
246
245
|
}
|
|
247
246
|
};
|
|
247
|
+
handleResize();
|
|
248
248
|
window.addEventListener('resize', handleResize);
|
|
249
|
-
// Cleanup listener
|
|
250
249
|
return () => {
|
|
251
250
|
window.removeEventListener('resize', handleResize);
|
|
252
251
|
};
|
|
253
|
-
}, []);
|
|
252
|
+
}, [pivotCardContainer]);
|
|
254
253
|
// get schema
|
|
255
254
|
useEffect(() => {
|
|
256
255
|
let isSubscribed = true;
|
|
@@ -465,6 +464,41 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
465
464
|
return undefined;
|
|
466
465
|
}
|
|
467
466
|
}, [formData.pivot, rows]);
|
|
467
|
+
const formattedRows = useMemo(() => {
|
|
468
|
+
if (selectedPivotTable && formData.chartType === 'table') {
|
|
469
|
+
const columns = selectedPivotTable.columns;
|
|
470
|
+
columns.forEach((col, index) => {
|
|
471
|
+
// ADD THE RIGHT FIELD TYPE FOR THE VALUE COLUMNS
|
|
472
|
+
if (formData.pivot?.valueFieldType && index !== 0) {
|
|
473
|
+
col.format = formData.pivot.valueFieldType;
|
|
474
|
+
}
|
|
475
|
+
});
|
|
476
|
+
return selectedPivotTable.rows.map((row) => {
|
|
477
|
+
return columns.reduce((formattedRow, column) => {
|
|
478
|
+
// Apply the format function to each field in the row
|
|
479
|
+
const formattedValue = quillFormat({
|
|
480
|
+
value: row[column.field],
|
|
481
|
+
format: column.format,
|
|
482
|
+
});
|
|
483
|
+
formattedRow[column.field] = formattedValue;
|
|
484
|
+
return formattedRow;
|
|
485
|
+
}, {});
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
return rows.map((row) => {
|
|
490
|
+
return formData.columns.reduce((formattedRow, column) => {
|
|
491
|
+
// Apply the format function to each field in the row
|
|
492
|
+
const formattedValue = quillFormat({
|
|
493
|
+
value: row[column.field],
|
|
494
|
+
format: column.format,
|
|
495
|
+
});
|
|
496
|
+
formattedRow[column.field] = formattedValue;
|
|
497
|
+
return formattedRow;
|
|
498
|
+
}, {});
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
}, [selectedPivotTable, formData.columns, formData.chartType]);
|
|
468
502
|
const handleChange = (value, fieldName, index) => {
|
|
469
503
|
try {
|
|
470
504
|
// WE NEED TO REPROCESS THE PIVOT TABLE IF THE PIVOT COLUMN CHANGES
|
|
@@ -673,6 +707,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
673
707
|
query: queryNoDateColumn || query,
|
|
674
708
|
queryString: queryNoDateColumn || query,
|
|
675
709
|
pivot: formData.pivot,
|
|
710
|
+
referencedTables: allTables,
|
|
676
711
|
};
|
|
677
712
|
// @ts-ignore
|
|
678
713
|
if (cloudBody['rows']) {
|
|
@@ -720,10 +755,18 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
720
755
|
onAddToDashboardComplete();
|
|
721
756
|
}
|
|
722
757
|
};
|
|
758
|
+
// Prevent horizontal view on small screens.
|
|
759
|
+
isHorizontalView = windowWidth < 1200 ? false : isHorizontalView;
|
|
723
760
|
if (!schema) {
|
|
724
761
|
return null;
|
|
725
762
|
}
|
|
726
|
-
return (_jsxs("div", { style: {
|
|
763
|
+
return (_jsxs("div", { style: {
|
|
764
|
+
width: '100%',
|
|
765
|
+
height: '100%',
|
|
766
|
+
display: 'flex',
|
|
767
|
+
flexDirection: 'column',
|
|
768
|
+
flexGrow: 1,
|
|
769
|
+
}, children: [_jsxs("div", { id: "quill-chart-modal", style: {
|
|
727
770
|
width: '100%',
|
|
728
771
|
height: '100%',
|
|
729
772
|
maxWidth: '100%',
|
|
@@ -745,31 +788,18 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
745
788
|
height: formData.chartType === 'metric'
|
|
746
789
|
? 100
|
|
747
790
|
: isHorizontalView
|
|
748
|
-
? '
|
|
791
|
+
? 'calc(50% - 10px)'
|
|
749
792
|
: 400,
|
|
750
793
|
...(isHorizontalView && { flexGrow: 1 }),
|
|
751
794
|
} })),
|
|
752
795
|
// Make sure to display non-pivoted table when using pivot chart
|
|
753
|
-
isHorizontalView &&
|
|
754
|
-
...formData,
|
|
755
|
-
pivot: undefined,
|
|
756
|
-
chartType: 'table',
|
|
757
|
-
rows,
|
|
758
|
-
rowsPerPage: 10,
|
|
759
|
-
}, containerStyle: {
|
|
760
|
-
height: '100%',
|
|
796
|
+
isHorizontalView && (_jsx("div", { style: {
|
|
761
797
|
width: '100%',
|
|
798
|
+
height: 'calc(50% - 10px)',
|
|
762
799
|
flexGrow: 1,
|
|
763
|
-
} })) : (
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
rows,
|
|
767
|
-
rowsPerPage: 10,
|
|
768
|
-
}, containerStyle: {
|
|
769
|
-
height: '100%',
|
|
770
|
-
width: '100%',
|
|
771
|
-
flexGrow: 1,
|
|
772
|
-
} })))] }), (isOpen || !isHorizontalView) && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
|
|
800
|
+
}, children: formData.chartType !== 'table' ? (_jsx(TableComponent, { rows: formattedRows, columns: formData.columns })) : (_jsx(TableComponent, { rows: formattedRows, columns: selectedPivotTable
|
|
801
|
+
? selectedPivotTable.columns
|
|
802
|
+
: formData.columns })) }))] }), isOpen && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
|
|
773
803
|
display: 'flex',
|
|
774
804
|
flexDirection: 'column',
|
|
775
805
|
height: '100%',
|
|
@@ -785,10 +815,10 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
785
815
|
}, options: dashboardOptions.map((elem) => ({
|
|
786
816
|
label: elem.label,
|
|
787
817
|
value: elem.label,
|
|
788
|
-
})) })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Chart type" }), _jsx(SelectComponent, { value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
|
|
818
|
+
})), width: 200 })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Chart type" }), _jsx(SelectComponent, { value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
|
|
789
819
|
// filter out metric for all pivots
|
|
790
820
|
// filter out bar and pie for row and column pivot
|
|
791
|
-
options: getChartTypeOptions(formData) })] })] }), _jsx("br", {}), _jsxs("div", { style: {
|
|
821
|
+
options: getChartTypeOptions(formData), width: 200 })] })] }), _jsx("br", {}), _jsxs("div", { style: {
|
|
792
822
|
display: 'flex',
|
|
793
823
|
flexDirection: 'column',
|
|
794
824
|
gap: 12,
|
|
@@ -798,11 +828,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
798
828
|
// marginTop: 6,
|
|
799
829
|
display: 'flex',
|
|
800
830
|
flexDirection: 'column',
|
|
801
|
-
}, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot }) }), formData.pivot && (_jsx("div", { style: {
|
|
802
|
-
// width: 592,
|
|
803
|
-
paddingRight: 42,
|
|
804
|
-
maxWidth: 750,
|
|
805
|
-
}, children: _jsx("div", { style: { width: !isHorizontalView ? divWidth : 'auto' }, children: _jsx(PivotCard, { pivotTable: {
|
|
831
|
+
}, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot }) }), formData.pivot && (_jsx("div", { ref: pivotCardContainer, children: _jsx("div", { style: { width: !isHorizontalView ? divWidth : 'auto' }, children: _jsx(PivotCard, { pivotTable: {
|
|
806
832
|
pivot: formData.pivot,
|
|
807
833
|
rows: selectedPivotTable?.rows,
|
|
808
834
|
columns: selectedPivotTable?.columns,
|
|
@@ -828,7 +854,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
828
854
|
: fieldOptions.map((elem) => ({
|
|
829
855
|
label: elem.field,
|
|
830
856
|
value: elem.field,
|
|
831
|
-
})) }), _jsx(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.pivot
|
|
857
|
+
})), width: 200 }), _jsx(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.pivot
|
|
832
858
|
? formData.pivot.rowField
|
|
833
859
|
: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), _jsx(SelectComponent, { value: formData.pivot &&
|
|
834
860
|
isDateField(formData.pivot.rowFieldType)
|
|
@@ -836,7 +862,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
836
862
|
: formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
|
|
837
863
|
isDateField(formData.pivot.rowFieldType)
|
|
838
864
|
? [{ value: 'pivot_date', label: 'date' }]
|
|
839
|
-
: formatOptions })] }, 'xAxisField'), _jsx("br", {})] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(LabelComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), _jsx("div", { style: {
|
|
865
|
+
: formatOptions, width: 200 })] }, 'xAxisField'), _jsx("br", {})] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(LabelComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), _jsx("div", { style: {
|
|
840
866
|
display: 'flex',
|
|
841
867
|
flexDirection: 'column',
|
|
842
868
|
gap: 10,
|
|
@@ -860,7 +886,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
860
886
|
.map((elem) => ({
|
|
861
887
|
label: elem.field,
|
|
862
888
|
value: elem.field,
|
|
863
|
-
})) }), _jsx(TextInputComponent, { id: "chart-builder-y-axis-label", width: 200, value: formData.pivot?.valueField || yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'yAxisFields.label', index) }), _jsx(SelectComponent, { value: formData.pivot
|
|
889
|
+
})), width: 200 }), _jsx(TextInputComponent, { id: "chart-builder-y-axis-label", width: 200, value: formData.pivot?.valueField || yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'yAxisFields.label', index) }), _jsx(SelectComponent, { value: formData.pivot
|
|
864
890
|
? NUMBER_OPTIONS.find((option) => {
|
|
865
891
|
return (option.value === yAxisField.format);
|
|
866
892
|
})
|
|
@@ -869,7 +895,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
869
895
|
: 'whole_number'
|
|
870
896
|
: yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
|
|
871
897
|
? NUMBER_OPTIONS
|
|
872
|
-
: formatOptions }), formData.pivot === null && (_jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))) }), formData.pivot === null && (_jsxs(_Fragment, { children: [_jsx("br", {}), _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" })] }))] })), _jsx("br", {})] })),
|
|
898
|
+
: formatOptions, width: 200 }), formData.pivot === null && (_jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))) }), formData.pivot === null && (_jsxs(_Fragment, { children: [_jsx("br", {}), _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" })] }))] })), _jsx("br", {})] })), isHorizontalView && (_jsxs("div", { children: [_jsxs("div", { style: {
|
|
873
899
|
display: 'flex',
|
|
874
900
|
flexDirection: 'column',
|
|
875
901
|
gap: 6,
|
|
@@ -890,7 +916,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
890
916
|
}, children: [_jsx(SelectComponent, { value: column.label, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: selectedPivotTable.columns.map((elem) => ({
|
|
891
917
|
label: elem.label,
|
|
892
918
|
value: elem.label,
|
|
893
|
-
})) }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value:
|
|
919
|
+
})), width: 200 }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value:
|
|
894
920
|
// The first index use rowField for the rest of them use value fields
|
|
895
921
|
formData.pivot &&
|
|
896
922
|
column.field === formData.pivot.rowField
|
|
@@ -903,7 +929,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
903
929
|
? isDateField(formData.pivot.rowFieldType)
|
|
904
930
|
? [{ label: 'date', value: 'pivot_date' }]
|
|
905
931
|
: [{ label: 'string', value: 'string' }]
|
|
906
|
-
: [...NUMBER_OPTIONS] })] }, 'column' + index)))
|
|
932
|
+
: [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
|
|
907
933
|
: formData.columns.map((column, index) => (_jsxs("div", { style: {
|
|
908
934
|
display: 'flex',
|
|
909
935
|
flexDirection: 'row',
|
|
@@ -911,7 +937,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
911
937
|
}, children: [_jsx(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: fields.map((elem) => ({
|
|
912
938
|
label: elem.field,
|
|
913
939
|
value: elem.field,
|
|
914
|
-
})) }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: formatOptions }), _jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))) }), _jsx("br", {}), _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" }), _jsx("br", {}), _jsx("br", {})] })), showDateFieldOptions && formData.dateField && (_jsxs("div", { style: {
|
|
940
|
+
})), width: 200 }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: formatOptions, width: 200 }), _jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))) }), _jsx("br", {}), _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" }), _jsx("br", {}), _jsx("br", {})] })), showDateFieldOptions && formData.dateField && (_jsxs("div", { style: {
|
|
915
941
|
display: 'flex',
|
|
916
942
|
flexDirection: 'column',
|
|
917
943
|
gap: 6,
|
|
@@ -923,12 +949,12 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
923
949
|
}, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Table" }), _jsx(SelectComponent, { value: formData.dateField?.table, onChange: (e) => handleChange(e.target.value, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
|
|
924
950
|
label: elem.name,
|
|
925
951
|
value: elem.name,
|
|
926
|
-
})) })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Field" }), _jsx(SelectComponent, { value: removeDoubleQuotes(formData.dateField?.field), onChange: (e) => handleChange(e.target.value, 'dateField.field'), options: dateFieldOptions
|
|
952
|
+
})), width: 200 })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Field" }), _jsx(SelectComponent, { value: removeDoubleQuotes(formData.dateField?.field), onChange: (e) => handleChange(e.target.value, 'dateField.field'), options: dateFieldOptions
|
|
927
953
|
?.find((elem) => elem.name === formData.dateField?.table)
|
|
928
954
|
?.columns?.map((elem) => ({
|
|
929
955
|
label: elem.name,
|
|
930
956
|
value: elem.name,
|
|
931
|
-
})) || [] })] })] }), _jsx("br", {})] })), showAccessControlOptions && (_jsxs("div", { style: {
|
|
957
|
+
})) || [], width: 200 })] })] }), _jsx("br", {})] })), showAccessControlOptions && (_jsxs("div", { style: {
|
|
932
958
|
display: 'flex',
|
|
933
959
|
flexDirection: 'column',
|
|
934
960
|
gap: 12,
|
|
@@ -943,7 +969,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
943
969
|
? buttonLabel
|
|
944
970
|
: dashboardItem
|
|
945
971
|
? 'Save changes'
|
|
946
|
-
: 'Add to dashboard' }))] })] }))] }), _jsx(DashboardFilterModal, { isOpen: showFilterModal, setIsOpen: setShowFilterModal,
|
|
972
|
+
: 'Add to dashboard' }))] })] }))] }), _jsx(DashboardFilterModal, { isOpen: showFilterModal, setIsOpen: setShowFilterModal, issues: filterIssues, ButtonComponent: ButtonComponent })] }));
|
|
947
973
|
}
|
|
948
974
|
function SegmentedControl({ onChange, value, theme, organizationName, }) {
|
|
949
975
|
return (_jsxs("div", { style: {
|
|
@@ -1007,17 +1033,20 @@ function SegmentedControl({ onChange, value, theme, organizationName, }) {
|
|
|
1007
1033
|
}
|
|
1008
1034
|
` }), organizationName] }))] }));
|
|
1009
1035
|
}
|
|
1010
|
-
export function DashboardFilterModal({ isOpen, setIsOpen,
|
|
1011
|
-
|
|
1036
|
+
export function DashboardFilterModal({ isOpen, setIsOpen, issues, ModalComponent = MemoizedModal, ButtonComponent = MemoizedButton, }) {
|
|
1037
|
+
if (!isOpen)
|
|
1038
|
+
return null;
|
|
1039
|
+
return (_jsx(ModalComponent, { isOpen: isOpen, setIsOpen: setIsOpen, title: 'Chart not compatible with selected dashboard', width: 600, height: 400, children: _jsxs("div", { style: {
|
|
1012
1040
|
display: 'flex',
|
|
1013
1041
|
flexDirection: 'column',
|
|
1014
1042
|
width: '600px',
|
|
1015
1043
|
padding: '20px',
|
|
1016
1044
|
boxSizing: 'border-box',
|
|
1045
|
+
overflow: 'scroll',
|
|
1017
1046
|
}, children: [issues.map((issue, index) => (_jsx("span", { style: { paddingTop: '10px' }, children: issue }, issue))), _jsx("br", {}), _jsx("div", { style: {
|
|
1018
1047
|
display: 'flex',
|
|
1019
1048
|
flexDirection: 'row',
|
|
1020
1049
|
gap: '12px',
|
|
1021
1050
|
justifyContent: 'flex-end',
|
|
1022
|
-
}, children: _jsx(
|
|
1051
|
+
}, children: _jsx(ButtonComponent, { label: "Got It", onClick: () => setIsOpen(false) }) })] }) }));
|
|
1023
1052
|
}
|