@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.
Files changed (143) hide show
  1. package/dist/cjs/Chart.d.ts +6 -0
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +13 -13
  4. package/dist/cjs/ChartBuilder.d.ts +27 -6
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +86 -57
  7. package/dist/cjs/ChartEditor.d.ts +12 -1
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +3 -3
  10. package/dist/cjs/Dashboard.d.ts +3 -2
  11. package/dist/cjs/Dashboard.d.ts.map +1 -1
  12. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  13. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +1 -1
  14. package/dist/cjs/ReportBuilder.d.ts +9 -1
  15. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  16. package/dist/cjs/ReportBuilder.js +56 -41
  17. package/dist/cjs/SQLEditor.d.ts +7 -1
  18. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  19. package/dist/cjs/SQLEditor.js +3 -6
  20. package/dist/cjs/Table.d.ts +6 -0
  21. package/dist/cjs/Table.d.ts.map +1 -1
  22. package/dist/cjs/Table.js +4 -4
  23. package/dist/cjs/components/Chart/BarChart.d.ts +2 -1
  24. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  25. package/dist/cjs/components/Chart/BarChart.js +6 -4
  26. package/dist/cjs/components/Chart/BarList.d.ts +3 -2
  27. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  28. package/dist/cjs/components/Chart/BarList.js +3 -3
  29. package/dist/cjs/components/Chart/ChartError.d.ts +1 -1
  30. package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
  31. package/dist/cjs/components/Chart/ChartError.js +2 -2
  32. package/dist/cjs/components/Chart/ChartSkeleton.d.ts +2 -1
  33. package/dist/cjs/components/Chart/ChartSkeleton.d.ts.map +1 -1
  34. package/dist/cjs/components/Chart/ChartSkeleton.js +2 -2
  35. package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
  36. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  37. package/dist/cjs/components/Chart/LineChart.js +3 -3
  38. package/dist/cjs/components/Chart/PieChart.d.ts +1 -0
  39. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  40. package/dist/cjs/components/Chart/PieChart.js +4 -100
  41. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +2 -1
  42. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  43. package/dist/cjs/components/Dashboard/DashboardFilter.js +2 -2
  44. package/dist/cjs/components/QuillCard.d.ts +1 -1
  45. package/dist/cjs/components/QuillCard.d.ts.map +1 -1
  46. package/dist/cjs/components/QuillCard.js +1 -1
  47. package/dist/cjs/components/QuillSelect.d.ts +1 -1
  48. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  49. package/dist/cjs/components/QuillSelect.js +5 -3
  50. package/dist/cjs/components/QuillTable.d.ts +2 -1
  51. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  52. package/dist/cjs/components/QuillTable.js +5 -5
  53. package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
  54. package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +2 -9
  55. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  56. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -2
  57. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  58. package/dist/cjs/components/ReportBuilder/ui.js +4 -16
  59. package/dist/cjs/components/UiComponents.d.ts +9 -9
  60. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  61. package/dist/cjs/components/UiComponents.js +32 -17
  62. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +1 -1
  63. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  64. package/dist/cjs/internals/ReportBuilder/PivotList.js +3 -3
  65. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  66. package/dist/cjs/internals/ReportBuilder/PivotModal.js +25 -24
  67. package/dist/cjs/utils/color.d.ts +6 -0
  68. package/dist/cjs/utils/color.d.ts.map +1 -1
  69. package/dist/cjs/utils/color.js +98 -1
  70. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  71. package/dist/cjs/utils/valueFormatter.js +32 -2
  72. package/dist/esm/Chart.d.ts +6 -0
  73. package/dist/esm/Chart.d.ts.map +1 -1
  74. package/dist/esm/Chart.js +13 -13
  75. package/dist/esm/ChartBuilder.d.ts +27 -6
  76. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  77. package/dist/esm/ChartBuilder.js +87 -58
  78. package/dist/esm/ChartEditor.d.ts +12 -1
  79. package/dist/esm/ChartEditor.d.ts.map +1 -1
  80. package/dist/esm/ChartEditor.js +4 -4
  81. package/dist/esm/Dashboard.d.ts +3 -2
  82. package/dist/esm/Dashboard.d.ts.map +1 -1
  83. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  84. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +1 -1
  85. package/dist/esm/ReportBuilder.d.ts +9 -1
  86. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  87. package/dist/esm/ReportBuilder.js +56 -41
  88. package/dist/esm/SQLEditor.d.ts +7 -1
  89. package/dist/esm/SQLEditor.d.ts.map +1 -1
  90. package/dist/esm/SQLEditor.js +3 -6
  91. package/dist/esm/Table.d.ts +6 -0
  92. package/dist/esm/Table.d.ts.map +1 -1
  93. package/dist/esm/Table.js +4 -4
  94. package/dist/esm/components/Chart/BarChart.d.ts +2 -1
  95. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  96. package/dist/esm/components/Chart/BarChart.js +7 -5
  97. package/dist/esm/components/Chart/BarList.d.ts +3 -2
  98. package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
  99. package/dist/esm/components/Chart/BarList.js +3 -3
  100. package/dist/esm/components/Chart/ChartError.d.ts +1 -1
  101. package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
  102. package/dist/esm/components/Chart/ChartError.js +2 -2
  103. package/dist/esm/components/Chart/ChartSkeleton.d.ts +2 -1
  104. package/dist/esm/components/Chart/ChartSkeleton.d.ts.map +1 -1
  105. package/dist/esm/components/Chart/ChartSkeleton.js +2 -2
  106. package/dist/esm/components/Chart/LineChart.d.ts +2 -1
  107. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  108. package/dist/esm/components/Chart/LineChart.js +3 -3
  109. package/dist/esm/components/Chart/PieChart.d.ts +1 -0
  110. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  111. package/dist/esm/components/Chart/PieChart.js +3 -99
  112. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +2 -1
  113. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  114. package/dist/esm/components/Dashboard/DashboardFilter.js +2 -2
  115. package/dist/esm/components/QuillCard.d.ts +1 -1
  116. package/dist/esm/components/QuillCard.d.ts.map +1 -1
  117. package/dist/esm/components/QuillCard.js +1 -1
  118. package/dist/esm/components/QuillSelect.d.ts +1 -1
  119. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  120. package/dist/esm/components/QuillSelect.js +5 -3
  121. package/dist/esm/components/QuillTable.d.ts +2 -1
  122. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  123. package/dist/esm/components/QuillTable.js +5 -5
  124. package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
  125. package/dist/esm/components/ReportBuilder/AddColumnPopover.js +2 -9
  126. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  127. package/dist/esm/components/ReportBuilder/AddSortPopover.js +2 -2
  128. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  129. package/dist/esm/components/ReportBuilder/ui.js +4 -16
  130. package/dist/esm/components/UiComponents.d.ts +9 -9
  131. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  132. package/dist/esm/components/UiComponents.js +32 -17
  133. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +1 -1
  134. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  135. package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
  136. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  137. package/dist/esm/internals/ReportBuilder/PivotModal.js +25 -24
  138. package/dist/esm/utils/color.d.ts +6 -0
  139. package/dist/esm/utils/color.d.ts.map +1 -1
  140. package/dist/esm/utils/color.js +96 -0
  141. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  142. package/dist/esm/utils/valueFormatter.js +32 -2
  143. 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);
