@quillsql/react 2.13.48 → 2.13.49

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 (279) hide show
  1. package/dist/cjs/Chart.d.ts +2 -2
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +28 -41
  4. package/dist/cjs/ChartBuilder.d.ts +2 -2
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +157 -134
  7. package/dist/cjs/ChartEditor.d.ts +2 -2
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +3 -1
  10. package/dist/cjs/Context.d.ts +10 -3
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +324 -249
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +10 -23
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +0 -3
  16. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +24 -10
  17. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  18. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +472 -96
  19. package/dist/cjs/QuillProvider.d.ts +3 -1
  20. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  21. package/dist/cjs/QuillProvider.js +2 -2
  22. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  23. package/dist/cjs/ReportBuilder.js +19 -10
  24. package/dist/cjs/SQLEditor.d.ts +1 -1
  25. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  26. package/dist/cjs/SQLEditor.js +50 -16
  27. package/dist/cjs/Table.d.ts.map +1 -1
  28. package/dist/cjs/Table.js +20 -7
  29. package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
  30. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  31. package/dist/cjs/components/Chart/BarChart.js +2 -1
  32. package/dist/cjs/components/Chart/CustomReferenceLine.d.ts +1 -1
  33. package/dist/cjs/components/Chart/CustomReferenceLine.d.ts.map +1 -1
  34. package/dist/cjs/components/Chart/CustomReferenceLine.js +7 -6
  35. package/dist/cjs/components/Chart/GaugeChart.d.ts +1 -1
  36. package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -1
  37. package/dist/cjs/components/Chart/GaugeChart.js +62 -35
  38. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  39. package/dist/cjs/components/Chart/InternalChart.js +30 -33
  40. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  41. package/dist/cjs/components/Chart/LineChart.js +3 -1
  42. package/dist/cjs/components/Chart/MapChart.d.ts +3 -3
  43. package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -1
  44. package/dist/cjs/components/Chart/MapChart.js +62 -34
  45. package/dist/cjs/components/Chart/PieChart.d.ts +3 -1
  46. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  47. package/dist/cjs/components/Chart/PieChart.js +80 -39
  48. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  49. package/dist/cjs/components/Dashboard/DashboardFilter.js +4 -20
  50. package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  51. package/dist/cjs/components/Dashboard/DashboardTemplate.js +2 -1
  52. package/dist/cjs/components/Dashboard/DataLoader.d.ts +4 -4
  53. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  54. package/dist/cjs/components/Dashboard/DataLoader.js +31 -14
  55. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  56. package/dist/cjs/components/Dashboard/MetricComponent.js +2 -2
  57. package/dist/cjs/components/Dashboard/util.d.ts +1 -1
  58. package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
  59. package/dist/cjs/components/Dashboard/util.js +7 -6
  60. package/dist/cjs/components/QuillMultiSelectSectionList.d.ts.map +1 -1
  61. package/dist/cjs/components/QuillMultiSelectSectionList.js +32 -22
  62. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  63. package/dist/cjs/components/QuillMultiSelectWithCombo.js +186 -159
  64. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  65. package/dist/cjs/components/QuillSelect.js +83 -75
  66. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  67. package/dist/cjs/components/QuillSelectWithCombo.js +18 -11
  68. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
  69. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  70. package/dist/cjs/components/ReportBuilder/FilterStack.js +3 -4
  71. package/dist/cjs/components/ReportBuilder/ui.d.ts +2 -2
  72. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  73. package/dist/cjs/components/ReportBuilder/ui.js +4 -7
  74. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  75. package/dist/cjs/hooks/useAskQuill.js +5 -1
  76. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  77. package/dist/cjs/hooks/useDashboard.js +96 -58
  78. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  79. package/dist/cjs/hooks/useExport.js +23 -13
  80. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  81. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  82. package/dist/cjs/hooks/useQuill.js +8 -10
  83. package/dist/cjs/hooks/useReport.d.ts.map +1 -1
  84. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  85. package/dist/cjs/hooks/useVirtualTables.js +16 -22
  86. package/dist/cjs/index.d.ts +2 -2
  87. package/dist/cjs/index.d.ts.map +1 -1
  88. package/dist/cjs/index.js +2 -1
  89. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
  90. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  91. package/dist/cjs/internals/ReportBuilder/PivotModal.js +19 -7
  92. package/dist/cjs/models/Client.d.ts +0 -1
  93. package/dist/cjs/models/Client.d.ts.map +1 -1
  94. package/dist/cjs/models/Data.d.ts +20 -0
  95. package/dist/cjs/models/Data.d.ts.map +1 -0
  96. package/dist/cjs/models/Data.js +2 -0
  97. package/dist/cjs/models/Filter.d.ts +42 -4
  98. package/dist/cjs/models/Filter.d.ts.map +1 -1
  99. package/dist/cjs/models/Pivot.d.ts.map +1 -1
  100. package/dist/cjs/utils/astProcessing.d.ts +3 -2
  101. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  102. package/dist/cjs/utils/astProcessing.js +28 -37
  103. package/dist/cjs/utils/client.d.ts +3 -2
  104. package/dist/cjs/utils/client.d.ts.map +1 -1
  105. package/dist/cjs/utils/client.js +38 -39
  106. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  107. package/dist/cjs/utils/columnProcessing.js +14 -3
  108. package/dist/cjs/utils/constants.d.ts +1 -0
  109. package/dist/cjs/utils/constants.d.ts.map +1 -1
  110. package/dist/cjs/utils/constants.js +2 -1
  111. package/dist/cjs/utils/dashboard.d.ts +3 -2
  112. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  113. package/dist/cjs/utils/dashboard.js +30 -12
  114. package/dist/cjs/utils/dataFetcher.d.ts +8 -5
  115. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  116. package/dist/cjs/utils/dataFetcher.js +189 -65
  117. package/dist/cjs/utils/filterProcessing.d.ts +2 -1
  118. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  119. package/dist/cjs/utils/filterProcessing.js +24 -38
  120. package/dist/cjs/utils/getDomain.d.ts.map +1 -1
  121. package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
  122. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  123. package/dist/cjs/utils/pivotConstructor.js +15 -11
  124. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  125. package/dist/cjs/utils/pivotProcessing.js +3 -5
  126. package/dist/cjs/utils/queryConstructor.js +1 -1
  127. package/dist/cjs/utils/report.d.ts +10 -7
  128. package/dist/cjs/utils/report.d.ts.map +1 -1
  129. package/dist/cjs/utils/report.js +52 -60
  130. package/dist/cjs/utils/schema.d.ts +4 -3
  131. package/dist/cjs/utils/schema.d.ts.map +1 -1
  132. package/dist/cjs/utils/schema.js +30 -44
  133. package/dist/cjs/utils/tableProcessing.d.ts +16 -10
  134. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  135. package/dist/cjs/utils/tableProcessing.js +91 -90
  136. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  137. package/dist/cjs/utils/textProcessing.js +2 -1
  138. package/dist/cjs/utils/ui.d.ts.map +1 -1
  139. package/dist/esm/Chart.d.ts +2 -2
  140. package/dist/esm/Chart.d.ts.map +1 -1
  141. package/dist/esm/Chart.js +30 -43
  142. package/dist/esm/ChartBuilder.d.ts +2 -2
  143. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  144. package/dist/esm/ChartBuilder.js +158 -135
  145. package/dist/esm/ChartEditor.d.ts +2 -2
  146. package/dist/esm/ChartEditor.d.ts.map +1 -1
  147. package/dist/esm/ChartEditor.js +4 -2
  148. package/dist/esm/Context.d.ts +10 -3
  149. package/dist/esm/Context.d.ts.map +1 -1
  150. package/dist/esm/Context.js +326 -251
  151. package/dist/esm/Dashboard.d.ts.map +1 -1
  152. package/dist/esm/Dashboard.js +12 -25
  153. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +0 -3
  154. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +24 -10
  155. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  156. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +471 -95
  157. package/dist/esm/QuillProvider.d.ts +3 -1
  158. package/dist/esm/QuillProvider.d.ts.map +1 -1
  159. package/dist/esm/QuillProvider.js +2 -2
  160. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  161. package/dist/esm/ReportBuilder.js +21 -12
  162. package/dist/esm/SQLEditor.d.ts +1 -1
  163. package/dist/esm/SQLEditor.d.ts.map +1 -1
  164. package/dist/esm/SQLEditor.js +53 -19
  165. package/dist/esm/Table.d.ts.map +1 -1
  166. package/dist/esm/Table.js +21 -8
  167. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
  168. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  169. package/dist/esm/components/Chart/BarChart.js +2 -1
  170. package/dist/esm/components/Chart/CustomReferenceLine.d.ts +1 -1
  171. package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -1
  172. package/dist/esm/components/Chart/CustomReferenceLine.js +8 -7
  173. package/dist/esm/components/Chart/GaugeChart.d.ts +1 -1
  174. package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -1
  175. package/dist/esm/components/Chart/GaugeChart.js +64 -37
  176. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  177. package/dist/esm/components/Chart/InternalChart.js +32 -35
  178. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  179. package/dist/esm/components/Chart/LineChart.js +3 -1
  180. package/dist/esm/components/Chart/MapChart.d.ts +3 -3
  181. package/dist/esm/components/Chart/MapChart.d.ts.map +1 -1
  182. package/dist/esm/components/Chart/MapChart.js +67 -39
  183. package/dist/esm/components/Chart/PieChart.d.ts +3 -1
  184. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  185. package/dist/esm/components/Chart/PieChart.js +80 -39
  186. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  187. package/dist/esm/components/Dashboard/DashboardFilter.js +5 -21
  188. package/dist/esm/components/Dashboard/DashboardSection.js +2 -2
  189. package/dist/esm/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  190. package/dist/esm/components/Dashboard/DashboardTemplate.js +3 -2
  191. package/dist/esm/components/Dashboard/DataLoader.d.ts +4 -4
  192. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  193. package/dist/esm/components/Dashboard/DataLoader.js +32 -15
  194. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  195. package/dist/esm/components/Dashboard/MetricComponent.js +2 -2
  196. package/dist/esm/components/Dashboard/util.d.ts +1 -1
  197. package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
  198. package/dist/esm/components/Dashboard/util.js +8 -7
  199. package/dist/esm/components/QuillMultiSelectSectionList.d.ts.map +1 -1
  200. package/dist/esm/components/QuillMultiSelectSectionList.js +32 -22
  201. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  202. package/dist/esm/components/QuillMultiSelectWithCombo.js +187 -160
  203. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  204. package/dist/esm/components/QuillSelect.js +85 -77
  205. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  206. package/dist/esm/components/QuillSelectWithCombo.js +18 -11
  207. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
  208. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  209. package/dist/esm/components/ReportBuilder/FilterStack.js +3 -4
  210. package/dist/esm/components/ReportBuilder/ui.d.ts +2 -2
  211. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  212. package/dist/esm/components/ReportBuilder/ui.js +4 -7
  213. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  214. package/dist/esm/hooks/useAskQuill.js +6 -2
  215. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  216. package/dist/esm/hooks/useDashboard.js +98 -60
  217. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  218. package/dist/esm/hooks/useExport.js +25 -15
  219. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  220. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  221. package/dist/esm/hooks/useQuill.js +9 -11
  222. package/dist/esm/hooks/useReport.d.ts.map +1 -1
  223. package/dist/esm/hooks/useReport.js +1 -1
  224. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  225. package/dist/esm/hooks/useVirtualTables.js +17 -23
  226. package/dist/esm/index.d.ts +2 -2
  227. package/dist/esm/index.d.ts.map +1 -1
  228. package/dist/esm/index.js +1 -1
  229. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
  230. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  231. package/dist/esm/internals/ReportBuilder/PivotModal.js +20 -8
  232. package/dist/esm/models/Client.d.ts +0 -1
  233. package/dist/esm/models/Client.d.ts.map +1 -1
  234. package/dist/esm/models/Data.d.ts +20 -0
  235. package/dist/esm/models/Data.d.ts.map +1 -0
  236. package/dist/esm/models/Data.js +1 -0
  237. package/dist/esm/models/Filter.d.ts +42 -4
  238. package/dist/esm/models/Filter.d.ts.map +1 -1
  239. package/dist/esm/models/Pivot.d.ts.map +1 -1
  240. package/dist/esm/utils/astProcessing.d.ts +3 -2
  241. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  242. package/dist/esm/utils/astProcessing.js +28 -37
  243. package/dist/esm/utils/client.d.ts +3 -2
  244. package/dist/esm/utils/client.d.ts.map +1 -1
  245. package/dist/esm/utils/client.js +38 -39
  246. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  247. package/dist/esm/utils/columnProcessing.js +14 -3
  248. package/dist/esm/utils/constants.d.ts +1 -0
  249. package/dist/esm/utils/constants.d.ts.map +1 -1
  250. package/dist/esm/utils/constants.js +1 -0
  251. package/dist/esm/utils/dashboard.d.ts +3 -2
  252. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  253. package/dist/esm/utils/dashboard.js +31 -13
  254. package/dist/esm/utils/dataFetcher.d.ts +8 -5
  255. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  256. package/dist/esm/utils/dataFetcher.js +187 -65
  257. package/dist/esm/utils/filterProcessing.d.ts +2 -1
  258. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  259. package/dist/esm/utils/filterProcessing.js +25 -39
  260. package/dist/esm/utils/getDomain.d.ts.map +1 -1
  261. package/dist/esm/utils/pivotConstructor.d.ts +2 -1
  262. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  263. package/dist/esm/utils/pivotConstructor.js +16 -12
  264. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  265. package/dist/esm/utils/pivotProcessing.js +5 -7
  266. package/dist/esm/utils/queryConstructor.js +1 -1
  267. package/dist/esm/utils/report.d.ts +10 -7
  268. package/dist/esm/utils/report.d.ts.map +1 -1
  269. package/dist/esm/utils/report.js +53 -61
  270. package/dist/esm/utils/schema.d.ts +4 -3
  271. package/dist/esm/utils/schema.d.ts.map +1 -1
  272. package/dist/esm/utils/schema.js +30 -44
  273. package/dist/esm/utils/tableProcessing.d.ts +16 -10
  274. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  275. package/dist/esm/utils/tableProcessing.js +93 -92
  276. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  277. package/dist/esm/utils/textProcessing.js +2 -1
  278. package/dist/esm/utils/ui.d.ts.map +1 -1
  279. package/package.json +2 -1
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ContextProvider = exports.TenantContext = exports.DashboardFiltersContext = exports.ReportFiltersContext = exports.ReportsContext = exports.DashboardConfigContext = exports.DashboardContext = exports.ClientContext = exports.ThemeContext = exports.SchemaDataContext = void 0;
6
+ exports.ContextProvider = exports.FetchContext = exports.TenantContext = exports.DashboardFiltersContext = exports.ReportFiltersContext = exports.ReportsContext = exports.DashboardConfigContext = exports.DashboardContext = exports.ClientContext = exports.ThemeContext = exports.SchemaDataContext = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
9
9
  const react_1 = require("react");
