@quillsql/react 2.11.23 → 2.11.24

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 (201) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +32 -16
  3. package/dist/cjs/ChartBuilder.d.ts +55 -2
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +223 -206
  6. package/dist/cjs/ChartEditor.d.ts +49 -2
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +3 -3
  9. package/dist/cjs/Dashboard.d.ts +5 -1
  10. package/dist/cjs/Dashboard.d.ts.map +1 -1
  11. package/dist/cjs/Dashboard.js +42 -18
  12. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  13. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  14. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +4 -3
  15. package/dist/cjs/ReportBuilder.d.ts +57 -2
  16. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  17. package/dist/cjs/ReportBuilder.js +969 -684
  18. package/dist/cjs/SQLEditor.d.ts +83 -2
  19. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  20. package/dist/cjs/SQLEditor.js +10 -2
  21. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  22. package/dist/cjs/components/Chart/BarChart.js +8 -6
  23. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  24. package/dist/cjs/components/Chart/BarList.js +0 -153
  25. package/dist/cjs/components/Chart/ChartError.d.ts +1 -1
  26. package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
  27. package/dist/cjs/components/Chart/ChartError.js +13 -7
  28. package/dist/cjs/components/Chart/ChartTooltip.d.ts +1 -0
  29. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  30. package/dist/cjs/components/Chart/ChartTooltip.js +6 -7
  31. package/dist/cjs/components/Chart/LineChart.d.ts +1 -1
  32. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  33. package/dist/cjs/components/Chart/LineChart.js +32 -31
  34. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +1 -1
  35. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  36. package/dist/cjs/components/Dashboard/DashboardFilter.js +21 -21
  37. package/dist/cjs/components/Dashboard/DataLoader.d.ts +24 -0
  38. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  39. package/dist/cjs/components/Dashboard/DataLoader.js +84 -0
  40. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  41. package/dist/cjs/components/Dashboard/MetricComponent.js +4 -1
  42. package/dist/cjs/components/QuillSelect.js +1 -1
  43. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  44. package/dist/cjs/components/QuillTable.js +11 -12
  45. package/dist/cjs/components/ReportBuilder/{AddColumnPopover.d.ts → AddColumnModal.d.ts} +3 -2
  46. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -0
  47. package/dist/cjs/components/ReportBuilder/{AddColumnPopover.js → AddColumnModal.js} +12 -8
  48. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  49. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -1
  50. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +1 -1
  51. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  52. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +5 -5
  53. package/dist/cjs/components/ReportBuilder/ast.d.ts +6 -0
  54. package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
  55. package/dist/cjs/components/ReportBuilder/ast.js +13 -2
  56. package/dist/cjs/components/ReportBuilder/constants.d.ts +13 -0
  57. package/dist/cjs/components/ReportBuilder/constants.d.ts.map +1 -1
  58. package/dist/cjs/components/ReportBuilder/constants.js +14 -1
  59. package/dist/cjs/components/ReportBuilder/convert.d.ts +18 -1
  60. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  61. package/dist/cjs/components/ReportBuilder/convert.js +14 -3
  62. package/dist/cjs/components/ReportBuilder/operators.d.ts +15 -23
  63. package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
  64. package/dist/cjs/components/ReportBuilder/operators.js +19 -27
  65. package/dist/cjs/components/ReportBuilder/pivot.d.ts +2 -0
  66. package/dist/cjs/components/ReportBuilder/pivot.d.ts.map +1 -1
  67. package/dist/cjs/components/ReportBuilder/ui.d.ts +3 -2
  68. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  69. package/dist/cjs/components/ReportBuilder/ui.js +54 -28
  70. package/dist/cjs/components/ReportBuilder/util.d.ts +1 -1
  71. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  72. package/dist/cjs/components/ReportBuilder/util.js +3 -0
  73. package/dist/cjs/components/UiComponents.d.ts +34 -4
  74. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  75. package/dist/cjs/components/UiComponents.js +165 -68
  76. package/dist/cjs/hooks/useQuill.d.ts +1 -0
  77. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  78. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +1 -2
  79. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  80. package/dist/cjs/internals/ReportBuilder/PivotList.js +5 -7
  81. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +31 -5
  82. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  83. package/dist/cjs/internals/ReportBuilder/PivotModal.js +437 -282
  84. package/dist/cjs/utils/axisFormatter.js +3 -3
  85. package/dist/cjs/utils/getDomain.d.ts.map +1 -1
  86. package/dist/cjs/utils/getDomain.js +3 -0
  87. package/dist/cjs/utils/merge.d.ts.map +1 -1
  88. package/dist/cjs/utils/merge.js +2 -0
  89. package/dist/cjs/utils/pivotProcessing.d.ts +20 -0
  90. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -0
  91. package/dist/cjs/utils/pivotProcessing.js +177 -0
  92. package/dist/cjs/utils/queryConstructor.d.ts +2 -0
  93. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -0
  94. package/dist/cjs/utils/queryConstructor.js +11 -0
  95. package/dist/cjs/utils/tableProcessing.d.ts +7 -0
  96. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -0
  97. package/dist/cjs/utils/tableProcessing.js +84 -0
  98. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  99. package/dist/cjs/utils/valueFormatter.js +40 -8
  100. package/dist/esm/Chart.d.ts.map +1 -1
  101. package/dist/esm/Chart.js +33 -17
  102. package/dist/esm/ChartBuilder.d.ts +55 -2
  103. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  104. package/dist/esm/ChartBuilder.js +225 -208
  105. package/dist/esm/ChartEditor.d.ts +49 -2
  106. package/dist/esm/ChartEditor.d.ts.map +1 -1
  107. package/dist/esm/ChartEditor.js +4 -4
  108. package/dist/esm/Dashboard.d.ts +5 -1
  109. package/dist/esm/Dashboard.d.ts.map +1 -1
  110. package/dist/esm/Dashboard.js +21 -20
  111. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  112. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  113. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +4 -3
  114. package/dist/esm/ReportBuilder.d.ts +57 -2
  115. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  116. package/dist/esm/ReportBuilder.js +971 -687
  117. package/dist/esm/SQLEditor.d.ts +83 -2
  118. package/dist/esm/SQLEditor.d.ts.map +1 -1
  119. package/dist/esm/SQLEditor.js +11 -3
  120. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  121. package/dist/esm/components/Chart/BarChart.js +8 -6
  122. package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
  123. package/dist/esm/components/Chart/BarList.js +0 -153
  124. package/dist/esm/components/Chart/ChartError.d.ts +1 -1
  125. package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
  126. package/dist/esm/components/Chart/ChartError.js +13 -7
  127. package/dist/esm/components/Chart/ChartTooltip.d.ts +1 -0
  128. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  129. package/dist/esm/components/Chart/ChartTooltip.js +6 -7
  130. package/dist/esm/components/Chart/LineChart.d.ts +1 -1
  131. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  132. package/dist/esm/components/Chart/LineChart.js +32 -31
  133. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +1 -1
  134. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  135. package/dist/esm/components/Dashboard/DashboardFilter.js +21 -21
  136. package/dist/esm/components/Dashboard/DataLoader.d.ts +24 -0
  137. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  138. package/dist/esm/components/Dashboard/DataLoader.js +82 -0
  139. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  140. package/dist/esm/components/Dashboard/MetricComponent.js +4 -1
  141. package/dist/esm/components/QuillSelect.js +1 -1
  142. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  143. package/dist/esm/components/QuillTable.js +11 -12
  144. package/dist/esm/components/ReportBuilder/{AddColumnPopover.d.ts → AddColumnModal.d.ts} +3 -2
  145. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -0
  146. package/dist/esm/components/ReportBuilder/{AddColumnPopover.js → AddColumnModal.js} +11 -7
  147. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  148. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +1 -1
  149. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +1 -1
  150. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  151. package/dist/esm/components/ReportBuilder/AddSortPopover.js +5 -5
  152. package/dist/esm/components/ReportBuilder/ast.d.ts +6 -0
  153. package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
  154. package/dist/esm/components/ReportBuilder/ast.js +11 -1
  155. package/dist/esm/components/ReportBuilder/constants.d.ts +13 -0
  156. package/dist/esm/components/ReportBuilder/constants.d.ts.map +1 -1
  157. package/dist/esm/components/ReportBuilder/constants.js +13 -0
  158. package/dist/esm/components/ReportBuilder/convert.d.ts +18 -1
  159. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  160. package/dist/esm/components/ReportBuilder/convert.js +14 -3
  161. package/dist/esm/components/ReportBuilder/operators.d.ts +15 -23
  162. package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
  163. package/dist/esm/components/ReportBuilder/operators.js +19 -27
  164. package/dist/esm/components/ReportBuilder/pivot.d.ts +2 -0
  165. package/dist/esm/components/ReportBuilder/pivot.d.ts.map +1 -1
  166. package/dist/esm/components/ReportBuilder/ui.d.ts +3 -2
  167. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  168. package/dist/esm/components/ReportBuilder/ui.js +55 -29
  169. package/dist/esm/components/ReportBuilder/util.d.ts +1 -1
  170. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  171. package/dist/esm/components/ReportBuilder/util.js +3 -0
  172. package/dist/esm/components/UiComponents.d.ts +34 -4
  173. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  174. package/dist/esm/components/UiComponents.js +155 -66
  175. package/dist/esm/hooks/useQuill.d.ts +1 -0
  176. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  177. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +1 -2
  178. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  179. package/dist/esm/internals/ReportBuilder/PivotList.js +5 -7
  180. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +31 -5
  181. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  182. package/dist/esm/internals/ReportBuilder/PivotModal.js +438 -284
  183. package/dist/esm/utils/axisFormatter.js +3 -3
  184. package/dist/esm/utils/getDomain.d.ts.map +1 -1
  185. package/dist/esm/utils/getDomain.js +3 -0
  186. package/dist/esm/utils/merge.d.ts.map +1 -1
  187. package/dist/esm/utils/merge.js +2 -0
  188. package/dist/esm/utils/pivotProcessing.d.ts +20 -0
  189. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -0
  190. package/dist/esm/utils/pivotProcessing.js +170 -0
  191. package/dist/esm/utils/queryConstructor.d.ts +2 -0
  192. package/dist/esm/utils/queryConstructor.d.ts.map +1 -0
  193. package/dist/esm/utils/queryConstructor.js +7 -0
  194. package/dist/esm/utils/tableProcessing.d.ts +7 -0
  195. package/dist/esm/utils/tableProcessing.d.ts.map +1 -0
  196. package/dist/esm/utils/tableProcessing.js +80 -0
  197. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  198. package/dist/esm/utils/valueFormatter.js +41 -9
  199. package/package.json +1 -1
  200. package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +0 -1
  201. package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +0 -1
