@quillsql/react 2.11.23 → 2.11.25

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 (203) hide show
  1. package/dist/cjs/Chart.d.ts +16 -0
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +34 -18
  4. package/dist/cjs/ChartBuilder.d.ts +55 -2
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +232 -212
  7. package/dist/cjs/ChartEditor.d.ts +49 -2
  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 +5 -1
  11. package/dist/cjs/Dashboard.d.ts.map +1 -1
  12. package/dist/cjs/Dashboard.js +42 -18
  13. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  14. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +4 -3
  16. package/dist/cjs/ReportBuilder.d.ts +57 -2
  17. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  18. package/dist/cjs/ReportBuilder.js +962 -684
  19. package/dist/cjs/SQLEditor.d.ts +83 -2
  20. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  21. package/dist/cjs/SQLEditor.js +10 -2
  22. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  23. package/dist/cjs/components/Chart/BarChart.js +8 -6
  24. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  25. package/dist/cjs/components/Chart/BarList.js +0 -153
  26. package/dist/cjs/components/Chart/ChartError.d.ts +1 -1
  27. package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
  28. package/dist/cjs/components/Chart/ChartError.js +13 -7
  29. package/dist/cjs/components/Chart/ChartTooltip.d.ts +1 -0
  30. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  31. package/dist/cjs/components/Chart/ChartTooltip.js +6 -7
  32. package/dist/cjs/components/Chart/LineChart.d.ts +6 -2
  33. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  34. package/dist/cjs/components/Chart/LineChart.js +35 -34
  35. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +1 -1
  36. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  37. package/dist/cjs/components/Dashboard/DashboardFilter.js +21 -21
  38. package/dist/cjs/components/Dashboard/DataLoader.d.ts +24 -0
  39. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  40. package/dist/cjs/components/Dashboard/DataLoader.js +84 -0
  41. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  42. package/dist/cjs/components/Dashboard/MetricComponent.js +4 -1
  43. package/dist/cjs/components/QuillSelect.js +1 -1
  44. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  45. package/dist/cjs/components/QuillTable.js +11 -12
  46. package/dist/cjs/components/ReportBuilder/{AddColumnPopover.d.ts → AddColumnModal.d.ts} +3 -2
  47. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -0
  48. package/dist/cjs/components/ReportBuilder/{AddColumnPopover.js → AddColumnModal.js} +12 -8
  49. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  50. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -1
  51. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +1 -1
  52. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  53. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +5 -5
  54. package/dist/cjs/components/ReportBuilder/ast.d.ts +6 -0
  55. package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
  56. package/dist/cjs/components/ReportBuilder/ast.js +13 -2
  57. package/dist/cjs/components/ReportBuilder/constants.d.ts +13 -0
  58. package/dist/cjs/components/ReportBuilder/constants.d.ts.map +1 -1
  59. package/dist/cjs/components/ReportBuilder/constants.js +14 -1
  60. package/dist/cjs/components/ReportBuilder/convert.d.ts +18 -1
  61. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  62. package/dist/cjs/components/ReportBuilder/convert.js +14 -3
  63. package/dist/cjs/components/ReportBuilder/operators.d.ts +15 -23
  64. package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
  65. package/dist/cjs/components/ReportBuilder/operators.js +19 -27
  66. package/dist/cjs/components/ReportBuilder/pivot.d.ts +2 -0
  67. package/dist/cjs/components/ReportBuilder/pivot.d.ts.map +1 -1
  68. package/dist/cjs/components/ReportBuilder/ui.d.ts +3 -2
  69. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  70. package/dist/cjs/components/ReportBuilder/ui.js +54 -28
  71. package/dist/cjs/components/ReportBuilder/util.d.ts +1 -1
  72. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  73. package/dist/cjs/components/ReportBuilder/util.js +3 -0
  74. package/dist/cjs/components/UiComponents.d.ts +34 -4
  75. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  76. package/dist/cjs/components/UiComponents.js +165 -68
  77. package/dist/cjs/hooks/useQuill.d.ts +1 -0
  78. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  79. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +1 -2
  80. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  81. package/dist/cjs/internals/ReportBuilder/PivotList.js +5 -7
  82. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +31 -5
  83. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  84. package/dist/cjs/internals/ReportBuilder/PivotModal.js +442 -282
  85. package/dist/cjs/utils/axisFormatter.js +3 -3
  86. package/dist/cjs/utils/getDomain.d.ts.map +1 -1
  87. package/dist/cjs/utils/getDomain.js +3 -0
  88. package/dist/cjs/utils/merge.d.ts.map +1 -1
  89. package/dist/cjs/utils/merge.js +2 -0
  90. package/dist/cjs/utils/pivotProcessing.d.ts +20 -0
  91. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -0
  92. package/dist/cjs/utils/pivotProcessing.js +177 -0
  93. package/dist/cjs/utils/queryConstructor.d.ts +2 -0
  94. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -0
  95. package/dist/cjs/utils/queryConstructor.js +11 -0
  96. package/dist/cjs/utils/tableProcessing.d.ts +7 -0
  97. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -0
  98. package/dist/cjs/utils/tableProcessing.js +84 -0
  99. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  100. package/dist/cjs/utils/valueFormatter.js +40 -8
  101. package/dist/esm/Chart.d.ts +16 -0
  102. package/dist/esm/Chart.d.ts.map +1 -1
  103. package/dist/esm/Chart.js +35 -19
  104. package/dist/esm/ChartBuilder.d.ts +55 -2
  105. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  106. package/dist/esm/ChartBuilder.js +234 -214
  107. package/dist/esm/ChartEditor.d.ts +49 -2
  108. package/dist/esm/ChartEditor.d.ts.map +1 -1
  109. package/dist/esm/ChartEditor.js +4 -4
  110. package/dist/esm/Dashboard.d.ts +5 -1
  111. package/dist/esm/Dashboard.d.ts.map +1 -1
  112. package/dist/esm/Dashboard.js +21 -20
  113. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  114. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  115. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +4 -3
  116. package/dist/esm/ReportBuilder.d.ts +57 -2
  117. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  118. package/dist/esm/ReportBuilder.js +964 -687
  119. package/dist/esm/SQLEditor.d.ts +83 -2
  120. package/dist/esm/SQLEditor.d.ts.map +1 -1
  121. package/dist/esm/SQLEditor.js +11 -3
  122. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  123. package/dist/esm/components/Chart/BarChart.js +8 -6
  124. package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
  125. package/dist/esm/components/Chart/BarList.js +0 -153
  126. package/dist/esm/components/Chart/ChartError.d.ts +1 -1
  127. package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
  128. package/dist/esm/components/Chart/ChartError.js +13 -7
  129. package/dist/esm/components/Chart/ChartTooltip.d.ts +1 -0
  130. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  131. package/dist/esm/components/Chart/ChartTooltip.js +6 -7
  132. package/dist/esm/components/Chart/LineChart.d.ts +6 -2
  133. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  134. package/dist/esm/components/Chart/LineChart.js +35 -34
  135. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +1 -1
  136. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  137. package/dist/esm/components/Dashboard/DashboardFilter.js +21 -21
  138. package/dist/esm/components/Dashboard/DataLoader.d.ts +24 -0
  139. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  140. package/dist/esm/components/Dashboard/DataLoader.js +82 -0
  141. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  142. package/dist/esm/components/Dashboard/MetricComponent.js +4 -1
  143. package/dist/esm/components/QuillSelect.js +1 -1
  144. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  145. package/dist/esm/components/QuillTable.js +11 -12
  146. package/dist/esm/components/ReportBuilder/{AddColumnPopover.d.ts → AddColumnModal.d.ts} +3 -2
  147. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -0
  148. package/dist/esm/components/ReportBuilder/{AddColumnPopover.js → AddColumnModal.js} +11 -7
  149. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  150. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +1 -1
  151. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +1 -1
  152. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  153. package/dist/esm/components/ReportBuilder/AddSortPopover.js +5 -5
  154. package/dist/esm/components/ReportBuilder/ast.d.ts +6 -0
  155. package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
  156. package/dist/esm/components/ReportBuilder/ast.js +11 -1
  157. package/dist/esm/components/ReportBuilder/constants.d.ts +13 -0
  158. package/dist/esm/components/ReportBuilder/constants.d.ts.map +1 -1
  159. package/dist/esm/components/ReportBuilder/constants.js +13 -0
  160. package/dist/esm/components/ReportBuilder/convert.d.ts +18 -1
  161. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  162. package/dist/esm/components/ReportBuilder/convert.js +14 -3
  163. package/dist/esm/components/ReportBuilder/operators.d.ts +15 -23
  164. package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
  165. package/dist/esm/components/ReportBuilder/operators.js +19 -27
  166. package/dist/esm/components/ReportBuilder/pivot.d.ts +2 -0
  167. package/dist/esm/components/ReportBuilder/pivot.d.ts.map +1 -1
  168. package/dist/esm/components/ReportBuilder/ui.d.ts +3 -2
  169. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  170. package/dist/esm/components/ReportBuilder/ui.js +55 -29
  171. package/dist/esm/components/ReportBuilder/util.d.ts +1 -1
  172. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  173. package/dist/esm/components/ReportBuilder/util.js +3 -0
  174. package/dist/esm/components/UiComponents.d.ts +34 -4
  175. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  176. package/dist/esm/components/UiComponents.js +155 -66
  177. package/dist/esm/hooks/useQuill.d.ts +1 -0
  178. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  179. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +1 -2
  180. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  181. package/dist/esm/internals/ReportBuilder/PivotList.js +5 -7
  182. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +31 -5
  183. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  184. package/dist/esm/internals/ReportBuilder/PivotModal.js +443 -284
  185. package/dist/esm/utils/axisFormatter.js +3 -3
  186. package/dist/esm/utils/getDomain.d.ts.map +1 -1
  187. package/dist/esm/utils/getDomain.js +3 -0
  188. package/dist/esm/utils/merge.d.ts.map +1 -1
  189. package/dist/esm/utils/merge.js +2 -0
  190. package/dist/esm/utils/pivotProcessing.d.ts +20 -0
  191. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -0
  192. package/dist/esm/utils/pivotProcessing.js +170 -0
  193. package/dist/esm/utils/queryConstructor.d.ts +2 -0
  194. package/dist/esm/utils/queryConstructor.d.ts.map +1 -0
  195. package/dist/esm/utils/queryConstructor.js +7 -0
  196. package/dist/esm/utils/tableProcessing.d.ts +7 -0
  197. package/dist/esm/utils/tableProcessing.d.ts.map +1 -0
  198. package/dist/esm/utils/tableProcessing.js +80 -0
  199. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  200. package/dist/esm/utils/valueFormatter.js +41 -9
  201. package/package.json +1 -1
  202. package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +0 -1
  203. package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +0 -1