@@ -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
  */
@@ -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;AA+FjD,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;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,KAAK,UAAW,UAAU,4CAqC/B,CAAC;AA+hBF,eAAe,KAAK,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, override, theme, issues, }: {
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
- }): import("react/jsx-runtime").JSX.Element;
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":"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"}
1
+ {"version":3,"file":"ChartBuilder.d.ts","sourceRoot":"","sources":["../../src/ChartBuilder.tsx"],"names":[],"mappings":"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"}
@@ -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(0);
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 calculateWidth = () => {
231
- return (
232
- // @ts-ignore
233
- parentRef.current.offsetWidth -
234
- (deleteRef?.current
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
- // Measure the width of the div and update state
239
- if (parentRef.current) {
240
- setDivWidth(calculateWidth());
241
- }
242
- // Optional: Handle window resize
239
+ }, []);
240
+ useEffect(() => {
241
+ const calculateWidth = () => pivotCardContainer.current?.getBoundingClientRect().width ?? 'auto';
243
242
  const handleResize = () => {
244
- if (parentRef.current) {
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: { width: '100%', height: '100%', flexGrow: 1 }, children: [_jsxs("div", { id: "quill-chart-modal", 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
- ? '100%'
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 && formData.chartType !== 'table' ? (_jsx(Chart, { config: {
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
- } })) : (isHorizontalView && (_jsx(Chart, { config: {
764
- ...formData,
765
- chartType: 'table',
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", {})] })), (showTableFormatOptions || formData.chartType === 'table') && (_jsxs("div", { children: [_jsxs("div", { style: {
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, override: () => editChart(true), theme: theme, issues: filterIssues })] }));
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, override, theme, issues, }) {
1011
- return (_jsx(MemoizedModal, { isOpen: isOpen, setIsOpen: setIsOpen, title: 'Chart not compatible with selected dashboard', children: _jsxs("div", { style: {
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(MemoizedButton, { label: "Got It", onClick: () => setIsOpen(false) }) })] }) }));
1051
+ }, children: _jsx(ButtonComponent, { label: "Got It", onClick: () => setIsOpen(false) }) })] }) }));
1023
1052
  }