@@ -319,8 +319,12 @@ exports.DashboardFiltersContext = (0, react_1.createContext)({
319
319
  loadFiltersForDashboard: async () => { },
320
320
  });
321
321
  exports.TenantContext = (0, react_1.createContext)({});
322
+ exports.FetchContext = (0, react_1.createContext)({
323
+ getToken: async () => '',
324
+ quillFetchWithToken: async () => ({ data: null }),
325
+ });
322
326
  // TODO: track errors per dashboard in the same way as loading state
323
- const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, queryHeaders, withCredentials, tenants, flags, }) => {
327
+ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, queryHeaders, withCredentials, tenants, flags, isAdmin, getAuthorizationToken = async () => '', }) => {
324
328
  // get client from session storage
325
329
  const [client, setClient] = (0, react_1.useState)(typeof window !== 'undefined' && sessionStorage
326
330
  ? JSON.parse(sessionStorage.getItem('quill-client') ?? 'null')
@@ -371,6 +375,8 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
371
375
  const reportsAbortControllers = (0, react_1.useRef)({});
372
376
  const fetchSchemaAbortController = (0, react_1.useRef)(null);
373
377
  const fetchSchemaProcessId = (0, react_1.useRef)(0);
378
+ const currentTenant = (0, react_1.useRef)(null);
379
+ const currentPublicKey = (0, react_1.useRef)(null);
374
380
  // SETS INITIAL THEME
375
381
  (0, react_1.useEffect)(() => {
376
382
  if (!theme) {
@@ -443,56 +449,54 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
443
449
  const filterOptionsAbortController = new AbortController();
444
450
  reportFilterOptionsAbortControllers.current[reportId]?.requests.add(filterOptionsAbortController);
445
451
  try {
446
- const response = await fetch(`${queryEndpoint}?filterOptions`, {
447
- method: 'POST',
448
- headers: {
449
- ...queryHeaders,
450
- 'Content-Type': 'application/json',
452
+ const result = await (0, dataFetcher_1.quillFetch)({
453
+ client: {
454
+ clientId: publicKey,
455
+ queryEndpoint,
456
+ queryHeaders,
457
+ withCredentials: !!withCredentials,
458
+ },
459
+ task: 'filter-options',
460
+ metadata: {
461
+ clientId: publicKey,
462
+ publicKey: publicKey,
463
+ reportId: dashboardName ? undefined : reportId,
464
+ name: dashboardName,
465
+ useNewNodeSql: true,
466
+ filter: {
467
+ ...filter,
468
+ query: undefined,
469
+ options: undefined,
470
+ },
471
+ appliedFilters: filters
472
+ .filter((f) => f.label !== filter.label)
473
+ .map((f) => ({
474
+ ...f,
475
+ query: undefined,
476
+ options: undefined,
477
+ })),
478
+ customFilters: customFilters?.filter((f) => f.filterType !== Filter_1.InternalFilterType.DateCustomFilter &&
479
+ f.filterType !== Filter_1.InternalFilterType.DateFilter &&
480
+ f.filterType !== Filter_1.InternalFilterType.DateComparisonFilter),
481
+ tenants,
451
482
  },
452
- body: JSON.stringify({
453
- metadata: {
454
- clientId: populatedClient?.publicKey,
455
- publicKey: populatedClient?.publicKey,
456
- reportId: dashboardName ? undefined : reportId,
457
- name: dashboardName,
458
- task: 'filter-options',
459
- useNewNodeSql: true,
483
+ abortSignal: filterOptionsAbortController?.signal,
484
+ getToken: getAuthorizationToken,
485
+ });
486
+ const filterOptions = result.data?.filters[0]?.options ?? [];
487
+ if (!filterOptionsAbortController.signal.aborted) {
488
+ reportFiltersDispatch({
489
+ type: 'UPDATE_REPORT_FILTER',
490
+ id: reportId,
491
+ data: {
460
492
  filter: {
461
493
  ...filter,
462
- options: undefined,
494
+ options: filterOptions,
463
495
  },
464
- appliedFilters: filters
465
- .filter((f) => f.label !== filter.label)
466
- .map((f) => ({
467
- ...f,
468
- query: undefined,
469
- options: undefined,
470
- })),
471
- customFilters: customFilters?.filter((f) => f.filterType !== Filter_1.InternalFilterType.DateCustomFilter &&
472
- f.filterType !== Filter_1.InternalFilterType.DateFilter &&
473
- f.filterType !== Filter_1.InternalFilterType.DateComparisonFilter),
474
- tenants,
496
+ loading: false,
475
497
  },
476
- }),
477
- signal: filterOptionsAbortController?.signal,
478
- credentials: withCredentials ? 'include' : 'omit',
479
- });
480
- return response.json().then((result) => {
481
- const filterOptions = result.data?.filters[0]?.options ?? [];
482
- if (!filterOptionsAbortController.signal.aborted) {
483
- reportFiltersDispatch({
484
- type: 'UPDATE_REPORT_FILTER',
485
- id: reportId,
486
- data: {
487
- filter: {
488
- ...filter,
489
- options: filterOptions,
490
- },
491
- loading: false,
492
- },
493
- });
494
- }
495
- });
498
+ });
499
+ }
496
500
  }
497
501
  catch (error) {
498
502
  if (error instanceof Error && error.name === 'AbortError') {
@@ -515,7 +519,7 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
515
519
  delete reportFilterOptionsAbortControllers.current[reportId];
516
520
  }
517
521
  }
518
- async function fetchIndividualReport({ reportId, initiator, fetchRows = true, dashboardFilters, customFilters, additionalProcessing, dateBucket, reportAbortController, customFields, propogateChanges, }) {
522
+ async function fetchIndividualReport({ reportId, initiator, fetchRows = true, dashboardFilters, customFilters, additionalProcessing, dateBucket, reportAbortController, customFields, propagateChanges, }) {
519
523
  if (!populatedClient) {
520
524
  return;
521
525
  }
@@ -537,55 +541,33 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
537
541
  request: abortController,
538
542
  };
539
543
  try {
540
- const hostedBody = {
544
+ const resp = await (0, dataFetcher_1.quillFetch)({
545
+ client: {
546
+ clientId: publicKey,
547
+ queryEndpoint,
548
+ queryHeaders,
549
+ withCredentials: !!withCredentials,
550
+ },
551
+ task: fetchRows ? 'report' : 'report-info',
541
552
  metadata: {
542
553
  reportId,
543
- dashboardItemId: reportId,
544
554
  clientId: populatedClient.publicKey,
545
- task: 'report',
546
- databaseType: populatedClient.databaseType,
547
- filters: filters.map((filter) => ({ ...filter, options: undefined })),
548
- additionalProcessing,
549
555
  useNewNodeSql: true,
550
- getDefaultDashboardFilters: !filters.length,
556
+ filters: filters?.map((f) => ({ ...f, options: undefined })),
557
+ additionalProcessing,
558
+ dateBucket,
559
+ databaseType: populatedClient.databaseType,
551
560
  tenants,
552
561
  flags,
553
562
  customFields,
554
563
  },
555
- };
556
- const cloudBody = {
557
- id: reportId,
558
- filters: filters,
559
- useNewNodeSql: true,
560
- };
561
- const resp = fetchRows
562
- ? await (0, dataFetcher_1.getData)(populatedClient, 'itempost', 'omit', hostedBody, cloudBody, 'POST', 'fetch-data', abortController.signal)
563
- : await fetch(`${queryEndpoint}`, {
564
- method: 'POST',
565
- headers: {
566
- 'Content-Type': 'application/json',
567
- ...queryHeaders,
568
- },
569
- body: JSON.stringify({
570
- metadata: {
571
- task: fetchRows ? 'report' : 'report-info',
572
- reportId,
573
- clientId: populatedClient.publicKey,
574
- useNewNodeSql: true,
575
- filters: filters?.map((f) => ({ ...f, options: undefined })),
576
- getDefaultDashboardFilters: !filters.length,
577
- additionalProcessing,
578
- dateBucket,
579
- databaseType: populatedClient.databaseType,
580
- tenants,
581
- flags,
582
- customFields,
583
- },
584
- }),
585
- signal: abortController.signal,
586
- credentials: withCredentials ? 'include' : 'omit',
587
- });
588
- const results = fetchRows ? resp : await resp.json();
564
+ abortSignal: abortController.signal,
565
+ getToken: getAuthorizationToken,
566
+ urlParameters: `caller=fetchReport&task=report`,
567
+ });
568
+ const results = fetchRows
569
+ ? await (0, dataFetcher_1.parseFetchResponse)(populatedClient, 'report', resp, getAuthorizationToken)
570
+ : resp;
589
571
  if (results.error) {
590
572
  console.error('Error fetching report:', results.error);
591
573
  return;
@@ -599,6 +581,7 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
599
581
  dateBucket,
600
582
  additionalProcessing,
601
583
  customFields,
584
+ getToken: getAuthorizationToken,
602
585
  });
603
586
  reportsDispatch({
604
587
  type: 'ADD_REPORT',
@@ -610,7 +593,7 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
610
593
  },
611
594
  });
612
595
  // If the report matches the active dashboard, update the dashboard state
613
- if (propogateChanges) {
596
+ if (propagateChanges) {
614
597
  if (dashboard[report.dashboardName]) {
615
598
  dispatch({
616
599
  type: 'UPDATE_DASHBOARD_ITEM',
@@ -628,7 +611,26 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
628
611
  const returnedFilters = !fetchRows
629
612
  ? results.data.filters
630
613
  : results.filters;
631
- const dateFilterTemplate = returnedFilters.find((f) => f.filterType === 'date_range');
614
+ let dateFilterTemplate = returnedFilters.find((f) => f.filterType === 'date_range');
615
+ if (dateFilterTemplate) {
616
+ dateFilterTemplate = {
617
+ ...dateFilterTemplate,
618
+ presetOptions: dateFilterTemplate?.presetOptions?.map((preset) => ({
619
+ ...preset,
620
+ loopStart: preset.loopStart
621
+ ? new Date(preset.loopStart)
622
+ : undefined,
623
+ loopEnd: preset.loopEnd ? new Date(preset.loopEnd) : undefined,
624
+ })),
625
+ defaultPresetRanges: dateFilterTemplate?.defaultPresetRanges?.map((preset) => ({
626
+ ...preset,
627
+ loopStart: preset.loopStart
628
+ ? new Date(preset.loopStart)
629
+ : undefined,
630
+ loopEnd: preset.loopEnd ? new Date(preset.loopEnd) : undefined,
631
+ })),
632
+ };
633
+ }
632
634
  const dateFilter = dateFilterTemplate
633
635
  ? (0, filterProcessing_1.createDefaultDateFilter)(dateFilterTemplate, [report], report.dashboardName)
634
636
  : undefined;
@@ -696,64 +698,63 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
696
698
  const filterOptionsAbortController = new AbortController();
697
699
  filterOptionsAbortControllers.current.add(filterOptionsAbortController);
698
700
  try {
699
- const response = await fetch(`${queryEndpoint}?filterOptions`, {
700
- method: 'POST',
701
- headers: {
702
- ...queryHeaders,
703
- 'Content-Type': 'application/json',
701
+ const result = await (0, dataFetcher_1.quillFetch)({
702
+ client: {
703
+ clientId: publicKey,
704
+ queryEndpoint,
705
+ queryHeaders,
706
+ withCredentials: !!withCredentials,
704
707
  },
705
- body: JSON.stringify({
706
- metadata: {
707
- clientId: populatedClient?.publicKey,
708
- publicKey: populatedClient?.publicKey,
709
- name: dashboardName,
710
- task: 'filter-options',
711
- useNewNodeSql: true,
712
- filter: {
713
- ...filter,
714
- options: undefined,
715
- },
716
- appliedFilters: filters
717
- .filter((f) => f.label !== filter.label)
718
- .map((f) => ({
719
- ...f,
720
- query: undefined,
721
- options: undefined,
722
- })),
723
- customFilters,
724
- tenants: tenants,
708
+ task: 'filter-options',
709
+ metadata: {
710
+ clientId: publicKey,
711
+ publicKey,
712
+ name: dashboardName,
713
+ useNewNodeSql: true,
714
+ filter: {
715
+ ...filter,
716
+ query: undefined,
717
+ options: undefined,
725
718
  },
726
- }),
727
- signal: filterOptionsAbortController?.signal,
728
- credentials: withCredentials ? 'include' : 'omit',
719
+ appliedFilters: filters
720
+ .filter((f) => f.label !== filter.label)
721
+ .map((f) => ({
722
+ ...f,
723
+ query: undefined,
724
+ options: undefined,
725
+ })),
726
+ customFilters,
727
+ tenants,
728
+ },
729
+ abortSignal: filterOptionsAbortController?.signal,
730
+ getToken: getAuthorizationToken,
729
731
  });
730
- return response.json().then((result) => {
731
- const filterOptions = result.data?.filters[0]?.options ?? [];
732
- dashboardFiltersDispatch({
733
- type: 'UPDATE_DASHBOARD_FILTER',
734
- dashboardName,
735
- filterName: filter.label,
736
- data: {
737
- filter: {
738
- ...filter,
739
- options: filterOptions,
740
- },
741
- loading: false,
732
+ const filterOptions = result.data?.filters[0]?.options ?? [];
733
+ dashboardFiltersDispatch({
734
+ type: 'UPDATE_DASHBOARD_FILTER',
735
+ dashboardName,
736
+ filterName: filter.label,
737
+ data: {
738
+ filter: {
739
+ ...filter,
740
+ options: filterOptions,
742
741
  },
743
- });
744
- // Should we be updating the filters for all attached reports when the dashboard filters change?
745
- reportFiltersDispatch({
746
- type: 'UPDATE_REPORT_FILTER',
747
- id: filter.label,
748
- data: {
749
- filter: {
750
- ...filter,
751
- options: filterOptions,
752
- },
753
- loading: false,
742
+ loading: false,
743
+ },
744
+ });
745
+ // Should we be updating the filters for all attached reports when the dashboard filters change?
746
+ reportFiltersDispatch({
747
+ type: 'UPDATE_REPORT_FILTER',
748
+ id: filter.label,
749
+ data: {
750
+ filter: {
751
+ ...filter,
752
+ options: filterOptions,
754
753
  },
755
- });
754
+ loading: false,
755
+ },
756
756
  });
757
+ return null;
757
758
  }
758
759
  catch (error) {
759
760
  if (error instanceof Error && error.name === 'AbortError') {
@@ -860,15 +861,12 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
860
861
  sectionOrder: newSectionOrder,
861
862
  };
862
863
  try {
863
- await fetch(client.queryEndpoint, {
864
- method: 'POST',
865
- headers: {
866
- ...client.queryHeaders,
867
- 'Content-Type': 'application/json',
868
- },
869
- body: JSON.stringify({ metadata: body }),
870
- credentials: client.withCredentials ? 'include' : 'omit',
871
- }).then((res) => res.json());
864
+ await (0, dataFetcher_1.quillFetch)({
865
+ client,
866
+ task: 'set-section-order',
867
+ metadata: body,
868
+ getToken: getAuthorizationToken,
869
+ });
872
870
  }
873
871
  catch (e) {
874
872
  console.error(e);
@@ -906,7 +904,7 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
906
904
  id: dashboardName,
907
905
  data: true,
908
906
  });
909
- const resp = await (0, dashboard_1.getDashboard)(dashboardName, populatedClient, tenants, flags);
907
+ const resp = await (0, dashboard_1.getDashboard)(dashboardName, populatedClient, getAuthorizationToken, tenants, flags);
910
908
  // if dashboard has changed
911
909
  if (!(0, fast_deep_equal_1.default)(resp, curDashboardConfig)) {
912
910
  dashboardConfigDispatch({
@@ -954,6 +952,7 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
954
952
  tenants,
955
953
  caller,
956
954
  abortSignal: fetchSchemaAbortController.current.signal,
955
+ getToken: getAuthorizationToken,
957
956
  });
958
957
  if (currentProcessId === fetchSchemaProcessId.current) {
959
958
  setSchemaData({
@@ -987,62 +986,100 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
987
986
  fetchDashboardsAbortController.current = new AbortController();
988
987
  dashboardConfigDispatch({ type: 'CLEAR_DASHBOARDS' });
989
988
  try {
990
- const response = await fetch(`${queryEndpoint}?dashboards`, {
991
- method: 'POST',
992
- headers: {
993
- ...queryHeaders,
994
- 'Content-Type': 'application/json',
989
+ const result = await (0, dataFetcher_1.quillFetch)({
990
+ client: {
991
+ clientId: publicKey,
992
+ queryEndpoint,
993
+ queryHeaders,
994
+ withCredentials: !!withCredentials,
995
995
  },
996
- body: JSON.stringify({
997
- metadata: {
998
- clientId: publicKey,
999
- publicKey: publicKey,
1000
- task: 'dashboards',
1001
- getSections: true,
1002
- },
1003
- }),
1004
- credentials: withCredentials ? 'include' : 'omit',
1005
- signal: fetchDashboardsAbortController.current.signal,
996
+ task: 'dashboards',
997
+ metadata: {
998
+ clientId: publicKey,
999
+ // getSections: true, // skip fetching reports since 'dashboard' always does anyway
1000
+ },
1001
+ abortSignal: fetchDashboardsAbortController.current.signal,
1002
+ getToken: getAuthorizationToken,
1006
1003
  });
1007
- const result = await response.json();
1008
1004
  dashboardConfigDispatch({
1009
1005
  type: 'SET_DASHBOARD_DATA',
1010
1006
  data: result.data.dashboards.map((dashboard) => ({
1011
1007
  ...dashboard,
1008
+ dateFilter: dashboard.dateFilter
1009
+ ? {
1010
+ ...dashboard.dateFilter,
1011
+ presetOptions: dashboard.dateFilter.presetOptions?.map((preset) => ({
1012
+ ...preset,
1013
+ loopStart: preset.loopStart
1014
+ ? new Date(preset.loopStart)
1015
+ : undefined,
1016
+ loopEnd: preset.loopEnd
1017
+ ? new Date(preset.loopEnd)
1018
+ : undefined,
1019
+ })),
1020
+ defaultPresetRanges: dashboard.dateFilter.defaultPresetRanges?.map((preset) => ({
1021
+ ...preset,
1022
+ loopStart: preset.loopStart
1023
+ ? new Date(preset.loopStart)
1024
+ : undefined,
1025
+ loopEnd: preset.loopEnd
1026
+ ? new Date(preset.loopEnd)
1027
+ : undefined,
1028
+ })),
1029
+ }
1030
+ : undefined,
1012
1031
  createdAt: new Date(dashboard.createdAt),
1013
1032
  })),
1014
1033
  });
1015
1034
  dashboardFiltersDispatch({
1016
1035
  type: 'SET_INITIAL_DASHBOARD_FILTERS',
1017
1036
  data: result.data.dashboards.reduce((acc, dashboard) => {
1018
- let presetsOptions = dateRangePickerUtils_1.defaultOptionsV2;
1019
- if (dashboard.dateFilter?.presetRanges) {
1020
- presetsOptions = dashboard.dateFilter.presetRanges.map((elem) => {
1021
- if (!elem.isStatic) {
1022
- return {
1023
- label: elem.label,
1024
- value: elem.value,
1025
- startDate: (dateRangePickerUtils_1.PRIMARY_RANGE[elem.value] ??
1026
- dateRangePickerUtils_1.PRIMARY_RANGE['LAST_30_DAYS']).startDate,
1027
- endDate: (dateRangePickerUtils_1.PRIMARY_RANGE[elem.value] ??
1028
- dateRangePickerUtils_1.PRIMARY_RANGE['LAST_30_DAYS']).endDate,
1029
- };
1030
- }
1031
- return {
1032
- label: elem.label,
1033
- value: elem.value,
1034
- startDate: new Date(elem.startDate),
1035
- endDate: new Date(elem.endDate),
1036
- };
1037
- });
1037
+ let presetOptions = dateRangePickerUtils_1.defaultOptionsV2;
1038
+ if (dashboard.dateFilter?.presetOptions ||
1039
+ dashboard.dateFilter?.defaultPresetRanges) {
1040
+ presetOptions = (0, dateRangePickerUtils_1.convertPresetOptionsToSelectableList)((dashboard.dateFilter.presetOptions ?? []).map((preset) => ({
1041
+ ...preset,
1042
+ loopStart: preset.loopStart
1043
+ ? new Date(preset.loopStart)
1044
+ : undefined,
1045
+ loopEnd: preset.loopEnd
1046
+ ? new Date(preset.loopEnd)
1047
+ : undefined,
1048
+ })), (dashboard.dateFilter.defaultPresetRanges ?? []).map((preset) => ({
1049
+ ...preset,
1050
+ loopStart: preset.loopStart
1051
+ ? new Date(preset.loopStart)
1052
+ : undefined,
1053
+ loopEnd: preset.loopEnd
1054
+ ? new Date(preset.loopEnd)
1055
+ : undefined,
1056
+ })));
1038
1057
  }
1039
1058
  acc[dashboard.name] = {};
1040
1059
  if (dashboard.dateFilter) {
1041
1060
  dashboard.dateFilter = {
1042
1061
  ...dashboard.dateFilter,
1043
- startDate: presetsOptions.find((elem) => elem.value === dashboard.dateFilter.primaryRange?.value)?.startDate,
1044
- endDate: presetsOptions.find((elem) => elem.value === dashboard.dateFilter.primaryRange?.value)?.endDate,
1062
+ startDate: presetOptions.find((elem) => elem.value === dashboard.dateFilter.primaryRange?.value)?.startDate,
1063
+ endDate: presetOptions.find((elem) => elem.value === dashboard.dateFilter.primaryRange?.value)?.endDate,
1045
1064
  filterType: 'date_range',
1065
+ presetOptions: dashboard.dateFilter.presetOptions?.map((preset) => ({
1066
+ ...preset,
1067
+ loopStart: preset.loopStart
1068
+ ? new Date(preset.loopStart)
1069
+ : undefined,
1070
+ loopEnd: preset.loopEnd
1071
+ ? new Date(preset.loopEnd)
1072
+ : undefined,
1073
+ })),
1074
+ defaultPresetRanges: dashboard.dateFilter.defaultPresetRanges?.map((preset) => ({
1075
+ ...preset,
1076
+ loopStart: preset.loopStart
1077
+ ? new Date(preset.loopStart)
1078
+ : undefined,
1079
+ loopEnd: preset.loopEnd
1080
+ ? new Date(preset.loopEnd)
1081
+ : undefined,
1082
+ })),
1046
1083
  };
1047
1084
  acc[dashboard.name][dashboard.dateFilter.label] = {
1048
1085
  filter: dashboard.dateFilter,
@@ -1073,6 +1110,33 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
1073
1110
  }
1074
1111
  }
1075
1112
  }
1113
+ async function quillFetchWithToken({ client, task, method = 'POST', metadata, abortSignal, credentials = 'omit', urlParameters, includeFlags = false, includeTenants = false, adminMode, }) {
1114
+ try {
1115
+ const result = await (0, dataFetcher_1.quillFetch)({
1116
+ client,
1117
+ task,
1118
+ method,
1119
+ metadata: {
1120
+ flags: includeFlags ? flags : undefined,
1121
+ tenants: includeTenants ? tenants : undefined,
1122
+ adminMode,
1123
+ ...metadata,
1124
+ },
1125
+ abortSignal,
1126
+ credentials,
1127
+ urlParameters,
1128
+ getToken: getAuthorizationToken,
1129
+ });
1130
+ return result;
1131
+ }
1132
+ catch (e) {
1133
+ if (e instanceof Error && e.name === 'AbortError') {
1134
+ throw e;
1135
+ }
1136
+ console.error('Failed to fetch:', e);
1137
+ return { error: 'Failed to fetch data' };
1138
+ }
1139
+ }
1076
1140
  (0, react_1.useEffect)(() => {
1077
1141
  async function updateClientAndSchema(publicKey) {
1078
1142
  if (populatedClient?.clientId === publicKey &&
@@ -1080,8 +1144,8 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
1080
1144
  return;
1081
1145
  setIsClientLoading(true);
1082
1146
  setSchemaData({ ...schemaData, isSchemaLoading: true });
1083
- const newClient = await (0, client_1.fetchClient)(publicKey, queryEndpoint, withCredentials, queryHeaders);
1084
- if (!newClient.allTenantTypes?.every((t) => t.defaultId)) {
1147
+ const newClient = await (0, client_1.fetchClient)(publicKey, queryEndpoint, withCredentials, getAuthorizationToken, queryHeaders, isAdmin);
1148
+ if (!newClient.allTenantTypes?.every((t) => t.defaultId || t.scope === 'database')) {
1085
1149
  console.error('Default organization not found. Please select a default organization for ', newClient.allTenantTypes?.find((t) => !t.defaultId));
1086
1150
  }
1087
1151
  setClient({
@@ -1096,79 +1160,90 @@ const ContextProvider = ({ children, initialTheme, publicKey, queryEndpoint, que
1096
1160
  featureFlags: newClient.featureFlags,
1097
1161
  domainName: newClient.domainName,
1098
1162
  allTenantTypes: newClient.allTenantTypes,
1099
- // @ts-ignore
1100
- maintenanceMode: newClient?.maintenanceMode || false,
1101
1163
  });
1102
1164
  setIsClientLoading(false);
1103
1165
  }
1104
1166
  updateClientAndSchema(publicKey);
1105
1167
  }, [publicKey]);
1106
1168
  (0, react_1.useEffect)(() => {
1107
- // CLEAR ALL DASHBOARD DATA AND REPORTS AND THEIR FILTERS
1108
- dispatch({ type: 'CLEAR_DASHBOARDS' });
1109
- dashboardFiltersDispatch({ type: 'CLEAR_DASHBOARD_FILTERS' });
1110
- reportFiltersDispatch({ type: 'CLEAR_REPORT_FILTERS' });
1111
- reportsDispatch({ type: 'CLEAR_REPORTS' });
1112
- if (populatedClient) {
1113
- fetchSchema({ client: populatedClient, tenants, caller: 'context' });
1114
- }
1115
- if (typeof window !== 'undefined' && sessionStorage) {
1116
- sessionStorage.setItem('quill-client', JSON.stringify({
1117
- ...populatedClient,
1118
- allTenantTypes: undefined,
1119
- }));
1169
+ if (populatedClient?.publicKey &&
1170
+ currentPublicKey.current !== populatedClient?.publicKey) {
1171
+ // CLEAR ALL DASHBOARD DATA AND REPORTS AND THEIR FILTERS
1172
+ dispatch({ type: 'CLEAR_DASHBOARDS' });
1173
+ dashboardFiltersDispatch({ type: 'CLEAR_DASHBOARD_FILTERS' });
1174
+ reportFiltersDispatch({ type: 'CLEAR_REPORT_FILTERS' });
1175
+ reportsDispatch({ type: 'CLEAR_REPORTS' });
1176
+ // TODO: this is yet another unfortunate hack where the answer is to unify the admin and react state
1177
+ // currently, we fetch the dashboards twice if both the client and default org change
1178
+ // because if we didn't, we would fetch 0 times if the client changed but the org didn't
1179
+ if (isAdmin) {
1180
+ setIsDashboardsLoading(true);
1181
+ fetchDashboards(populatedClient?.publicKey);
1182
+ }
1183
+ else {
1184
+ setIsDashboardsLoading(false);
1185
+ }
1186
+ if (typeof window !== 'undefined' && sessionStorage) {
1187
+ sessionStorage.setItem('quill-client', JSON.stringify({
1188
+ ...populatedClient,
1189
+ allTenantTypes: undefined,
1190
+ }));
1191
+ }
1192
+ currentPublicKey.current = publicKey;
1120
1193
  }
1121
- }, [populatedClient?.publicKey, tenants]);
1122
- // FIXME: fetchDashboards needs to rerun every time the tenant changes so that we filter reports on their flags
1194
+ }, [populatedClient?.publicKey]);
1123
1195
  (0, react_1.useEffect)(() => {
1124
- // Clear context
1125
- setIsDashboardsLoading(true);
1126
- // TODO: this is yet another unfortunate hack where the answer is to unify the admin and react state
1127
- // currently, we fetch the dashboards twice if both the client and default org change
1128
- // because if we didn't, we would fetch 0 times if the client changed but the org didn't
1129
- fetchDashboards(publicKey);
1130
- dashboardFiltersDispatch({ type: 'CLEAR_DASHBOARD_FILTERS' });
1131
- reportFiltersDispatch({ type: 'CLEAR_REPORT_FILTERS' });
1132
- dispatch({ type: 'CLEAR_DASHBOARDS' });
1133
- }, [publicKey]);
1196
+ if (populatedClient?.currentTenants &&
1197
+ !(0, fast_deep_equal_1.default)(currentTenant.current, populatedClient?.currentTenants)) {
1198
+ dispatch({ type: 'CLEAR_DASHBOARDS' });
1199
+ dashboardFiltersDispatch({ type: 'CLEAR_DASHBOARD_FILTERS' });
1200
+ reportFiltersDispatch({ type: 'CLEAR_REPORT_FILTERS' });
1201
+ reportsDispatch({ type: 'CLEAR_REPORTS' });
1202
+ if (populatedClient) {
1203
+ fetchSchema({
1204
+ client: populatedClient,
1205
+ tenants: populatedClient.currentTenants,
1206
+ caller: 'context',
1207
+ });
1208
+ }
1209
+ currentTenant.current = populatedClient?.currentTenants ?? null;
1210
+ }
1211
+ }, [populatedClient?.currentTenants]);
1134
1212
  if (!theme) {
1135
1213
  return null;
1136
1214
  }
1137
1215
  if (!tenants) {
1138
1216
  throw new Error('Quill Error: QuillProvider prop organizationId is deprecated. Please use QuillProvider tenants prop instead');
1139
1217
  }
1140
- if (populatedClient?.maintenanceMode) {
1141
- return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { children: "Dashboard is currently in maintenance mode" }), (0, jsx_runtime_1.jsx)("p", { children: "Please check back later or contact your administrator for more information." })] }));
1142
- }
1143
1218
  return ((0, jsx_runtime_1.jsx)(exports.ClientContext.Provider, { value: [
1144
1219
  isClientLoading || !populatedClient ? null : populatedClient,
1145
1220
  isClientLoading,
1146
1221
  setClient,
1147
- ], children: (0, jsx_runtime_1.jsx)(exports.ThemeContext.Provider, { value: [theme, setTheme], children: (0, jsx_runtime_1.jsx)(exports.SchemaDataContext.Provider, { value: [schemaData, setSchemaData], children: (0, jsx_runtime_1.jsx)(exports.DashboardContext.Provider, { value: [dashboard, dispatch], children: (0, jsx_runtime_1.jsx)(exports.DashboardConfigContext.Provider, { value: {
1148
- dashboardConfig: isDashboardsLoading ? {} : dashboardConfig,
1149
- isLoading: isDashboardsLoading,
1150
- dashboardConfigDispatch,
1151
- loadDashboard,
1152
- }, children: (0, jsx_runtime_1.jsx)(exports.DashboardFiltersContext.Provider, { value: {
1153
- dashboardFilters,
1154
- dashboardCustomFilters,
1155
- customFilterDispatch,
1156
- dispatch: dashboardFiltersDispatch,
1157
- loadFiltersForDashboard,
1158
- }, children: (0, jsx_runtime_1.jsx)(exports.ReportFiltersContext.Provider, { value: {
1159
- reportFilters,
1160
- customReportFilters,
1161
- reportFiltersDispatch,
1162
- customReportFiltersDispatch,
1163
- loadFiltersForReport,
1164
- abortLoadingFilters,
1165
- }, children: (0, jsx_runtime_1.jsx)(exports.ReportsContext.Provider, { value: {
1166
- reports,
1167
- reportsDispatch,
1168
- fetchIndividualReport,
1169
- }, children: (0, jsx_runtime_1.jsx)(exports.TenantContext.Provider, { value: {
1170
- tenants: populatedClient?.currentFlags ?? tenants,
1171
- flags: populatedClient?.currentFlags ?? flags,
1172
- }, children: children }) }) }) }) }) }) }) }) }));
1222
+ ], children: (0, jsx_runtime_1.jsx)(exports.ThemeContext.Provider, { value: [theme, setTheme], children: (0, jsx_runtime_1.jsx)(exports.FetchContext.Provider, { value: { getToken: getAuthorizationToken, quillFetchWithToken }, children: (0, jsx_runtime_1.jsx)(exports.SchemaDataContext.Provider, { value: [schemaData, setSchemaData], children: (0, jsx_runtime_1.jsx)(exports.DashboardContext.Provider, { value: [dashboard, dispatch], children: (0, jsx_runtime_1.jsx)(exports.DashboardConfigContext.Provider, { value: {
1223
+ dashboardConfig: isDashboardsLoading ? {} : dashboardConfig,
1224
+ isLoading: isDashboardsLoading,
1225
+ dashboardConfigDispatch,
1226
+ loadDashboard,
1227
+ }, children: (0, jsx_runtime_1.jsx)(exports.DashboardFiltersContext.Provider, { value: {
1228
+ dashboardFilters,
1229
+ dashboardCustomFilters,
1230
+ customFilterDispatch,
1231
+ dispatch: dashboardFiltersDispatch,
1232
+ loadFiltersForDashboard,
1233
+ }, children: (0, jsx_runtime_1.jsx)(exports.ReportFiltersContext.Provider, { value: {
1234
+ reportFilters,
1235
+ customReportFilters,
1236
+ reportFiltersDispatch,
1237
+ customReportFiltersDispatch,
1238
+ loadFiltersForReport,
1239
+ abortLoadingFilters,
1240
+ }, children: (0, jsx_runtime_1.jsx)(exports.ReportsContext.Provider, { value: {
1241
+ reports,
1242
+ reportsDispatch,
1243
+ fetchIndividualReport,
1244
+ }, children: (0, jsx_runtime_1.jsx)(exports.TenantContext.Provider, { value: {
1245
+ tenants: populatedClient?.currentTenants ?? tenants,
1246
+ flags: populatedClient?.currentFlags ?? flags,
1247
+ }, children: children }) }) }) }) }) }) }) }) }) }));
1173
1248
  };
1174
1249
  exports.ContextProvider = ContextProvider;