@@ -182,7 +182,7 @@ function ChartBuilderWithModal(props) {
182
182
  setModalWidth(window.innerWidth - 80);
183
183
  }
184
184
  else {
185
- setModalWidth(705); // width of the form + padding
185
+ setModalWidth(undefined); // use dynamic width of contents
186
186
  }
187
187
  setModalHeight(window.innerHeight - 80);
188
188
  }
@@ -192,7 +192,7 @@ function ChartBuilderWithModal(props) {
192
192
  window.removeEventListener('resize', handleResize);
193
193
  };
194
194
  }, []);
195
- return ((0, jsx_runtime_1.jsx)("div", { ref: parentRef, children: (0, jsx_runtime_1.jsx)(Modal, { isOpen: isOpen, setIsOpen: setIsOpen, title: title || 'Add to dashboard',
195
+ return ((0, jsx_runtime_1.jsx)("div", { style: { height: '100%' }, ref: parentRef, children: (0, jsx_runtime_1.jsx)(Modal, { isOpen: isOpen, setIsOpen: setIsOpen, title: title || 'Add to dashboard',
196
196
  // For isHorizontalView, use full viewport size minus 80px for padding,
197
197
  // otherwise use the default layout method of the modal (contents).
198
198
  width: isHorizontalView ? modalWidth : undefined, height: isHorizontalView ? modalHeight : undefined, children: (0, jsx_runtime_1.jsx)(ChartBuilder, { ...props }) }) }));
@@ -222,14 +222,17 @@ exports.ChartBuilderWithModal = ChartBuilderWithModal;
222
222
  * ### Chart Builder API
223
223
  * @see https://docs.quillsql.com/components/chart-builder
224
224
  */
225
- function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, HeaderComponent = UiComponents_1.MemoizedHeader, LabelComponent = UiComponents_1.MemoizedLabel, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextComponent = UiComponents_1.MemoizedText, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, TableComponent = UiComponents_1.QuillTableComponent, ModalComponent, 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, }) {
225
+ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, LabelComponent = UiComponents_1.MemoizedLabel, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextComponent = UiComponents_1.MemoizedText, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, TableComponent = UiComponents_1.QuillTableComponent, ModalComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, FormContainer = UiComponents_1.QuillChartBuilderFormContainer, 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, hideDateRangeFilter = false, initialUniqueValues, pivotRecommendationsEnabled = true, }) {
226
226
  const dateRange = dr || [null, null, null];
227
227
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
228
228
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
229
229
  const [schema, setSchema] = (0, react_1.useContext)(Context_1.SchemaContext);
230
230
  const [windowWidth, setWindowWidth] = (0, react_1.useState)(1200);
231
231
  const [isSubmitting, setIsSubmitting] = (0, react_1.useState)(false);
232
- const [divWidth, setDivWidth] = (0, react_1.useState)('auto');
232
+ const [pivotCardWidth, setPivotCardWidth] = (0, react_1.useState)(665);
233
+ const [formWidth, setFormWidth] = (0, react_1.useState)(665);
234
+ const inputRef = (0, react_1.useRef)(null);
235
+ const selectRef = (0, react_1.useRef)(null);
233
236
  const { dispatch } = (0, react_1.useContext)(Context_1.DashboardContext);
234
237
  const fields = fieldsProp?.map((field) => ({
235
238
  field: field.name,
@@ -239,9 +242,8 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
239
242
  })) || [];
240
243
  const parentRef = (0, react_1.useRef)(null);
241
244
  const deleteRef = (0, react_1.useRef)(null);
242
- const pivotCardContainer = (0, react_1.useRef)(null);
243
245
  const modalPadding = 20;
244
- const deleteButtonMargin = -13;
246
+ const deleteButtonMargin = -12;
245
247
  (0, react_1.useEffect)(() => {
246
248
  const handleResize = () => setWindowWidth(window.innerWidth);
247
249
  handleResize();
@@ -251,58 +253,51 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
251
253
  };
252
254
  }, []);
253
255
  (0, react_1.useEffect)(() => {
254
- const calculateWidth = () => pivotCardContainer.current?.getBoundingClientRect().width ??
255
- 240 - 40 ??
256
- 'calc(100% - 40px)';
257
256
  const handleResize = () => {
258
- if (pivotCardContainer.current) {
259
- setDivWidth(calculateWidth());
257
+ // The pivot card should be the same width as the row of inputs
258
+ // above it (an input, two selects, plus the gaps between them).
259
+ if (inputRef.current && selectRef.current) {
260
+ const inputSize = inputRef.current?.getBoundingClientRect();
261
+ const selectSize = selectRef.current?.getBoundingClientRect();
262
+ const selectWidth = selectSize.width;
263
+ const showDash = showDashboardDropdown && !destinationDashboard;
264
+ const spaceBetween = selectSize.left - inputSize.right;
265
+ const gap = showDash ? (spaceBetween - selectWidth) / 2 : spaceBetween;
266
+ const width = inputSize.width + 2 * gap + 2 * selectWidth;
267
+ setPivotCardWidth(width);
268
+ // Calculate the form width by adding the width of the delete button
269
+ const deleteSize = deleteRef.current?.getBoundingClientRect();
270
+ const deleteWidth = deleteSize?.width ?? 0;
271
+ setFormWidth(width + deleteWidth);
260
272
  }
261
273
  };
262
274
  handleResize();
263
- window.addEventListener('resize', handleResize);
264
- return () => {
265
- window.removeEventListener('resize', handleResize);
266
- };
267
- }, [pivotCardContainer]);
268
- // get schema
275
+ }, [isOpen]);
269
276
  (0, react_1.useEffect)(() => {
270
- let isSubscribed = true;
271
- async function getSchema() {
272
- if (!schema || !schema.length) {
273
- const { queryEndpoint, queryHeaders, publicKey } = client;
274
- const response = await fetch(`${queryEndpoint}`, {
275
- method: 'POST',
276
- headers: {
277
- ...queryHeaders,
278
- 'Content-Type': 'application/json',
279
- },
280
- body: JSON.stringify({
281
- metadata: {
282
- clientId: publicKey,
283
- publicKey: publicKey,
284
- task: 'schema',
285
- },
286
- }),
287
- });
288
- const results = await response.json();
289
- if (isSubscribed) {
290
- if (results.data?.data) {
291
- setSchema(results.data.data.tables);
292
- }
293
- else {
294
- setSchema(results.data.tables);
295
- }
296
- }
277
+ const handleResize = () => {
278
+ // The pivot card should be the same width as the row of inputs
279
+ // above it (an input, two selects, plus the gaps between them).
280
+ if (inputRef.current && selectRef.current) {
281
+ const inputSize = inputRef.current?.getBoundingClientRect();
282
+ const selectSize = selectRef.current?.getBoundingClientRect();
283
+ const selectWidth = selectSize.width;
284
+ const showDash = showDashboardDropdown && !destinationDashboard;
285
+ const spaceBetween = selectSize.left - inputSize.right;
286
+ const gap = showDash ? (spaceBetween - selectWidth) / 2 : spaceBetween;
287
+ const width = inputSize.width + 2 * gap + 2 * selectWidth;
288
+ setPivotCardWidth(width);
289
+ // Calculate the form width by adding the width of the delete button
290
+ const deleteSize = deleteRef.current?.getBoundingClientRect();
291
+ const deleteWidth = deleteSize?.width ?? 0;
292
+ setFormWidth(width + deleteWidth);
297
293
  }
298
- }
299
- if (isSubscribed) {
300
- getSchema();
301
- }
294
+ };
295
+ handleResize();
296
+ window.addEventListener('resize', handleResize);
302
297
  return () => {
303
- isSubscribed = false;
298
+ window.removeEventListener('resize', handleResize);
304
299
  };
305
- }, [schema]);
300
+ }, []);
306
301
  // get dashboards
