@quillsql/react 2.11.15 → 2.11.17

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 (209) hide show
  1. package/dist/cjs/Chart.d.ts +117 -42
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +44 -18
  4. package/dist/cjs/ChartBuilder.d.ts +195 -28
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +124 -63
  7. package/dist/cjs/ChartEditor.d.ts +114 -18
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +47 -15
  10. package/dist/cjs/Dashboard.d.ts +148 -90
  11. package/dist/cjs/Dashboard.d.ts.map +1 -1
  12. package/dist/cjs/Dashboard.js +46 -152
  13. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +21 -1
  14. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +5 -2
  16. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -1
  17. package/dist/cjs/QuillProvider.d.ts +105 -2
  18. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  19. package/dist/cjs/QuillProvider.js +59 -0
  20. package/dist/cjs/ReportBuilder.d.ts +188 -34
  21. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  22. package/dist/cjs/ReportBuilder.js +551 -426
  23. package/dist/cjs/SQLEditor.d.ts +158 -29
  24. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  25. package/dist/cjs/SQLEditor.js +52 -32
  26. package/dist/cjs/Table.d.ts +119 -15
  27. package/dist/cjs/Table.d.ts.map +1 -1
  28. package/dist/cjs/Table.js +37 -6
  29. package/dist/cjs/TableChart.d.ts.map +1 -1
  30. package/dist/cjs/TableChart.js +0 -194
  31. package/dist/cjs/{BarList.d.ts → components/Chart/BarList.d.ts} +1 -1
  32. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -0
  33. package/dist/cjs/{BarList.js → components/Chart/BarList.js} +1 -1
  34. package/dist/cjs/components/Chart/LineChart.d.ts +2 -3
  35. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  36. package/dist/cjs/components/Chart/LineChart.js +3 -3
  37. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -0
  38. package/dist/cjs/{PieChart.js → components/Chart/PieChart.js} +1 -1
  39. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +2 -1
  40. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  41. package/dist/cjs/components/Dashboard/ChartComponent.js +6 -7
  42. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +22 -0
  43. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -0
  44. package/dist/cjs/components/Dashboard/DashboardFilter.js +75 -0
  45. package/dist/cjs/components/Dashboard/DataLoader.d.ts +1 -1
  46. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  47. package/dist/cjs/components/Dashboard/DataLoader.js +1 -1
  48. package/dist/cjs/components/Dashboard/MetricComponent.d.ts +2 -12
  49. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  50. package/dist/cjs/components/Dashboard/MetricComponent.js +39 -17
  51. package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -1
  52. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  53. package/dist/cjs/components/Dashboard/TableComponent.js +6 -9
  54. package/dist/cjs/components/QuillSelect.d.ts +4 -1
  55. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  56. package/dist/cjs/components/QuillSelect.js +13 -8
  57. package/dist/cjs/components/QuillTable.d.ts +16 -2
  58. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  59. package/dist/cjs/components/QuillTable.js +4 -4
  60. package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts +30 -1
  61. package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
  62. package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +33 -14
  63. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +25 -2
  64. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  65. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +19 -19
  66. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +22 -2
  67. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  68. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +18 -20
  69. package/dist/cjs/components/ReportBuilder/bigDateMap.js +1 -1
  70. package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -1
  71. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  72. package/dist/cjs/components/ReportBuilder/convert.js +40 -20
  73. package/dist/cjs/components/ReportBuilder/pivot.d.ts +2 -1
  74. package/dist/cjs/components/ReportBuilder/pivot.d.ts.map +1 -1
  75. package/dist/cjs/components/ReportBuilder/ui.d.ts +83 -19
  76. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  77. package/dist/cjs/components/ReportBuilder/ui.js +68 -121
  78. package/dist/cjs/components/ReportBuilder/util.d.ts +3 -1
  79. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  80. package/dist/cjs/components/ReportBuilder/util.js +34 -8
  81. package/dist/cjs/components/UiComponents.d.ts +98 -97
  82. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  83. package/dist/cjs/components/UiComponents.js +132 -112
  84. package/dist/cjs/hooks/index.d.ts +1 -0
  85. package/dist/cjs/hooks/index.d.ts.map +1 -1
  86. package/dist/cjs/hooks/index.js +3 -1
  87. package/dist/cjs/hooks/useTheme.d.ts +7 -0
  88. package/dist/cjs/hooks/useTheme.d.ts.map +1 -0
  89. package/dist/cjs/hooks/useTheme.js +12 -0
  90. package/dist/cjs/index.d.ts +10 -2
  91. package/dist/cjs/index.d.ts.map +1 -1
  92. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  93. package/dist/cjs/internals/ReportBuilder/PivotList.js +10 -10
  94. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +29 -14
  95. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  96. package/dist/cjs/internals/ReportBuilder/PivotModal.js +73 -49
  97. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  98. package/dist/cjs/utils/dataFetcher.js +2 -0
  99. package/dist/cjs/utils/width.d.ts +12 -0
  100. package/dist/cjs/utils/width.d.ts.map +1 -0
  101. package/dist/cjs/utils/width.js +25 -0
  102. package/dist/esm/Chart.d.ts +117 -42
  103. package/dist/esm/Chart.d.ts.map +1 -1
  104. package/dist/esm/Chart.js +45 -19
  105. package/dist/esm/ChartBuilder.d.ts +195 -28
  106. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  107. package/dist/esm/ChartBuilder.js +124 -63
  108. package/dist/esm/ChartEditor.d.ts +114 -18
  109. package/dist/esm/ChartEditor.d.ts.map +1 -1
  110. package/dist/esm/ChartEditor.js +51 -19
  111. package/dist/esm/Dashboard.d.ts +148 -90
  112. package/dist/esm/Dashboard.d.ts.map +1 -1
  113. package/dist/esm/Dashboard.js +49 -153
  114. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +21 -1
  115. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  116. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +6 -3
  117. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -1
  118. package/dist/esm/QuillProvider.d.ts +105 -2
  119. package/dist/esm/QuillProvider.d.ts.map +1 -1
  120. package/dist/esm/QuillProvider.js +59 -0
  121. package/dist/esm/ReportBuilder.d.ts +188 -34
  122. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  123. package/dist/esm/ReportBuilder.js +553 -428
  124. package/dist/esm/SQLEditor.d.ts +158 -29
  125. package/dist/esm/SQLEditor.d.ts.map +1 -1
  126. package/dist/esm/SQLEditor.js +53 -33
  127. package/dist/esm/Table.d.ts +119 -15
  128. package/dist/esm/Table.d.ts.map +1 -1
  129. package/dist/esm/Table.js +38 -7
  130. package/dist/esm/TableChart.d.ts.map +1 -1
  131. package/dist/esm/TableChart.js +0 -194
  132. package/dist/esm/{BarList.d.ts → components/Chart/BarList.d.ts} +1 -1
  133. package/dist/esm/components/Chart/BarList.d.ts.map +1 -0
  134. package/dist/esm/{BarList.js → components/Chart/BarList.js} +1 -1
  135. package/dist/esm/components/Chart/LineChart.d.ts +2 -3
  136. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  137. package/dist/esm/components/Chart/LineChart.js +3 -3
  138. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -0
  139. package/dist/esm/{PieChart.js → components/Chart/PieChart.js} +1 -1
  140. package/dist/esm/components/Dashboard/ChartComponent.d.ts +2 -1
  141. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  142. package/dist/esm/components/Dashboard/ChartComponent.js +5 -6
  143. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +22 -0
  144. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -0
  145. package/dist/esm/components/Dashboard/DashboardFilter.js +71 -0
  146. package/dist/esm/components/Dashboard/DataLoader.d.ts +1 -1
  147. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  148. package/dist/esm/components/Dashboard/DataLoader.js +1 -1
  149. package/dist/esm/components/Dashboard/MetricComponent.d.ts +2 -12
  150. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  151. package/dist/esm/components/Dashboard/MetricComponent.js +39 -17
  152. package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -1
  153. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  154. package/dist/esm/components/Dashboard/TableComponent.js +6 -9
  155. package/dist/esm/components/QuillSelect.d.ts +4 -1
  156. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  157. package/dist/esm/components/QuillSelect.js +14 -9
  158. package/dist/esm/components/QuillTable.d.ts +16 -2
  159. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  160. package/dist/esm/components/QuillTable.js +4 -4
  161. package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts +30 -1
  162. package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
  163. package/dist/esm/components/ReportBuilder/AddColumnPopover.js +34 -15
  164. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +25 -2
  165. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  166. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +20 -20
  167. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +22 -2
  168. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  169. package/dist/esm/components/ReportBuilder/AddSortPopover.js +20 -22
  170. package/dist/esm/components/ReportBuilder/bigDateMap.js +1 -1
  171. package/dist/esm/components/ReportBuilder/convert.d.ts +2 -1
  172. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  173. package/dist/esm/components/ReportBuilder/convert.js +33 -13
  174. package/dist/esm/components/ReportBuilder/pivot.d.ts +2 -1
  175. package/dist/esm/components/ReportBuilder/pivot.d.ts.map +1 -1
  176. package/dist/esm/components/ReportBuilder/ui.d.ts +83 -19
  177. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  178. package/dist/esm/components/ReportBuilder/ui.js +67 -119
  179. package/dist/esm/components/ReportBuilder/util.d.ts +3 -1
  180. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  181. package/dist/esm/components/ReportBuilder/util.js +31 -7
  182. package/dist/esm/components/UiComponents.d.ts +98 -97
  183. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  184. package/dist/esm/components/UiComponents.js +125 -110
  185. package/dist/esm/hooks/index.d.ts +1 -0
  186. package/dist/esm/hooks/index.d.ts.map +1 -1
  187. package/dist/esm/hooks/index.js +1 -0
  188. package/dist/esm/hooks/useTheme.d.ts +7 -0
  189. package/dist/esm/hooks/useTheme.d.ts.map +1 -0
  190. package/dist/esm/hooks/useTheme.js +10 -0
  191. package/dist/esm/index.d.ts +10 -2
  192. package/dist/esm/index.d.ts.map +1 -1
  193. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  194. package/dist/esm/internals/ReportBuilder/PivotList.js +10 -10
  195. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +29 -14
  196. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  197. package/dist/esm/internals/ReportBuilder/PivotModal.js +73 -49
  198. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  199. package/dist/esm/utils/dataFetcher.js +2 -0
  200. package/dist/esm/utils/width.d.ts +12 -0
  201. package/dist/esm/utils/width.d.ts.map +1 -0
  202. package/dist/esm/utils/width.js +21 -0
  203. package/package.json +1 -1
  204. package/dist/cjs/BarList.d.ts.map +0 -1
  205. package/dist/cjs/PieChart.d.ts.map +0 -1
  206. package/dist/esm/BarList.d.ts.map +0 -1
  207. package/dist/esm/PieChart.d.ts.map +0 -1
  208. /package/dist/cjs/{PieChart.d.ts → components/Chart/PieChart.d.ts} +0 -0
  209. /package/dist/esm/{PieChart.d.ts → components/Chart/PieChart.d.ts} +0 -0
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /* eslint-disable no-unused-vars */
2
3
  import { useEffect, useRef, useState, useContext, useMemo, } from 'react';
