@quillsql/react 2.14.13 → 2.14.14

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 (241) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +12 -0
  3. package/dist/cjs/ChartBuilder.d.ts +3 -2
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +105 -16
  6. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  7. package/dist/cjs/ChartEditor.js +2 -0
  8. package/dist/cjs/Context.d.ts +6 -2
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +163 -35
  11. package/dist/cjs/Dashboard.d.ts.map +1 -1
  12. package/dist/cjs/Dashboard.js +93 -16
  13. package/dist/cjs/QuillProvider.d.ts +40 -1
  14. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  15. package/dist/cjs/QuillProvider.js +2 -2
  16. package/dist/cjs/ReportBuilder.d.ts +4 -1
  17. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  18. package/dist/cjs/ReportBuilder.js +103 -1262
  19. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  20. package/dist/cjs/SQLEditor.js +50 -6
  21. package/dist/cjs/Table.d.ts.map +1 -1
  22. package/dist/cjs/Table.js +12 -0
  23. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  24. package/dist/cjs/components/Chart/BarChart.js +14 -9
  25. package/dist/cjs/components/Chart/CustomBar.d.ts +18 -0
  26. package/dist/cjs/components/Chart/CustomBar.d.ts.map +1 -0
  27. package/dist/cjs/components/Chart/CustomBar.js +70 -0
  28. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  29. package/dist/cjs/components/Chart/InternalChart.js +24 -1
  30. package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  31. package/dist/cjs/components/Dashboard/DashboardTemplate.js +2 -1
  32. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  33. package/dist/cjs/components/Dashboard/DataLoader.js +73 -2
  34. package/dist/cjs/components/Dashboard/util.d.ts +2 -1
  35. package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
  36. package/dist/cjs/components/Dashboard/util.js +12 -1
  37. package/dist/cjs/components/QuillTable.d.ts +2 -1
  38. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  39. package/dist/cjs/components/QuillTable.js +2 -2
  40. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  41. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +7 -1
  42. package/dist/cjs/components/ReportBuilder/ColumnComponent.d.ts +48 -0
  43. package/dist/cjs/components/ReportBuilder/ColumnComponent.d.ts.map +1 -0
  44. package/dist/cjs/components/ReportBuilder/ColumnComponent.js +46 -0
  45. package/dist/cjs/components/ReportBuilder/FilterComponent.d.ts +65 -0
  46. package/dist/cjs/components/ReportBuilder/FilterComponent.d.ts.map +1 -0
  47. package/dist/cjs/components/ReportBuilder/FilterComponent.js +51 -0
  48. package/dist/cjs/components/ReportBuilder/LimitComponent.d.ts +42 -0
  49. package/dist/cjs/components/ReportBuilder/LimitComponent.d.ts.map +1 -0
  50. package/dist/cjs/components/ReportBuilder/LimitComponent.js +50 -0
  51. package/dist/cjs/components/ReportBuilder/PivotComponent.d.ts +66 -0
  52. package/dist/cjs/components/ReportBuilder/PivotComponent.d.ts.map +1 -0
  53. package/dist/cjs/components/ReportBuilder/PivotComponent.js +47 -0
  54. package/dist/cjs/components/ReportBuilder/SaveReport.d.ts +162 -0
  55. package/dist/cjs/components/ReportBuilder/SaveReport.d.ts.map +1 -0
  56. package/dist/cjs/components/ReportBuilder/SaveReport.js +31 -0
  57. package/dist/cjs/components/ReportBuilder/SortComponent.d.ts +42 -0
  58. package/dist/cjs/components/ReportBuilder/SortComponent.d.ts.map +1 -0
  59. package/dist/cjs/components/ReportBuilder/SortComponent.js +50 -0
  60. package/dist/cjs/components/ReportBuilder/TableComponent.d.ts +28 -0
  61. package/dist/cjs/components/ReportBuilder/TableComponent.d.ts.map +1 -0
  62. package/dist/cjs/components/ReportBuilder/TableComponent.js +24 -0
  63. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  64. package/dist/cjs/components/ReportBuilder/ui.js +3 -1
  65. package/dist/cjs/components/UiComponents.d.ts +5 -2
  66. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  67. package/dist/cjs/components/UiComponents.js +6 -5
  68. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  69. package/dist/cjs/hooks/useAskQuill.js +38 -0
  70. package/dist/cjs/hooks/useDashboard.d.ts +3 -1
  71. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  72. package/dist/cjs/hooks/useDashboard.js +91 -6
  73. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  74. package/dist/cjs/hooks/useExport.js +17 -9
  75. package/dist/cjs/hooks/useLongLoading.d.ts +13 -0
  76. package/dist/cjs/hooks/useLongLoading.d.ts.map +1 -0
  77. package/dist/cjs/hooks/useLongLoading.js +67 -0
  78. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  79. package/dist/cjs/hooks/useQuill.js +25 -1
  80. package/dist/cjs/hooks/useReportBuilder.d.ts +178 -0
  81. package/dist/cjs/hooks/useReportBuilder.d.ts.map +1 -0
  82. package/dist/cjs/hooks/useReportBuilder.js +1476 -0
  83. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  84. package/dist/cjs/hooks/useVirtualTables.js +27 -2
  85. package/dist/cjs/index.d.ts +11 -0
  86. package/dist/cjs/index.d.ts.map +1 -1
  87. package/dist/cjs/index.js +17 -1
  88. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +14 -1
  89. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  90. package/dist/cjs/internals/ReportBuilder/PivotForm.js +86 -3
  91. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +19 -2
  92. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  93. package/dist/cjs/internals/ReportBuilder/PivotModal.js +421 -141
  94. package/dist/cjs/models/Client.d.ts +6 -2
  95. package/dist/cjs/models/Client.d.ts.map +1 -1
  96. package/dist/cjs/utils/astProcessing.d.ts +4 -2
  97. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  98. package/dist/cjs/utils/astProcessing.js +25 -2
  99. package/dist/cjs/utils/client.d.ts +2 -1
  100. package/dist/cjs/utils/client.d.ts.map +1 -1
  101. package/dist/cjs/utils/client.js +13 -2
  102. package/dist/cjs/utils/dashboard.d.ts +3 -1
  103. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  104. package/dist/cjs/utils/dashboard.js +44 -3
  105. package/dist/cjs/utils/filterProcessing.d.ts +2 -1
  106. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  107. package/dist/cjs/utils/filterProcessing.js +12 -1
  108. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  109. package/dist/cjs/utils/pivotConstructor.js +11 -9
  110. package/dist/cjs/utils/report.d.ts +11 -5
  111. package/dist/cjs/utils/report.d.ts.map +1 -1
  112. package/dist/cjs/utils/report.js +55 -8
  113. package/dist/cjs/utils/reportBuilder.d.ts.map +1 -1
  114. package/dist/cjs/utils/reportBuilder.js +5 -2
  115. package/dist/cjs/utils/schema.d.ts +5 -2
  116. package/dist/cjs/utils/schema.d.ts.map +1 -1
  117. package/dist/cjs/utils/schema.js +14 -2
  118. package/dist/cjs/utils/tableProcessing.d.ts +17 -10
  119. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  120. package/dist/cjs/utils/tableProcessing.js +99 -17
  121. package/dist/esm/Chart.d.ts.map +1 -1
  122. package/dist/esm/Chart.js +13 -1
  123. package/dist/esm/ChartBuilder.d.ts +3 -2
  124. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  125. package/dist/esm/ChartBuilder.js +107 -18
  126. package/dist/esm/ChartEditor.d.ts.map +1 -1
  127. package/dist/esm/ChartEditor.js +3 -1
  128. package/dist/esm/Context.d.ts +6 -2
  129. package/dist/esm/Context.d.ts.map +1 -1
  130. package/dist/esm/Context.js +162 -34
  131. package/dist/esm/Dashboard.d.ts.map +1 -1
  132. package/dist/esm/Dashboard.js +94 -17
  133. package/dist/esm/QuillProvider.d.ts +40 -1
  134. package/dist/esm/QuillProvider.d.ts.map +1 -1
  135. package/dist/esm/QuillProvider.js +2 -2
  136. package/dist/esm/ReportBuilder.d.ts +4 -1
  137. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  138. package/dist/esm/ReportBuilder.js +106 -1262
  139. package/dist/esm/SQLEditor.d.ts.map +1 -1
  140. package/dist/esm/SQLEditor.js +51 -7
  141. package/dist/esm/Table.d.ts.map +1 -1
  142. package/dist/esm/Table.js +13 -1
  143. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  144. package/dist/esm/components/Chart/BarChart.js +15 -10
  145. package/dist/esm/components/Chart/CustomBar.d.ts +18 -0
  146. package/dist/esm/components/Chart/CustomBar.d.ts.map +1 -0
  147. package/dist/esm/components/Chart/CustomBar.js +68 -0
  148. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  149. package/dist/esm/components/Chart/InternalChart.js +25 -2
  150. package/dist/esm/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  151. package/dist/esm/components/Dashboard/DashboardTemplate.js +3 -2
  152. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  153. package/dist/esm/components/Dashboard/DataLoader.js +74 -3
  154. package/dist/esm/components/Dashboard/util.d.ts +2 -1
  155. package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
  156. package/dist/esm/components/Dashboard/util.js +12 -1
  157. package/dist/esm/components/QuillTable.d.ts +2 -1
  158. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  159. package/dist/esm/components/QuillTable.js +2 -2
  160. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  161. package/dist/esm/components/ReportBuilder/AddColumnModal.js +7 -1
  162. package/dist/esm/components/ReportBuilder/ColumnComponent.d.ts +48 -0
  163. package/dist/esm/components/ReportBuilder/ColumnComponent.d.ts.map +1 -0
  164. package/dist/esm/components/ReportBuilder/ColumnComponent.js +39 -0
  165. package/dist/esm/components/ReportBuilder/FilterComponent.d.ts +65 -0
  166. package/dist/esm/components/ReportBuilder/FilterComponent.d.ts.map +1 -0
  167. package/dist/esm/components/ReportBuilder/FilterComponent.js +44 -0
  168. package/dist/esm/components/ReportBuilder/LimitComponent.d.ts +42 -0
  169. package/dist/esm/components/ReportBuilder/LimitComponent.d.ts.map +1 -0
  170. package/dist/esm/components/ReportBuilder/LimitComponent.js +46 -0
  171. package/dist/esm/components/ReportBuilder/PivotComponent.d.ts +66 -0
  172. package/dist/esm/components/ReportBuilder/PivotComponent.d.ts.map +1 -0
  173. package/dist/esm/components/ReportBuilder/PivotComponent.js +40 -0
  174. package/dist/esm/components/ReportBuilder/SaveReport.d.ts +162 -0
  175. package/dist/esm/components/ReportBuilder/SaveReport.d.ts.map +1 -0
  176. package/dist/esm/components/ReportBuilder/SaveReport.js +31 -0
  177. package/dist/esm/components/ReportBuilder/SortComponent.d.ts +42 -0
  178. package/dist/esm/components/ReportBuilder/SortComponent.d.ts.map +1 -0
  179. package/dist/esm/components/ReportBuilder/SortComponent.js +46 -0
  180. package/dist/esm/components/ReportBuilder/TableComponent.d.ts +28 -0
  181. package/dist/esm/components/ReportBuilder/TableComponent.d.ts.map +1 -0
  182. package/dist/esm/components/ReportBuilder/TableComponent.js +20 -0
  183. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  184. package/dist/esm/components/ReportBuilder/ui.js +4 -2
  185. package/dist/esm/components/UiComponents.d.ts +5 -2
  186. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  187. package/dist/esm/components/UiComponents.js +6 -5
  188. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  189. package/dist/esm/hooks/useAskQuill.js +39 -1
  190. package/dist/esm/hooks/useDashboard.d.ts +3 -1
  191. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  192. package/dist/esm/hooks/useDashboard.js +92 -7
  193. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  194. package/dist/esm/hooks/useExport.js +18 -10
  195. package/dist/esm/hooks/useLongLoading.d.ts +13 -0
  196. package/dist/esm/hooks/useLongLoading.d.ts.map +1 -0
  197. package/dist/esm/hooks/useLongLoading.js +64 -0
  198. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  199. package/dist/esm/hooks/useQuill.js +26 -2
  200. package/dist/esm/hooks/useReportBuilder.d.ts +178 -0
  201. package/dist/esm/hooks/useReportBuilder.d.ts.map +1 -0
  202. package/dist/esm/hooks/useReportBuilder.js +1471 -0
  203. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  204. package/dist/esm/hooks/useVirtualTables.js +28 -3
  205. package/dist/esm/index.d.ts +11 -0
  206. package/dist/esm/index.d.ts.map +1 -1
  207. package/dist/esm/index.js +8 -0
  208. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +14 -1
  209. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  210. package/dist/esm/internals/ReportBuilder/PivotForm.js +87 -4
  211. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +19 -2
  212. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  213. package/dist/esm/internals/ReportBuilder/PivotModal.js +423 -143
  214. package/dist/esm/models/Client.d.ts +6 -2
  215. package/dist/esm/models/Client.d.ts.map +1 -1
  216. package/dist/esm/utils/astProcessing.d.ts +4 -2
  217. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  218. package/dist/esm/utils/astProcessing.js +25 -2
  219. package/dist/esm/utils/client.d.ts +2 -1
  220. package/dist/esm/utils/client.d.ts.map +1 -1
  221. package/dist/esm/utils/client.js +13 -2
  222. package/dist/esm/utils/dashboard.d.ts +3 -1
  223. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  224. package/dist/esm/utils/dashboard.js +44 -3
  225. package/dist/esm/utils/filterProcessing.d.ts +2 -1
  226. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  227. package/dist/esm/utils/filterProcessing.js +12 -1
  228. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  229. package/dist/esm/utils/pivotConstructor.js +11 -9
  230. package/dist/esm/utils/report.d.ts +11 -5
  231. package/dist/esm/utils/report.d.ts.map +1 -1
  232. package/dist/esm/utils/report.js +55 -8
  233. package/dist/esm/utils/reportBuilder.d.ts.map +1 -1
  234. package/dist/esm/utils/reportBuilder.js +5 -2
  235. package/dist/esm/utils/schema.d.ts +5 -2
  236. package/dist/esm/utils/schema.d.ts.map +1 -1
  237. package/dist/esm/utils/schema.js +14 -2
  238. package/dist/esm/utils/tableProcessing.d.ts +17 -10
  239. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  240. package/dist/esm/utils/tableProcessing.js +99 -17
  241. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useContext, useEffect, useMemo, useRef, useState } from 'react';