307
302
  const [dashboardOptions, setDashboardOptions] = (0, react_1.useState)([]);
308
303
  const [defaultDashboardName, setDefaultDashboardName] = (0, react_1.useState)(destinationDashboard || dashboardItem?.dashboardName || '');
@@ -318,17 +313,18 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
318
313
  const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
319
314
  const [tableName, setTableName] = (0, react_1.useState)(undefined);
320
315
  const selectedTable = schema?.find((t) => t.displayName === tableName);
321
- const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add Pivot');
316
+ const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
322
317
  const [createdPivots, setCreatedPivots] = (0, react_1.useState)(pivot ? [pivot] : dashboardItem?.pivot ? [dashboardItem.pivot] : cp);
323
318
  const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)(rp);
324
- const [pivotRowField, setPivotRowField] = (0, react_1.useState)(undefined);
325
- const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(undefined);
326
- const [pivotValueField, setPivotValueField] = (0, react_1.useState)(undefined);
327
- const [pivotAggregation, setPivotAggregation] = (0, react_1.useState)(undefined);
319
+ const [pivotRowField, setPivotRowField] = (0, react_1.useState)(pivot?.rowField);
320
+ const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(pivot?.columnField);
321
+ const [pivotValueField, setPivotValueField] = (0, react_1.useState)(pivot?.valueField);
322
+ const [pivotAggregation, setPivotAggregation] = (0, react_1.useState)(pivot?.aggregationType);
328
323
  // initial state is the fields array passed in, but can eventually be changed to be the pivot fields