@@ -15,9 +15,6 @@ const react_1 = require("react");
15
15
  const crypto_1 = require("../../utils/crypto");
16
16
  function LineChart({ colors, colorMap = {}, yAxisFields, data, containerStyle, className, xAxisField, xAxisFormat, theme, comparison, isAnimationActive = true, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, comparisonLineStyle = 'solid', }) {
17
17
  const [formattedData, setFormattedData] = (0, react_1.useState)([]);
18
- if (!yAxisFields || !yAxisFields.length) {
19
- return null;
20
- }
21
18
  (0, react_1.useEffect)(() => {
22
19
  if (!data || data.length === 0) {
23
20
  return;
@@ -87,14 +84,16 @@ function LineChart({ colors, colorMap = {}, yAxisFields, data, containerStyle, c
87
84
  theme?.fontFamily ||
88
85
  'Inter; Helvetica',
89
86
  color: theme?.chartLabelColor || '#666666',
90
- }, tickFormatter: (value) => (0, axisFormatter_1.axisFormatter)({
91
- value,
92
- field: yAxisFields[0].field,
93
- fields: [
94
- ...yAxisFields,
95
- { field: xAxisField, format: xAxisFormat },
96
- ],
97
- }) }), (0, jsx_runtime_1.jsx)(recharts_1.Tooltip, { wrapperStyle: { outline: 'none' }, isAnimationActive: false, cursor: { stroke: '#d1d5db', strokeWidth: 1 }, content: ({ active, payload, label }) => {
87
+ }, tickFormatter: (value) => yAxisFields && yAxisFields.length > 0
88
+ ? (0, axisFormatter_1.axisFormatter)({
89
+ value,
90
+ field: yAxisFields[0].field,
91
+ fields: [
92
+ ...yAxisFields,
93
+ { field: xAxisField, format: xAxisFormat },
94
+ ],
95
+ })
96
+ : value }), (0, jsx_runtime_1.jsx)(recharts_1.Tooltip, { wrapperStyle: { outline: 'none', zIndex: 2 }, isAnimationActive: false, cursor: { stroke: '#d1d5db', strokeWidth: 1 }, content: ({ active, payload, label }) => {
98
97
  let label2;
99
98
  if (comparison &&
100
99
  payload?.length > 1 &&
@@ -112,25 +111,27 @@ function LineChart({ colors, colorMap = {}, yAxisFields, data, containerStyle, c
112
111
  ...yAxisFields,
113
112
  { field: xAxisField, format: xAxisFormat },
114
113
  ],
115
- }), xAxisFormat: xAxisFormat, xAxisField: xAxisField, colors: colors, theme: theme }));
116
- }, position: { y: 0 } }), yAxisFields.map((elem, index) => {
117
- // hash the color stops so they're stable, valid html ids
118
- const gradientStart = getCustomColor(index, elem.field, 'start') ??
119
- getCustomColor(index, elem.field) ??
120
- (0, color_1.selectColor)(elem, colors, index);
121
- const gradientStop = getCustomColor(index, elem.field, 'stop') ?? '#00000000';
122
- const uniqueId = `gradient_${(0, crypto_1.hashCode)(gradientStart)}_${(0, crypto_1.hashCode)(gradientStop)}`;
123
- return ((0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsxs)("linearGradient", { id: uniqueId, x1: "0", y1: "0", x2: "0", y2: "1", children: [(0, jsx_runtime_1.jsx)("stop", { offset: "5%", stopColor: gradientStart, stopOpacity: 0.4 }), (0, jsx_runtime_1.jsx)("stop", { offset: "95%", stopColor: gradientStop, stopOpacity: 0 })] }) }, `defs_${uniqueId}_${index}`));
124
- }), yAxisFields.map((elem, index) => {
125
- const gradientStart = (0, crypto_1.hashCode)(getCustomColor(index, elem.field, 'start') ??
126
- getCustomColor(index, elem.field) ??
127
- (0, color_1.selectColor)(elem, colors, index));
128
- const gradientStop = (0, crypto_1.hashCode)(getCustomColor(index, elem.field, 'stop') ?? '#00000000');
129
- const uniqueId = `gradient_${gradientStart}_${gradientStop}`;
130
- return ((0, jsx_runtime_1.jsx)(recharts_1.Area, { name: elem.label, type: "linear", dataKey: elem.field, stroke: getCustomColor(index, elem.field) ??
131
- (0, color_1.selectColor)(elem, colors, index), fill: `url(#${uniqueId})`, strokeWidth: 2, dot: false, strokeDasharray: comparison && comparisonLineStyle === 'dashed' && index > 0
132
- ? '5 5'
133
- : undefined, isAnimationActive: isAnimationActive }, elem.field));
134
- })] }) }) }));
114
+ }), xAxisFormat: xAxisFormat, xAxisField: xAxisField, colors: colors, theme: theme, comparison: comparison }));
115
+ }, position: { y: 0 } }), yAxisFields &&
116
+ yAxisFields.map((elem, index) => {
117
+ // hash the color stops so they're stable, valid html ids
118
+ const gradientStart = getCustomColor(index, elem.field, 'start') ??
119
+ getCustomColor(index, elem.field) ??
120
+ (0, color_1.selectColor)(elem, colors, index);
121
+ const gradientStop = getCustomColor(index, elem.field, 'stop') ?? '#00000000';
122
+ const uniqueId = `gradient_${(0, crypto_1.hashCode)(gradientStart)}_${(0, crypto_1.hashCode)(gradientStop)}`;
123
+ return ((0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsxs)("linearGradient", { id: uniqueId, x1: "0", y1: "0", x2: "0", y2: "1", children: [(0, jsx_runtime_1.jsx)("stop", { offset: "5%", stopColor: gradientStart, stopOpacity: 0.4 }), (0, jsx_runtime_1.jsx)("stop", { offset: "95%", stopColor: gradientStop, stopOpacity: 0 })] }) }, `defs_${uniqueId}_${index}`));
124
+ }), yAxisFields &&
125
+ yAxisFields.map((elem, index) => {
126
+ const gradientStart = (0, crypto_1.hashCode)(getCustomColor(index, elem.field, 'start') ??
127
+ getCustomColor(index, elem.field) ??
128
+ (0, color_1.selectColor)(elem, colors, index));
129
+ const gradientStop = (0, crypto_1.hashCode)(getCustomColor(index, elem.field, 'stop') ?? '#00000000');
130
+ const uniqueId = `gradient_${gradientStart}_${gradientStop}`;
131
+ return ((0, jsx_runtime_1.jsx)(recharts_1.Area, { name: elem.label, type: "linear", dataKey: elem.field, stroke: getCustomColor(index, elem.field) ??
132
+ (0, color_1.selectColor)(elem, colors, index), fill: `url(#${uniqueId})`, strokeWidth: 2, dot: false, strokeDasharray: comparison && comparisonLineStyle === 'dashed' && index > 0
133
+ ? '5 5'
134
+ : undefined, isAnimationActive: isAnimationActive }, elem.field));
135
+ })] }) }) }));
135
136
  }