3
- import { ClientContext, DashboardFiltersContext, FetchContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, } from '../../Context';
3
+ import { ClientContext, DashboardFiltersContext, EventTrackingContext, FetchContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, } from '../../Context';
4
4
  import { convertInternalReportToReport, EMPTY_INTERNAL_REPORT, fetchReport, fetchReportRowCount, } from '../../utils/report';
5
5
  import { shouldFetchMore, DEFAULT_PAGINATION, shouldSortInMemory, } from '../../utils/paginationProcessing';
6
6
  import { fetchResultsByReport, } from '../../utils/tableProcessing';
@@ -169,6 +169,7 @@ export default function DataLoader({ item, children, filters, userFilters, addit
169
169
  const { reports, reportsDispatch, fetchIndividualReport } = useContext(ReportsContext);
170
170
  const { reportFilters } = useContext(ReportFiltersContext);
171
171
  const { getToken } = useContext(FetchContext);
172
+ const { eventTracking } = useContext(EventTrackingContext);
172
173
  const contextFilters = useMemo(() => {
173
174
  return dashboardName
174
175
  ? Object.values(dashboardFilters[dashboardName] ?? {}).map((f) => f.filter)
@@ -182,7 +183,7 @@ export default function DataLoader({ item, children, filters, userFilters, addit
182
183
  const chartReport = useMemo(() => {
183
184
  const report = (dashboardName ? dashboard : reports)[item.id];
184
185
  if (report) {
185
- return convertInternalReportToReport(mergeComparisonRange(report), contextFilters);
186
+ return convertInternalReportToReport(mergeComparisonRange(report), contextFilters, eventTracking);
186
187
  }
187
188
  else {
188
189
  return constructReportFromItem(item);
@@ -234,6 +235,17 @@ export default function DataLoader({ item, children, filters, userFilters, addit
234
235
  if (e instanceof Error && e.name === 'AbortError') {
235
236
  return;
236
237
  }
238
+ eventTracking?.logError?.({
239
+ type: 'bug', // TODO: determine type
240
+ severity: 'high',
241
+ message: 'Error fetching row count',
242
+ errorMessage: e.message,
243
+ errorStack: e.stack,
244
+ errorData: {
245
+ caller: 'DataLoader',
246
+ function: 'fetchRowCount',
247
+ },
248
+ });
237
249
  }
238
250
  finally {
239
251
  if (fetchReportRowCountRequestId === rowCountRequestId.current) {
@@ -301,6 +313,7 @@ export default function DataLoader({ item, children, filters, userFilters, addit
301
313
  comparisonPivotQuery,
302
314
  getPivotRowCount: false,
303
315
  getToken,
316
+ eventTracking,
304
317
  });
305
318
  updateTableRowsAbortController.current = null;
306
319
  if (paginatedRows.error) {
@@ -337,6 +350,17 @@ export default function DataLoader({ item, children, filters, userFilters, addit
337
350
  }
338
351
  catch (e) {
339
352
  console.log(e);
353
+ eventTracking?.logError?.({
354
+ type: 'bug', // TODO: determine type
355
+ severity: 'high',
356
+ message: 'Error fetching table rows',
357
+ errorMessage: e.message,
358
+ errorStack: e.stack,
359
+ errorData: {
360
+ caller: 'DataLoader',
361
+ function: 'updateTableRows',
362
+ },
363
+ });
340
364
  }
341
365
  finally {
342
366
  if (fetchUpdateTableRowsRequestId === updateTableRowsRequestId.current) {
@@ -373,6 +397,7 @@ export default function DataLoader({ item, children, filters, userFilters, addit
373
397
  rowCountOnly: false,
374
398
  abortSignal: rowsAbortController.current.signal,
375
399
  getToken,
400
+ eventTracking,
376
401
  });
377
402
  addReport({
378
403
  ...fetchedReport,
@@ -403,6 +428,17 @@ export default function DataLoader({ item, children, filters, userFilters, addit
403
428
  }
404
429
  catch (e) {
405
430
  setError(e.message ?? 'Error fetching report');
431
+ eventTracking?.logError?.({
432
+ type: 'bug', // TODO: determine type
433
+ severity: 'high',
434
+ message: 'Error fetching report',
435
+ errorMessage: e.message,
436
+ errorStack: e.stack,
437
+ errorData: {
438
+ caller: 'DataLoader',
439
+ function: 'fetchReportHelper',
440
+ },
441
+ });
406
442
  }
407
443
  }
408
444
  if (!item.pivot) {
@@ -414,6 +450,17 @@ export default function DataLoader({ item, children, filters, userFilters, addit
414
450
  if (e instanceof Error && e.name === 'AbortError') {
415
451
  return;
416
452
  }
453
+ eventTracking?.logError?.({
454
+ type: 'bug', // TODO: determine type
455
+ severity: 'high',
456
+ message: 'Error fetching report',
457
+ errorMessage: e.message,
458
+ errorStack: e.stack,
459
+ errorData: {
460
+ caller: 'DataLoader',
461
+ function: 'fetchReportHelper',
462
+ },
463
+ });
417
464
  throw e;
418
465
  }
419
466
  finally {
@@ -480,6 +527,7 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
480
527
  const { dashboardFilters } = useContext(DashboardFiltersContext);
481
528
  const { reports, fetchIndividualReport } = useContext(ReportsContext);
482
529
  const { getToken } = useContext(FetchContext);
530
+ const { eventTracking } = useContext(EventTrackingContext);
483
531
  const { reportFilters } = useContext(ReportFiltersContext);
484
532
  const { tenants, flags } = useContext(TenantContext);
485
533
  const contextFilters = useMemo(() => {
@@ -503,7 +551,7 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
503
551
  if (!report) {
504
552
  return constructReportFromItem(item);
505
553
  }
506
- return convertInternalReportToReport(mergeComparisonRange(report), contextFilters);
554
+ return convertInternalReportToReport(mergeComparisonRange(report), contextFilters, eventTracking);
507
555
  }, [
508
556
  (dashboardName ? dashboard : reports)[item.id],
509
557
  reportFilters,
@@ -539,6 +587,7 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
539
587
  customFields: schemaData.customFields,
540
588
  abortSignal: fetchReportAbortController.current.signal,
541
589
  getToken,
590
+ eventTracking,
542
591
  });
543
592
  addReport({
544
593
  ...report,
@@ -569,6 +618,17 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
569
618
  setError(undefined);
570
619
  }
571
620
  catch (e) {
621
+ eventTracking?.logError?.({
622
+ type: 'bug', // TODO: determine type
623
+ severity: 'high',
624
+ message: 'Error fetching report',
625
+ errorMessage: e.message,
626
+ errorStack: e.stack,
627
+ errorData: {
628
+ caller: 'ChartDataLoader',
629
+ function: 'fetchReportHelper',
630
+ },
631
+ });
572
632
  setError(e.message ?? 'Error fetching report');
573
633
  }
574
634
  }
@@ -577,6 +637,17 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
577
637
  if (e instanceof Error && e.name === 'AbortError') {
578
638
  return;
579
639
  }
640
+ eventTracking?.logError?.({
641
+ type: 'bug', // TODO: determine type
642
+ severity: 'high',
643
+ message: 'Error fetching report',
644
+ errorMessage: e.message,
645
+ errorStack: e.stack,
646
+ errorData: {
647
+ caller: 'ChartDataLoader',
648
+ function: 'fetchReportHelper',
649
+ },
650
+ });
580
651
  setError(e.message ?? 'Error fetching report');
581
652
  }
582
653
  finally {
@@ -1,7 +1,8 @@
1
1
  import { QuillProviderClient } from '../../models/Client';
2
+ import { EventTracking } from '../../QuillProvider';
2
3
  export declare function validateTemplatesAgainstFilters(filters: any[], templates: any[]): {
3
4
  valid: boolean;
4
5
  error: string;
5
6
  };
6
- export declare function addTemplatesToDashboard(name: any, newTemplates: any[], client: QuillProviderClient, dashboardData: any, getToken: () => Promise<string>): Promise<any>;
7
+ export declare function addTemplatesToDashboard(name: any, newTemplates: any[], client: QuillProviderClient, dashboardData: any, getToken: () => Promise<string>, eventTracking: EventTracking | null): Promise<any>;
7
8
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAK1D,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,GAAG,EAAE,EACd,SAAS,EAAE,GAAG,EAAE,GACf;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiCnC;AAGD,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,GAAG,EAAE,EACnB,MAAM,EAAE,mBAAmB,EAC3B,aAAa,EAAE,GAAG,EAClB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC,GAAG,CAAC,CA8Cd"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKpD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,GAAG,EAAE,EACd,SAAS,EAAE,GAAG,EAAE,GACf;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiCnC;AAGD,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,GAAG,EAAE,EACnB,MAAM,EAAE,mBAAmB,EAC3B,aAAa,EAAE,GAAG,EAClB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC/B,aAAa,EAAE,aAAa,GAAG,IAAI,GAClC,OAAO,CAAC,GAAG,CAAC,CAyDd"}
@@ -36,7 +36,7 @@ export function validateTemplatesAgainstFilters(filters, templates) {
36
36
  }
37
37
  }
38
38
  // TODO: Outdated, revisit and retest
39
- export async function addTemplatesToDashboard(name, newTemplates, client, dashboardData, getToken) {
39
+ export async function addTemplatesToDashboard(name, newTemplates, client, dashboardData, getToken, eventTracking) {
40
40
  try {
41
41
  const { publicKey, tenants } = client;
42
42
  if (tenants) {
@@ -81,5 +81,16 @@ export async function addTemplatesToDashboard(name, newTemplates, client, dashbo
81
81
  }
82
82
  catch (error) {
83
83
  console.error('Error while updating dashboard:', error);
84
+ eventTracking?.logError?.({
85
+ type: 'bug', // TODO: determine type
86
+ severity: 'high',
87
+ message: 'Error while updating dashboard',
88
+ errorMessage: error.message,
89
+ errorStack: error.stack,
90
+ errorData: {
91
+ caller: 'addTemplatesToDashboard',
92
+ function: 'addTemplatesToDashboard',
93
+ },
94
+ });
84
95
  }
85
96
  }
@@ -31,7 +31,8 @@ export interface TableComponentProps {
31
31
  interface QuillTableComponentProps extends TableComponentProps {
32
32
  hideLabels?: boolean;
33
33
  disableSort?: boolean;
34
+ overrideInMemortSort?: boolean;
34
35
  }
35
- export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, currentPage, sort, hideCSVDownloadButton, containerStyle, className, LoadingComponent, rowsPerPage, emptyStateLabel, downloadCSV, onPageChange, onSortChange, hideLabels, disableSort, }: QuillTableComponentProps): import("react/jsx-runtime").JSX.Element;
36
+ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, currentPage, sort, overrideInMemortSort, hideCSVDownloadButton, containerStyle, className, LoadingComponent, rowsPerPage, emptyStateLabel, downloadCSV, onPageChange, onSortChange, hideLabels, disableSort, }: QuillTableComponentProps): import("react/jsx-runtime").JSX.Element;
36
37
  export {};
37
38
  //# sourceMappingURL=QuillTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE;AAED,UAAU,wBAAyB,SAAQ,mBAAmB;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,WAAW,EACX,IAAI,EACJ,qBAA4B,EAC5B,cAAc,EACd,SAAS,EACT,gBAAwC,EACxC,WAAgB,EAChB,eAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,EAAE,wBAAwB,2CA+e1B"}
1
+ {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE;AAED,UAAU,wBAAyB,SAAQ,mBAAmB;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,WAAW,EACX,IAAI,EACJ,oBAAoB,EACpB,qBAA4B,EAC5B,cAAc,EACd,SAAS,EACT,gBAAwC,EACxC,WAAgB,EAChB,eAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,EAAE,wBAAwB,2CA+e1B"}
@@ -3,7 +3,7 @@ import { useContext, useEffect, useState } from 'react';
3
3
  import { compareValues } from '../utils/valueFormatter';
4
4
  import { ThemeContext } from '../Context';
5
5
  import { QuillLoadingComponent } from './UiComponents';
6
- export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, currentPage, sort, hideCSVDownloadButton = true, containerStyle, className, LoadingComponent = QuillLoadingComponent, rowsPerPage = 10, emptyStateLabel = 'No results', downloadCSV, onPageChange, onSortChange, hideLabels, disableSort, }) {
6
+ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, currentPage, sort, overrideInMemortSort, hideCSVDownloadButton = true, containerStyle, className, LoadingComponent = QuillLoadingComponent, rowsPerPage = 10, emptyStateLabel = 'No results', downloadCSV, onPageChange, onSortChange, hideLabels, disableSort, }) {
7
7
  const [activeRows, setActiveRows] = useState([]);
8
8
  const [maxPage, setMaxPage] = useState(1);
9
9
  const [sortColumn, setSortColumn] = useState(sort?.field || '');
@@ -28,7 +28,7 @@ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns,
28
28
  }
29
29
  else {
30
30
  const sortedRows = [...rows];
31
- if (sortColumn) {
31
+ if (sortColumn && !overrideInMemortSort) {
32
32
  sortedRows.sort((a, b) => {
33
33
  const result = compareValues(a, b, sortColumn);
34
34
  return sortDirection === 'asc' ? result : -result;
@@ -1 +1 @@
1
- {"version":3,"file":"AddColumnModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAiBpE,OAAO,EAGL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAEL,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAM,EACN,cAAc,EACd,eAAe,EACf,MAAM,EACN,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,MAAM,EACN,sBAAoD,EACpD,gBAAwC,GACzC,EAAE;IACD,MAAM,EAAE,CACN,SAAS,EAAE,kBAAkB,EAAE,EAC/B,UAAU,EAAE,mBAAmB,EAAE,KAC9B,IAAI,CAAC;IACV,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACrC,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,kBAAkB,EACd,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,GACjD,KAAK,CAAC,yBAAyB,CAC7B,uBAAuB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAChE,CAAC;IACN,YAAY,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;IACZ,sBAAsB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAC1C,gBAAgB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CACrC,2CAgUA"}
1
+ {"version":3,"file":"AddColumnModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAiBpE,OAAO,EAGL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAEL,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAM,EACN,cAAc,EACd,eAAe,EACf,MAAM,EACN,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,MAAM,EACN,sBAAoD,EACpD,gBAAwC,GACzC,EAAE;IACD,MAAM,EAAE,CACN,SAAS,EAAE,kBAAkB,EAAE,EAC/B,UAAU,EAAE,mBAAmB,EAAE,KAC9B,IAAI,CAAC;IACV,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACrC,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,kBAAkB,EACd,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,GACjD,KAAK,CAAC,yBAAyB,CAC7B,uBAAuB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAChE,CAAC;IACN,YAAY,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;IACZ,sBAAsB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAC1C,gBAAgB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CACrC,2CAuUA"}
@@ -9,6 +9,7 @@ import { JoinType, } from '../../models/ReportBuilder';
9
9
  export default function AddColumnModal({ onSave, selectedTables, selectedColumns, schema, schemaLoading, foreignKeyMap, TextInputComponent, SelectColumn, SecondaryButton, Button, ColumnSearchEmptyState = QuillColumnSearchEmptyState, LoadingComponent = QuillLoadingComponent, }) {
10
10
  const [primaryTable, setPrimaryTable] = useState(selectedTables[0]?.name);
11
11
  const [search, setSearch] = useState('');
12
+ const [initialLoad, setInitialLoad] = useState(true);
12
13
  const textInputContainerRef = useRef(null);
13
14
  const [modalSelectedColumns, setModalSelectedColumns] = useState(selectedColumns.map((col) => `${col.table}.${col.field}`));
14
15
  const columnOptions = useMemo(() => {
@@ -66,6 +67,11 @@ export default function AddColumnModal({ onSave, selectedTables, selectedColumns
66
67
  const remainingColumns = columnOptions.filter((col) => !modalSelectedColumns.includes(col));
67
68
  setOrderedColumnNames([...modalSelectedColumns, ...remainingColumns]);
68
69
  }, [columnOptions]);
70
+ useEffect(() => {
71
+ if (!schemaLoading && initialLoad) {
72
+ setTimeout(() => setInitialLoad(false), 200); // This artificial load prevents a flash as searchResults gets populated from empty array
73
+ }
74
+ }, [schemaLoading]);
69
75
  const sensors = useSensors(useSensor(PointerSensor), useSensor(KeyboardSensor, {
70
76
  coordinateGetter: sortableKeyboardCoordinates,
71
77
  }));
@@ -98,7 +104,7 @@ export default function AddColumnModal({ onSave, selectedTables, selectedColumns
98
104
  alignItems: 'center',
99
105
  marginTop: 2,
100
106
  marginBottom: 6,
101
- }, children: _jsx(TextInputComponent, { id: 'add_column_search_bar', value: search, placeholder: 'Search...', width: 400, onChange: (e) => setSearch(e.target.value) }) }), schemaLoading ? (_jsx(LoadingComponent, {})) : (_jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, children: _jsx(SortableContext, { items: orderedColumnNames, strategy: verticalListSortingStrategy, children: _jsxs("div", { style: {
107
+ }, children: _jsx(TextInputComponent, { id: 'add_column_search_bar', value: search, placeholder: 'Search...', width: 400, onChange: (e) => setSearch(e.target.value) }) }), schemaLoading || initialLoad ? (_jsx(LoadingComponent, {})) : (_jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, children: _jsx(SortableContext, { items: orderedColumnNames, strategy: verticalListSortingStrategy, children: _jsxs("div", { style: {
102
108
  display: 'flex',
103
109
  flexDirection: 'column',
104
110
  gap: 8,
@@ -0,0 +1,48 @@
1
+ import { ReportBuilder } from '../../hooks/useReportBuilder';
2
+ import { TextInputComponentProps } from '../UiComponents';
3
+ interface AddColumnsProps {
4
+ reportBuilder: ReportBuilder;
5
+ ModalComponent?: (props: {
6
+ isOpen: boolean;
7
+ setIsOpen: (isOpen: boolean) => void;
8
+ title?: string;
9
+ children: React.ReactNode;
10
+ }) => JSX.Element;
11
+ ButtonComponent?: (props: {
12
+ onClick: () => void;
13
+ label: string;
14
+ disabled?: boolean;
15
+ isLoading?: boolean;
16
+ }) => JSX.Element;
17
+ DraggableColumnComponent?: (props: {
18
+ label: string;
19
+ onDelete: () => void;
20
+ DragHandle: ({ dragIcon }: {
21
+ dragIcon: () => JSX.Element;
22
+ }) => JSX.Element;
23
+ deleteDisabled?: boolean;
24
+ }) => JSX.Element;
25
+ TextInputComponent?: ((props: TextInputComponentProps) => JSX.Element) | React.ForwardRefExoticComponent<TextInputComponentProps & React.RefAttributes<HTMLInputElement>>;
26
+ SelectColumnComponent?: (props: {
27
+ label: string;
28
+ isSelected: boolean;
29
+ setSelected: () => void;
30
+ DragHandle: ({ dragIcon }: {
31
+ dragIcon: () => JSX.Element;
32
+ }) => JSX.Element;
33
+ }) => JSX.Element;
34
+ SecondaryButtonComponent?: (props: {
35
+ onClick: () => void;
36
+ label: string;
37
+ disabled?: boolean;
38
+ isLoading?: boolean;
39
+ }) => JSX.Element;
40
+ ColumnSearchEmptyState?: () => JSX.Element;
41
+ LoadingComponent?: () => JSX.Element;
42
+ ColumnDisplay?: React.ReactNode;
43
+ ModalTrigger?: React.ReactNode;
44
+ Modal?: React.ReactNode;
45
+ }
46
+ export declare const AddColumns: ({ reportBuilder, ModalComponent, ButtonComponent, DraggableColumnComponent, TextInputComponent, SelectColumnComponent, SecondaryButtonComponent, ColumnSearchEmptyState, LoadingComponent, ColumnDisplay, ModalTrigger, Modal, }: AddColumnsProps) => import("react/jsx-runtime").JSX.Element;
47
+ export {};
48
+ //# sourceMappingURL=ColumnComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/ColumnComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAML,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAKzB,UAAU,eAAe;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,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,CAAC;QACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;KAC3B,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QACjC,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;QAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,kBAAkB,CAAC,EACf,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,GACjD,KAAK,CAAC,yBAAyB,CAC7B,uBAAuB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAChE,CAAC;IAEN,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAC3C,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAErC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB;AAsID,eAAO,MAAM,UAAU,qOAkCpB,eAAe,4CAQjB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { EMPTY_REPORT_BUILDER_STATE } from '../../models/ReportBuilder';
3
+ import { MemoizedModal, MemoizedSecondaryButton, QuillColumnSearchEmptyState, QuillLoadingComponent, QuillTextInput, } from '../UiComponents';
4
+ import AddColumnModal from './AddColumnModal';
5
+ import DraggableColumns from './DraggableColumns';
6
+ import { QuillDraggableColumn, QuillSelectColumn } from './ui';
7
+ const ColumnsDisplayWrapper = ({ reportBuilder, DraggableColumnComponent, }) => {
8
+ return (_jsx(DraggableColumns, { columns: reportBuilder.columns, DraggableColumnComponent: DraggableColumnComponent, onColumnOrderChange: reportBuilder.handleColumnsChange, loading: reportBuilder.loading }));
9
+ };
10
+ const ModalTriggerWrapper = ({ reportBuilder, ButtonComponent, }) => {
11
+ return (_jsx(ButtonComponent, { onClick: () => {
12
+ if (!reportBuilder.openPopover) {
13
+ reportBuilder.setOpenPopover('AddColumnModal');
14
+ }
15
+ }, label: "Select columns", disabled: reportBuilder.loading }));
16
+ };
17
+ const ModalWrapper = ({ reportBuilder, ModalComponent, TextInputComponent, SelectColumnComponent, SecondaryButtonComponent, ButtonComponent, ColumnSearchEmptyState, LoadingComponent, }) => {
18
+ return (_jsx(ModalComponent, { isOpen: reportBuilder.openPopover === 'AddColumnModal', setIsOpen: (isOpen) => {
19
+ if (!isOpen) {
20
+ // delay onClose callback so onClick no-ops
21
+ setTimeout(() => {
22
+ reportBuilder.setOpenPopover(null);
23
+ }, 100);
24
+ }
25
+ }, title: "Select columns", children: _jsx(AddColumnModal, { onSave: (tables, columns) => {
26
+ reportBuilder.handleMultiStateChange({
27
+ state: {
28
+ ...EMPTY_REPORT_BUILDER_STATE,
29
+ tables,
30
+ columns,
31
+ },
32
+ fetchData: true,
33
+ });
34
+ reportBuilder.setOpenPopover(null);
35
+ }, selectedTables: reportBuilder.tables, selectedColumns: reportBuilder.columns, schema: reportBuilder.filteredSchema, foreignKeyMap: reportBuilder.foreignKeyMap, schemaLoading: reportBuilder.schemaData.isSchemaLoading, TextInputComponent: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState, LoadingComponent: LoadingComponent }) }));
36
+ };
37
+ export const AddColumns = ({ reportBuilder, ModalComponent = MemoizedModal, ButtonComponent = MemoizedSecondaryButton, DraggableColumnComponent = QuillDraggableColumn, TextInputComponent = QuillTextInput, SelectColumnComponent = QuillSelectColumn, SecondaryButtonComponent = MemoizedSecondaryButton, ColumnSearchEmptyState = QuillColumnSearchEmptyState, LoadingComponent = QuillLoadingComponent, ColumnDisplay = (_jsx(ColumnsDisplayWrapper, { reportBuilder: reportBuilder, DraggableColumnComponent: DraggableColumnComponent })), ModalTrigger = (_jsx(ModalTriggerWrapper, { reportBuilder: reportBuilder, ButtonComponent: SecondaryButtonComponent })), Modal = (_jsx(ModalWrapper, { reportBuilder: reportBuilder, ModalComponent: ModalComponent, TextInputComponent: TextInputComponent, SelectColumnComponent: SelectColumnComponent, SecondaryButtonComponent: SecondaryButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState, LoadingComponent: LoadingComponent, ButtonComponent: ButtonComponent })), }) => {
38
+ return (_jsxs("div", { children: [ColumnDisplay, ModalTrigger, Modal] }));
39
+ };
@@ -0,0 +1,65 @@
1
+ import { ReportBuilder } from '../../hooks/useReportBuilder';
2
+ import { TextInputComponentProps, SelectComponentProps } from '../UiComponents';
3
+ interface AddFiltersProps {
4
+ reportBuilder: ReportBuilder;
5
+ FilterDisplay?: React.ReactNode;
6
+ PopoverTrigger?: React.ReactNode;
7
+ Popover?: React.ReactNode;
8
+ TabsComponent?: (props: {
9
+ options: {
10
+ label: string;
11
+ value: string;
12
+ }[];
13
+ value: string;
14
+ onChange: (event: React.ChangeEvent<HTMLSelectElement>) => void;
15
+ }) => JSX.Element;
16
+ FilterPopoverComponent?: (props: {
17
+ isOpen: boolean;
18
+ setIsOpen: (isOpen: boolean) => void;
19
+ popoverTitle?: string;
20
+ popoverChildren: React.ReactNode;
21
+ filterLabel: string;
22
+ onClickDelete: (e: React.MouseEvent<HTMLElement>) => void;
23
+ }) => JSX.Element;
24
+ ButtonComponent?: (props: {
25
+ onClick: () => void;
26
+ label: string;
27
+ disabled?: boolean;
28
+ icon?: React.ReactNode;
29
+ isLoading?: boolean;
30
+ tooltipText?: string;
31
+ }) => JSX.Element;
32
+ SecondaryButtonComponent?: (props: {
33
+ onClick: () => void;
34
+ label: string;
35
+ disabled?: boolean;
36
+ icon?: React.ReactNode;
37
+ tooltipText?: string;
38
+ }) => JSX.Element;
39
+ SelectComponent?: (props: SelectComponentProps) => JSX.Element;
40
+ TextInputComponent?: ((props: TextInputComponentProps) => JSX.Element) | React.ForwardRefExoticComponent<TextInputComponentProps & React.RefAttributes<HTMLInputElement>>;
41
+ MultiSelectComponent?: (props: {
42
+ label?: string;
43
+ width: number;
44
+ value: string[];
45
+ options: {
46
+ value: string;
47
+ label: string;
48
+ }[];
49
+ onChange: (event: React.ChangeEvent<HTMLSelectElement> | {
50
+ target: {
51
+ value: (string | null)[];
52
+ };
53
+ }) => void;
54
+ }) => JSX.Element;
55
+ PopoverComponent?: (props: {
56
+ isOpen: boolean;
57
+ setIsOpen: (isOpen: boolean) => void;
58
+ triggerLabel?: string;
59
+ popoverTitle?: string;
60
+ popoverChildren: React.ReactNode;
61
+ }) => JSX.Element;
62
+ }
63
+ export declare const AddFilters: ({ reportBuilder, TabsComponent, FilterPopoverComponent, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, PopoverComponent, FilterDisplay, PopoverTrigger, Popover, }: AddFiltersProps) => import("react/jsx-runtime").JSX.Element;
64
+ export {};
65
+ //# sourceMappingURL=FilterComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EAMrB,MAAM,iBAAiB,CAAC;AAKzB,UAAU,eAAe;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAG1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC5C,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;KACjE,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC/B,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;KAC3D,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,kBAAkB,CAAC,EACf,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,GACjD,KAAK,CAAC,yBAAyB,CAC7B,uBAAuB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAChE,CAAC;IACN,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;SACf,EAAE,CAAC;QACJ,QAAQ,EAAE,CACR,KAAK,EACD,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,GACpC;YAAE,MAAM,EAAE;gBAAE,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;aAAE,CAAA;SAAE,KACzC,IAAI,CAAC;KACX,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,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,KAAK,CAAC,SAAS,CAAC;KAClC,KAAK,GAAG,CAAC,OAAO,CAAC;CACnB;AA6ID,eAAO,MAAM,UAAU,8NAyCpB,eAAe,4CAgBjB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import FilterStack from './FilterStack';
3
+ import FilterModal from './FilterModal';
4
+ import { QuillTabs, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedPopover, } from '../UiComponents';
5
+ import { QuillFilterPopover } from './ui';
6
+ import { QuillSelectComponent } from '../QuillSelect';
7
+ import { QuillMultiSelectComponentWithCombo } from '../QuillMultiSelectWithCombo';
8
+ const FilterDisplayWrapper = ({ reportBuilder, FilterStack, TabsComponent, FilterPopoverComponent, FilterModal, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, }) => {
9
+ return reportBuilder.filterStack.length > 0 ? (_jsx("div", { style: {
10
+ display: 'flex',
11
+ flexDirection: 'column',
12
+ gap: 8,
13
+ marginBottom: 12,
14
+ }, children: _jsx(FilterStack, { client: reportBuilder.client, filterStack: reportBuilder.filterStack, handleFilterStackChange: reportBuilder.handleFilterStackChange, schemaData: reportBuilder.schemaData, uniqueValues: reportBuilder.unfilteredUniqueValues, uniqueValuesIsLoading: reportBuilder.unfilteredUniqueValuesIsLoading, tables: reportBuilder.tables, TabsComponent: TabsComponent, FilterPopoverComponent: FilterPopoverComponent, FilterModal: FilterModal, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, actionsEnabled: !reportBuilder.loading, dashboardName: reportBuilder.destinationDashboard, getToken: reportBuilder.getToken, reportBuilderColumns: reportBuilder.columns }) })) : null;
15
+ };
16
+ const PopoverTriggerWrapper = ({ reportBuilder, SecondaryButtonComponent, }) => {
17
+ return (_jsx(SecondaryButtonComponent, { disabled: reportBuilder.columns.length === 0 || reportBuilder.loading, onClick: () => {
18
+ if (!reportBuilder.openPopover) {
19
+ reportBuilder.setOpenPopover('AddFilterPopover');
20
+ }
21
+ }, label: 'Add filter' }));
22
+ };
23
+ const PopoverWrapper = ({ reportBuilder, PopoverComponent, FilterModal, ButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, }) => {
24
+ return (_jsx("div", { style: {
25
+ position: 'relative',
26
+ ...(reportBuilder.openPopover === 'AddFilterPopover' && { top: 12 }),
27
+ }, children: _jsx(PopoverComponent, { isOpen: reportBuilder.openPopover === 'AddFilterPopover', setIsOpen: (isOpen) => {
28
+ if (!isOpen) {
29
+ reportBuilder.setOpenPopover(null);
30
+ }
31
+ }, popoverTitle: "Add filter", popoverChildren: _jsx(FilterModal, { schema: reportBuilder.filteredSchema, tables: reportBuilder.tables.map((table) => table.name), fieldValuesMap: reportBuilder.filteredUniqueValues ??
32
+ reportBuilder.unfilteredUniqueValues, fieldValuesMapIsLoading: reportBuilder.filteredUniqueValuesIsLoading ||
33
+ reportBuilder.unfilteredUniqueValuesIsLoading, onSubmitFilter: (filter) => {
34
+ reportBuilder.setOpenPopover(null);
35
+ reportBuilder.handleFilterInsertion(filter);
36
+ }, hideTableName: reportBuilder.tables.length === 1, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, reportBuilderColumns: reportBuilder.columns }) }) }));
37
+ };
38
+ export const AddFilters = ({ reportBuilder, TabsComponent = QuillTabs, FilterPopoverComponent = QuillFilterPopover, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, SelectComponent = QuillSelectComponent, TextInputComponent = QuillTextInput, MultiSelectComponent = QuillMultiSelectComponentWithCombo, PopoverComponent = MemoizedPopover, FilterDisplay = (_jsx(FilterDisplayWrapper, { reportBuilder: reportBuilder, FilterStack: FilterStack, TabsComponent: TabsComponent, FilterPopoverComponent: FilterPopoverComponent, FilterModal: FilterModal, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent })), PopoverTrigger = (_jsx(PopoverTriggerWrapper, { reportBuilder: reportBuilder, SecondaryButtonComponent: SecondaryButtonComponent })), Popover = (_jsx(PopoverWrapper, { reportBuilder: reportBuilder, PopoverComponent: PopoverComponent, FilterModal: FilterModal, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent })), }) => {
39
+ return (_jsxs("div", { children: [FilterDisplay, _jsxs("div", { style: {
40
+ display: 'flex',
41
+ flexDirection: 'column',
42
+ alignItems: 'flex-start',
43
+ }, children: [PopoverTrigger, Popover] })] }));
44
+ };
@@ -0,0 +1,42 @@
1
+ import { ReportBuilder } from '../../hooks/useReportBuilder';
2
+ import { TextInputComponentProps } from '../UiComponents';
3
+ interface AddLimitProps {
4
+ reportBuilder: ReportBuilder;
5
+ LimitDisplay?: React.ReactNode;
6
+ PopoverTrigger?: React.ReactNode;
7
+ Popover?: React.ReactNode;
8
+ ButtonComponent?: (props: {
9
+ onClick: () => void;
10
+ label: string;
11
+ disabled?: boolean;
12
+ icon?: React.ReactNode;
13
+ isLoading?: boolean;
14
+ tooltipText?: string;
15
+ }) => JSX.Element;
16
+ SecondaryButtonComponent?: (props: {
17
+ onClick: () => void;
18
+ label: string;
19
+ disabled?: boolean;
20
+ icon?: React.ReactNode;
21
+ tooltipText?: string;
22
+ }) => JSX.Element;
23
+ TextInputComponent?: ((props: TextInputComponentProps) => JSX.Element) | React.ForwardRefExoticComponent<TextInputComponentProps & React.RefAttributes<HTMLInputElement>>;
24
+ PopoverComponent?: (props: {
25
+ isOpen: boolean;
26
+ setIsOpen: (isOpen: boolean) => void;
27
+ triggerLabel?: string;
28
+ popoverTitle?: string;
29
+ popoverChildren: React.ReactNode;
30
+ }) => JSX.Element;
31
+ LimitPopoverComponent?: (props: {
32
+ isOpen: boolean;
33
+ setIsOpen: (isOpen: boolean) => void;
34
+ popoverTitle?: string;
35
+ popoverChildren: React.ReactNode;
36
+ limitLabel: string;
37
+ onClickDelete: (e: React.MouseEvent<HTMLElement>) => void;
38
+ }) => JSX.Element;
39
+ }
40
+ export declare const AddLimit: ({ reportBuilder, ButtonComponent, SecondaryButtonComponent, TextInputComponent, PopoverComponent, LimitPopoverComponent, LimitDisplay, PopoverTrigger, Popover, }: AddLimitProps) => import("react/jsx-runtime").JSX.Element;
41
+ export {};
42
+ //# sourceMappingURL=LimitComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LimitComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/LimitComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,uBAAuB,EAIxB,MAAM,iBAAiB,CAAC;AAKzB,UAAU,aAAa;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAG1B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,kBAAkB,CAAC,EACf,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,GACjD,KAAK,CAAC,yBAAyB,CAC7B,uBAAuB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAChE,CAAC;IACN,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,KAAK,CAAC,SAAS,CAAC;KAClC,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC;QACjC,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;KAC3D,KAAK,GAAG,CAAC,OAAO,CAAC;CACnB;AAsHD,eAAO,MAAM,QAAQ,sKAmClB,aAAa,4CAkBf,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MemoizedButton, MemoizedSecondaryButton, MemoizedPopover, } from '../UiComponents';
3
+ import { AddLimitPopover, LimitSentence } from './AddLimitPopover';
4
+ import { QuillTextInput } from '../UiComponents';
5
+ import { QuillLimitPopover } from './ui';
6
+ const LimitDisplayWrapper = ({ reportBuilder, LimitSentence, setOpenPopover, LimitPopover, EditPopover, TextInput, Button, SecondaryButton, }) => {
7
+ return reportBuilder.limit ? (_jsx("div", { style: {
8
+ display: 'flex',
9
+ flexDirection: 'column',
10
+ gap: 8,
11
+ marginBottom: 12,
12
+ }, children: _jsx(LimitSentence, { limit: reportBuilder.limit?.value || 0, setOpenPopover: setOpenPopover, LimitPopover: LimitPopover, EditPopover: EditPopover, handleDelete: () => {
13
+ reportBuilder.onLimitChange(null, false);
14
+ setOpenPopover(null);
15
+ }, onSave: (limit) => {
16
+ reportBuilder.onLimitChange(limit, false);
17
+ setOpenPopover(null);
18
+ }, TextInput: TextInput, Button: Button, SecondaryButton: SecondaryButton, disabled: reportBuilder.loading }) })) : null;
19
+ };
20
+ const PopoverTriggerWrapper = ({ reportBuilder, SecondaryButtonComponent, }) => {
21
+ return (_jsx(SecondaryButtonComponent, { disabled: reportBuilder.columns.length === 0 || reportBuilder.loading, onClick: () => {
22
+ if (!reportBuilder.openPopover) {
23
+ reportBuilder.setOpenPopover('AddLimitPopover');
24
+ }
25
+ }, label: 'Add limit' }));
26
+ };
27
+ const PopoverWrapper = ({ reportBuilder, PopoverComponent, AddLimitPopover, TextInputComponent, ButtonComponent, SecondaryButtonComponent, }) => {
28
+ return (_jsx("div", { style: {
29
+ position: 'relative',
30
+ ...(reportBuilder.openPopover === 'AddLimitPopover' && { top: 12 }),
31
+ }, children: _jsx(PopoverComponent, { isOpen: reportBuilder.openPopover === 'AddLimitPopover', setIsOpen: (isOpen) => {
32
+ if (!isOpen) {
33
+ reportBuilder.setOpenPopover(null);
34
+ }
35
+ }, popoverTitle: "Add limit", popoverChildren: _jsx(AddLimitPopover, { TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, onSave: (limit) => {
36
+ reportBuilder.onLimitChange(limit, false);
37
+ reportBuilder.setOpenPopover(null);
38
+ } }) }) }));
39
+ };
40
+ export const AddLimit = ({ reportBuilder, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, TextInputComponent = QuillTextInput, PopoverComponent = MemoizedPopover, LimitPopoverComponent = QuillLimitPopover, LimitDisplay = reportBuilder.limit ? (_jsx(LimitDisplayWrapper, { reportBuilder: reportBuilder, LimitSentence: LimitSentence, setOpenPopover: reportBuilder.setOpenPopover, LimitPopover: LimitPopoverComponent, EditPopover: AddLimitPopover, TextInput: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent })) : null, PopoverTrigger = (_jsx(PopoverTriggerWrapper, { reportBuilder: reportBuilder, SecondaryButtonComponent: SecondaryButtonComponent })), Popover = (_jsx(PopoverWrapper, { reportBuilder: reportBuilder, PopoverComponent: PopoverComponent, AddLimitPopover: AddLimitPopover, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent })), }) => {
41
+ return (_jsxs("div", { children: [LimitDisplay, !reportBuilder.limit && (_jsxs("div", { style: {
42
+ display: 'flex',
43
+ flexDirection: 'column',
44
+ alignItems: 'flex-start',
45
+ }, children: [PopoverTrigger, Popover] }))] }));
46
+ };