@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
@@ -249,7 +249,7 @@ export const MemoizedText = ({ label }) => {
249
249
  /**
250
250
  * The one, true Quill popover component.
251
251
  */
252
- export const MemoizedPopover = ({ isOpen, setIsOpen, triggerLabel, popoverTitle = undefined, popoverChildren, containerStyle, disabled, ignoredRefs, }) => {
252
+ export const MemoizedPopover = ({ isOpen, setIsOpen, triggerLabel, popoverTitle = undefined, popoverChildren, containerStyle, disabled, ignoredRefs, horizontalPadding = 20, titlePaddingLeft = 0, }) => {
253
253
  const [theme] = useContext(ThemeContext);
254
254
  const [rightAlignment, setRightAlignment] = useState('auto');
255
255
  const modalRef = useRef(null);
@@ -309,7 +309,7 @@ export const MemoizedPopover = ({ isOpen, setIsOpen, triggerLabel, popoverTitle
309
309
  zIndex: 999,
310
310
  // top: 12,
311
311
  borderRadius: 6,
312
- padding: 20,
312
+ padding: `20px ${horizontalPadding}px 20px ${horizontalPadding}px`,
313
313
  right: rightAlignment,
314
314
  }, children: [popoverTitle && (_jsx("h1", { style: {
315
315
  fontWeight: '600',
@@ -319,6 +319,7 @@ export const MemoizedPopover = ({ isOpen, setIsOpen, triggerLabel, popoverTitle
319
319
  marginBottom: 5,
320
320
  color: theme?.primaryTextColor,
321
321
  fontFamily: theme?.fontFamily,
322
+ paddingLeft: titlePaddingLeft,
322
323
  }, children: popoverTitle })), popoverChildren] }) }))] }));
323
324
  };
324
325
  export function MemoizedModal({ isOpen, setIsOpen, title, children, width, height, }) {
@@ -443,7 +444,7 @@ export const QuillTableReportBuilderComponent = ({ rows, columns, isLoading = fa
443
444
  setCurrentPage && setCurrentPage(0);
444
445
  setPage(0);
445
446
  onSortChange && onSortChange(sort);
446
- }, sort: sort, currentPage: currentPage ?? page, isLoading: isLoading, containerStyle: containerStyle, disableSort: disableSort }));
447
+ }, sort: sort, currentPage: currentPage ?? page, isLoading: isLoading, containerStyle: containerStyle, disableSort: disableSort, overrideInMemortSort: true }));
447
448
  };