136
137
  exports.default = LineChart;
@@ -10,7 +10,7 @@ type SelectComponentType = ({ label, value, options, onChange, width, }: {
10
10
  }[];
11
11
  onChange: (event: React.ChangeEvent<HTMLSelectElement>) => void;
12
12
  }) => JSX.Element;
13
- type DateRangePickerComponentType = ({ dateRange, onChangeDateRange, presetOptions, onChangePreset, preset, }: DateRangePickerComponentProps) => JSX.Element;
13
+ type DateRangePickerComponentType = ({ dateRange, onChangeDateRange, presetOptions, onChangePreset, preset, selectWidth, }: DateRangePickerComponentProps) => JSX.Element;
14
14
  interface DashboardFilterProps {
15
15
  filter: any;
16
16
  onChangeFilter: (...args: any[]) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardFilter.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DashboardFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAEhG,KAAK,mBAAmB,GAAG,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACjE,KAAK,GAAG,CAAC,OAAO,CAAC;AAElB,KAAK,4BAA4B,GAAG,CAAC,EACnC,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,MAAM,GACP,EAAE,6BAA6B,KAAK,GAAG,CAAC,OAAO,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,GAAG,CAAC;IACZ,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC,eAAe,EACX,mBAAmB,GACnB,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACnD,wBAAwB,EACpB,4BAA4B,GAC5B,KAAK,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;IAC5D,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,KAAK,GACN,EAAE,oBAAoB,kDAiHtB"}
1
+ {"version":3,"file":"DashboardFilter.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DashboardFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAEhG,KAAK,mBAAmB,GAAG,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACjE,KAAK,GAAG,CAAC,OAAO,CAAC;AAElB,KAAK,4BAA4B,GAAG,CAAC,EACnC,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,MAAM,EACN,WAAW,GACZ,EAAE,6BAA6B,KAAK,GAAG,CAAC,OAAO,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,GAAG,CAAC;IACZ,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC,eAAe,EACX,mBAAmB,GACnB,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACnD,wBAAwB,EACpB,4BAA4B,GAC5B,KAAK,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;IAC5D,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,KAAK,GACN,EAAE,oBAAoB,kDAgHtB"}
@@ -48,27 +48,27 @@ function DashboardFilter({ filter, onChangeFilter, SelectComponent, DateRangePic
48
48
  onChangeFilter(filter, { preset: e.target.value });
49
49
  }, presetOptions: filter.options.map((option) => {
50
50
  return { label: option.label, value: option.label };
51
- }) }), comparisonRange && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { style: {
52
- display: 'flex',
53
- flexDirection: 'row',
54
- alignItems: 'center',
55
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
56
- paddingLeft: 16,
57
- paddingRight: 12,
58
- color: theme?.secondaryTextColor,
59
- fontFamily: theme?.fontFamily,
60
- fontSize: 14,
61
- display: 'flex',
62
- alignItems: 'center',
63
- flex: 1,
64
- minWidth: 80,
65
- justifyContent: 'center',
66
- }, children: "compared to" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: comparisonRange.value, onChange: (e) => {
67
- onChangeFilter(filter, null, dateRangePickerUtils_1.COMPARISON_OPTIONS.find((option) => option.value === e.target.value));
68
- }, options: dateRangePickerUtils_1.COMPARISON_OPTIONS.map((compareOption) => ({
69
- value: compareOption.value,
70
- label: compareOption.text,
71
- })), width: 200 })] }) }))] }));
51
+ }), selectWidth: 200 }), comparisonRange && ((0, jsx_runtime_1.jsxs)("div", { style: {
52
+ display: 'flex',
53
+ flexDirection: 'row',
54
+ alignItems: 'center',
55
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
56
+ paddingLeft: 16,
57
+ paddingRight: 12,
58
+ color: theme?.secondaryTextColor,
59
+ fontFamily: theme?.fontFamily,
60
+ fontSize: 14,
61
+ display: 'flex',
62
+ alignItems: 'center',
63
+ flex: 1,
64
+ minWidth: 80,
65
+ justifyContent: 'center',
66
+ }, children: "compared to" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: comparisonRange.value, onChange: (e) => {
67
+ onChangeFilter(filter, null, dateRangePickerUtils_1.COMPARISON_OPTIONS.find((option) => option.value === e.target.value));
68
+ }, options: dateRangePickerUtils_1.COMPARISON_OPTIONS.map((compareOption) => ({
69
+ value: compareOption.value,
70
+ label: compareOption.text,
71
+ })), width: 200 })] }))] }));
72
72
  }