3
4
  import { ClientContext, DashboardContext, DashboardFiltersContext, SchemaContext, ThemeContext, } from './Context';
4
5
  import { getData, getDataFromCloud } from './utils/dataFetcher';
@@ -8,8 +9,8 @@ import { PivotCard } from './internals/ReportBuilder/PivotList';
8
9
  import Chart from './Chart';
9
10
  import { MemoizedModal, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, } from './components/UiComponents';
10
11
  import { mergeComparisonRange } from './utils/merge';
11
- import { QuillSelectComponent } from './components/QuillSelect';
12
12
  import { removeDoubleQuotes, snakeCaseToTitleCase, } from './utils/textProcessing';
13
+ import { QuillSelectComponent } from './components/QuillSelect';
13
14
  const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
14
15
  const POSTGRES_DATE_TYPES = [
15
16
  'timestamp',
@@ -137,17 +138,76 @@ const formatOptions = [
137
138
  { value: 'percent', label: 'percent' },
138
139
  { value: 'string', label: 'string' },
139
140
  ];
141
+ /**
142
+ * ### Quill Chart Builder with Modal
143
+ *
144
+ * Renders a ChartBuilder component with a modal.
145
+ *
146
+ * @example
147
+ * ```js
148
+ * // Usage without custom components
149
+ * <ChartBuilder />
150
+ * ```
151
+ *
152
+ * @example
153
+ * ```js
154
+ * // You can also pass your own components
155
+ * <ChartBuilder
156
+ * ButtonComponent={MyButton}
157
+ * SecondaryButtonComponent={MySecondaryButton}
158
+ * />
159
+ * ```
160
+ *
161
+ * ### Chart Builder API
162
+ * @see https://docs.quillsql.com/components/chart-builder#with-modal
163
+ */
140
164
  export function ChartBuilderWithModal(props) {
141
- const [theme] = useContext(ThemeContext);
142
- const Modal = props.Modal ?? MemoizedModal;
143
- return (_jsx(Modal, { isOpen: props.isOpen, setIsOpen: props.setIsOpen, onClose: () => props.setIsOpen(false), title: props.title || 'Add to dashboard', style: props.horizontalView
144
- ? {
145
- width: 'calc(100vw - 80px)',
146
- height: 'calc(100vh - 80px)',
147
- }
148
- : {}, theme: theme, children: _jsx(ChartBuilder, { ...props }) }));
165
+ const parentRef = useRef(null);
166
+ const [modalWidth, setModalWidth] = useState(200);
167
+ const [modalHeight, setModalHeight] = useState(200);
168
+ const { isOpen, setIsOpen, title, isHorizontalView } = props;
169
+ const Modal = props.ModalComponent ?? MemoizedModal;
170
+ useEffect(() => {
171
+ function handleResize() {
172
+ setModalWidth(window.innerWidth - 80);
173
+ setModalHeight(window.innerHeight - 80);
174
+ }
175
+ handleResize();
176
+ window.addEventListener('resize', handleResize);
177
+ return () => {
178
+ window.removeEventListener('resize', handleResize);
179
+ };
180
+ }, []);
181
+ return (_jsx("div", { ref: parentRef, children: _jsx(Modal, { isOpen: isOpen, setIsOpen: setIsOpen, title: title || 'Add to dashboard',
182
+ // For isHorizontalView, use full viewport size minus 80px for padding,
183
+ // otherwise use the default layout method of the modal (contents).
184
+ width: isHorizontalView ? modalWidth : undefined, height: isHorizontalView ? modalHeight : undefined, children: _jsx(ChartBuilder, { ...props }) }) }));
149
185
  }
150
- export default function ChartBuilder({ TextInput = QuillTextInput, Select = QuillSelectComponent, Button = MemoizedButton, SecondaryButton = MemoizedSecondaryButton, Header = MemoizedHeader, Label = MemoizedLabel, DeleteButton = MemoizedDeleteButton, Text = MemoizedText, Popover = MemoizedPopover, isOpen, isEditMode = false, horizontalView = false, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, formHeaderStyle, formLabelStyle, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, fields: fieldsProp, dashboardItem = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, }) {
186
+ /**
187
+ * ### Quill Chart Builder
188
+ *
189
+ * A simple form that lets users turn a SQL query into a chart, metric, or table
190
+ * and then add that dashboard item into one of their dashboards.
191
+ *
192
+ * @example
193
+ * ```js
194
+ * // Usage without custom components
195
+ * <ChartBuilder />
196
+ * ```
197
+ *
198
+ * @example
199
+ * ```js
200
+ * // You can also pass your own components
201
+ * <ChartBuilder
202
+ * ButtonComponent={MyButton}
203
+ * SecondaryButtonComponent={MySecondaryButton}
204
+ * />
205
+ * ```
206
+ *
207
+ * ### Chart Builder API
208
+ * @see https://docs.quillsql.com/components/chart-builder
209
+ */
210
+ export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, 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, }) {
151
211
  const dateRange = dr || [null, null, null];
152
212
  const [client] = useContext(ClientContext);
153
213
  const [theme] = useContext(ThemeContext);
@@ -367,6 +427,12 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
367
427
  }