329
324
  const [fieldOptions, setFieldOptions] = (0, react_1.useState)(fields);
330
325
  const [dateFieldOptions, setDateFieldOptions] = (0, react_1.useState)([]);
331
326
  const [allTables, setAllTables] = (0, react_1.useState)([]);
327
+ const [uniqueValues, setUniqueValues] = (0, react_1.useState)(undefined);
332
328
  const [defaultDateField, setDefaultDateField] = (0, react_1.useState)({
333
329
  table: dateFieldOptions[0]?.name || '',
334
330
  field: dateFieldOptions[0]?.columns[0]?.name || '',
@@ -356,7 +352,7 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
356
352
  template: false,
357
353
  };
358
354
  const updateDashboardFilters = async (dashboardName) => {
359
- const { queryEndpoint, queryHeaders, publicKey } = client;
355
+ const { queryEndpoint, queryHeaders, publicKey, customerId } = client;
360
356
  if (queryEndpoint) {
361
357
  const response = await fetch(queryEndpoint, {
362
358
  method: 'POST',
@@ -366,7 +362,7 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
366
362
  },
367
363
  body: JSON.stringify({
368
364
  metadata: {
369
- orgId: '*',
365
+ orgId: customerId || '*',
370
366
  task: 'config',
371
367
  name: dashboardName,
372
368
  clientId: publicKey,
@@ -383,10 +379,13 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
383
379
  };
384
380
  const pivotFormData = (pivot) => {
385
381
  const yAxisField = pivot.columnField || pivot.valueField;
382
+ const yAxisLabel = dashboardItem?.yAxisFields?.length > 0
383
+ ? dashboardItem.yAxisFields[0].label
384
+ : pivot.valueField;
386
385
  // date labels for pivots should be treated like strings since they are
387
386
  // formatted in generatePivotTable
388
387
  const yAxisIsDate = pivot.columnField
389
- ? (0, PivotModal_1.isDateField)(pivot.columnFieldType)
388
+ ? (0, PivotModal_1.isDateField)(pivot.columnFieldType || '')
390
389
  : false;
391
390
  const chartType = dashboardItem?.chartType ?? (pivot.rowField ? 'column' : 'metric');
392
391
  return {
@@ -397,21 +396,28 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
397
396
  ? 'string'
398
397
  : columns.find((col) => col.field === pivot.rowField)?.format ||
399
398
  'whole_number',
400
- xAxisLabel: '',
399
+ xAxisLabel: dashboardItem?.xAxisLabel || pivot.rowField,
401
400
  yAxisFields: [
402
401
  {
403
402
  field: yAxisField,
404
- label: '',
403
+ label: yAxisLabel,
405
404
  format: yAxisIsDate
406
405
  ? 'string'
407
- : columns.find((col) => col.field === yAxisField)?.format ||
408
- 'whole_number',
406
+ : dashboardItem?.yAxisFields?.length > 0
407
+ ? dashboardItem?.yAxisFields[0].format
408
+ : columns.find((col) => col.field === pivot.valueField)?.format ||
409
+ 'whole_number',
409
410
  },
410
411
  ],
411
412
  };
412
413
  };
413
414
  const [formData, setFormData] = (0, react_1.useState)(pivot
414
- ? { ...formEmptyState, ...dashboardItem, ...pivotFormData(pivot) }
415
+ ? {
416
+ ...formEmptyState,
417
+ ...dashboardItem,
418
+ ...pivotFormData(pivot),
419
+ ...(destinationDashboard && { dashboardName: destinationDashboard }),
420
+ }
415
421
  : dashboardItem || formEmptyState);
416
422
  (0, react_1.useEffect)(() => {
417
423
  async function getFormData() {
@@ -420,27 +426,49 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
420
426
  const dashboardOptions = resp.dashboardNames
421
427
  .filter((elem) => elem !== null)
422
428
  .map((key) => ({ label: key, value: key }));
423
- await updateDashboardFilters(dashboardItem
424
- ? dashboardItem.dashboardName
425
- : dashboardOptions[0]?.label);
429
+ await updateDashboardFilters(destinationDashboard ??
430
+ (dashboardItem
431
+ ? dashboardItem?.dashboardName
432
+ : dashboardOptions[0]?.label));
426
433
  setDashboardOptions(dashboardOptions);
427
- const dashboardName = dashboardItem
428
- ? dashboardItem?.dashboardName
429
- : dashboardOptions[0]?.label;
434
+ const dashboardName = destinationDashboard ??
435
+ (dashboardItem
436
+ ? dashboardItem?.dashboardName
437
+ : dashboardOptions[0]?.label);
430
438
  curFormData.dashboardName = dashboardName;
431
- setDefaultDashboardName(dashboardItem
432
- ? dashboardItem?.dashboardName
433
- : dashboardOptions[0]?.label);
434
- // setFormData({
435
- // ...formData,
436
- // dashboardName: dashboardItem
437
- // ? dashboardItem?.dashboardName
438
- // : dashboardOptions[0]?.label,
439
- // });
439
+ setDefaultDashboardName(destinationDashboard ??
440
+ (dashboardItem
441
+ ? dashboardItem?.dashboardName
442
+ : dashboardOptions[0]?.label));
443
+ const { queryEndpoint, queryHeaders, publicKey } = client;
444
+ const response = await fetch(`${queryEndpoint}`, {
445
+ method: 'POST',
446
+ headers: {
447
+ ...queryHeaders,
448
+ 'Content-Type': 'application/json',
449
+ },
450
+ body: JSON.stringify({
451
+ metadata: {
452
+ clientId: publicKey,
453
+ publicKey: publicKey,
454
+ task: 'schema',
455
+ },
456
+ }),
457
+ });
458
+ const schemaInfo = await response.json();
459
+ let schemaData = schemaInfo.data?.data;
460
+ if (schemaInfo.data?.data) {
461
+ schemaData = schemaInfo.data.data.tables;
462
+ setSchema(schemaInfo.data.data.tables);
463
+ }
464
+ else {
465
+ schemaData = schemaInfo.data.tables;
466
+ setSchema(schemaInfo.data.tables);
467
+ }
440
468
  if (!query) {
441
469
  return;
442
470
  }
443
- const result = await getReferencedTables(client, query, schema, true);
471
+ const result = await getReferencedTables(client, query, schemaData, true);
444
472
  setDateFieldOptions(result);
445
473
  if (result[0] && result[0].columns[0]) {
446
474
  setDefaultDateField({
@@ -448,7 +476,7 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
448
476
  field: result[0].columns[0].name,
449
477
  });
450
478
  }
451
- const allReferencedFields = await getReferencedTables(client, query, schema, false);
479
+ const allReferencedFields = await getReferencedTables(client, query, schemaData, false);
452
480
  setAllTables(allReferencedFields.map((table) => table.name));
453
481
  setTableName(result[0]?.name);
454
482
  const dateField = {
@@ -460,6 +488,9 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
460
488
  curFormData.dateField = dateField;
461
489
  setFormData({
462
490
  ...curFormData,
491
+ dashboardName: dashboardItem
492
+ ? dashboardItem?.dashboardName
493
+ : dashboardOptions[0]?.label,
463
494
  });
464
495
  }
465
496
  getFormData();
@@ -501,6 +532,8 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
501
532
  });
502
533
  }
503
534
  else {
535
+ if (!rows)
536
+ return [];
504
537
  return rows.map((row) => {
505
538
  return formData.columns.reduce((formattedRow, column) => {
506
539
  // Apply the format function to each field in the row
@@ -597,16 +630,30 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
597
630
  }
598
631
  };
599
632
  const handleAddPivot = (pivot) => {
633
+ const newPivotFormData = pivotFormData(pivot);
634
+ // Only keep the old chart type if the shapes of the pivots are the same
635
+ // since the valid chart types for some pivots might have changed (eg. going
636
+ // from a 1D pivot to a 2D pivot would make bar lists not an option).
637
+ // They don't have to have the same value, just same 'truthiness'.
638
+ const isPivotSameShape = Boolean(formData.pivot?.rowField) === Boolean(pivot.rowField) &&
639
+ Boolean(formData.pivot?.columnField) === Boolean(pivot.columnField);
640
+ const isNewChartType = formData.chartType !== newPivotFormData.chartType;
641
+ const keepOldChartType = isNewChartType && isPivotSameShape;
600
642
  setFormData((formData) => ({
601
643
  ...formData,
602
- ...pivotFormData(pivot),
644
+ ...newPivotFormData,
645
+ ...(keepOldChartType && { chartType: formData.chartType }),
603
646
  }));
604
647
  };
605
648
  const handleDeletePivot = () => {
606
649
  if (!formData.pivot) {
607
650
  return;
608
651
  }
609
- setFormData({ ...formEmptyState, pivot: null });
652
+ setFormData({
653
+ ...formEmptyState,
654
+ dashboardName: formData.dashboardName,
655
+ pivot: null,
656
+ });
610
657
  };
611
658
  const handleAddField = (fieldName) => {
612
659
  if (fieldName === 'columns') {
@@ -767,7 +814,12 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
767
814
  setIsOpen(false);
768
815
  setIsSubmitting(false);
769
816
  if (onAddToDashboardComplete) {
770
- onAddToDashboardComplete();
817
+ onAddToDashboardComplete({
818
+ ...resp,
819
+ rows,
820
+ fieldOptions,
821
+ filtersApplied: dashboardFilters,
822
+ });
771
823
  }
772
824
  };
773
825
  // Prevent horizontal view on small screens.
@@ -794,13 +846,14 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
794
846
  display: 'flex',
795
847
  flexDirection: 'column',
796
848
  gap: '20px',
797
- height: '100%',
849
+ height: isHorizontalView || !isOpen ? '100%' : 800,
798
850
  ...(isHorizontalView && {
799
851
  flexGrow: 1,
800
- maxWidth: !isOpen ? '100%' : 'calc(100% - 665px - 20px)', // width of left sidebar plus gap
852
+ maxWidth: !isOpen ? '100%' : `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
801
853
  }),
854
+ ...(!isHorizontalView && isOpen && { width: formWidth }),
802
855
  }, children: [((!isHorizontalView && windowWidth >= 1200) ||
803
- formData.chartType !== 'table') && ((0, jsx_runtime_1.jsx)(Chart_1.default, { colors: theme.chartColors, config: { ...formData, rows }, containerStyle: {
856
+ formData.chartType !== 'table') && ((0, jsx_runtime_1.jsx)(Chart_1.default, { colors: theme.chartColors, config: { ...formData, rows }, hideDateRangeFilter: hideDateRangeFilter, containerStyle: {
804
857
  width: '100%',
805
858
  height: formData.chartType === 'metric'
806
859
  ? 100
@@ -819,40 +872,37 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
819
872
  : formData.columns })) }))] }), isOpen && ((0, jsx_runtime_1.jsxs)("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
820
873
  display: 'flex',
821
874
  flexDirection: 'column',
822
- height: '100%',
823
875
  gap: 20,
824
876
  ...(isHorizontalView && {
825
- minWidth: 665,
826
- maxWidth: 665,
827
- width: 665,
877
+ height: '100%',
878
+ minWidth: formWidth,
879
+ maxWidth: formWidth,
880
+ width: formWidth,
828
881
  }),
829
882
  ...(windowWidth < 1200 && {
830
- paddingBottom: modalPadding
831
- })
832
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { overflow: 'auto' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(LabelComponent, { label: "Name" }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-name", width: 200, value: formData.name, onChange: (e) => handleChange(e.target.value, 'name'), placeholder: "Name" })] }), showDashboardDropdown && !destinationDashboard && ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(LabelComponent, { label: "Dashboard" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.dashboardName || '', onChange: async (e) => {
833
- handleChange(e.target.value, 'dashboardName');
834
- await updateDashboardFilters(e.target.value);
835
- }, options: dashboardOptions.map((elem) => ({
836
- label: elem.label,
837
- value: elem.label,
838
- })), width: 200 })] })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(LabelComponent, { label: "Chart type" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
839
- // filter out metric for all pivots
840
- // filter out bar and pie for row and column pivot
841
- options: getChartTypeOptions(formData), width: 200 })] })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("div", { style: {
883
+ width: formWidth,
884
+ paddingTop: modalPadding,
885
+ paddingBottom: modalPadding,
886
+ }),
887
+ }, children: [(0, jsx_runtime_1.jsxs)(FormContainer, { children: [(0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)("div", { ref: inputRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-name", label: "Name", width: 200, value: formData.name, onChange: (e) => handleChange(e.target.value, 'name'), placeholder: "Name" }) }), showDashboardDropdown && !destinationDashboard && ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Dashboard", value: formData.dashboardName || '', onChange: async (e) => {
888
+ handleChange(e.target.value, 'dashboardName');
889
+ await updateDashboardFilters(e.target.value);
890
+ }, options: dashboardOptions.map((elem) => ({
891
+ label: elem.label,
892
+ value: elem.label,
893
+ })), width: 200 }) })), (0, jsx_runtime_1.jsx)("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
894
+ // filter out metric for all pivots
895
+ // filter out bar and pie for row and column pivot
896
+ options: getChartTypeOptions(formData), width: 200 }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
842
897
  display: 'flex',
843
898
  flexDirection: 'column',
844
- gap: 12,
845
- marginTop: 6,
899
+ gap: 6,
846
900
  }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsxs)("div", { style: { fontFamily: theme?.fontFamily }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
847
901
  maxWidth: 200,
848
902
  // marginTop: 6,
849
903
  display: 'flex',
850
904
  flexDirection: 'column',
851
- }, children: (0, jsx_runtime_1.jsx)(PivotModal_1.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 && ((0, jsx_runtime_1.jsx)("div", { ref: pivotCardContainer, children: (0, jsx_runtime_1.jsx)("div", { style: {
852
- width: !isHorizontalView
853
- ? divWidth
854
- : 'calc(100% - 40px)',
855
- }, children: (0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
905
+ }, children: (0, jsx_runtime_1.jsx)(PivotModal_1.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, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, 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, query: query, pivotCountRequest: 4, initialUniqueValues: initialUniqueValues, initialSelectedPivotTable: selectedPivotTable, pivotRecommendationsEnabled: pivotRecommendationsEnabled }) }), formData.pivot && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("div", { style: { width: pivotCardWidth }, children: (0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
856
906
  pivot: formData.pivot,
857
907
  rows: selectedPivotTable?.rows,
858
908
  columns: selectedPivotTable?.columns,
@@ -863,127 +913,97 @@ function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, Sele
863
913
  setPivotColumnField(formData.pivot?.columnField);
864
914
  setPivotValueField(formData.pivot?.valueField);
865
915
  setPivotAggregation(formData.pivot?.aggregationType);
866
- setPivotPopUpTitle('Edit Pivot');
867
- }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (0, jsx_runtime_1.jsx)("br", {}), (formData.pivot || formData.chartType !== 'table') && ((0, jsx_runtime_1.jsxs)("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsx)("div", { style: {
916
+ setPivotPopUpTitle('Edit pivot');
917
+ }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (formData.pivot || formData.chartType !== 'table') && ((0, jsx_runtime_1.jsxs)("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsx)("div", { style: {
868
918
  display: 'flex',
869
919
  flexDirection: 'column',
870
- gap: 6,
871
- marginTop: 6,
872
- }, children: (0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(LabelComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)("div", { style: {
873
- display: 'flex',
874
- flexDirection: 'row',
875
- gap: 12,
876
- }, children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.xAxisField, onChange: (e) => handleChange(e.target.value, 'xAxisField'), options: formData.pivot
920
+ }, children: (0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.xAxisField, onChange: (e) => handleChange(e.target.value, 'xAxisField'), options: formData.pivot
877
921
  ? getPivotMetricOptions(formData.pivot)
878
922
  : fieldOptions.map((elem) => ({
879
923
  label: elem.field,
880
924
  value: elem.field,
881
- })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.pivot
882
- ? formData.pivot.rowField
883
- : formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot &&
925
+ })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot &&
884
926
  (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType)
885
927
  ? 'pivot_date'
886
928
  : formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
887
929
  (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType)
888
930
  ? [{ value: 'pivot_date', label: 'date' }]
889
- : formatOptions, width: 200 })] }, 'xAxisField'), (0, jsx_runtime_1.jsx)("br", {})] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(LabelComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), (0, jsx_runtime_1.jsx)("div", { style: {
890
- display: 'flex',
891
- flexDirection: 'column',
892
- gap: 10,
893
- }, children: formData.yAxisFields.map((yAxisField, index) => ((0, jsx_runtime_1.jsxs)("div", { style: {
894
- display: 'flex',
895
- flexDirection: 'row',
896
- gap: 12,
897
- }, children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
898
- ? formData.pivot.valueField
899
- : yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
900
- ? [
901
- {
902
- label: `Pivot Column (${formData.pivot.valueField})`,
903
- value: formData.pivot.valueField,
904
- },
905
- ]
906
- : fieldOptions
907
- .filter((elem) => {
908
- return exports.numberFormatOptions.includes(columns.find((col) => col.field === elem.field)?.format || '');
909
- })
910
- .map((elem) => ({
911
- label: elem.field,
912
- value: elem.field,
913
- })), width: 200 }), (0, jsx_runtime_1.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) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
914
- ? NUMBER_OPTIONS.find((option) => {
915
- return (option.value === yAxisField.format);
916
- })
917
- ? // @ts-ignore
918
- NUMBER_OPTIONS.find((option) => option.value === yAxisField.format).value
919
- : 'whole_number'
920
- : yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
921
- ? NUMBER_OPTIONS
922
- : formatOptions, width: 200 }), formData.pivot === null && ((0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))) }), formData.pivot === null && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" })] }))] })), (0, jsx_runtime_1.jsx)("br", {})] })), showTableFormatOptions && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
931
+ : formatOptions, width: 200 })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields.map((yAxisField, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
932
+ ? formData.pivot.valueField || 'count'
933
+ : yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
934
+ ? [
935
+ {
936
+ label: `Pivot Column (${formData.pivot.valueField || 'count'})`,
937
+ value: formData.pivot.valueField ||
938
+ 'count',
939
+ },
940
+ ]
941
+ : fieldOptions
942
+ .filter((elem) => {
943
+ return exports.numberFormatOptions.includes(columns.find((col) => col.field === elem.field)?.format || '');
944
+ })
945
+ .map((elem) => ({
946
+ label: elem.field,
947
+ value: elem.field,
948
+ })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-y-axis-label", width: 200, value: yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'yAxisFields.label', index) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
949
+ ? NUMBER_OPTIONS.find((option) => {
950
+ return (option.value === yAxisField.format);
951
+ })
952
+ ? // @ts-ignore
953
+ NUMBER_OPTIONS.find((option) => option.value === yAxisField.format).value
954
+ : ''
955
+ : yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
956
+ ? NUMBER_OPTIONS
957
+ : formatOptions, width: 200 }), formData.pivot === null && ((0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), formData.pivot === null && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] }))] })), showTableFormatOptions && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
923
958
  display: 'flex',
924
959
  flexDirection: 'column',
925
- gap: 6,
926
- marginTop: 6,
927
- }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Table" }), (0, jsx_runtime_1.jsx)(LabelComponent, { label: "Columns" })] }), (0, jsx_runtime_1.jsx)("div", { style: {
928
- display: 'flex',
929
- flexDirection: 'column',
930
- gap: 10,
931
- }, children: formData.pivot &&
932
- selectedPivotTable &&
933
- selectedPivotTable.columns &&
934
- formData.chartType === 'table'
935
- ? // THIS CASE IF FOR PIVOT TABLES ONLY
936
- selectedPivotTable.columns.map((column, index) => ((0, jsx_runtime_1.jsxs)("div", { style: {
937
- display: 'flex',
938
- flexDirection: 'row',
939
- gap: 12,
940
- }, children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: column.label, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: selectedPivotTable.columns.map((elem) => ({
941
- label: elem.label,
942
- value: elem.label,
943
- })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value:
944
- // The first index use rowField for the rest of them use value fields
945
- formData.pivot &&
946
- column.field === formData.pivot.rowField
947
- ? formData.pivot &&
948
- (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType)
949
- ? 'pivot_date'
950
- : 'string'
951
- : formData.pivot?.valueFieldType ||
952
- 'whole_number', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
953
- ? (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType)
954
- ? [{ label: 'date', value: 'pivot_date' }]
955
- : [{ label: 'string', value: 'string' }]
956
- : [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
957
- : formData.columns.map((column, index) => ((0, jsx_runtime_1.jsxs)("div", { style: {
958
- display: 'flex',
959
- flexDirection: 'row',
960
- gap: 12,
961
- }, children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: fields.map((elem) => ({
962
- label: elem.field,
963
- value: elem.field,
964
- })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: formatOptions, width: 200 }), (0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))) }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {})] })), showDateFieldOptions && formData.dateField && ((0, jsx_runtime_1.jsxs)("div", { style: {
960
+ }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Table" }), (0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: "Columns" })] }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.pivot &&
961
+ selectedPivotTable &&
962
+ selectedPivotTable.columns &&
963
+ formData.chartType === 'table'
964
+ ? // THIS CASE IF FOR PIVOT TABLES ONLY
965
+ selectedPivotTable.columns.map((column, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: column.label, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: selectedPivotTable.columns.map((elem) => ({
966
+ label: elem.label,
967
+ value: elem.label,
968
+ })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value:
969
+ // The first index use rowField for the rest of them use value fields
970
+ formData.pivot &&
971
+ column.field === formData.pivot.rowField
972
+ ? formData.pivot &&
973
+ (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType)
974
+ ? 'pivot_date'
975
+ : 'string'
976
+ : formData.pivot?.valueFieldType ||
977
+ 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
978
+ ? (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType)
979
+ ? [{ label: 'date', value: 'pivot_date' }]
980
+ : [{ label: 'string', value: 'string' }]
981
+ : [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
982
+ : formData.columns.map((column, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: columns.map((elem) => ({
983
+ label: elem.field,
984
+ value: elem.field,
985
+ })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: formatOptions, width: 200 }), (0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))), (0, jsx_runtime_1.jsx)("div", { children: !(
986
+ // hide when pivoted and chartType === 'table'
987
+ (formData.pivot &&
988
+ selectedPivotTable &&
989
+ selectedPivotTable.columns &&
990
+ formData.chartType === 'table')) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" })) })] })] })), showDateFieldOptions && formData.dateField && ((0, jsx_runtime_1.jsxs)("div", { style: {
965
991
  display: 'flex',
966
992
  flexDirection: 'column',
967
993
  gap: 6,
968
- marginTop: 6,
969
- }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Date field" }), (0, jsx_runtime_1.jsxs)("div", { style: {
970
- display: 'flex',
971
- flexDirection: 'row',
972
- gap: 12,
973
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(LabelComponent, { label: "Table" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.dateField?.table, onChange: (e) => handleChange(e.target.value, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
974
- label: elem.name,
975
- value: elem.name,
976
- })), width: 200 })] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(LabelComponent, { label: "Field" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: (0, textProcessing_1.removeDoubleQuotes)(formData.dateField?.field), onChange: (e) => handleChange(e.target.value, 'dateField.field'), options: dateFieldOptions
977
- ?.find((elem) => elem.name === formData.dateField?.table)
978
- ?.columns?.map((elem) => ({
979
- label: elem.name,
980
- value: elem.name,
981
- })) || [], width: 200 })] })] }), (0, jsx_runtime_1.jsx)("br", {})] })), showAccessControlOptions && ((0, jsx_runtime_1.jsxs)("div", { style: {
994
+ }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Date field" }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Table", value: formData.dateField?.table, onChange: (e) => handleChange(e.target.value, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
995
+ label: elem.name,
996
+ value: elem.name,
997
+ })), width: 200 }) }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Field", value: (0, textProcessing_1.removeDoubleQuotes)(formData.dateField?.field), onChange: (e) => handleChange(e.target.value, 'dateField.field'), options: dateFieldOptions
998
+ ?.find((elem) => elem.name === formData.dateField?.table)
999
+ ?.columns?.map((elem) => ({
1000
+ label: elem.name,
1001
+ value: elem.name,
1002
+ })) || [], width: 200 }) })] })] })), showAccessControlOptions && ((0, jsx_runtime_1.jsxs)("div", { style: {
982
1003
  display: 'flex',
983
1004
  flexDirection: 'column',
984
1005
  gap: 12,
985
- marginTop: 6,
986
- }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Organization access" }), (0, jsx_runtime_1.jsx)(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template, theme: theme, organizationName: organizationName })] }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1006
+ }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Organization access" }), (0, jsx_runtime_1.jsx)(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template || !organizationName, theme: theme, organizationName: organizationName })] }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
987
1007
  display: 'flex',
988
1008
  flexDirection: 'row',
989
1009
  justifyContent: 'flex-end',
@@ -1068,7 +1088,7 @@ function DashboardFilterModal({ isOpen, setIsOpen, issues, ModalComponent = UiCo
1068
1088
  padding: '20px',
1069
1089
  boxSizing: 'border-box',
1070
1090
  overflow: 'scroll',
1071
- }, children: [issues.map((issue, index) => ((0, jsx_runtime_1.jsx)("span", { style: { paddingTop: '10px' }, children: issue }, issue))), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: {
1091
+ }, children: [issues.map((issue, index) => ((0, jsx_runtime_1.jsx)("span", { style: { paddingTop: '10px' }, children: issue }, issue))), (0, jsx_runtime_1.jsx)("div", { style: {
1072
1092
  display: 'flex',
1073
1093
  flexDirection: 'row',
1074
1094
  gap: '12px',