73
73
  return null;
74
74
  }
@@ -1,4 +1,6 @@
1
1
  /// <reference types="react" />
2
+ import { DashboardItem } from '../../Dashboard';
3
+ import { QuillTheme } from '../../QuillProvider';
2
4
  export type DataLoaderChildProps = {
3
5
  isLoading: boolean;
4
6
  error?: string;
@@ -7,4 +9,26 @@ export default function DataLoader({ id, children, }: {
7
9
  id: string;
8
10
  children: ({ isLoading, error }: DataLoaderChildProps) => JSX.Element;
9
11
  }): JSX.Element;
12
+ type ColorMapType = {
13
+ [key: string]: {
14
+ primary: string;
15
+ comparison?: string;
16
+ primaryGradientStart?: string;
17
+ primaryGradientStop?: string;
18
+ comparisonGradientStart?: string;
19
+ comparisonGradientStop?: string;
20
+ };
21
+ };
22
+ export type ChartDataLoaderChildProps = {
23
+ isLoading: boolean;
24
+ error?: string;
25
+ data?: any;
26
+ };
27
+ export declare const ChartDataLoader: ({ id, children, hideDateRangeFilter, }: {
28
+ id: string;
29
+ hideDateRangeFilter?: boolean | undefined;
30
+ mapColorsToFields?: ((_dashboardItem: DashboardItem, _theme: QuillTheme) => ColorMapType) | undefined;
31
+ children: ({ isLoading, error, data, }: ChartDataLoaderChildProps) => JSX.Element;
32
+ }) => JSX.Element;
33
+ export {};
10
34
  //# sourceMappingURL=DataLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DataLoader.tsx"],"names":[],"mappings":";AAUA,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,EAAE,EACF,QAAQ,GACT,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CACvE,GAAG,GAAG,CAAC,OAAO,CA+Ed"}
1
+ {"version":3,"file":"DataLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DataLoader.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,EAAE,EACF,QAAQ,GACT,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CACvE,GAAG,GAAG,CAAC,OAAO,CA+Ed;AAED,KAAK,YAAY,GAAG;IAClB,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,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAIF,eAAO,MAAM,eAAe;QAKtB,MAAM;;0CAGQ,aAAa,UACrB,UAAU,KACf,YAAY;4CAKd,yBAAyB,KAAK,WAAW;MAC1C,WA0FH,CAAC"}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChartDataLoader = void 0;
3
4
  const jsx_runtime_1 = require("react/jsx-runtime");
4
5
  const react_1 = require("react");
5
6
  const Chart_1 = require("../../Chart");
6
7
  const Context_1 = require("../../Context");
8
+ const hooks_1 = require("../../hooks");
7
9
  const dataFetcher_1 = require("../../utils/dataFetcher");
8
10
  const merge_1 = require("../../utils/merge");
9
11
  function DataLoader({ id, children, }) {
@@ -76,3 +78,85 @@ function DataLoader({ id, children, }) {
76
78
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children({ isLoading, error }) });
77
79
  }