368
428
  const result = await getReferencedTables(client, query, schema, true);
369
429
  setDateFieldOptions(result);
430
+ if (result[0] && result[0].columns[0]) {
431
+ setDefaultDateField({
432
+ table: result[0].name,
433
+ field: result[0].columns[0].name,
434
+ });
435
+ }
370
436
  const allReferencedFields = await getReferencedTables(client, query, schema, false);
371
437
  setAllTables(allReferencedFields.map((table) => table.name));
372
438
  setTableName(result[0]?.name);
@@ -570,7 +636,7 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
570
636
  dashboardDiscrepancyIssues.push(`The ${formData.dashboardName} dashboard is used for comparing date fields. This feature is not applicable to pie charts. We recommend switching to a column or bar chart instead.`);
571
637
  }
572
638
  if (dashboardHasDateFilter &&
573
- (!defaultDateField ||
639
+ ((!defaultDateField.table && !defaultDateField.field) ||
574
640
  (!formData.dateField.field && !formData.dateField.table))) {
575
641
  dashboardDiscrepancyIssues.push(`The dashboard "${formData.dashboardName}" has a global date filter but this chart doesn't reference any tables with a date field. It is not recommended to add this chart because the global filter cannot be applied.`);
576
642
  }
@@ -654,7 +720,7 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
654
720
  }
