@quillsql/react 2.14.16 → 2.15.0

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 (253) 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 +112 -18
  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 +160 -33
  11. package/dist/cjs/Dashboard.d.ts.map +1 -1
  12. package/dist/cjs/Dashboard.js +99 -19
  13. package/dist/cjs/QuillProvider.d.ts +38 -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 +7 -2
  17. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  18. package/dist/cjs/ReportBuilder.js +104 -1271
  19. package/dist/cjs/SQLEditor.d.ts +9 -2
  20. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  21. package/dist/cjs/SQLEditor.js +67 -10
  22. package/dist/cjs/Table.d.ts.map +1 -1
  23. package/dist/cjs/Table.js +12 -0
  24. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  25. package/dist/cjs/components/Chart/InternalChart.js +24 -1
  26. package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  27. package/dist/cjs/components/Dashboard/DashboardTemplate.js +2 -1
  28. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  29. package/dist/cjs/components/Dashboard/DataLoader.js +73 -2
  30. package/dist/cjs/components/Dashboard/util.d.ts +2 -1
  31. package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
  32. package/dist/cjs/components/Dashboard/util.js +12 -1
  33. package/dist/cjs/components/QuillTable.d.ts +2 -1
  34. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  35. package/dist/cjs/components/QuillTable.js +2 -2
  36. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +2 -1
  37. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  38. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +28 -3
  39. package/dist/cjs/components/ReportBuilder/ColumnComponent.d.ts +49 -0
  40. package/dist/cjs/components/ReportBuilder/ColumnComponent.d.ts.map +1 -0
  41. package/dist/cjs/components/ReportBuilder/ColumnComponent.js +46 -0
  42. package/dist/cjs/components/ReportBuilder/FilterComponent.d.ts +65 -0
  43. package/dist/cjs/components/ReportBuilder/FilterComponent.d.ts.map +1 -0
  44. package/dist/cjs/components/ReportBuilder/FilterComponent.js +51 -0
  45. package/dist/cjs/components/ReportBuilder/LimitComponent.d.ts +42 -0
  46. package/dist/cjs/components/ReportBuilder/LimitComponent.d.ts.map +1 -0
  47. package/dist/cjs/components/ReportBuilder/LimitComponent.js +50 -0
  48. package/dist/cjs/components/ReportBuilder/PivotComponent.d.ts +66 -0
  49. package/dist/cjs/components/ReportBuilder/PivotComponent.d.ts.map +1 -0
  50. package/dist/cjs/components/ReportBuilder/PivotComponent.js +47 -0
  51. package/dist/cjs/components/ReportBuilder/SaveReport.d.ts +162 -0
  52. package/dist/cjs/components/ReportBuilder/SaveReport.d.ts.map +1 -0
  53. package/dist/cjs/components/ReportBuilder/SaveReport.js +31 -0
  54. package/dist/cjs/components/ReportBuilder/SortComponent.d.ts +42 -0
  55. package/dist/cjs/components/ReportBuilder/SortComponent.d.ts.map +1 -0
  56. package/dist/cjs/components/ReportBuilder/SortComponent.js +50 -0
  57. package/dist/cjs/components/ReportBuilder/TableComponent.d.ts +28 -0
  58. package/dist/cjs/components/ReportBuilder/TableComponent.d.ts.map +1 -0
  59. package/dist/cjs/components/ReportBuilder/TableComponent.js +24 -0
  60. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  61. package/dist/cjs/components/ReportBuilder/ui.js +3 -1
  62. package/dist/cjs/components/UiComponents.d.ts +5 -2
  63. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  64. package/dist/cjs/components/UiComponents.js +7 -5
  65. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  66. package/dist/cjs/hooks/useAskQuill.js +38 -0
  67. package/dist/cjs/hooks/useDashboard.d.ts +1 -1
  68. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  69. package/dist/cjs/hooks/useDashboard.js +62 -6
  70. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  71. package/dist/cjs/hooks/useExport.js +5 -2
  72. package/dist/cjs/hooks/useLongLoading.d.ts +13 -0
  73. package/dist/cjs/hooks/useLongLoading.d.ts.map +1 -0
  74. package/dist/cjs/hooks/useLongLoading.js +67 -0
  75. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  76. package/dist/cjs/hooks/useQuill.js +25 -1
  77. package/dist/cjs/hooks/useReportBuilder.d.ts +178 -0
  78. package/dist/cjs/hooks/useReportBuilder.d.ts.map +1 -0
  79. package/dist/cjs/hooks/useReportBuilder.js +1495 -0
  80. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  81. package/dist/cjs/hooks/useVirtualTables.js +27 -2
  82. package/dist/cjs/index.d.ts +11 -0
  83. package/dist/cjs/index.d.ts.map +1 -1
  84. package/dist/cjs/index.js +17 -1
  85. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +14 -1
  86. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  87. package/dist/cjs/internals/ReportBuilder/PivotForm.js +86 -3
  88. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  89. package/dist/cjs/internals/ReportBuilder/PivotList.js +3 -3
  90. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +18 -2
  91. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  92. package/dist/cjs/internals/ReportBuilder/PivotModal.js +438 -147
  93. package/dist/cjs/models/Filter.d.ts +1 -1
  94. package/dist/cjs/models/Filter.d.ts.map +1 -1
  95. package/dist/cjs/models/Filter.js +3 -3
  96. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  97. package/dist/cjs/utils/astFilterProcessing.js +25 -4
  98. package/dist/cjs/utils/astProcessing.d.ts +4 -2
  99. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  100. package/dist/cjs/utils/astProcessing.js +25 -2
  101. package/dist/cjs/utils/client.d.ts +2 -1
  102. package/dist/cjs/utils/client.d.ts.map +1 -1
  103. package/dist/cjs/utils/client.js +12 -1
  104. package/dist/cjs/utils/dashboard.d.ts +3 -1
  105. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  106. package/dist/cjs/utils/dashboard.js +44 -3
  107. package/dist/cjs/utils/filterProcessing.d.ts +2 -1
  108. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  109. package/dist/cjs/utils/filterProcessing.js +12 -1
  110. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  111. package/dist/cjs/utils/pivotConstructor.js +15 -10
  112. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  113. package/dist/cjs/utils/pivotProcessing.js +13 -3
  114. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  115. package/dist/cjs/utils/queryConstructor.js +30 -16
  116. package/dist/cjs/utils/report.d.ts +10 -5
  117. package/dist/cjs/utils/report.d.ts.map +1 -1
  118. package/dist/cjs/utils/report.js +55 -7
  119. package/dist/cjs/utils/reportBuilder.d.ts.map +1 -1
  120. package/dist/cjs/utils/reportBuilder.js +5 -2
  121. package/dist/cjs/utils/schema.d.ts +5 -2
  122. package/dist/cjs/utils/schema.d.ts.map +1 -1
  123. package/dist/cjs/utils/schema.js +14 -2
  124. package/dist/cjs/utils/tableProcessing.d.ts +17 -10
  125. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  126. package/dist/cjs/utils/tableProcessing.js +99 -17
  127. package/dist/esm/Chart.d.ts.map +1 -1
  128. package/dist/esm/Chart.js +13 -1
  129. package/dist/esm/ChartBuilder.d.ts +3 -2
  130. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  131. package/dist/esm/ChartBuilder.js +114 -20
  132. package/dist/esm/ChartEditor.d.ts.map +1 -1
  133. package/dist/esm/ChartEditor.js +3 -1
  134. package/dist/esm/Context.d.ts +6 -2
  135. package/dist/esm/Context.d.ts.map +1 -1
  136. package/dist/esm/Context.js +159 -32
  137. package/dist/esm/Dashboard.d.ts.map +1 -1
  138. package/dist/esm/Dashboard.js +100 -20
  139. package/dist/esm/QuillProvider.d.ts +38 -1
  140. package/dist/esm/QuillProvider.d.ts.map +1 -1
  141. package/dist/esm/QuillProvider.js +2 -2
  142. package/dist/esm/ReportBuilder.d.ts +7 -2
  143. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  144. package/dist/esm/ReportBuilder.js +107 -1271
  145. package/dist/esm/SQLEditor.d.ts +9 -2
  146. package/dist/esm/SQLEditor.d.ts.map +1 -1
  147. package/dist/esm/SQLEditor.js +68 -11
  148. package/dist/esm/Table.d.ts.map +1 -1
  149. package/dist/esm/Table.js +13 -1
  150. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  151. package/dist/esm/components/Chart/InternalChart.js +25 -2
  152. package/dist/esm/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  153. package/dist/esm/components/Dashboard/DashboardTemplate.js +3 -2
  154. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  155. package/dist/esm/components/Dashboard/DataLoader.js +74 -3
  156. package/dist/esm/components/Dashboard/util.d.ts +2 -1
  157. package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
  158. package/dist/esm/components/Dashboard/util.js +12 -1
  159. package/dist/esm/components/QuillTable.d.ts +2 -1
  160. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  161. package/dist/esm/components/QuillTable.js +2 -2
  162. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +2 -1
  163. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  164. package/dist/esm/components/ReportBuilder/AddColumnModal.js +29 -4
  165. package/dist/esm/components/ReportBuilder/ColumnComponent.d.ts +49 -0
  166. package/dist/esm/components/ReportBuilder/ColumnComponent.d.ts.map +1 -0
  167. package/dist/esm/components/ReportBuilder/ColumnComponent.js +39 -0
  168. package/dist/esm/components/ReportBuilder/FilterComponent.d.ts +65 -0
  169. package/dist/esm/components/ReportBuilder/FilterComponent.d.ts.map +1 -0
  170. package/dist/esm/components/ReportBuilder/FilterComponent.js +44 -0
  171. package/dist/esm/components/ReportBuilder/LimitComponent.d.ts +42 -0
  172. package/dist/esm/components/ReportBuilder/LimitComponent.d.ts.map +1 -0
  173. package/dist/esm/components/ReportBuilder/LimitComponent.js +46 -0
  174. package/dist/esm/components/ReportBuilder/PivotComponent.d.ts +66 -0
  175. package/dist/esm/components/ReportBuilder/PivotComponent.d.ts.map +1 -0
  176. package/dist/esm/components/ReportBuilder/PivotComponent.js +40 -0
  177. package/dist/esm/components/ReportBuilder/SaveReport.d.ts +162 -0
  178. package/dist/esm/components/ReportBuilder/SaveReport.d.ts.map +1 -0
  179. package/dist/esm/components/ReportBuilder/SaveReport.js +31 -0
  180. package/dist/esm/components/ReportBuilder/SortComponent.d.ts +42 -0
  181. package/dist/esm/components/ReportBuilder/SortComponent.d.ts.map +1 -0
  182. package/dist/esm/components/ReportBuilder/SortComponent.js +46 -0
  183. package/dist/esm/components/ReportBuilder/TableComponent.d.ts +28 -0
  184. package/dist/esm/components/ReportBuilder/TableComponent.d.ts.map +1 -0
  185. package/dist/esm/components/ReportBuilder/TableComponent.js +20 -0
  186. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  187. package/dist/esm/components/ReportBuilder/ui.js +4 -2
  188. package/dist/esm/components/UiComponents.d.ts +5 -2
  189. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  190. package/dist/esm/components/UiComponents.js +7 -5
  191. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  192. package/dist/esm/hooks/useAskQuill.js +39 -1
  193. package/dist/esm/hooks/useDashboard.d.ts +1 -1
  194. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  195. package/dist/esm/hooks/useDashboard.js +63 -7
  196. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  197. package/dist/esm/hooks/useExport.js +6 -3
  198. package/dist/esm/hooks/useLongLoading.d.ts +13 -0
  199. package/dist/esm/hooks/useLongLoading.d.ts.map +1 -0
  200. package/dist/esm/hooks/useLongLoading.js +64 -0
  201. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  202. package/dist/esm/hooks/useQuill.js +26 -2
  203. package/dist/esm/hooks/useReportBuilder.d.ts +178 -0
  204. package/dist/esm/hooks/useReportBuilder.d.ts.map +1 -0
  205. package/dist/esm/hooks/useReportBuilder.js +1490 -0
  206. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  207. package/dist/esm/hooks/useVirtualTables.js +28 -3
  208. package/dist/esm/index.d.ts +11 -0
  209. package/dist/esm/index.d.ts.map +1 -1
  210. package/dist/esm/index.js +8 -0
  211. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +14 -1
  212. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  213. package/dist/esm/internals/ReportBuilder/PivotForm.js +87 -4
  214. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  215. package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
  216. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +18 -2
  217. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  218. package/dist/esm/internals/ReportBuilder/PivotModal.js +440 -149
  219. package/dist/esm/models/Filter.d.ts +1 -1
  220. package/dist/esm/models/Filter.d.ts.map +1 -1
  221. package/dist/esm/models/Filter.js +3 -3
  222. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  223. package/dist/esm/utils/astFilterProcessing.js +25 -4
  224. package/dist/esm/utils/astProcessing.d.ts +4 -2
  225. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  226. package/dist/esm/utils/astProcessing.js +25 -2
  227. package/dist/esm/utils/client.d.ts +2 -1
  228. package/dist/esm/utils/client.d.ts.map +1 -1
  229. package/dist/esm/utils/client.js +12 -1
  230. package/dist/esm/utils/dashboard.d.ts +3 -1
  231. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  232. package/dist/esm/utils/dashboard.js +44 -3
  233. package/dist/esm/utils/filterProcessing.d.ts +2 -1
  234. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  235. package/dist/esm/utils/filterProcessing.js +12 -1
  236. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  237. package/dist/esm/utils/pivotConstructor.js +15 -10
  238. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  239. package/dist/esm/utils/pivotProcessing.js +13 -3
  240. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  241. package/dist/esm/utils/queryConstructor.js +30 -16
  242. package/dist/esm/utils/report.d.ts +10 -5
  243. package/dist/esm/utils/report.d.ts.map +1 -1
  244. package/dist/esm/utils/report.js +55 -7
  245. package/dist/esm/utils/reportBuilder.d.ts.map +1 -1
  246. package/dist/esm/utils/reportBuilder.js +5 -2
  247. package/dist/esm/utils/schema.d.ts +5 -2
  248. package/dist/esm/utils/schema.d.ts.map +1 -1
  249. package/dist/esm/utils/schema.js +14 -2
  250. package/dist/esm/utils/tableProcessing.d.ts +17 -10
  251. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  252. package/dist/esm/utils/tableProcessing.js +99 -17
  253. package/package.json +1 -1