78
80
  exports.default = DataLoader;
81
+ // The same data-loader pattern as above, but with special logic for charts
82
+ // At some point these may be able to get merged into one function.
83
+ const ChartDataLoader = ({ id, children, hideDateRangeFilter = false, }) => {
84
+ const { dispatch, dashboard } = (0, react_1.useContext)(Context_1.DashboardContext);
85
+ const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
86
+ const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
87
+ const [loading, setLoading] = (0, react_1.useState)(false);
88
+ const [error, setError] = (0, react_1.useState)(undefined);
89
+ const [isComparison, setIsComparison] = (0, react_1.useState)(false);
90
+ const [client, _] = (0, react_1.useContext)(Context_1.ClientContext);
91
+ const theme = (0, hooks_1.useTheme)();
92
+ (0, react_1.useEffect)(() => {
93
+ async function getChartOptions() {
94
+ setLoading(true);
95
+ if (!(0, Chart_1.didFiltersChange)(dashboard[id], dashboardFilters)) {
96
+ setLoading(false);
97
+ return;
98
+ }
99
+ try {
100
+ // Remove extra fields on each filter so we don't confuse the backend.
101
+ const allowDateRange = !hideDateRangeFilter;
102
+ const minimalFilters = Object.values(dashboardFilters).length
103
+ ? Object.values(dashboardFilters)
104
+ .filter((f) => allowDateRange || f.filterType !== 'date_range')
105
+ .map((filter) => {
106
+ const newFilter = { ...filter };
107
+ if (newFilter.filterType === 'date_range') {
108
+ delete newFilter['field'];
109
+ delete newFilter['options'];
110
+ delete newFilter['selectedValue'];
111
+ }
112
+ return newFilter;
113
+ })
114
+ : [];
115
+ const hostedBody = {
116
+ metadata: {
117
+ dashboardItemId: id,
118
+ orgId: client.customerId || '*',
119
+ clientId: client.publicKey,
120
+ task: 'item',
121
+ databaseType: client.databaseType,
122
+ filters: minimalFilters,
123
+ },
124
+ };
125
+ const cloudBody = {
126
+ id: id,
127
+ filters: minimalFilters,
128
+ };
129
+ setError(undefined);
130
+ const resp = await (0, dataFetcher_1.getData)(client, 'itempost', 'omit', hostedBody, cloudBody);
131
+ if (resp && resp.name !== 'error' && !resp.errorMessage) {
132
+ setIsComparison(!!resp.compareRows?.length);
133
+ if (resp.compareRows) {
134
+ (0, merge_1.mergeComparisonRange)(resp);
135
+ }
136
+ const dashboardItem = { ...resp, filtersApplied: dashboardFilters };
137
+ dispatch({
138
+ type: 'UPDATE_DASHBOARD_ITEM',
139
+ id: id,
140
+ data: dashboardItem,
141
+ });
142
+ }
143
+ else {
144
+ setError(resp?.errorMessage);
145
+ }
146
+ setLoading(false);
147
+ }
148
+ catch (e) {
149
+ console.log('Error fetching chart: ', e);
150
+ setLoading(false);
151
+ }
152
+ }
153
+ setInitialLoad(false);
154
+ getChartOptions();
155
+ }, [dashboardFilters, client, id]);
156
+ return children({
157
+ isLoading: loading || initialLoad,
158
+ data: loading || initialLoad ? undefined : dashboard[id],
159
+ error,
160
+ });
161
+ };
162
+ exports.ChartDataLoader = ChartDataLoader;
@@ -1 +1 @@
1
- {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AASrD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,aAAa,EACb,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CA6QlC"}
1
+ {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AASrD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,aAAa,EACb,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAqRlC"}
@@ -101,7 +101,10 @@ function QuillMetricComponent({ dashboardItem, onClick, error, isLoading, }) {
101
101
  color: theme.secondaryTextColor,
102
102
  maxWidth: '100%',
103
103
  width: '100%',
104
- }, children: "No results" })) : ((0, jsx_runtime_1.jsx)("div", { style: {
104
+ }, children: "No results" })) : !pivotTable && rows && rows.length > 100 ? ((0, jsx_runtime_1.jsx)(ChartError_1.default, { containerStyle: {
105
+ maxHeight: '78px',
106
+ height: '100%',
107
+ }, label: "Charts can only display 100 rows. Please add a pivot or modify the query." })) : ((0, jsx_runtime_1.jsx)("div", { style: {
105
108
  padding: 0,
106
109
  height: '100%',
107
110
  width: '100%',
@@ -22,7 +22,7 @@ function QuillSelectComponent({ options, value, width, onChange, label, }) {
22
22
  minWidth: width,
23
23
  }, children: [label && ((0, jsx_runtime_1.jsx)("div", { style: {
24
24
  fontSize: 14,
25
- color: theme.primaryTextColor,
25
+ color: theme.secondaryTextColor,
26
26
  fontFamily: theme.fontFamily,
27
27
  paddingBottom: 5,
28
28
  fontWeight: 600,
@@ -1 +1 @@
1
- {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,gBAA0C,EAC1C,WAAgB,EAChB,eAA8B,EAC9B,WAAW,GACZ,EAAE,mBAAmB,2CA0ZrB"}
1
+ {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,gBAA0C,EAC1C,WAAgB,EAChB,eAA8B,EAC9B,WAAW,GACZ,EAAE,mBAAmB,2CAyZrB"}
@@ -59,6 +59,7 @@ function QuillTable({ rows, columns, isLoading, showDownloadCSVButton, downloadF
59
59
  };
60
60
  if (isLoading || isPaginating) {
61
61
  return ((0, jsx_runtime_1.jsx)("div", { style: {
62
+ height: '100%',
62
63
  ...containerStyle,
63
64
  }, className: className, children: (0, jsx_runtime_1.jsx)(LoadingComponent, {}) }));
64
65
  }
@@ -74,7 +75,7 @@ function QuillTable({ rows, columns, isLoading, showDownloadCSVButton, downloadF
74
75
  width: '100%',
75
76
  overflow: 'auto',
76
77
  borderRadius: 6,
77
- border: '1px solid rgb(229, 231, 235)',
78
+ border: '1px solid #E7E7E7',
78
79
  padding: 0,
79
80
  margin: 0,
80
81
  boxSizing: 'border-box',
@@ -100,9 +101,9 @@ function QuillTable({ rows, columns, isLoading, showDownloadCSVButton, downloadF
100
101
  cursor: 'pointer',
101
102
  background: 'rgb(249, 250, 251)',
102
103
  borderRight: index + 1 === columns.length
103
- ? '0px solid rgb(229, 231, 235)'
104
- : '1px solid rgb(229, 231, 235)',
105
- borderBottom: '1px solid rgb(229, 231, 235)',
104
+ ? '0px solid #E7E7E7'
105
+ : '1px solid #E7E7E7',
106
+ borderBottom: '1px solid #E7E7E7',
106
107
  whiteSpace: 'nowrap',
107
108
  alignItems: 'center',
108
109
  overflowX: 'visible',
@@ -159,14 +160,12 @@ function QuillTable({ rows, columns, isLoading, showDownloadCSVButton, downloadF
159
160
  textOverflow: 'ellipsis',
160
161
  minHeight: '36px',
161
162
  borderRight: columnIndex + 1 === columns.length
162
- ? '0px solid rgb(229, 231, 235)'
163
- : '1px solid rgb(229, 231, 235)',
163
+ ? '0px solid #E7E7E7'
164
+ : '1px solid #E7E7E7',
164
165
  overflow: 'hidden',
165
- borderTop: rowIndex > 0
166
- ? '1px solid rgb(229, 231, 235)'
167
- : undefined,
168
- borderBottom: rowIndex === rows?.length - 1
169
- ? '1px solid rgb(229, 231, 235)'
166
+ borderTop: rowIndex > 0 ? '1px solid #E7E7E7' : undefined,
167
+ borderBottom: rowIndex === activeRows?.length - 1
168
+ ? '1px solid #E7E7E7'
170
169
  : undefined,
171
170
  userSelect: 'none',
172
171
  }, children: (0, jsx_runtime_1.jsx)("div", { style: {
@@ -198,7 +197,7 @@ function QuillTable({ rows, columns, isLoading, showDownloadCSVButton, downloadF
198
197
  display: 'flex',
199
198
  minWidth: '100px',
200
199
  height: 38,
201
- borderTop: '1px solid rgb(229, 231, 235)',
200
+ borderTop: '1px solid #E7E7E7',
202
201
  background: '#F9FAFB',
203
202
  width: '100%',
204
203
  }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { TextInputComponentProps } from '../UiComponents';
3
- export default function AddColumnPopover({ onSave, orderedColumnNames, setOrderedColumnNames, selectedColumns, setSelectedColumns, isSelectedAllColumns, clearAllState, nameToColumn, baseAst, setBaseAst, pivot, initialTableName, defaultAST, defaultTable, setPivot, TextInput, SelectColumn, SecondaryButton, Button, }: {
3
+ export default function AddColumnModal({ onSave, orderedColumnNames, setOrderedColumnNames, selectedColumns, setSelectedColumns, isSelectedAllColumns, clearAllState, nameToColumn, baseAst, setBaseAst, pivot, initialTableName, defaultAST, defaultTable, setPivot, TextInput, SelectColumn, SecondaryButton, Button, ColumnSearchEmptyState, }: {
4
4
  onSave: any;
5
5
  orderedColumnNames: any;
6
6
  setOrderedColumnNames: any;
@@ -27,5 +27,6 @@ export default function AddColumnPopover({ onSave, orderedColumnNames, setOrdere
27
27
  }) => JSX.Element;
28
28
  SecondaryButton: any;
29
29
  Button: any;
30
+ ColumnSearchEmptyState: () => JSX.Element;
30
31
  }): import("react/jsx-runtime").JSX.Element;
31
- //# sourceMappingURL=AddColumnPopover.d.ts.map
32
+ //# sourceMappingURL=AddColumnModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddColumnModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnModal.tsx"],"names":[],"mappings":";AAoBA,OAAO,EAEL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAM,EACN,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,UAAU,EACV,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,eAAe,EACf,MAAM,EACN,sBAAoD,GACrD,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,EAAE,GAAG,CAAC;IACxB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,gBAAgB,EAAE,GAAG,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3D,YAAY,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;IACZ,sBAAsB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CAC3C,2CA+MA"}
@@ -7,8 +7,9 @@ const core_1 = require("@dnd-kit/core");
7
7
  const sortable_1 = require("@dnd-kit/sortable");
8
8
  const utilities_1 = require("@dnd-kit/utilities");
9
9
  const Context_1 = require("../../Context");
10
+ const UiComponents_1 = require("../UiComponents");
10
11
  const textProcessing_1 = require("../../utils/textProcessing");
11
- function AddColumnPopover({ onSave, orderedColumnNames, setOrderedColumnNames, selectedColumns, setSelectedColumns, isSelectedAllColumns, clearAllState, nameToColumn, baseAst, setBaseAst, pivot, initialTableName, defaultAST, defaultTable, setPivot, TextInput, SelectColumn, SecondaryButton, Button, }) {
12
+ function AddColumnModal({ onSave, orderedColumnNames, setOrderedColumnNames, selectedColumns, setSelectedColumns, isSelectedAllColumns, clearAllState, nameToColumn, baseAst, setBaseAst, pivot, initialTableName, defaultAST, defaultTable, setPivot, TextInput, SelectColumn, SecondaryButton, Button, ColumnSearchEmptyState = UiComponents_1.QuillColumnSearchEmptyState, }) {
12
13
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
13
14
  const [search, setSearch] = (0, react_1.useState)('');
14
15
  const [searchResults, setSearchResults] = (0, react_1.useState)(orderedColumnNames);
@@ -53,7 +54,10 @@ function AddColumnPopover({ onSave, orderedColumnNames, setOrderedColumnNames, s
53
54
  flexDirection: 'column',
54
55
  gap: 2,
55
56
  minWidth: 300,
56
- maxHeight: 500,
57
+ maxHeight: 600,
58
+ paddingLeft: 16,
59
+ paddingRight: 16,
60
+ paddingBottom: 16,
57
61
  }, children: [(0, jsx_runtime_1.jsx)("div", { ref: textInputContainerRef, style: {
58
62
  position: 'relative',
59
63
  display: 'flex',
@@ -61,25 +65,25 @@ function AddColumnPopover({ onSave, orderedColumnNames, setOrderedColumnNames, s
61
65
  alignItems: 'center',
62
66
  marginTop: 2,
63
67
  marginBottom: 6,
64
- }, children: (0, jsx_runtime_1.jsx)(TextInput, { id: 'add_column_search_bar', value: search, placeholder: 'Search...', width: 300, onChange: (e) => setSearch(e.target.value) }) }), (0, jsx_runtime_1.jsx)(core_1.DndContext, { sensors: sensors, collisionDetection: core_1.closestCenter, onDragEnd: handleDragEnd, children: (0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: orderedColumnNames, strategy: sortable_1.verticalListSortingStrategy, children: (0, jsx_runtime_1.jsxs)("div", { style: {
68
+ }, children: (0, jsx_runtime_1.jsx)(TextInput, { id: 'add_column_search_bar', value: search, placeholder: 'Search...', width: 400, onChange: (e) => setSearch(e.target.value) }) }), (0, jsx_runtime_1.jsx)(core_1.DndContext, { sensors: sensors, collisionDetection: core_1.closestCenter, onDragEnd: handleDragEnd, children: (0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: orderedColumnNames, strategy: sortable_1.verticalListSortingStrategy, children: (0, jsx_runtime_1.jsxs)("div", { style: {
65
69
  display: 'flex',
66
70
  flexDirection: 'column',
67
71
  gap: 8,
68
72
  overflowY: 'auto',
69
- maxWidth: '300px',
73
+ maxWidth: '400px',
70
74
  }, children: [searchResults.map((value) => {
71
75
  return ((0, jsx_runtime_1.jsx)(SortableItem, { selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, id: value, label: value.replace('.', ' | '), SelectColumn: SelectColumn }, value));
72
- }), search.length > 0 && searchResults.length === 0 && ((0, jsx_runtime_1.jsx)("div", { style: { fontFamily: theme?.fontFamily }, children: "No results found" }))] }) }) }), (0, jsx_runtime_1.jsxs)("div", { style: {
76
+ }), search.length > 0 && searchResults.length === 0 && ((0, jsx_runtime_1.jsx)(ColumnSearchEmptyState, {}))] }) }) }), (0, jsx_runtime_1.jsxs)("div", { style: {
73
77
  display: 'flex',
74
78
  width: '100%',
75
79
  flexDirection: 'row',
76
80
  gap: 8,
77
81
  justifyContent: 'end',
78
82
  marginTop: 12,
79
- }, children: [selectedColumns.length > 0 && !isSelectedAllColumns() && ((0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => setSelectedColumns(searchResults.filter((row) => {
83
+ }, children: [selectedColumns.length > 0 && ((0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => setSelectedColumns([]), label: "Clear" })), selectedColumns.length > 0 && !isSelectedAllColumns() && ((0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => setSelectedColumns(searchResults.filter((row) => {
80
84
  const [table, _column] = row.split('.');
81
85
  return selectedColumns[0].startsWith(table);
82
- })), label: "Select all" })), selectedColumns.length > 0 && isSelectedAllColumns() && ((0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => setSelectedColumns([]), label: "Clear" })), (0, jsx_runtime_1.jsx)(Button, { onClick: () => {
86
+ })), label: "Select all" })), (0, jsx_runtime_1.jsx)(Button, { onClick: () => {
83
87
  // follow the ordering of the ordered column names
84
88
  let tableName = initialTableName;
85
89
  const orderedSelectedColumns = [];
@@ -121,7 +125,7 @@ function AddColumnPopover({ onSave, orderedColumnNames, setOrderedColumnNames, s
121
125
  onSave();
122
126
  }, label: "Select columns" })] })] }));
123
127
  }
124
- exports.default = AddColumnPopover;
128
+ exports.default = AddColumnModal;
125
129
  const SortableItem = ({ id, label, setSelectedColumns, selectedColumns, SelectColumn, }) => {
126
130
  const { attributes, listeners, setNodeRef, transform, transition } = (0, sortable_1.useSortable)({ id: id });
127
131
  const style = {
@@ -1 +1 @@
1
- {"version":3,"file":"AddLimitPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddLimitPopover.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,oBAAoB,EAIpB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,MAAM,CAAC;AAElD,eAAO,MAAM,aAAa;WAYjB,GAAG;kBACI,MAAM,IAAI;0BACF,GAAG,KAAK,IAAI;qBACjB,GAAG,aAAa,GAAG,KAAK,IAAI;;0BAEvB,0BAA0B,KAAK,WAAW;iBACnD,GAAG;eACL,GAAG;oBACE,oBAAoB,KAAK,WAAW;6BAC3B,oBAAoB,KAAK,WAAW;6CAiC9D,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CAChE;AAED,eAAO,MAAM,eAAe,oFAQzB,oBAAoB,4CA8CtB,CAAC"}
1
+ {"version":3,"file":"AddLimitPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddLimitPopover.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,oBAAoB,EAIpB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,MAAM,CAAC;AAElD,eAAO,MAAM,aAAa;WAYjB,GAAG;kBACI,MAAM,IAAI;0BACF,GAAG,KAAK,IAAI;qBACjB,GAAG,aAAa,GAAG,KAAK,IAAI;;0BAEvB,0BAA0B,KAAK,WAAW;iBACnD,GAAG;eACL,GAAG;oBACE,oBAAoB,KAAK,WAAW;6BAC3B,oBAAoB,KAAK,WAAW;6CAiC9D,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CAChE;AAED,eAAO,MAAM,eAAe,oFAQzB,oBAAoB,4CA+CtB,CAAC"}
@@ -25,7 +25,7 @@ const AddLimitPopover = ({ onSave, initialLimit = 10, isEdit = false, onDelete =
25
25
  flexDirection: 'row',
26
26
  gap: 12,
27
27
  padding: '6px 0px',
28
- }, children: (0, jsx_runtime_1.jsx)(TextInput, { id: 'add_limit_input', value: limit.toString() ?? initialLimit.toString(), width: 200,
28
+ }, children: (0, jsx_runtime_1.jsx)(TextInput, { id: 'add_limit_input', label: "Limit", value: limit.toString() ?? initialLimit.toString(), width: 200,
29
29
  // style={{ minHeight: 32, padding: '6px 12px' }}
30
30
  onChange: (e) => {
31
31
  if (Number.isNaN(parseFloat(e.target.value || '0'))) {
@@ -19,5 +19,5 @@ export declare const SortSentence: ({ sortData, keyPrefix, columns, handleDelete
19
19
  Button?: ((props: ButtonComponentProps) => JSX.Element) | undefined;
20
20
  SecondaryButton?: ((props: ButtonComponentProps) => JSX.Element) | undefined;
21
21
  }) => import("react/jsx-runtime").JSX.Element | null;
22
- export declare const AddSortPopover: ({ onSave, columns, isEdit, onDelete, column, Select, Button, SecondaryButton, }: any) => import("react/jsx-runtime").JSX.Element;
22
+ export declare const AddSortPopover: ({ onSave, columns, isEdit, onDelete, column, direction, Select, Button, SecondaryButton, }: any) => import("react/jsx-runtime").JSX.Element;
23
23
  //# sourceMappingURL=AddSortPopover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddSortPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddSortPopover.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,oBAAoB,EAGpB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,MAAM,CAAC;AAOjD,eAAO,MAAM,YAAY;cAkBb,GAAG;aACJ,GAAG;kBACE,GAAG;uBACE,GAAG;uBACH,GAAG;oBACN,GAAG;mBACJ,GAAG;gBACN,GAAG;kBACD,GAAG;YACT,GAAG;;yBAEU,yBAAyB,KAAK,WAAW;iBACjD,GAAG;sBACC,oBAAoB,KAAK,WAAW;sBACpC,oBAAoB,KAAK,WAAW;+BAC3B,oBAAoB,KAAK,WAAW;oDAoD/D,CAAC;AAEF,eAAO,MAAM,cAAc,oFASxB,GAAG,4CA+DL,CAAC"}
1
+ {"version":3,"file":"AddSortPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddSortPopover.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,oBAAoB,EAGpB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,MAAM,CAAC;AAOjD,eAAO,MAAM,YAAY;cAkBb,GAAG;aACJ,GAAG;kBACE,GAAG;uBACE,GAAG;uBACH,GAAG;oBACN,GAAG;mBACJ,GAAG;gBACN,GAAG;kBACD,GAAG;YACT,GAAG;;yBAEU,yBAAyB,KAAK,WAAW;iBACjD,GAAG;sBACC,oBAAoB,KAAK,WAAW;sBACpC,oBAAoB,KAAK,WAAW;+BAC3B,oBAAoB,KAAK,WAAW;oDAqD/D,CAAC;AAEF,eAAO,MAAM,cAAc,+FAUxB,GAAG,4CAmEL,CAAC"}
@@ -34,25 +34,25 @@ const SortSentence = ({ sortData, keyPrefix, columns, handleDelete, setEditPopov
34
34
  return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SortPopover, { isOpen: isOpen, setIsOpen: handleSetIsOpen, sortLabel: `${(0, textProcessing_1.snakeCaseToTitleCase)(sortData.expr.column) || (0, textProcessing_1.snakeCaseToTitleCase)(sortData.expr.value)} ${SORT_VALUE_TO_LABEL[sortData.type]}`, onClickDelete: handleClickDelete, popoverTitle: popoverTitle, popoverChildren: (0, jsx_runtime_1.jsx)(EditPopover, { onSave: (column, direction) => {
35
35
  setIsOpen(false);
36
36
  onSave(column, direction);
37
- }, columns: columns, isEdit: true, onDelete: handleClickDelete, column: sortData.expr.column || sortData.expr.value, Select: Select, Button: Button, SecondaryButton: SecondaryButton }) }) }));
37
+ }, columns: columns, isEdit: true, onDelete: handleClickDelete, column: sortData.expr.column || sortData.expr.value, direction: sortData.type, Select: Select, Button: Button, SecondaryButton: SecondaryButton }) }) }));
38
38
  };
39
39
  exports.SortSentence = SortSentence;
40
- const AddSortPopover = ({ onSave, columns, isEdit, onDelete, column, Select = QuillSelect_1.QuillSelectComponent, Button = UiComponents_1.MemoizedButton, SecondaryButton = UiComponents_1.MemoizedSecondaryButton, }) => {
40
+ const AddSortPopover = ({ onSave, columns, isEdit, onDelete, column, direction, Select = QuillSelect_1.QuillSelectComponent, Button = UiComponents_1.MemoizedButton, SecondaryButton = UiComponents_1.MemoizedSecondaryButton, }) => {
41
41
  const [sortColumn, setSortColumn] = (0, react_1.useState)(column || '');
42
- const [sortDirection, setSortDirection] = (0, react_1.useState)('ASC');
42
+ const [sortDirection, setSortDirection] = (0, react_1.useState)(direction || 'ASC');
43
43
  return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
44
44
  display: 'flex',
45
45
  flexDirection: 'row',
46
46
  gap: 12,
47
47
  padding: '6px 0px',
48
- }, children: [(0, jsx_runtime_1.jsx)(Select, { value: sortColumn, onChange: (e) => {
48
+ }, children: [(0, jsx_runtime_1.jsx)(Select, { label: "Sort Column", value: sortColumn, onChange: (e) => {
49
49
  setSortColumn(e.target.value);
50
50
  }, options: [
51
51
  ...columns.map((column) => ({
52
52
  label: (0, textProcessing_1.snakeCaseToTitleCase)(column.split('.')[1] || ''),
53
53
  value: column.split('.')[1],
54
54
  })),
55
- ], width: 200 }), (0, jsx_runtime_1.jsx)(Select, { value: sortDirection, onChange: (e) => {
55
+ ], width: 200 }), (0, jsx_runtime_1.jsx)(Select, { label: "Sort Direction", value: sortDirection, onChange: (e) => {
56
56
  setSortDirection(e.target.value);
57
57
  }, options: [
58
58
  { label: 'Ascending', value: 'ASC' },
@@ -493,6 +493,12 @@ export declare const extractColumnish: (expr_value: NodeSQLParser.ExpressionValu
493
493
  * @returns true or false
494
494
  */
495
495
  export declare const isNumericColumnType: (columnType: string | undefined) => boolean;
496
+ /**
497
+ * Returns whether the given columnType is a numeric bool.
498
+ * @param columnType the type of the column
499
+ * @returns true or false
500
+ */
501
+ export declare const isBoolColumnType: (columnType: string | undefined) => boolean;
496
502
  /**
497
503
  * Returns whether the given columnType is a text type (ie. text-ish).
498
504
  * @param columnType the type of the column