655
721
  };
656
722
  if (!schema) {
657
- return;
723
+ return null;
658
724
  }
659
725
  return (_jsxs("div", { style: { width: '100%', height: '100%', flexGrow: 1 }, children: [_jsxs("div", { id: "quill-chart-modal", style: {
660
726
  width: '100%',
@@ -663,79 +729,79 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
663
729
  display: 'flex',
664
730
  padding: modalPadding,
665
731
  gap: '20px',
666
- flexDirection: horizontalView ? 'row' : 'column',
732
+ flexDirection: isHorizontalView ? 'row' : 'column',
667
733
  boxSizing: 'border-box',
668
734
  }, children: [_jsxs("div", { style: {
669
735
  display: 'flex',
670
736
  flexDirection: 'column',
671
737
  gap: '20px',
672
- ...(horizontalView && {
738
+ ...(isHorizontalView && {
673
739
  flexGrow: 1,
674
740
  maxWidth: !isOpen ? '100%' : 'calc(100% - 665px - 20px)', // width of left sidebar plus gap
675
741
  }),
676
- }, children: [(!horizontalView || formData.chartType !== 'table') && (_jsx(Chart, { colors: theme.chartColors, config: { ...formData, rows }, containerStyle: {
742
+ }, children: [(!isHorizontalView || formData.chartType !== 'table') && (_jsx(Chart, { colors: theme.chartColors, config: { ...formData, rows }, containerStyle: {
677
743
  width: '100%',
678
744
  height: formData.chartType === 'metric'
679
745
  ? 100
680
- : horizontalView
746
+ : isHorizontalView
681
747
  ? '100%'
682
748
  : 400,
683
- ...(horizontalView && { flexGrow: 1 }),
749
+ ...(isHorizontalView && { flexGrow: 1 }),
684
750
  } })),
685
751
  // Make sure to display non-pivoted table when using pivot chart
686
- horizontalView && formData.chartType !== 'table' ? (_jsx(Chart, { config: {
752
+ isHorizontalView && formData.chartType !== 'table' ? (_jsx(Chart, { config: {
687
753
  ...formData,
688
754
  pivot: undefined,
689
755
  chartType: 'table',
690
756
  rows,
691
- rowsPerPage: 20,
757
+ rowsPerPage: 10,
692
758
  }, containerStyle: {
693
759
  height: '100%',
694
760
  width: '100%',
695
761
  flexGrow: 1,
696
- } })) : (horizontalView && (_jsx(Chart, { config: {
762
+ } })) : (isHorizontalView && (_jsx(Chart, { config: {
697
763
  ...formData,
698
764
  chartType: 'table',
699
765
  rows,
700
- rowsPerPage: 20,
766
+ rowsPerPage: 10,
701
767
  }, containerStyle: {
702
768
  height: '100%',
703
769
  width: '100%',
704
770
  flexGrow: 1,
705
- } })))] }), (isOpen || !horizontalView) && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
771
+ } })))] }), (isOpen || !isHorizontalView) && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
706
772
  display: 'flex',
707
773
  flexDirection: 'column',
708
774
  height: '100%',
709
- ...(horizontalView && {
775
+ ...(isHorizontalView && {
710
776
  minWidth: 665,
711
777
  maxWidth: 665,
712
778
  width: 665,
713
779
  gap: 20,
714
780
  }),
715
- }, children: [_jsxs("div", { style: { overflow: 'auto' }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Name" }), _jsx(TextInput, { id: "chart-builder-name", value: formData.name, onChange: (e) => handleChange(e, 'name'), placeholder: "Name", theme: theme })] }), showDashboardDropdown && !destinationDashboard && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Dashboard" }), _jsx(Select, { value: formData.dashboardName || '', onChange: async (e) => {
716
- await updateDashboardFilters(e);
717
- handleChange(e, 'dashboardName');
781
+ }, children: [_jsxs("div", { style: { overflow: 'auto' }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Name" }), _jsx(TextInputComponent, { id: "chart-builder-name", width: 200, value: formData.name, onChange: (e) => handleChange(e.target.value, 'name'), placeholder: "Name" })] }), showDashboardDropdown && !destinationDashboard && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Dashboard" }), _jsx(SelectComponent, { value: formData.dashboardName || '', onChange: async (e) => {
782
+ handleChange(e.target.value, 'dashboardName');
783
+ await updateDashboardFilters(e.target.value);
718
784
  }, options: dashboardOptions.map((elem) => ({
719
785
  label: elem.label,
720
786
  value: elem.label,
721
- })), theme: theme })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Chart type" }), _jsx(Select, { value: formData.chartType, onChange: (e) => handleChange(e, 'chartType'),
787
+ })) })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Chart type" }), _jsx(SelectComponent, { value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
722
788
  // filter out metric for all pivots
723
789
  // filter out bar and pie for row and column pivot
724
- options: getChartTypeOptions(formData), theme: theme })] })] }), _jsx("br", {}), _jsxs("div", { style: {
790
+ options: getChartTypeOptions(formData) })] })] }), _jsx("br", {}), _jsxs("div", { style: {
725
791
  display: 'flex',
726
792
  flexDirection: 'column',
727
793
  gap: 12,
728
794
  marginTop: 6,
729
- }, children: [_jsx(Header, { children: "Pivot" }), _jsxs("div", { style: { fontFamily: theme?.fontFamily }, children: [_jsx("div", { style: {
795
+ }, children: [_jsx(HeaderComponent, { label: "Pivot" }), _jsxs("div", { style: { fontFamily: theme?.fontFamily }, children: [_jsx("div", { style: {
730
796
  maxWidth: 200,
731
797
  // marginTop: 6,
732
798
  display: 'flex',
733
799
  flexDirection: 'column',
734
- }, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: Select, ButtonComponent: Button, SecondaryButtonComponent: SecondaryButton, PopoverComponent: Popover, LabelComponent: Label, TextComponent: Text, HeaderComponent: Header, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot }) }), formData.pivot && (_jsx("div", { style: {
800
+ }, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot }) }), formData.pivot && (_jsx("div", { style: {
735
801
  // width: 592,
736
802
  paddingRight: 42,
737
803
  maxWidth: 750,
738
- }, children: _jsx("div", { style: { width: !horizontalView ? divWidth : 'auto' }, children: _jsx(PivotCard, { pivotTable: {
804
+ }, children: _jsx("div", { style: { width: !isHorizontalView ? divWidth : 'auto' }, children: _jsx(PivotCard, { pivotTable: {
739
805
  pivot: formData.pivot,
740
806
  rows: selectedPivotTable?.rows,
741
807
  columns: selectedPivotTable?.columns,
@@ -747,29 +813,29 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
747
813
  setPivotValueField(formData.pivot?.valueField);
748
814
  setPivotAggregation(formData.pivot?.aggregationType);
749
815
  setPivotPopUpTitle('Edit Pivot');
750
- }, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: Button, HeaderComponent: Header, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: Label, TextComponent: Text }) }) }))] })] }), _jsx("br", {}), (formData.pivot || formData.chartType !== 'table') && (_jsxs("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsx("div", { style: {
816
+ }, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), _jsx("br", {}), (formData.pivot || formData.chartType !== 'table') && (_jsxs("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsx("div", { style: {
751
817
  display: 'flex',
752
818
  flexDirection: 'column',
753
819
  gap: 6,
754
820
  marginTop: 6,
755
- }, children: _jsx(Header, { children: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsxs("div", { children: [_jsx(Label, { children: CHART_TO_LABELS[formData.chartType]?.xAxisLabel }), _jsxs("div", { style: {
821
+ }, children: _jsx(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsxs("div", { children: [_jsx(LabelComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ?? '' }), _jsxs("div", { style: {
756
822
  display: 'flex',
757
823
  flexDirection: 'row',
758
824
  gap: 12,
759
- }, children: [_jsx(Select, { value: formData.xAxisField, onChange: (e) => handleChange(e, 'xAxisField'), options: formData.pivot
825
+ }, children: [_jsx(SelectComponent, { value: formData.xAxisField, onChange: (e) => handleChange(e.target.value, 'xAxisField'), options: formData.pivot
760
826
  ? getPivotMetricOptions(formData.pivot)
761
827
  : fieldOptions.map((elem) => ({
762
828
  label: elem.field,
763
829
  value: elem.field,
764
- })), theme: theme }), _jsx(TextInput, { id: "chart-builder-x-axis-label", value: formData.pivot
830
+ })) }), _jsx(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.pivot
765
831
  ? formData.pivot.rowField
766
- : formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e, 'xAxisLabel'), theme: theme }), _jsx(Select, { value: formData.pivot &&
832
+ : formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), _jsx(SelectComponent, { value: formData.pivot &&
767
833
  isDateField(formData.pivot.rowFieldType)
768
834
  ? 'pivot_date'
769
- : formData.xAxisFormat, onChange: (e) => handleChange(e, 'xAxisFormat'), options: formData.pivot &&
835
+ : formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
770
836
  isDateField(formData.pivot.rowFieldType)
771
837
  ? [{ value: 'pivot_date', label: 'date' }]
772
- : formatOptions, theme: theme })] }, 'xAxisField'), _jsx("br", {})] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(Label, { children: CHART_TO_LABELS[formData.chartType]?.yAxisLabel }), _jsx("div", { style: {
838
+ : formatOptions })] }, 'xAxisField'), _jsx("br", {})] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(LabelComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), _jsx("div", { style: {
773
839
  display: 'flex',
774
840
  flexDirection: 'column',
775
841
  gap: 10,
@@ -777,9 +843,9 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
777
843
  display: 'flex',
778
844
  flexDirection: 'row',
779
845
  gap: 12,
780
- }, children: [_jsx(Select, { value: formData.pivot
846
+ }, children: [_jsx(SelectComponent, { value: formData.pivot
781
847
  ? formData.pivot.valueField
782
- : yAxisField.field, onChange: (e) => handleChange(e, 'yAxisFields.field', index), theme: theme, options: formData.pivot
848
+ : yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
783
849
  ? [
784
850
  {
785
851
  label: `Pivot Column (${formData.pivot.valueField})`,
@@ -793,21 +859,21 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
793
859
  .map((elem) => ({
794
860
  label: elem.field,
795
861
  value: elem.field,
796
- })) }), _jsx(TextInput, { id: "chart-builder-y-axis-label", value: formData.pivot?.valueField || yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'yAxisFields.label', index), theme: theme }), _jsx(Select, { theme: theme, value: formData.pivot
797
- ? !!NUMBER_OPTIONS.find((option) => {
862
+ })) }), _jsx(TextInputComponent, { id: "chart-builder-y-axis-label", width: 200, value: formData.pivot?.valueField || yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'yAxisFields.label', index) }), _jsx(SelectComponent, { value: formData.pivot
863
+ ? NUMBER_OPTIONS.find((option) => {
798
864
  return (option.value === yAxisField.format);
799
865
  })
800
866
  ? // @ts-ignore
801
867
  NUMBER_OPTIONS.find((option) => option.value === yAxisField.format).value
802
868
  : 'whole_number'
803
- : yAxisField.format, onChange: (e) => handleChange(e, 'yAxisFields.format', index), options: formData.pivot
869
+ : yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
804
870
  ? NUMBER_OPTIONS
805
- : formatOptions }), formData.pivot === null && (_jsx("div", { ref: deleteRef, children: _jsx(DeleteButton, { style: { marginLeft: deleteButtonMargin }, onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))) }), formData.pivot === null && (_jsxs(_Fragment, { children: [_jsx("br", {}), _jsx(SecondaryButton, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" })] }))] })), _jsx("br", {})] })), (showTableFormatOptions || formData.chartType === 'table') && (_jsxs("div", { children: [_jsxs("div", { style: {
871
+ : formatOptions }), formData.pivot === null && (_jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))) }), formData.pivot === null && (_jsxs(_Fragment, { children: [_jsx("br", {}), _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" })] }))] })), _jsx("br", {})] })), (showTableFormatOptions || formData.chartType === 'table') && (_jsxs("div", { children: [_jsxs("div", { style: {
806
872
  display: 'flex',
807
873
  flexDirection: 'column',
808
874
  gap: 6,
809
875
  marginTop: 6,
810
- }, children: [_jsx(Header, { children: "Table" }), _jsx(Label, { children: "Columns" })] }), _jsx("div", { style: {
876
+ }, children: [_jsx(HeaderComponent, { label: "Table" }), _jsx(LabelComponent, { label: "Columns" })] }), _jsx("div", { style: {
811
877
  display: 'flex',
812
878
  flexDirection: 'column',
813
879
  gap: 10,
@@ -820,10 +886,10 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
820
886
  display: 'flex',
821
887
  flexDirection: 'row',
822
888
  gap: 12,
823
- }, children: [_jsx(Select, { theme: theme, value: column.label, onChange: (e) => handleChange(e, 'columns.field', index), options: selectedPivotTable.columns.map((elem) => ({
889
+ }, children: [_jsx(SelectComponent, { value: column.label, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: selectedPivotTable.columns.map((elem) => ({
824
890
  label: elem.label,
825
891
  value: elem.label,
826
- })) }), _jsx(TextInput, { id: `chart-builder-column-label-${index}`, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'columns.label', index), theme: theme }), _jsx(Select, { theme: theme, value:
892
+ })) }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value:
827
893
  // The first index use rowField for the rest of them use value fields
828
894
  formData.pivot &&
829
895
  column.field === formData.pivot.rowField
@@ -832,7 +898,7 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
832
898
  ? 'pivot_date'
833
899
  : 'string'
834
900
  : formData.pivot?.valueFieldType ||
835
- 'whole_number', onChange: (e) => handleChange(e, 'pivotColumn', index), options: formData.pivot && index === 0
901
+ 'whole_number', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
836
902
  ? isDateField(formData.pivot.rowFieldType)
837
903
  ? [{ label: 'date', value: 'pivot_date' }]
838
904
  : [{ label: 'string', value: 'string' }]
@@ -841,22 +907,22 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
841
907
  display: 'flex',
842
908
  flexDirection: 'row',
843
909
  gap: 12,
844
- }, children: [_jsx(Select, { theme: theme, value: column.field, onChange: (e) => handleChange(e, 'columns.field', index), options: fields.map((elem) => ({
910
+ }, children: [_jsx(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: fields.map((elem) => ({
845
911
  label: elem.field,
846
912
  value: elem.field,
847
- })) }), _jsx(TextInput, { id: `chart-builder-column-label-${index}`, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'columns.label', index), theme: theme }), _jsx(Select, { theme: theme, value: column.format, onChange: (e) => handleChange(e, 'columns.format', index), options: formatOptions }), _jsx("div", { ref: deleteRef, children: _jsx(DeleteButton, { style: { marginLeft: deleteButtonMargin }, onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))) }), _jsx("br", {}), _jsx(SecondaryButton, { onClick: () => handleAddField('columns'), label: "Add column +" }), _jsx("br", {}), _jsx("br", {})] })), showDateFieldOptions && formData.dateField && (_jsxs("div", { style: {
913
+ })) }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: formatOptions }), _jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))) }), _jsx("br", {}), _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" }), _jsx("br", {}), _jsx("br", {})] })), showDateFieldOptions && formData.dateField && (_jsxs("div", { style: {
848
914
  display: 'flex',
849
915
  flexDirection: 'column',
850
916
  gap: 6,
851
917
  marginTop: 6,
852
- }, children: [_jsx(Header, { children: "Date field" }), _jsxs("div", { style: {
918
+ }, children: [_jsx(HeaderComponent, { label: "Date field" }), _jsxs("div", { style: {
853
919
  display: 'flex',
854
920
  flexDirection: 'row',
855
921
  gap: 12,
856
- }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Table" }), _jsx(Select, { theme: theme, value: formData.dateField?.table, onChange: (e) => handleChange(e, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
922
+ }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Table" }), _jsx(SelectComponent, { value: formData.dateField?.table, onChange: (e) => handleChange(e.target.value, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
857
923
  label: elem.name,
858
924
  value: elem.name,
859
- })) })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Field" }), _jsx(Select, { theme: theme, value: removeDoubleQuotes(formData.dateField?.field), onChange: (e) => handleChange(e, 'dateField.field'), options: dateFieldOptions
925
+ })) })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(LabelComponent, { label: "Field" }), _jsx(SelectComponent, { value: removeDoubleQuotes(formData.dateField?.field), onChange: (e) => handleChange(e.target.value, 'dateField.field'), options: dateFieldOptions
860
926
  ?.find((elem) => elem.name === formData.dateField?.table)
861
927
  ?.columns?.map((elem) => ({
862
928
  label: elem.name,
@@ -866,13 +932,13 @@ export default function ChartBuilder({ TextInput = QuillTextInput, Select = Quil
866
932
  flexDirection: 'column',
867
933
  gap: 12,
868
934
  marginTop: 6,
869
- }, children: [_jsx(Header, { children: "Organization access" }), _jsx(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template, theme: theme, organizationName: organizationName })] }))] }), _jsxs("div", { style: {
935
+ }, children: [_jsx(HeaderComponent, { label: "Organization access" }), _jsx(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template, theme: theme, organizationName: organizationName })] }))] }), _jsxs("div", { style: {
870
936
  display: 'flex',
871
937
  flexDirection: 'row',
872
938
  justifyContent: 'flex-end',
873
939
  marginTop: 'auto',
874
940
  gap: 10,
875
- }, children: [!horizontalView && dashboardItem && (_jsx(SecondaryButton, { onClick: deleteChart, label: 'Delete' })), _jsx(Button, { onClick: () => editChart(), label: buttonLabel
941
+ }, children: [!isHorizontalView && dashboardItem && (_jsx(SecondaryButtonComponent, { onClick: deleteChart, label: 'Delete' })), _jsx(ButtonComponent, { onClick: () => editChart(), label: buttonLabel
876
942
  ? buttonLabel
877
943
  : dashboardItem
878
944
  ? 'Save changes'
@@ -941,21 +1007,16 @@ function SegmentedControl({ onChange, value, theme, organizationName, }) {
941
1007
  ` }), organizationName] }))] }));
942
1008
  }
943
1009
  export function DashboardFilterModal({ isOpen, setIsOpen, override, theme, issues, }) {
944
- return (_jsx(MemoizedModal, { isOpen: isOpen, onClose: () => {
945
- setIsOpen(false);
946
- }, setIsOpen: setIsOpen, theme: theme, title: 'Chart not compatible with selected dashboard', children: _jsxs("div", { style: {
1010
+ return (_jsx(MemoizedModal, { isOpen: isOpen, setIsOpen: setIsOpen, title: 'Chart not compatible with selected dashboard', children: _jsxs("div", { style: {
947
1011
  display: 'flex',
948
1012
  flexDirection: 'column',
949
1013
  width: '600px',
950
1014
  padding: '20px',
951
1015
  boxSizing: 'border-box',
952
- }, children: [issues.map((issue, index) => (_jsx("span", { style: { paddingTop: '10px' }, children: issue }, issue))), _jsx("br", {}), _jsxs("div", { style: {
1016
+ }, children: [issues.map((issue, index) => (_jsx("span", { style: { paddingTop: '10px' }, children: issue }, issue))), _jsx("br", {}), _jsx("div", { style: {
953
1017
  display: 'flex',
954
1018
  flexDirection: 'row',
955
1019
  gap: '12px',
956
1020
  justifyContent: 'flex-end',
957
- }, children: [_jsx(MemoizedButton, { label: "Got It", onClick: () => setIsOpen(false) }), _jsx(MemoizedSecondaryButton, { label: "Override", onClick: () => {
958
- override();
959
- setIsOpen(false);
960
- } })] })] }) }));
1021
+ }, children: _jsx(MemoizedButton, { label: "Got It", onClick: () => setIsOpen(false) }) })] }) }));
961
1022
  }
@@ -1,29 +1,125 @@
1
- /// <reference types="react" />
2
- import { SelectComponentProps, TextInputComponentProps, ButtonComponentProps, ModalComponentProps, HeaderProps, LabelProps, TextProps, DeleteButtonProps, PopoverComponentProps } from './components/UiComponents';
3
- interface ChartEditorProps {
1
+ import React, { ReactNode } from 'react';
2
+ /**
3
+ * Props for the Quill ChartEditor component.
4
+ */
5
+ export interface ChartEditorProps {
6
+ /** Whether the modal is open. */
4
7
  isOpen: boolean;
8
+ /** A callback that sets the isOpen state. */
9
+ setIsOpen: (isOpen: boolean) => void;
10
+ /** The id of the chart that is being edited. */
5
11
  chartId: string;
6
- admin?: boolean;
12
+ /** Whether the editor has administrative priveleges. */
13
+ isAdmin?: boolean;
14
+ /** Whether the editor is editing an existing query. */
7
15
  isEditMode?: boolean;
16
+ /** The title of the chart builder form. */
8
17
  chartBuilderTitle?: string;
18
+ /** The button label for the chart builder. */
9
19
  chartBuilderButtonLabel?: string;
20
+ /**
21
+ * A callback that is fired when the add to dashboard flow has been completed.
22
+ */
10
23
  onAddToDashboardComplete?: () => void;
24
+ /** A callback that is fired when the item is deleted. */
11
25
  onDelete?: () => void;
12
- setIsOpen: (isOpen: boolean) => void;
13
- Select?: (props: SelectComponentProps) => JSX.Element;
14
- TextInput?: (props: TextInputComponentProps) => JSX.Element;
15
- Button?: (props: ButtonComponentProps) => JSX.Element;
16
- SecondaryButton?: (props: ButtonComponentProps) => JSX.Element;
17
- Header?: (props: HeaderProps) => JSX.Element;
18
- Label?: (props: LabelProps) => JSX.Element;
19
- Text?: (props: TextProps) => JSX.Element;
20
- DeleteButton?: (props: DeleteButtonProps) => JSX.Element;
21
- Modal?: (props: ModalComponentProps) => JSX.Element;
22
- Popover?: (props: PopoverComponentProps) => JSX.Element;
26
+ /** A select component. */
27
+ SelectComponent?: (props: {
28
+ value: string;
29
+ label?: string;
30
+ options: {
31
+ value: string;
32
+ label: string;
33
+ }[];
34
+ onChange: (event: React.ChangeEvent<HTMLSelectElement>) => void;
35
+ }) => JSX.Element;
36
+ /** An input component to get text from your users. */
37
+ TextInputComponent?: (props: {
38
+ id: string;
39
+ width: number;
40
+ value: string;
41
+ placeholder?: string;
42
+ onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
43
+ }) => JSX.Element;
44
+ /** A button component. */
45
+ ButtonComponent?: (props: {
46
+ onClick: () => void;
47
+ label: string;
48
+ }) => JSX.Element;
49
+ /** A secondary button. */
50
+ SecondaryButtonComponent?: (props: {
51
+ onClick: () => void;
52
+ label: string;
53
+ }) => JSX.Element;
54
+ /**
55
+ * A small delete button used to click out of things. Usually an "X" icon.
56
+ */
57
+ DeleteButtonComponent?: (props: {
58
+ onClick: () => void;
59
+ }) => JSX.Element;
60
+ /** A header component. */
61
+ HeaderComponent?: (props: {
62
+ label: string;
63
+ }) => JSX.Element;
64
+ /** A label component. */
65
+ LabelComponent?: (props: {
66
+ label: string;
67
+ }) => JSX.Element;
68
+ /** A text component. */
69
+ TextComponent?: (props: {
70
+ label: string;
71
+ }) => JSX.Element;
72
+ /**
73
+ * A modal component.
74
+ */
75
+ ModalComponent?: (props: {
76
+ isOpen: boolean;
77
+ setIsOpen: (isOpen: boolean) => void;
78
+ title?: string | undefined;
79
+ children: ReactNode;
80
+ width?: number | undefined;
81
+ height?: number | undefined;
82
+ }) => JSX.Element;
83
+ /** A popover component. */
84
+ PopoverComponent?: (props: {
85
+ isOpen: boolean;
86
+ setIsOpen: (isOpen: boolean) => void;
87
+ triggerLabel?: string;
88
+ popoverTitle?: string;
89
+ popoverChildren: ReactNode;
90
+ }) => JSX.Element;
91
+ /** The default dashboard to add the item to. */
23
92
  destinationDashboard?: string;
93
+ /** The name of the current organization. */
24
94
  organizationName?: string;
25
- horizontalView?: boolean;
95
+ /** Whether the ChartBuilder is in horizontal view mode. */
96
+ isHorizontalView?: boolean;
26
97
  }
27
- export default function ChartEditor({ isOpen, chartId, isEditMode, admin, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, organizationName, horizontalView, onDelete, setIsOpen, Select, TextInput, Button, SecondaryButton, Header, Label, Text, DeleteButton, Modal, Popover, }: ChartEditorProps): import("react/jsx-runtime").JSX.Element;
28
- export {};
98
+ /**
99
+ * ### Quill Chart Editor
100
+ *
101
+ * Presents the Quill Chart Builder form as a modal.
102
+ *
103
+ * @example
104
+ * ```js
105
+ * // Usage without custom components
106
+ * <ChartEditor isOpen={true} chartId="1234" />
107
+ * ```
108
+ *
109
+ * @example
110
+ * ```js
111
+ * // You can also pass your own components
112
+ * <ChartEditor
113
+ * isOpen={isOpen}
114
+ * setIsOpen={setIsOpen}
115
+ * chartId="1234"
116
+ * Button={MyButton}
117
+ * Modal={MyModal}
118
+ * />
119
+ * ```
120
+ *
121
+ * ### Chart Editor API
122
+ * @see https://docs.quillsql.com/components/chart-editor
123
+ */
124
+ export default function ChartEditor({ isOpen, chartId, isAdmin, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, organizationName, isHorizontalView, onDelete, setIsOpen, SelectComponent, TextInputComponent, ButtonComponent, SecondaryButtonComponent, HeaderComponent, LabelComponent, TextComponent, DeleteButtonComponent, ModalComponent, PopoverComponent, }: ChartEditorProps): import("react/jsx-runtime").JSX.Element;
29
125
  //# sourceMappingURL=ChartEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartEditor.d.ts","sourceRoot":"","sources":["../../src/ChartEditor.tsx"],"names":[],"mappings":";AASA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AAKnC,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,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;IAC/D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7C,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,GAAG,CAAC,OAAO,CAAC;IACzD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,GAAG,CAAC,OAAO,CAAC;IACxD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,OAAO,EACP,UAAU,EACV,KAAa,EACb,oBAAoB,EACpB,iBAAgC,EAChC,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,EACT,MAAM,EACN,eAAe,EACf,MAAM,EACN,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,OAAO,GACR,EAAE,gBAAgB,2CA6LlB"}
1
+ {"version":3,"file":"ChartEditor.d.ts","sourceRoot":"","sources":["../../src/ChartEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EACZ,SAAS,EAKV,MAAM,OAAO,CAAC;AAWf;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,MAAM,EAAE,OAAO,CAAC;IAEhB,6CAA6C;IAC7C,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAErC,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAEhB,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,8CAA8C;IAC9C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;SACf,EAAE,CAAC;QACJ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;KACjE,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;KAChE,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,0BAA0B;IAC1B,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,0BAA0B;IAC1B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAE5D,yBAAyB;IACzB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAE3D,wBAAwB;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAE1D;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QACvB,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,QAAQ,EAAE,SAAS,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC7B,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,2BAA2B;IAC3B,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,SAAS,CAAC;KAC5B,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,gDAAgD;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,OAAO,EACP,OAAe,EACf,oBAAoB,EACpB,iBAAgC,EAChC,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EAChB,gBAAuB,EACvB,QAAQ,EACR,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,cAA8B,EAC9B,gBAAgB,GACjB,EAAE,gBAAgB,2CAgJlB"}