@@ -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);
@@ -68,7 +68,7 @@ export declare const useDashboard: (dashboardName: string) => {
68
68
  sections: Record<string, QuillReport[]> | null;
69
69
  filters: DashboardFilter[];
70
70
  applyFilters: (filters: Array<{
71
- id: string;
71
+ label: string;
72
72
  value: string | string[] | {
73
73
  startDate?: Date;
74
74
  endDate?: Date;
@@ -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;CAyPX,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;CA4I1B,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,KAAK,EAAE,MAAM,CAAC;QACd,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,7 @@ 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);
516
569
  const customFiltersRef = useRef(customReportFilters);
517
570
  // Keep ref updated with latest filters
518
571
  useEffect(() => {
@@ -550,7 +603,7 @@ export const useDashboard = (dashboardName) => {
550
603
  }, [fetchedInitialReports, data, dashboardFilters]);
551
604
  const applyDashboardFilters = (filtersToUpdate) => {
552
605
  const newFilters = (dashboardFilters ?? []).map((f) => {
553
- const update = filtersToUpdate.find((u) => u.id === f.label);
606
+ const update = filtersToUpdate.find((u) => u.label === f.label);
554
607
  if (!update)
555
608
  return f;
556
609
  if (f.filterType === InternalDashboardFilterType.String) {
@@ -631,7 +684,7 @@ export const useDashboard = (dashboardName) => {
631
684
  return f && typeof f === 'object' && 'filterType' in f && !('id' in f);
632
685
  };
633
686
  const isDashboardFilter = (f) => {
634
- return f && typeof f === 'object' && 'id' in f;
687
+ return f && typeof f === 'object' && 'label' in f;
635
688
  };
636
689
  const applyFilters = (filters) => {
637
690
  const dashboardFilters = filters.filter(isDashboardFilter);
@@ -674,6 +727,7 @@ export const useDashboard = (dashboardName) => {
674
727
  .concat(customFilters)
675
728
  .concat(customReportFiltersArray),
676
729
  getToken,
730
+ eventTracking,
677
731
  });
678
732
  if (error) {
679
733
  console.error(error);
@@ -706,6 +760,7 @@ export const useDashboardReport = (reportId, config) => {
706
760
  const { tenants, flags } = useContext(TenantContext);
707
761
  const [client] = useContext(ClientContext);
708
762
  const { getToken } = useContext(FetchContext);
763
+ const { eventTracking } = useContext(EventTrackingContext);
709
764
  const { customReportFiltersDispatch } = useContext(ReportFiltersContext);
710
765
  const { dashboardCustomFilters } = useContext(DashboardFiltersContext);
711
766
  const { data: dashboardData, dashboardFilters: dashboardFiltersInternal, reload: reloadDashboard, } = useDashboardInternal(reports[reportId]?.dashboardName ?? null);
@@ -723,7 +778,7 @@ export const useDashboardReport = (reportId, config) => {
723
778
  if (!reports[reportId])
724
779
  return null;
725
780
  const dashboardName = reports[reportId].dashboardName;
726
- 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');
727
782
  }, [reports, reportId, dashboardFilters]);
728
783
  const setReportFilters = (filters) => {
729
784
  updateReport(filters);
@@ -754,6 +809,7 @@ export const useDashboardReport = (reportId, config) => {
754
809
  flags,
755
810
  filters: requestFilters,
756
811
  getToken,
812
+ eventTracking,
757
813
  });
758
814
  if (error) {
759
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;CA4RvB,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 [];
@@ -105,7 +107,7 @@ sectionField, } = {}) => {
105
107
  : specificDashboardFilters.concat([
106
108
  ...(customReportFilters[reportId] ?? []),
107
109
  ...(dashboardCustomFilters[dashboardReport?.dashboardName ?? ''] ?? []),
108
- ]), reportId, getToken, tenants, flags, schemaData?.customFields);
110
+ ]), reportId, getToken, eventTracking, tenants, flags, schemaData?.customFields);
109
111
  downloadCSV({
110
112
  rows: resp.pivot && resp.pivotRows && downloadOptions?.usePivotRows
111
113
  ? resp.pivotRows
@@ -135,6 +137,7 @@ sectionField, } = {}) => {
135
137
  ]),
136
138
  customFields: schemaData?.customFields,
137
139
  getToken,
140
+ eventTracking,
138
141
  });
139
142
  if (error) {
140
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);