448
449
  export const QuillTableComponent = ({ rows, columns, isLoading = false, rowCount, rowCountIsLoading, onPageChange, onSortChange, currentPage, hideLabels, }) => {
449
450
  const [sort, setSort] = useState({ field: '', direction: '' });
@@ -696,7 +697,7 @@ export const QuillLoadingComponent = () => {
696
697
  , strokeDashoffset: "19.63 39.25" // calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)
697
698
  , stroke: '#ADB1B9', fill: "none", transform: "rotate(90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "0 12 12", to: "360 12 12", dur: "0.8s", repeatCount: "indefinite" }) })] })] }));
698
699
  };
699
- export const OverflowContainer = ({ children }) => {
700
+ export const OverflowContainer = ({ children, style, }) => {
700
701
  const containerRef = useRef(null);
701
702
  const [showTopShadow, setShowTopShadow] = useState(false);
702
703
  const [showBottomShadow, setShowBottomShadow] = useState(false);
@@ -731,7 +732,7 @@ export const OverflowContainer = ({ children }) => {
731
732
  const containerStyle = {
732
733
  position: 'relative',
733
734
  overflowY: 'auto',
734
- // height: '100%',
735
+ ...style,
735
736
  };
736
737
  const shadowStyle = {
737
738
  position: 'sticky',
@@ -1 +1 @@
1
- {"version":3,"file":"useAskQuill.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAskQuill.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAEL,cAAc,IAAI,UAAU,EAE7B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;CACtB;AA6BD,eAAO,MAAM,WAAW,kBACP,MAAM,KACpB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;KAE/B,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACjD,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAmNtD,CAAC"}
1
+ {"version":3,"file":"useAskQuill.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAskQuill.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAEL,cAAc,IAAI,UAAU,EAE7B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;CACtB;AA6BD,eAAO,MAAM,WAAW,kBACP,MAAM,KACpB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;KAE/B,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACjD,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAyPtD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { useContext, useEffect, useState } from 'react';
2
- import { ClientContext, FetchContext, SchemaDataContext, TenantContext, } from '../Context';
2
+ import { ClientContext, EventTrackingContext, FetchContext, SchemaDataContext, TenantContext, } from '../Context';
3
3
  import { fetchAndProcessASTFromPrompt } from '../utils/astProcessing';
4
4
  import { fetchReportBuilderDataFromAST, } from '../utils/report';
5
5
  import { astToFilterTree, filterTreeToAst, } from '../utils/astFilterProcessing';
@@ -37,6 +37,7 @@ export const useAskQuill = (dashboardName) => {
37
37
  const [schemaData] = useContext(SchemaDataContext);
38
38
  const { tenants } = useContext(TenantContext);
39
39
  const { getToken } = useContext(FetchContext);
40
+ const { eventTracking } = useContext(EventTrackingContext);
40
41
  const [astInfo, setAstInfo] = useState(undefined);
41
42
  const [data, setData] = useState({
42
43
  rows: [],
@@ -73,6 +74,7 @@ export const useAskQuill = (dashboardName) => {
73
74
  dashboardName,
74
75
  tenants,
75
76
  getToken,
77
+ eventTracking,
76
78
  });
77
79
  if (astInfo.error) {
78
80
  throw new Error(astInfo.error);
@@ -85,6 +87,7 @@ export const useAskQuill = (dashboardName) => {
85
87
  pivot: astInfo.pivot,
86
88
  dashboardName,
87
89
  getToken,
90
+ eventTracking,
88
91
  });
89
92
  if (!reportBuilderInfo) {
90
93
  throw new Error('Error fetching report');
@@ -102,6 +105,17 @@ export const useAskQuill = (dashboardName) => {
102
105
  setError(err.message);
103
106
  setLoading(false);
104
107
  }
108
+ eventTracking?.logError?.({
109
+ type: 'bug', // TODO: determine type
110
+ severity: 'high',
111
+ message: 'Error fetching ask quill',
112
+ errorMessage: err.message,
113
+ errorStack: err.stack,
114
+ errorData: {
115
+ caller: 'useAskQuill',
116
+ function: 'askHelper',
117
+ },
118
+ });
105
119
  return;
106
120
  }
107
121
  const convertedColumns = convertColumnInternalToAskQuillColumn(reportBuilderInfo?.pivotData?.columns || reportBuilderInfo?.columns || []);
@@ -135,6 +149,7 @@ export const useAskQuill = (dashboardName) => {
135
149
  pivot: newPivot,
136
150
  dashboardName,
137
151
  getToken,
152
+ eventTracking,
138
153
  });
139
154
  setLoading(false);
140
155
  if (!reportBuilderInfo) {
@@ -142,6 +157,17 @@ export const useAskQuill = (dashboardName) => {
142
157
  }
143
158
  }
144
159
  catch (err) {
160
+ eventTracking?.logError?.({
161
+ type: 'bug', // TODO: determine type
162
+ severity: 'high',
163
+ message: 'Error fetching ask quill',
164
+ errorMessage: err.message,
165
+ errorStack: err.stack,
166
+ errorData: {
167
+ caller: 'useAskQuill',
168
+ function: 'onChangePivot',
169
+ },
170
+ });
145
171
  if (err instanceof Error) {
146
172
  setError(err.message);
147
173
  setLoading(false);
@@ -179,10 +205,22 @@ export const useAskQuill = (dashboardName) => {
179
205
  pivot: data.pivot || undefined,
180
206
  dashboardName,
181
207
  getToken,
208
+ eventTracking,
182
209
  });
183
210
  setLoading(false);
184
211
  }
185
212
  catch (err) {
213
+ eventTracking?.logError?.({
214
+ type: 'bug', // TODO: determine type
215
+ severity: 'high',
216
+ message: 'Error fetching ask quill',
217
+ errorMessage: err.message,
218
+ errorStack: err.stack,
219
+ errorData: {
220
+ caller: 'useAskQuill',
221
+ function: 'onChangeFilterTree',
222
+ },
223
+ });
186
224
  if (err instanceof Error) {
187
225
  setError(err.message);
188
226
  setLoading(false);
@@ -75,7 +75,9 @@ export declare const useDashboard: (dashboardName: string) => {
75
75
  };
76
76
  } | Filter>) => void;
77
77
  };
78
- export declare const useDashboardReport: (reportId: string) => {
78
+ export declare const useDashboardReport: (reportId: string, config?: {
79
+ initialFilters?: Filter[];
80
+ }) => {
79
81
  report: QuillReport | null;
80
82
  loading: boolean;
81
83
  applyFilters: (filters: Filter[]) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAGL,uBAAuB,EAGvB,MAAM,EACN,cAAc,EAGd,eAAe,EAGhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMtD,eAAO,MAAM,oBAAoB,kBAChB,MAAM,GAAG,IAAI,kBACZ,cAAc,EAAE;;;;2CA0Mc,MAAM;qCAtK1B,MAAM,4CAEf;QACb,MAAM,EAAE,WAAW,GAAG;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACrC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC7B,oBACiB;QAChB,OAAO,EAAE,uBAAuB,EAAE,CAAC;QACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;oCAmFa;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE;CAwF3E,CAAC;AAEF,eAAO,MAAM,mBAAmB,mBAAoB,MAAM;;;;yBAK5B,OAAO,CAAC,mBAAmB,CAAC;sBAiB/B,mBAAmB;CAoB7C,CAAC;AAEF,eAAO,MAAM,aAAa;;;;CAqBzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;uEAsCrB;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,uBAAuB,EAAE,CAAC;QACnC,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,UAAU,CAAC,EAAE,uBAAuB,CAAC;KACtC;4BAqDO,MAAM,gEAOT;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,uBAAuB,EAAE,CAAC;QACnC,UAAU,CAAC,EAAE,uBAAuB,CAAC;QACrC,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;QACjC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB;4BAyOkC,MAAM;CAwB5C,CAAC;AAGF,eAAO,MAAM,YAAY,kBACR,MAAM,KAEpB;IACD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;IAC/C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,YAAY,EAAE,CACZ,OAAO,EAAE,KAAK,CACV;QACE,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG;YAAE,SAAS,CAAC,EAAE,IAAI,CAAC;YAAC,OAAO,CAAC,EAAE,IAAI,CAAA;SAAE,CAAC;KACjE,GACD,MAAM,CACT,KACE,IAAI,CAAC;CAiOX,CAAC;AAGF,eAAO,MAAM,kBAAkB,aACnB,MAAM,KACf;IACD,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,MAAM,IAAI,CAAC;CAiI1B,CAAC"}
1
+ {"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAGL,uBAAuB,EAGvB,MAAM,EACN,cAAc,EAGd,eAAe,EAGhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMtD,eAAO,MAAM,oBAAoB,kBAChB,MAAM,GAAG,IAAI,kBACZ,cAAc,EAAE;;;;2CAoNc,MAAM;qCAjL1B,MAAM,4CAEf;QACb,MAAM,EAAE,WAAW,GAAG;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACrC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC7B,oBACiB;QAChB,OAAO,EAAE,uBAAuB,EAAE,CAAC;QACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;oCAmFa;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE;CAmG3E,CAAC;AAEF,eAAO,MAAM,mBAAmB,mBAAoB,MAAM;;;;yBAK5B,OAAO,CAAC,mBAAmB,CAAC;sBAiB/B,mBAAmB;CAoB7C,CAAC;AAEF,eAAO,MAAM,aAAa;;;;CAqBzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;uEAuCrB;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,uBAAuB,EAAE,CAAC;QACnC,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,UAAU,CAAC,EAAE,uBAAuB,CAAC;KACtC;4BA2EO,MAAM,gEAOT;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,uBAAuB,EAAE,CAAC;QACnC,UAAU,CAAC,EAAE,uBAAuB,CAAC;QACrC,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;QACjC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB;4BAiQkC,MAAM;CAwB5C,CAAC;AAGF,eAAO,MAAM,YAAY,kBACR,MAAM,KAEpB;IACD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;IAC/C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,YAAY,EAAE,CACZ,OAAO,EAAE,KAAK,CACV;QACE,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG;YAAE,SAAS,CAAC,EAAE,IAAI,CAAC;YAAC,OAAO,CAAC,EAAE,IAAI,CAAA;SAAE,CAAC;KACjE,GACD,MAAM,CACT,KACE,IAAI,CAAC;CA2PX,CAAC;AAGF,eAAO,MAAM,kBAAkB,aACnB,MAAM,WACP;IACP,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,KACA;IACD,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,MAAM,IAAI,CAAC;CA+I1B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { useContext, useEffect, useMemo, useRef } from 'react';
2
- import { ClientContext, DashboardConfigContext, DashboardContext, DashboardFiltersContext, FetchContext, ReportFiltersContext, ReportsContext, TenantContext, } from '../Context';
2
+ import { ClientContext, DashboardConfigContext, DashboardContext, DashboardFiltersContext, EventTrackingContext, FetchContext, ReportFiltersContext, ReportsContext, TenantContext, } from '../Context';
3
3
  import { convertPresetOptionsToSelectableList, PRIMARY_RANGE, } from '../DateRangePicker/dateRangePickerUtils';
4
4
  import { convertCustomFilter, InternalDashboardFilterType, StringFilterType, convertInternalDashboardFilterToDashboardFilter, } from '../models/Filter';
5
5
  import { createDefaultDateFilter } from '../utils/filterProcessing';
@@ -14,13 +14,12 @@ export const useDashboardInternal = (dashboardName, customFilters) => {
14
14
  // const [error, setError] = useState<any>(null);
15
15
  const [client, isClientLoading] = useContext(ClientContext);
16
16
  const { quillFetchWithToken } = useContext(FetchContext);
17
+ const { eventTracking } = useContext(EventTrackingContext);
17
18
  const loading = useMemo(() => {
18
19
  return (!dashboardName ||
19
20
  isClientLoading ||
20
21
  isDashboardsLoading ||
21
- dashboardConfig[dashboardName]?.loading ||
22
- (dashboardConfig[dashboardName] &&
23
- !dashboardConfig[dashboardName]?.config.sections));
22
+ dashboardConfig[dashboardName]?.loading);
24
23
  }, [isClientLoading, dashboardConfig, dashboardName, isDashboardsLoading]);
25
24
  const populatedDashboardFilters = useMemo(() => {
26
25
  return dashboardName && dashboardFilters[dashboardName] !== undefined
@@ -140,6 +139,17 @@ export const useDashboardInternal = (dashboardName, customFilters) => {
140
139
  }
141
140
  catch (e) {
142
141
  console.error(e);
142
+ eventTracking?.logError?.({
143
+ type: 'bug', // TODO: determine type
144
+ severity: 'high',
145
+ message: 'Error setting section order',
146
+ errorMessage: e.message,
147
+ errorStack: e.stack,
148
+ errorData: {
149
+ caller: 'useDashboard',
150
+ function: 'setSectionOrder',
151
+ },
152
+ });
143
153
  }
144
154
  }
145
155
  };
@@ -228,6 +238,7 @@ export const useDashboards = () => {
228
238
  const { reportFiltersDispatch } = useContext(ReportFiltersContext);
229
239
  const [client, isLoading] = useContext(ClientContext);
230
240
  const { quillFetchWithToken } = useContext(FetchContext);
241
+ const { eventTracking } = useContext(EventTrackingContext);
231
242
  const dashboards = useMemo(() => {
232
243
  return Object.values(dashboardConfig)
233
244
  .map((dashboard) => {
@@ -277,6 +288,15 @@ export const useDashboards = () => {
277
288
  task: 'edit-dashboard',
278
289
  metadata: body,
279
290
  });
291
+ eventTracking?.logEvent?.('create-dashboard', {
292
+ dashboardName: name,
293
+ });
294
+ if (filters.length > 0 || dateFilter) {
295
+ eventTracking?.logEvent?.('update-dashboard-filters', {
296
+ dashboardName: name,
297
+ numFilters: filters.length + (dateFilter ? 1 : 0),
298
+ });
299
+ }
280
300
  dashboardConfigDispatch({
281
301
  type: 'UPDATE_DASHBOARD',
282
302
  id: name,
@@ -291,6 +311,17 @@ export const useDashboards = () => {
291
311
  }
292
312
  catch (e) {
293
313
  console.error(e);
314
+ eventTracking?.logError?.({
315
+ type: 'bug', // TODO: determine type
316
+ severity: 'high',
317
+ message: 'Error creating dashboard',
318
+ errorMessage: e.message,
319
+ errorStack: e.stack,
320
+ errorData: {
321
+ caller: 'useDashboards',
322
+ function: 'createDashboard',
323
+ },
324
+ });
294
325
  }
295
326
  };
296
327
  const updateDashboard = async (name, { newName, filters, dateFilter, customFilters, tenantKeys, }) => {
@@ -324,6 +355,16 @@ export const useDashboards = () => {
324
355
  task: 'edit-dashboard',
325
356
  metadata: body,
326
357
  });
358
+ eventTracking?.logEvent?.('update-dashboard', {
359
+ dashboardName: updated.data.dashboard.name,
360
+ dashboardId: updated.data.dashboard.dashboardId,
361
+ });
362
+ if (filters.length > 0 || dateFilter) {
363
+ eventTracking?.logEvent?.('update-dashboard-filters', {
364
+ dashboardName: name,
365
+ numFilters: filters.length + (dateFilter ? 1 : 0),
366
+ });
367
+ }
327
368
  dashboardConfigDispatch({
328
369
  type: 'UPDATE_DASHBOARD',
329
370
  id: updated.data.dashboard.name,
@@ -475,6 +516,17 @@ export const useDashboards = () => {
475
516
  }
476
517
  catch (e) {
477
518
  console.error(e);
519
+ eventTracking?.logError?.({
520
+ type: 'bug', // TODO: determine type
521
+ severity: 'high',
522
+ message: 'Error updating dashboard',
523
+ errorMessage: e.message,
524
+ errorStack: e.stack,
525
+ errorData: {
526
+ caller: 'useDashboards',
527
+ function: 'updateDashboard',
528
+ },
529
+ });
478
530
  }
479
531
  };
480
532
  const deleteDashboard = async (name) => {
@@ -513,6 +565,12 @@ export const useDashboard = (dashboardName) => {
513
565
  const { tenants, flags } = useContext(TenantContext);
514
566
  const { getToken } = useContext(FetchContext);
515
567
  const { customReportFilters } = useContext(ReportFiltersContext);
568
+ const { eventTracking } = useContext(EventTrackingContext);
569
+ const customFiltersRef = useRef(customReportFilters);
570
+ // Keep ref updated with latest filters
571
+ useEffect(() => {
572
+ customFiltersRef.current = customReportFilters;
573
+ }, [customReportFilters]);
516
574
  // If useDashboard is being used before Dashboard Context is set, we need to
517
575
  // actively load the dashboard
518
576
  useEffect(() => {
@@ -635,6 +693,20 @@ export const useDashboard = (dashboardName) => {
635
693
  const newDashboardFilters = applyDashboardFilters(dashboardFilters);
636
694
  fetchReports(newCustomFilters, newDashboardFilters);
637
695
  };
696
+ // In case useDashboardReport set initial custom filters
697
+ const waitForCustomFilters = async (reportId) => {
698
+ let attempts = 0;
699
+ const maxAttempts = 10; // Prevent infinite loops
700
+ while (attempts < maxAttempts) {
701
+ const filters = customFiltersRef.current[reportId];
702
+ if (filters && filters.length > 0) {
703
+ return filters;
704
+ }
705
+ await new Promise((resolve) => setTimeout(resolve, 100)); // Wait 100ms between checks
706
+ attempts++;
707
+ }
708
+ return [];
709
+ };
638
710
  const fetchReports = async (customFilters, dashboardFilters) => {
639
711
  if (!client || !sections)
640
712
  return;
@@ -645,7 +717,7 @@ export const useDashboard = (dashboardName) => {
645
717
  id: reportId,
646
718
  data: true,
647
719
  });
648
- const customReportFiltersArray = customReportFilters[reportId] ?? [];
720
+ const customReportFiltersArray = await waitForCustomFilters(reportId);
649
721
  const { report, error } = await fetchReport({
650
722
  reportId,
651
723
  client,
@@ -655,6 +727,7 @@ export const useDashboard = (dashboardName) => {
655
727
  .concat(customFilters)
656
728
  .concat(customReportFiltersArray),
657
729
  getToken,
730
+ eventTracking,
658
731
  });
659
732
  if (error) {
660
733
  console.error(error);
@@ -681,20 +754,31 @@ export const useDashboard = (dashboardName) => {
681
754
  };
682
755
  };
683
756
  // useDashboard accompanying hook
684
- export const useDashboardReport = (reportId) => {
757
+ export const useDashboardReport = (reportId, config) => {
685
758
  const { reports, reportsLoadingState, reportsDispatch, reportsLoadingStateDispatch, } = useContext(ReportsContext);
686
759
  const { dashboardFilters } = useContext(DashboardFiltersContext);
687
760
  const { tenants, flags } = useContext(TenantContext);
688
761
  const [client] = useContext(ClientContext);
689
762
  const { getToken } = useContext(FetchContext);
763
+ const { eventTracking } = useContext(EventTrackingContext);
690
764
  const { customReportFiltersDispatch } = useContext(ReportFiltersContext);
691
765
  const { dashboardCustomFilters } = useContext(DashboardFiltersContext);
692
766
  const { data: dashboardData, dashboardFilters: dashboardFiltersInternal, reload: reloadDashboard, } = useDashboardInternal(reports[reportId]?.dashboardName ?? null);
767
+ // Add initial custom filters to context
768
+ useEffect(() => {
769
+ if (config?.initialFilters) {
770
+ customReportFiltersDispatch({
771
+ type: 'ADD_CUSTOM_REPORT_FILTERS',
772
+ reportId,
773
+ data: config.initialFilters.map(convertCustomFilter),
774
+ });
775
+ }
776
+ }, []);
693
777
  const processedReport = useMemo(() => {
694
778
  if (!reports[reportId])
695
779
  return null;
696
780
  const dashboardName = reports[reportId].dashboardName;
697
- return convertInternalReportToReport(mergeComparisonRange(reports[reportId]), Object.values(dashboardFilters[dashboardName] ?? {}).map((f) => f.filter), 'useDashboardReport');
781
+ return convertInternalReportToReport(mergeComparisonRange(reports[reportId]), Object.values(dashboardFilters[dashboardName] ?? {}).map((f) => f.filter), eventTracking, 'useDashboardReport');
698
782
  }, [reports, reportId, dashboardFilters]);
699
783
  const setReportFilters = (filters) => {
700
784
  updateReport(filters);
@@ -725,6 +809,7 @@ export const useDashboardReport = (reportId) => {
725
809
  flags,
726
810
  filters: requestFilters,
727
811
  getToken,
812
+ eventTracking,
728
813
  });
729
814
  if (error) {
730
815
  console.error(error);
@@ -1 +1 @@
1
- {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAkE/C,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,cACT,MAAM,mEAMd;IACD,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,CAAC,OAAO,CAAC;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,KACA;IACD,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,YAAY,EAAE,OAAO,CAAC;CA2RvB,CAAC;AAEF,UAAU,aAAa;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
1
+ {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAqE/C,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,cACT,MAAM,mEAMd;IACD,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,CAAC,OAAO,CAAC;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,KACA;IACD,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,YAAY,EAAE,OAAO,CAAC;CA+RvB,CAAC;AAEF,UAAU,aAAa;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { downloadCSV } from '../utils/csv';
3
3
  import { useContext, useMemo, useState } from 'react';
4
4
  import { parseFetchResponse, quillFetch } from '../utils/dataFetcher';
5
- import { ClientContext, DashboardFiltersContext, FetchContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, } from '../Context';
5
+ import { ClientContext, DashboardFiltersContext, EventTrackingContext, FetchContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, } from '../Context';
6
6
  import { cleanDashboardItem } from '../utils/dashboard';
7
7
  import { createRoot } from 'react-dom/client';
8
8
  import { flushSync } from 'react-dom';
@@ -10,7 +10,7 @@ import { fetchReport } from '../utils/report';
10
10
  import jsPDF from 'jspdf';
11
11
  import { quillFormat } from '../utils/valueFormatter';
12
12
  import { useAllReports } from './useDashboard';
13
- async function getExportData(client, dashboardFilters, reportId, getToken, tenants, flags, customFields) {
13
+ async function getExportData(client, dashboardFilters, reportId, getToken, eventTracking, tenants, flags, customFields) {
14
14
  const minimalFilters = Object.values(dashboardFilters).length
15
15
  ? Object.values(dashboardFilters).map((filter) => {
16
16
  const newFilter = { ...filter };
@@ -45,6 +45,7 @@ async function getExportData(client, dashboardFilters, reportId, getToken, tenan
45
45
  customFields,
46
46
  getToken,
47
47
  tenants,
48
+ eventTracking,
48
49
  });
49
50
  if (cleanedReport.chartType === 'table' && cleanedReport.pivot) {
50
51
  cleanedReport.columns = cleanedReport.yAxisFields;
@@ -62,6 +63,7 @@ sectionField, } = {}) => {
62
63
  const [schemaData] = useContext(SchemaDataContext);
63
64
  const { tenants, flags } = useContext(TenantContext);
64
65
  const { getToken } = useContext(FetchContext);
66
+ const { eventTracking } = useContext(EventTrackingContext);
65
67
  const specificDashboardFilters = useMemo(() => {
66
68
  if (!reportId) {
67
69
  return [];
@@ -98,12 +100,14 @@ sectionField, } = {}) => {
98
100
  }
99
101
  setIsCSVLoading(true);
100
102
  const resp = await getExportData(client, specificReportFilters.length > 0
101
- ? specificReportFilters.concat(customReportFilters[reportId] ??
102
- dashboardCustomFilters[dashboardReport?.dashboardName ?? ''] ??
103
- [])
104
- : specificDashboardFilters.concat(customReportFilters[reportId] ??
105
- dashboardCustomFilters[dashboardReport?.dashboardName ?? ''] ??
106
- []), reportId, getToken, tenants, flags, schemaData?.customFields);
103
+ ? specificReportFilters.concat([
104
+ ...(customReportFilters[reportId] ?? []),
105
+ ...(dashboardCustomFilters[dashboardReport?.dashboardName ?? ''] ?? []),
106
+ ])
107
+ : specificDashboardFilters.concat([
108
+ ...(customReportFilters[reportId] ?? []),
109
+ ...(dashboardCustomFilters[dashboardReport?.dashboardName ?? ''] ?? []),
110
+ ]), reportId, getToken, eventTracking, tenants, flags, schemaData?.customFields);
107
111
  downloadCSV({
108
112
  rows: resp.pivot && resp.pivotRows && downloadOptions?.usePivotRows
109
113
  ? resp.pivotRows
@@ -126,10 +130,14 @@ sectionField, } = {}) => {
126
130
  tenants,
127
131
  flags,
128
132
  useReportTask: true,
129
- filters: filters.concat((customReportFilters[reportId] ??
130
- dashboardCustomFilters[dashboardReport?.dashboardName ?? ''])),
133
+ filters: filters.concat([
134
+ ...(customReportFilters[reportId] ?? []),
135
+ ...(dashboardCustomFilters[dashboardReport?.dashboardName ?? ''] ??
136
+ []),
137
+ ]),
131
138
  customFields: schemaData?.customFields,
132
139
  getToken,
140
+ eventTracking,
133
141
  });
134
142
  if (error) {
135
143
  console.error(error);
@@ -0,0 +1,13 @@
1
+ type LongLoadingMeta = {
2
+ origin: string;
3
+ loadDescription: string;
4
+ expectedLoadTime?: number;
5
+ abnormalLoadTime?: number;
6
+ };
7
+ type LoadingState = {
8
+ isLongLoading: boolean;
9
+ isAbnormalLoading: boolean;
10
+ };
11
+ export declare function useLongLoading(isLoading: boolean, meta: LongLoadingMeta): LoadingState;
12
+ export {};
13
+ //# sourceMappingURL=useLongLoading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLongLoading.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLongLoading.tsx"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,cAAc,CAC5B,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,eAAe,GACpB,YAAY,CAoEd"}
@@ -0,0 +1,64 @@
1
+ import { useContext, useEffect, useState } from 'react';
2
+ import { EventTrackingContext } from '../Context';
3
+ export function useLongLoading(isLoading, meta) {
4
+ const { origin, expectedLoadTime = 5000, abnormalLoadTime = 15000, loadDescription, } = meta;
5
+ const [isLongLoading, setIsLongLoading] = useState(false);
6
+ const [isAbnormalLoading, setIsAbnormalLoading] = useState(false);
7
+ const { eventTracking } = useContext(EventTrackingContext);
8
+ useEffect(() => {
9
+ let longTimer = null;
10
+ let abnormalTimer = null;
11
+ if (isLoading) {
12
+ // Set timer for long loading
13
+ longTimer = setTimeout(() => {
14
+ setIsLongLoading(true);
15
+ eventTracking?.logError?.({
16
+ type: 'timeout',
17
+ severity: 'medium',
18
+ message: `${origin} loading is taking longer than expected`,
19
+ errorData: {
20
+ loadDescription,
21
+ expectedLoadTime,
22
+ currentTime: Date.now(),
23
+ },
24
+ });
25
+ // Set timer for abnormal loading
26
+ abnormalTimer = setTimeout(() => {
27
+ setIsAbnormalLoading(true);
28
+ eventTracking?.logError?.({
29
+ type: 'timeout',
30
+ severity: 'high',
31
+ message: `${origin} loading is taking abnormally long`,
32
+ errorData: {
33
+ loadDescription,
34
+ expectedLoadTime,
35
+ abnormalLoadTime,
36
+ currentTime: Date.now(),
37
+ },
38
+ });
39
+ }, abnormalLoadTime - expectedLoadTime);
40
+ }, expectedLoadTime);
41
+ }
42
+ else {
43
+ setIsLongLoading(false);
44
+ setIsAbnormalLoading(false);
45
+ }
46
+ return () => {
47
+ if (longTimer)
48
+ clearTimeout(longTimer);
49
+ if (abnormalTimer)
50
+ clearTimeout(abnormalTimer);
51
+ };
52
+ }, [
53
+ isLoading,
54
+ origin,
55
+ expectedLoadTime,
56
+ abnormalLoadTime,
57
+ loadDescription,
58
+ eventTracking,
59
+ ]);
60
+ return {
61
+ isLongLoading,
62
+ isAbnormalLoading,
63
+ };
64
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useQuill.d.ts","sourceRoot":"","sources":["../../../src/hooks/useQuill.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,WAAW,EAIZ,MAAM,yBAAyB,CAAC;AAKjC,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,cACR,MAAM,eACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,KAC3D;IACD,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,EACL,CAAC,CAAC,QAAQ,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC,GAC/C,CAAC,MAAM,SAAS,CAAC,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;CAsO1B,CAAC"}
1
+ {"version":3,"file":"useQuill.d.ts","sourceRoot":"","sources":["../../../src/hooks/useQuill.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,WAAW,EAIZ,MAAM,yBAAyB,CAAC;AAKjC,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,cACR,MAAM,eACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,KAC3D;IACD,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,EACL,CAAC,CAAC,QAAQ,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC,GAC/C,CAAC,MAAM,SAAS,CAAC,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;CA+P1B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { useContext, useEffect, useMemo, useState } from 'react';
2
- import { ClientContext, DashboardFiltersContext, FetchContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, } from '../Context';
2
+ import { ClientContext, DashboardFiltersContext, EventTrackingContext, FetchContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, } from '../Context';
3
3
  import { convertInternalReportToReport } from '../utils/report';
4
4
  import { shouldFetchMore } from '../utils/paginationProcessing';
5
5
  import { fetchResultsByReport, } from '../utils/tableProcessing';
@@ -23,12 +23,13 @@ export const useQuill = (reportId, pagination) => {
23
23
  const [schemaData] = useContext(SchemaDataContext);
24
24
  const [client, isClientLoading] = useContext(ClientContext);
25
25
  const { tenants } = useContext(TenantContext);
26
+ const { eventTracking } = useContext(EventTrackingContext);
26
27
  const [loading, setLoading] = useState(true);
27
28
  const [error, setError] = useState(undefined);
28
29
  const [previousPage, setPreviousPage] = useState(0);
29
30
  const processedReport = useMemo(() => {
30
31
  return reportId && allReportsById[reportId]
31
- ? convertInternalReportToReport(mergeComparisonRange(allReportsById[reportId]), specificReportFilters ?? [], 'useQuill')
32
+ ? convertInternalReportToReport(mergeComparisonRange(allReportsById[reportId]), specificReportFilters ?? [], eventTracking, 'useQuill')
32
33
  : undefined;
33
34
  }, [reportId, reportId && allReportsById[reportId], specificReportFilters]);
34
35
  const [additionalProcessing, setAdditionProcessing] = useState(pagination
@@ -95,6 +96,7 @@ export const useQuill = (reportId, pagination) => {
95
96
  filters: reportFilters[reportId],
96
97
  customFields: schemaData.customFields,
97
98
  getToken,
99
+ eventTracking,
98
100
  });
99
101
  if (paginatedRows.error) {
100
102
  throw new Error('Error fetching chart');
@@ -114,6 +116,17 @@ export const useQuill = (reportId, pagination) => {
114
116
  }
115
117
  catch (e) {
116
118
  console.log(e);
119
+ eventTracking?.logError?.({
120
+ type: 'bug', // TODO: determine type
121
+ severity: 'high',
122
+ message: 'Error fetching report',
123
+ errorMessage: e.message,
124
+ errorStack: e.stack,
125
+ errorData: {
126
+ caller: 'useQuill',
127
+ function: 'updateTableRows',
128
+ },
129
+ });
117
130
  }
118
131
  finally {
119
132
  setTimeout(() => {
@@ -156,6 +169,17 @@ export const useQuill = (reportId, pagination) => {
156
169
  }
157
170
  catch (error) {
158
171
  setError(error.message ?? 'Error fetching report');
172
+ eventTracking?.logError?.({
173
+ type: 'bug', // TODO: determine type
174
+ severity: 'high',
175
+ message: 'Error fetching report',
176
+ errorMessage: error.message,
177
+ errorStack: error.stack,
178
+ errorData: {
179
+ caller: 'useQuill',
180
+ function: 'fetchReportHelper',
181
+ },
182
+ });
159
183
  }
160
184
  finally {
161
185
  setLoading(false);