@quillsql/admin 1.6.3 → 1.7.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 (304) hide show
  1. package/dist/cjs/Admin.d.ts +14 -8
  2. package/dist/cjs/Admin.d.ts.map +1 -1
  3. package/dist/cjs/Admin.js +134 -25
  4. package/dist/cjs/AdminProvider.d.ts +26 -5
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +174 -85
  7. package/dist/cjs/api/ConnectionClient.d.ts +26 -12
  8. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  9. package/dist/cjs/api/ConnectionClient.js +198 -31
  10. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  11. package/dist/cjs/assets/XIcon.d.ts.map +1 -1
  12. package/dist/cjs/components/CardSection.d.ts.map +1 -1
  13. package/dist/cjs/components/CardSection.js +4 -2
  14. package/dist/cjs/components/ClipboardButton.d.ts.map +1 -1
  15. package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
  16. package/dist/cjs/components/DashboardSelectPopover.js +46 -7
  17. package/dist/cjs/components/DatabaseSelector.d.ts +3 -1
  18. package/dist/cjs/components/DatabaseSelector.d.ts.map +1 -1
  19. package/dist/cjs/components/DatabaseSelector.js +3 -2
  20. package/dist/cjs/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -1
  21. package/dist/cjs/components/DateRangePicker/SingleDatePicker.js +31 -7
  22. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -1
  23. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.js +31 -7
  24. package/dist/cjs/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  25. package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
  26. package/dist/cjs/components/DropDownMenuWithLabel.js +8 -1
  27. package/dist/cjs/components/DynamicBanner.d.ts +3 -2
  28. package/dist/cjs/components/DynamicBanner.d.ts.map +1 -1
  29. package/dist/cjs/components/DynamicBanner.js +7 -2
  30. package/dist/cjs/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  31. package/dist/cjs/components/EmptyDashboardComponent/index.js +3 -2
  32. package/dist/cjs/components/EmptyVirtualTablesComponent.d.ts.map +1 -1
  33. package/dist/cjs/components/EmptyVirtualTablesComponent.js +4 -1
  34. package/dist/cjs/components/FormTooltip.d.ts.map +1 -1
  35. package/dist/cjs/components/FormTooltip.js +4 -1
  36. package/dist/cjs/components/InputLabel.d.ts.map +1 -1
  37. package/dist/cjs/components/InputLabel.js +4 -2
  38. package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts +1 -1
  39. package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts.map +1 -1
  40. package/dist/cjs/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -1
  41. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  42. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +33 -14
  43. package/dist/cjs/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  44. package/dist/cjs/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
  45. package/dist/cjs/components/InternalDashboard/InternalDashboard.js +128 -35
  46. package/dist/cjs/components/OrgSelect.d.ts +0 -6
  47. package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
  48. package/dist/cjs/components/OrgSelect.js +79 -47
  49. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +8 -2
  50. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  51. package/dist/cjs/components/QuillMultiSelectWithCombo.js +351 -167
  52. package/dist/cjs/components/QuillPopover.d.ts.map +1 -1
  53. package/dist/cjs/components/QuillPopover.js +4 -5
  54. package/dist/cjs/components/QuillSelect.js +9 -9
  55. package/dist/cjs/components/QuillSelectWithCombo.d.ts +4 -3
  56. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  57. package/dist/cjs/components/QuillSelectWithCombo.js +47 -21
  58. package/dist/cjs/components/QuillToolTipPortal.d.ts.map +1 -1
  59. package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
  60. package/dist/cjs/components/SqlTextEditor.js +15 -2
  61. package/dist/cjs/components/Tenants/EditTenant.d.ts.map +1 -1
  62. package/dist/cjs/components/Tenants/EditTenant.js +51 -8
  63. package/dist/cjs/components/UiComponents.d.ts +16 -43
  64. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  65. package/dist/cjs/components/UiComponents.js +162 -33
  66. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  67. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +163 -51
  68. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  69. package/dist/cjs/forms/client_onboard/ConnectSchema.js +36 -2
  70. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts +2 -1
  71. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
  72. package/dist/cjs/forms/client_onboard/CreateVirtualTables.js +60 -22
  73. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.js +2 -1
  74. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.js +2 -1
  75. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
  76. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.js +101 -15
  77. package/dist/cjs/hooks/useDatabaseSchema.d.ts.map +1 -1
  78. package/dist/cjs/hooks/useDatabaseSchema.js +18 -2
  79. package/dist/cjs/hooks/useLongLoading.d.ts +13 -0
  80. package/dist/cjs/hooks/useLongLoading.d.ts.map +1 -0
  81. package/dist/cjs/hooks/useLongLoading.js +67 -0
  82. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  83. package/dist/cjs/hooks/useThrottle.d.ts.map +1 -1
  84. package/dist/cjs/icons/ArrowDownHeadIcon.d.ts.map +1 -1
  85. package/dist/cjs/icons/CheckCircleIcon.d.ts.map +1 -1
  86. package/dist/cjs/icons/ExclamationFilledIcon.d.ts.map +1 -1
  87. package/dist/cjs/icons/ExteriorLinkIcon.d.ts.map +1 -1
  88. package/dist/cjs/icons/QuestionMarkCircleIcon.d.ts.map +1 -1
  89. package/dist/cjs/modals/CodePreview.d.ts.map +1 -1
  90. package/dist/cjs/modals/CodePreview.js +7 -2
  91. package/dist/cjs/modals/CreateEnvironmentModal.d.ts +5 -0
  92. package/dist/cjs/modals/CreateEnvironmentModal.d.ts.map +1 -0
  93. package/dist/cjs/modals/CreateEnvironmentModal.js +21 -0
  94. package/dist/cjs/modals/EditEnvironmentModal.d.ts.map +1 -1
  95. package/dist/cjs/modals/EditEnvironmentModal.js +74 -17
  96. package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -1
  97. package/dist/cjs/modals/EditFiltersModal.js +19 -15
  98. package/dist/cjs/modals/NewDashboardModal.d.ts.map +1 -1
  99. package/dist/cjs/modals/NewDashboardModal.js +54 -28
  100. package/dist/cjs/modals/PromoteReportModal.d.ts.map +1 -1
  101. package/dist/cjs/modals/PromoteReportModal.js +15 -4
  102. package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
  103. package/dist/cjs/modals/PromoteViewModal.js +13 -2
  104. package/dist/cjs/primitives/ButtonPrimitive.d.ts.map +1 -1
  105. package/dist/cjs/primitives/ButtonPrimitive.js +10 -6
  106. package/dist/cjs/primitives/CheckboxPrimitive.d.ts.map +1 -1
  107. package/dist/cjs/primitives/CheckboxPrimitive.js +2 -0
  108. package/dist/cjs/primitives/HeaderPrimitive.d.ts.map +1 -1
  109. package/dist/cjs/primitives/HeaderPrimitive.js +11 -7
  110. package/dist/cjs/primitives/PopoverPrimitive.d.ts.map +1 -1
  111. package/dist/cjs/primitives/PopoverPrimitive.js +19 -6
  112. package/dist/cjs/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  113. package/dist/cjs/primitives/SecondaryButtonPrimitive.js +5 -3
  114. package/dist/cjs/primitives/TogglePrimitive.d.ts.map +1 -1
  115. package/dist/cjs/public_components/ChartQueryBuilder.d.ts.map +1 -1
  116. package/dist/cjs/public_components/ChartQueryBuilder.js +17 -7
  117. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  118. package/dist/cjs/public_components/CreateEnvironment.js +68 -30
  119. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  120. package/dist/cjs/public_components/DashboardManager.js +71 -4
  121. package/dist/cjs/public_components/EnvSelectPopover.d.ts +2 -1
  122. package/dist/cjs/public_components/EnvSelectPopover.d.ts.map +1 -1
  123. package/dist/cjs/public_components/EnvSelectPopover.js +48 -8
  124. package/dist/cjs/public_components/VirtualTableManager.d.ts.map +1 -1
  125. package/dist/cjs/public_components/VirtualTableManager.js +124 -10
  126. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.js +41 -2
  127. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  128. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  129. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  130. package/dist/cjs/utils/columnProcessing.js +7 -1
  131. package/dist/cjs/utils/constants.d.ts +1 -0
  132. package/dist/cjs/utils/constants.d.ts.map +1 -1
  133. package/dist/cjs/utils/constants.js +5 -1
  134. package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
  135. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  136. package/dist/cjs/utils/dataFetcher.js +0 -1
  137. package/dist/cjs/utils/databases.d.ts +6 -1
  138. package/dist/cjs/utils/databases.d.ts.map +1 -1
  139. package/dist/cjs/utils/databases.js +23 -5
  140. package/dist/cjs/utils/delay.d.ts.map +1 -1
  141. package/dist/cjs/utils/filter.d.ts +17 -21
  142. package/dist/cjs/utils/filter.d.ts.map +1 -1
  143. package/dist/cjs/utils/filter.js +6 -6
  144. package/dist/cjs/utils/report.d.ts +5 -5
  145. package/dist/cjs/utils/report.d.ts.map +1 -1
  146. package/dist/cjs/utils/schema.d.ts +6 -3
  147. package/dist/cjs/utils/schema.d.ts.map +1 -1
  148. package/dist/cjs/utils/schema.js +42 -3
  149. package/dist/cjs/utils/table.d.ts.map +1 -1
  150. package/dist/cjs/utils/tenants.d.ts.map +1 -1
  151. package/dist/cjs/utils/ui.d.ts.map +1 -1
  152. package/dist/esm/Admin.d.ts +14 -8
  153. package/dist/esm/Admin.d.ts.map +1 -1
  154. package/dist/esm/Admin.js +135 -26
  155. package/dist/esm/AdminProvider.d.ts +26 -5
  156. package/dist/esm/AdminProvider.d.ts.map +1 -1
  157. package/dist/esm/AdminProvider.js +177 -88
  158. package/dist/esm/api/ConnectionClient.d.ts +26 -12
  159. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  160. package/dist/esm/api/ConnectionClient.js +196 -31
  161. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  162. package/dist/esm/assets/XIcon.d.ts.map +1 -1
  163. package/dist/esm/components/CardSection.d.ts.map +1 -1
  164. package/dist/esm/components/CardSection.js +4 -2
  165. package/dist/esm/components/ClipboardButton.d.ts.map +1 -1
  166. package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
  167. package/dist/esm/components/DashboardSelectPopover.js +47 -8
  168. package/dist/esm/components/DatabaseSelector.d.ts +3 -1
  169. package/dist/esm/components/DatabaseSelector.d.ts.map +1 -1
  170. package/dist/esm/components/DatabaseSelector.js +3 -2
  171. package/dist/esm/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -1
  172. package/dist/esm/components/DateRangePicker/SingleDatePicker.js +31 -7
  173. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -1
  174. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.js +31 -7
  175. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  176. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  177. package/dist/esm/components/DropDownMenuWithLabel.js +9 -2
  178. package/dist/esm/components/DynamicBanner.d.ts +3 -2
  179. package/dist/esm/components/DynamicBanner.d.ts.map +1 -1
  180. package/dist/esm/components/DynamicBanner.js +7 -2
  181. package/dist/esm/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  182. package/dist/esm/components/EmptyDashboardComponent/index.js +3 -2
  183. package/dist/esm/components/EmptyVirtualTablesComponent.d.ts.map +1 -1
  184. package/dist/esm/components/EmptyVirtualTablesComponent.js +4 -1
  185. package/dist/esm/components/FormTooltip.d.ts.map +1 -1
  186. package/dist/esm/components/FormTooltip.js +4 -1
  187. package/dist/esm/components/InputLabel.d.ts.map +1 -1
  188. package/dist/esm/components/InputLabel.js +4 -2
  189. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts +1 -1
  190. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts.map +1 -1
  191. package/dist/esm/components/InternalDashboard/DashboardFilter.js +1 -1
  192. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -1
  193. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  194. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +33 -11
  195. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  196. package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
  197. package/dist/esm/components/InternalDashboard/InternalDashboard.js +129 -36
  198. package/dist/esm/components/OrgSelect.d.ts +0 -6
  199. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  200. package/dist/esm/components/OrgSelect.js +79 -45
  201. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +8 -2
  202. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  203. package/dist/esm/components/QuillMultiSelectWithCombo.js +351 -167
  204. package/dist/esm/components/QuillPopover.d.ts.map +1 -1
  205. package/dist/esm/components/QuillPopover.js +4 -5
  206. package/dist/esm/components/QuillSelect.js +9 -9
  207. package/dist/esm/components/QuillSelectWithCombo.d.ts +4 -3
  208. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  209. package/dist/esm/components/QuillSelectWithCombo.js +47 -21
  210. package/dist/esm/components/QuillToolTipPortal.d.ts.map +1 -1
  211. package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
  212. package/dist/esm/components/SqlTextEditor.js +15 -2
  213. package/dist/esm/components/Tenants/EditTenant.d.ts.map +1 -1
  214. package/dist/esm/components/Tenants/EditTenant.js +51 -8
  215. package/dist/esm/components/UiComponents.d.ts +16 -43
  216. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  217. package/dist/esm/components/UiComponents.js +127 -29
  218. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  219. package/dist/esm/forms/client_onboard/ConnectDatabase.js +163 -51
  220. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  221. package/dist/esm/forms/client_onboard/ConnectSchema.js +36 -2
  222. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts +2 -1
  223. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
  224. package/dist/esm/forms/client_onboard/CreateVirtualTables.js +61 -23
  225. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.js +2 -1
  226. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.js +2 -1
  227. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
  228. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.js +103 -17
  229. package/dist/esm/hooks/useDatabaseSchema.d.ts.map +1 -1
  230. package/dist/esm/hooks/useDatabaseSchema.js +19 -3
  231. package/dist/esm/hooks/useLongLoading.d.ts +13 -0
  232. package/dist/esm/hooks/useLongLoading.d.ts.map +1 -0
  233. package/dist/esm/hooks/useLongLoading.js +64 -0
  234. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  235. package/dist/esm/hooks/useThrottle.d.ts.map +1 -1
  236. package/dist/esm/icons/ArrowDownHeadIcon.d.ts.map +1 -1
  237. package/dist/esm/icons/CheckCircleIcon.d.ts.map +1 -1
  238. package/dist/esm/icons/ExclamationFilledIcon.d.ts.map +1 -1
  239. package/dist/esm/icons/ExteriorLinkIcon.d.ts.map +1 -1
  240. package/dist/esm/icons/QuestionMarkCircleIcon.d.ts.map +1 -1
  241. package/dist/esm/modals/CodePreview.d.ts.map +1 -1
  242. package/dist/esm/modals/CodePreview.js +7 -2
  243. package/dist/esm/modals/CreateEnvironmentModal.d.ts +5 -0
  244. package/dist/esm/modals/CreateEnvironmentModal.d.ts.map +1 -0
  245. package/dist/esm/modals/CreateEnvironmentModal.js +15 -0
  246. package/dist/esm/modals/EditEnvironmentModal.d.ts.map +1 -1
  247. package/dist/esm/modals/EditEnvironmentModal.js +74 -17
  248. package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -1
  249. package/dist/esm/modals/EditFiltersModal.js +21 -17
  250. package/dist/esm/modals/NewDashboardModal.d.ts.map +1 -1
  251. package/dist/esm/modals/NewDashboardModal.js +55 -29
  252. package/dist/esm/modals/PromoteReportModal.d.ts.map +1 -1
  253. package/dist/esm/modals/PromoteReportModal.js +15 -4
  254. package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
  255. package/dist/esm/modals/PromoteViewModal.js +13 -2
  256. package/dist/esm/primitives/ButtonPrimitive.d.ts.map +1 -1
  257. package/dist/esm/primitives/ButtonPrimitive.js +10 -6
  258. package/dist/esm/primitives/CheckboxPrimitive.d.ts.map +1 -1
  259. package/dist/esm/primitives/CheckboxPrimitive.js +2 -0
  260. package/dist/esm/primitives/HeaderPrimitive.d.ts.map +1 -1
  261. package/dist/esm/primitives/HeaderPrimitive.js +11 -7
  262. package/dist/esm/primitives/PopoverPrimitive.d.ts.map +1 -1
  263. package/dist/esm/primitives/PopoverPrimitive.js +19 -6
  264. package/dist/esm/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  265. package/dist/esm/primitives/SecondaryButtonPrimitive.js +5 -3
  266. package/dist/esm/primitives/TogglePrimitive.d.ts.map +1 -1
  267. package/dist/esm/public_components/ChartQueryBuilder.d.ts.map +1 -1
  268. package/dist/esm/public_components/ChartQueryBuilder.js +18 -8
  269. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  270. package/dist/esm/public_components/CreateEnvironment.js +68 -30
  271. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  272. package/dist/esm/public_components/DashboardManager.js +72 -5
  273. package/dist/esm/public_components/EnvSelectPopover.d.ts +2 -1
  274. package/dist/esm/public_components/EnvSelectPopover.d.ts.map +1 -1
  275. package/dist/esm/public_components/EnvSelectPopover.js +49 -9
  276. package/dist/esm/public_components/VirtualTableManager.d.ts.map +1 -1
  277. package/dist/esm/public_components/VirtualTableManager.js +125 -11
  278. package/dist/esm/public_components/__tests__/CreateEnvironment.test.js +41 -2
  279. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  280. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  281. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  282. package/dist/esm/utils/columnProcessing.js +7 -2
  283. package/dist/esm/utils/constants.d.ts +1 -0
  284. package/dist/esm/utils/constants.d.ts.map +1 -1
  285. package/dist/esm/utils/constants.js +4 -0
  286. package/dist/esm/utils/dataEditor.d.ts.map +1 -1
  287. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  288. package/dist/esm/utils/dataFetcher.js +0 -1
  289. package/dist/esm/utils/databases.d.ts +6 -1
  290. package/dist/esm/utils/databases.d.ts.map +1 -1
  291. package/dist/esm/utils/databases.js +23 -5
  292. package/dist/esm/utils/delay.d.ts.map +1 -1
  293. package/dist/esm/utils/filter.d.ts +17 -21
  294. package/dist/esm/utils/filter.d.ts.map +1 -1
  295. package/dist/esm/utils/filter.js +5 -5
  296. package/dist/esm/utils/report.d.ts +5 -5
  297. package/dist/esm/utils/report.d.ts.map +1 -1
  298. package/dist/esm/utils/schema.d.ts +6 -3
  299. package/dist/esm/utils/schema.d.ts.map +1 -1
  300. package/dist/esm/utils/schema.js +42 -3
  301. package/dist/esm/utils/table.d.ts.map +1 -1
  302. package/dist/esm/utils/tenants.d.ts.map +1 -1
  303. package/dist/esm/utils/ui.d.ts.map +1 -1
  304. package/package.json +1 -1
@@ -14,7 +14,7 @@ const QuillSelectWithCombo_1 = require("../components/QuillSelectWithCombo");
14
14
  const prism_react_renderer_1 = require("prism-react-renderer");
15
15
  const UiComponents_1 = require("../components/UiComponents");
16
16
  function CodePreview({ ModalComponent, isOpen, setIsOpen, }) {
17
- const { state } = (0, AdminProvider_1.useAdmin)();
17
+ const { state, eventTracking } = (0, AdminProvider_1.useAdmin)();
18
18
  const { dashboards } = (0, react_2.useDashboards)();
19
19
  const parentRef = (0, react_3.useRef)(null);
20
20
  const [modalWidth, setModalWidth] = (0, react_3.useState)(200);
@@ -22,6 +22,7 @@ function CodePreview({ ModalComponent, isOpen, setIsOpen, }) {
22
22
  const [toggleMode, setToggleMode] = (0, react_3.useState)('Dashboard');
23
23
  const [selectedReportId, setSelectedReportId] = (0, react_3.useState)(null);
24
24
  const [hideCode, setHideCode] = (0, react_3.useState)(false);
25
+ const [initialSizeIsSet, setInitialSizeIsSet] = (0, react_3.useState)(false);
25
26
  const selectedDashboardObject = (0, react_3.useMemo)(() => {
26
27
  return dashboards?.find((elem) => elem.name === state.selectedDashboard);
27
28
  }, [dashboards, state.selectedDashboard]);
@@ -34,6 +35,7 @@ function CodePreview({ ModalComponent, isOpen, setIsOpen, }) {
34
35
  setModalWidth(window.innerWidth - 80);
35
36
  }
36
37
  setModalHeight(window.innerHeight - 80);
38
+ setInitialSizeIsSet(true);
37
39
  }, []);
38
40
  (0, react_3.useEffect)(() => {
39
41
  handleResize();
@@ -57,11 +59,14 @@ function CodePreview({ ModalComponent, isOpen, setIsOpen, }) {
57
59
  ? `import { Dashboard } from '@quillsql/react' \n\nfunction DashboardPage() { \n\n\treturn ( \n\t\t // TODO: make sure all Quill Components are children of <QuillProvider /> \n\t\t<Dashboard \n\t\t\tname="${state.selectedDashboard}" \n\t\t\t// TODO: use id to navigate to report detail page \n\t\t\tonClickReport={report => console.log("Quill Report ID: ", report.id)} \n\t\t/> \n\t); \n}`
58
60
  : `import { Chart, Table } from '@quillsql/react' \n\nfunction ReportDetail() { \n\tconst { reportId } = useRouter() // TODO: replace with your navigation router \n\tconst { data, loading, error } = useQuill(reportId) \n\tconst { downloadCSV } = useExport(reportId) \n\n\treturn ( \n\t\t// TODO: make sure all Quill Components are children of <QuillProvider /> \n\t\t<>\n\t\t\t<h1>{data.name}</h1>\n\t\t\t<Chart reportId={reportId} />\n\t\t\t<YourButton onClick={downloadCSV}>Download CSV</Button>\n\t\t\t<Table reportId={reportId} autoHide />\n\t\t</> \n\t); \n}`;
59
61
  navigator.clipboard.writeText(code);
62
+ eventTracking?.logEvent?.('embed-preview-copy-code', {
63
+ dashboardName: state.selectedDashboard,
64
+ });
60
65
  };
61
66
  if (!state.selectedDashboard) {
62
67
  return null;
63
68
  }
64
- return ((0, jsx_runtime_1.jsx)("div", { ref: parentRef, children: (0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: isOpen, setIsOpen: setIsOpen, title: "Embed Preview", width: modalWidth, height: modalHeight, children: (0, jsx_runtime_1.jsxs)("div", { style: { paddingLeft: 20, paddingRight: 20 }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
69
+ return ((0, jsx_runtime_1.jsx)("div", { ref: parentRef, style: { visibility: initialSizeIsSet ? 'visible' : 'hidden' }, children: (0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: isOpen, setIsOpen: setIsOpen, title: "Embed Preview", width: modalWidth, height: modalHeight, children: (0, jsx_runtime_1.jsxs)("div", { style: { paddingLeft: 20, paddingRight: 20 }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
65
70
  display: 'flex',
66
71
  flexDirection: 'row',
67
72
  alignItems: 'center',
@@ -0,0 +1,5 @@
1
+ export default function CreateEnvironmentModal({ showCreateEnvironmentModal, setShowCreateEnvironmentModal, }: {
2
+ showCreateEnvironmentModal: boolean;
3
+ setShowCreateEnvironmentModal: (show: boolean) => void;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=CreateEnvironmentModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateEnvironmentModal.d.ts","sourceRoot":"","sources":["../../../src/modals/CreateEnvironmentModal.tsx"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,0BAA0B,EAC1B,6BAA6B,GAC9B,EAAE;IACD,0BAA0B,EAAE,OAAO,CAAC;IACpC,6BAA6B,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD,2CAuBA"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = CreateEnvironmentModal;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const AdminProvider_1 = require("../AdminProvider");
9
+ const primitives_1 = require("../primitives");
10
+ const CreateEnvironment_1 = __importDefault(require("../public_components/CreateEnvironment"));
11
+ function CreateEnvironmentModal({ showCreateEnvironmentModal, setShowCreateEnvironmentModal, }) {
12
+ const { onOnboardComplete } = (0, AdminProvider_1.useAdmin)();
13
+ return ((0, jsx_runtime_1.jsx)(primitives_1.ModalPrimitive, { isOpen: showCreateEnvironmentModal, onClose: () => {
14
+ if (confirm('Are you sure you want to close this modal? Changes will not be saved.')) {
15
+ setShowCreateEnvironmentModal(false);
16
+ }
17
+ }, children: (0, jsx_runtime_1.jsx)(CreateEnvironment_1.default, { onOnboardComplete: (client) => {
18
+ setShowCreateEnvironmentModal(false);
19
+ onOnboardComplete?.(client);
20
+ } }) }));
21
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"EditEnvironmentModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditEnvironmentModal.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,yBAAyB,EACzB,aAAa,EAGd,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAQ3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAsB1E,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,wBAAwB,GACzB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EACd,yBAAyB,CACvB,uBAAuB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAC1D,GACD,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,eAAe,EAAE,GAAG,CAAC;IACrB,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CAg4BA"}
1
+ {"version":3,"file":"EditEnvironmentModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditEnvironmentModal.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,yBAAyB,EACzB,aAAa,EAGd,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAQ3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAQ1E,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,wBAAwB,GACzB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EACd,yBAAyB,CACvB,uBAAuB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAC1D,GACD,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,eAAe,EAAE,GAAG,CAAC;IACrB,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CAi9BA"}
@@ -16,32 +16,35 @@ const constants_1 = require("../utils/constants");
16
16
  const EditTenant_1 = require("../components/Tenants/EditTenant");
17
17
  const ConnectionClient_1 = require("../api/ConnectionClient");
18
18
  const useDashboardManager_1 = require("../hooks/useDashboardManager");
19
- const header1Style = {
20
- fontWeight: '600',
21
- fontSize: '18px',
22
- marginBottom: '6px',
23
- color: '#000000',
24
- };
25
- const header2Style = {
26
- fontWeight: '500',
27
- fontSize: '13px',
28
- color: '#595959',
29
- marginBottom: '4px',
30
- };
31
19
  function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SecondaryButtonComponent, }) {
32
- const { state, dispatch, setClient, getToken, quillFetchWithToken } = (0, AdminProvider_1.useAdmin)();
20
+ const { state, dispatch, setClient, getToken, quillFetchWithToken, eventTracking, } = (0, AdminProvider_1.useAdmin)();
33
21
  const { setSelectedDashboard } = (0, useDashboardManager_1.useDashboardManager)();
34
22
  const [selectedEnvironmentName, setSelectedEnvironmentName] = (0, react_1.useState)(state.client.name);
35
23
  const [copied, setCopied] = (0, react_1.useState)(false);
36
24
  const [isSubmitTenantLoading, setSubmitTenantLoading] = (0, react_1.useState)(false);
37
25
  const [validationError, setValidationError] = (0, react_1.useState)(undefined);
38
26
  const [formError, setFormError] = (0, react_1.useState)(undefined);
39
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
40
- const [connectionDetails, setConnectionDetails] = (0, react_1.useState)((0, databases_1.getDatabaseConnectionFormat)(state.client.databaseType));
27
+ const connectionDetails = (0, react_1.useMemo)(() => {
28
+ return (0, databases_1.getDatabaseConnectionFormat)(state.client?.databaseType || '');
29
+ }, [state.client?.databaseType]);
41
30
  const [tenantToEdit, setTenantToEdit] = (0, react_1.useState)(undefined);
42
31
  const [fetchSchemasLoading, setFetchSchemasLoading] = (0, react_1.useState)(false);
43
32
  const [createNewTenant, setCreateNewTenant] = (0, react_1.useState)(false);
44
33
  const [isConnectDatabaseModalOpen, setIsConnectDatabaseModalOpen] = (0, react_1.useState)(false);
34
+ const header1Style = {
35
+ fontWeight: '600',
36
+ fontSize: '18px',
37
+ marginBottom: '6px',
38
+ color: state.theme?.primaryTextColor,
39
+ fontFamily: state.theme?.fontFamily,
40
+ };
41
+ const header2Style = {
42
+ fontWeight: '500',
43
+ fontSize: '13px',
44
+ marginBottom: '4px',
45
+ fontFamily: state.theme?.fontFamily,
46
+ color: state.theme?.secondaryTextColor,
47
+ };
45
48
  const tenantRequest = async (tenant, mode) => {
46
49
  if (!tenant.clientId) {
47
50
  throw new Error('Client ID is required on tenant');
@@ -86,11 +89,27 @@ function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextI
86
89
  if (!results.length) {
87
90
  setFormError(`No rows were returned from this ${tenant.tenantTableQuery ? 'query' : 'table'}`);
88
91
  }
92
+ const uniqueIds = new Set(results?.map((r) => r.id));
93
+ if (uniqueIds.size < results?.length) {
94
+ setFormError('Duplicate tenant IDs found in results. Each tenant must have a unique ID.');
95
+ return [];
96
+ }
89
97
  return results;
90
98
  }
91
99
  }
92
100
  catch (e) {
93
101
  setFormError(e.message);
102
+ eventTracking?.logError?.({
103
+ type: 'bug', // TODO: determine type
104
+ severity: 'high',
105
+ message: 'Error validating tenant',
106
+ errorMessage: e.message,
107
+ errorStack: e.stack,
108
+ errorData: {
109
+ caller: 'EditEnvironmentModal',
110
+ function: 'onValidateEditTenant',
111
+ },
112
+ });
94
113
  throw e;
95
114
  }
96
115
  finally {
@@ -205,6 +224,17 @@ function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextI
205
224
  }, 50);
206
225
  }
207
226
  catch (e) {
227
+ eventTracking?.logError?.({
228
+ type: 'bug', // TODO: determine type
229
+ severity: 'high',
230
+ message: 'Error submitting tenant',
231
+ errorMessage: e.message,
232
+ errorStack: e.stack,
233
+ errorData: {
234
+ caller: 'EditEnvironmentModal',
235
+ function: 'onSubmitEditTenant',
236
+ },
237
+ });
208
238
  setFormError(e.message);
209
239
  }
210
240
  finally {
@@ -250,6 +280,17 @@ function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextI
250
280
  }
251
281
  catch (e) {
252
282
  console.log('error', e);
283
+ eventTracking?.logError?.({
284
+ type: 'bug', // TODO: determine type
285
+ severity: 'high',
286
+ message: 'Error deleting tenant',
287
+ errorMessage: e.message,
288
+ errorStack: e.stack,
289
+ errorData: {
290
+ caller: 'EditEnvironmentModal',
291
+ function: 'onDeleteTenant',
292
+ },
293
+ });
253
294
  setValidationError('Error deleting tenant');
254
295
  }
255
296
  finally {
@@ -274,7 +315,7 @@ function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextI
274
315
  loading: true,
275
316
  },
276
317
  });
277
- const schema = await (0, ConnectionClient_1.getTableColumnsBySchema)(state.queryEndpoint, state.client._id, getToken);
318
+ const schema = await (0, ConnectionClient_1.getTableColumnsBySchema)(state.isSelfHosted, state.queryEndpoint, state.client._id, state.client.databaseType, getToken, state.client.schemaNames ?? [], state.queryHeaders);
278
319
  // If any of the tenants point to a table that no longer exists, throw an error
279
320
  const tenantTables = state.client.allTenantTypes?.filter((t) => t.tenantTable !== undefined);
280
321
  const tables = schema.columnsByTable.map((t) => t.tableName);
@@ -344,6 +385,17 @@ function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextI
344
385
  setIsConnectDatabaseModalOpen(false);
345
386
  }
346
387
  catch (e) {
388
+ eventTracking?.logError?.({
389
+ type: 'bug', // TODO: determine type
390
+ severity: 'high',
391
+ message: 'Error updating environment',
392
+ errorMessage: e.message,
393
+ errorStack: e.stack,
394
+ errorData: {
395
+ caller: 'EditEnvironmentModal',
396
+ function: 'handleUpdateEnvironment',
397
+ },
398
+ });
347
399
  setIsConnectDatabaseModalOpen(false);
348
400
  setValidationError(e.message);
349
401
  }
@@ -352,6 +404,10 @@ function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextI
352
404
  }
353
405
  };
354
406
  const handleDeleteEnvironment = async () => {
407
+ if (state.clients.length === 1) {
408
+ alert('You cannot delete the only environment');
409
+ return;
410
+ }
355
411
  if (confirm('Are you sure? All dashboards in this environment will also be deleted. This action cannot be undone.')) {
356
412
  await quillFetchWithToken({
357
413
  client: {
@@ -371,7 +427,7 @@ function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextI
371
427
  payload: state.clients.filter((c) => c._id !== state.client._id),
372
428
  });
373
429
  setSelectedDashboard(null);
374
- setClient(state.clients[0]);
430
+ setClient(state.clients.filter((c) => c._id !== state.client._id)[0]);
375
431
  setIsOpen(false);
376
432
  onSave();
377
433
  }
@@ -413,6 +469,7 @@ function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent, TextI
413
469
  // padding: '2px 8px',
414
470
  fontSize: 12,
415
471
  font: 'monospace',
472
+ fontFamily: state.theme.fontFamily,
416
473
  fontWeight: 300,
417
474
  width: 'fit-content',
418
475
  }, children: "Dashboard Owner" })), (0, jsx_runtime_1.jsx)("div", { style: {
@@ -1 +1 @@
1
- {"version":3,"file":"EditFiltersModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditFiltersModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwC,MAAM,OAAO,CAAC;AAExE,OAAO,EACL,oBAAoB,EAKrB,MAAM,iBAAiB,CAAC;AAczB,OAAO,EAEL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAOpC,OAA2B,EACzB,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAY1C,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AAqBvF,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,qBAAqB,EACrB,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,cAAc,EACd,gBAAgB,GACjB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EAAE,KAAK,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IAC7E,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,SAAS,EAAE,GAAG,CAAC;IACf,wBAAwB,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,SAAS,CAAC;IAC9E,cAAc,EAAE,GAAG,CAAC;IACpB,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B,2CAokFA"}
1
+ {"version":3,"file":"EditFiltersModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditFiltersModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwC,MAAM,OAAO,CAAC;AAExE,OAAO,EACL,oBAAoB,EAKrB,MAAM,iBAAiB,CAAC;AAczB,OAAO,EAEL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAOpC,OAA2B,EACzB,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAY1C,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AAsBvF,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,qBAAqB,EACrB,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,cAAc,EACd,gBAAgB,GACjB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EAAE,KAAK,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IAC7E,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,SAAS,EAAE,GAAG,CAAC;IACf,wBAAwB,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,SAAS,CAAC;IAC9E,cAAc,EAAE,GAAG,CAAC;IACpB,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B,2CA2kFA"}
@@ -48,7 +48,7 @@ const intervalTypeOptions = [
48
48
  function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SelectComponent, dashNames, SecondaryButtonComponent, ErrorComponent, openPromoteModal, }) {
49
49
  const { state } = (0, AdminProvider_1.useAdmin)();
50
50
  const { dashboards, deleteDashboard, updateDashboard } = (0, react_2.useDashboards)();
51
- const { data: selectedDashboard } = (0, react_2.useDashboard)(selectedDashboardName);
51
+ const { data: selectedDashboard } = (0, react_2.useDashboardInternal)(selectedDashboardName);
52
52
  const [isDateComparison, setIsDateComparison] = (0, react_1.useState)(false);
53
53
  const [currentDashboardName, setCurrentDashboardName] = (0, react_1.useState)(selectedDashboardName);
54
54
  const [newFilters, setNewFilters] = (0, react_1.useState)([]);
@@ -380,7 +380,8 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
380
380
  return 'Dashboard name cannot be empty';
381
381
  if (newFilters?.some((f) => !f.label || !f.table || !f.field))
382
382
  return 'Filters must have a label, table, and field';
383
- if (newFilters
383
+ if ((newFilters ?? [])
384
+ .concat(newDateFilter ? [newDateFilter] : [])
384
385
  ?.map((f) => f.label)
385
386
  .filter((label, index, self) => self.indexOf(label) !== index).length)
386
387
  return 'Filters must have unique labels';
@@ -423,14 +424,15 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
423
424
  .join(' ') ?? '');
424
425
  };
425
426
  const handleSubmitDashboardChanges = async () => {
426
- const validationErrorMessages = (0, validation_1.validateDashboard)(newFilters, dashNames, currentDashboardName, newDateFilter ? { ...newDateFilter, comparison: isDateComparison } : null, { ...selectedDashboard, name: currentDashboardName });
427
+ const validationErrorMessages = (0, validation_1.validateDashboard)(newFilters, dashNames, currentDashboardName, newDateFilter ? { ...newDateFilter, comparison: isDateComparison } : null, selectedDashboard);
427
428
  if (validationErrorMessages.length !== 0) {
428
429
  setValidationError(validationErrorMessages);
429
430
  return;
430
431
  }
431
432
  const updatedFilters = newFilters.map((filter) => {
432
433
  const table = filteredTables.find((table) => table?.name === filter?.table);
433
- const filterType = (0, Admin_1.getPostgresBasicType)(table.columns.find((col) => col?.name === filter?.field));
434
+ const column = table?.columns.find((col) => col.field === filter?.field);
435
+ const filterType = column ? (0, Admin_1.getPostgresBasicType)(column) : 'string';
434
436
  return {
435
437
  table: filter.table,
436
438
  field: filter.field,
@@ -633,7 +635,7 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
633
635
  // ) ?? initialRange,
634
636
  selectablePresetOptions.find((option) => option.value === e) ??
635
637
  initialRange);
636
- }, options: selectablePresetOptions, theme: Admin_1.defaultTheme, hideEmptyOption: true })] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
638
+ }, options: selectablePresetOptions, theme: state.theme, hideEmptyOption: true })] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
637
639
  display: 'flex',
638
640
  flexDirection: 'row',
639
641
  gap: '10px',
@@ -674,12 +676,12 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
674
676
  }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
675
677
  display: 'flex',
676
678
  flexDirection: 'column',
677
- fontFamily: Admin_1.defaultTheme.fontFamily,
679
+ fontFamily: state.theme.fontFamily,
678
680
  gap: 8,
679
681
  }, children: [(0, jsx_runtime_1.jsx)("h3", { style: {
680
682
  fontSize: 14,
681
683
  fontWeight: 600,
682
- color: Admin_1.defaultTheme.primaryTextColor,
684
+ color: state.theme.primaryTextColor,
683
685
  }, children: "Recurring" }), (0, jsx_runtime_1.jsxs)("div", { style: {
684
686
  display: 'flex',
685
687
  flexDirection: 'row',
@@ -763,7 +765,7 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
763
765
  }, width: "78px", number: true, max: 9999, min: 0, step: 1 })] }))] }), (0, jsx_runtime_1.jsx)("h3", { style: {
764
766
  fontSize: 14,
765
767
  fontWeight: 600,
766
- color: Admin_1.defaultTheme.primaryTextColor,
768
+ color: state.theme.primaryTextColor,
767
769
  }, children: "Standard" }), (0, jsx_runtime_1.jsxs)("div", { style: {
768
770
  display: 'flex',
769
771
  flexDirection: 'row',
@@ -873,7 +875,7 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
873
875
  ...newDateFilter,
874
876
  presetOptions: updatedOptions,
875
877
  });
876
- }, theme: Admin_1.defaultTheme, hideEmptyOption: true })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
878
+ }, theme: state.theme, hideEmptyOption: true })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
877
879
  display: 'flex',
878
880
  flexDirection: 'column',
879
881
  }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Value" }), interval.type === 'week' && ((0, jsx_runtime_1.jsx)("div", { style: { width: 200, visibility: 'hidden' } })), interval.type === 'relative' && ((0, jsx_runtime_1.jsxs)("div", { style: {
@@ -927,7 +929,7 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
927
929
  ...newDateFilter,
928
930
  presetOptions: updatedOptions,
929
931
  });
930
- }, theme: Admin_1.defaultTheme, hideEmptyOption: true, style: {
932
+ }, theme: state.theme, hideEmptyOption: true, style: {
931
933
  width: 120,
932
934
  maxWidth: 120,
933
935
  minWidth: 120,
@@ -1237,10 +1239,10 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
1237
1239
  })
1238
1240
  .map((column) => {
1239
1241
  return {
1240
- label: column.name,
1241
- value: column.name,
1242
+ label: column.label || column.field,
1243
+ value: column.field,
1242
1244
  };
1243
- })
1245
+ }) || []
1244
1246
  : [], onChange: (event) => {
1245
1247
  // Capitalize the label
1246
1248
  const e = event.target.value;
@@ -1271,7 +1273,7 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
1271
1273
  alignItems: 'center',
1272
1274
  width: '100%',
1273
1275
  gap: 10,
1274
- }, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { theme: Admin_1.defaultTheme, value: filter && filter.stringFilterType
1276
+ }, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { theme: state.theme, value: filter && filter.stringFilterType
1275
1277
  ? filter.stringFilterType
1276
1278
  : 'default', onChange: (e) => {
1277
1279
  const updatedFilters = newFilters.map((otherFilter, i) => index === i
@@ -1307,5 +1309,7 @@ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, Mo
1307
1309
  flexDirection: 'row',
1308
1310
  justifyContent: 'space-between',
1309
1311
  alignItems: 'center',
1310
- }, children: [(0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleSubmitDashboardChanges, label: "Save changes", disabled: !!dashboardValidationError, tooltipText: dashboardValidationError }), validationError.length !== 0 && ((0, jsx_runtime_1.jsx)(ErrorComponent, { errorMessage: validationError && validationError[0] }))] })] }) }) }) }));
1312
+ }, children: [(0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleSubmitDashboardChanges, label: "Save changes", disabled: !!dashboardValidationError, tooltipText: dashboardValidationError }), validationError.length !== 0 && ((0, jsx_runtime_1.jsx)(ErrorComponent, { errorMessage: validationError && validationError[0], containerStyle: {
1313
+ marginLeft: 4,
1314
+ } }))] })] }) }) }) }));
1311
1315
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NewDashboardModal.d.ts","sourceRoot":"","sources":["../../../src/modals/NewDashboardModal.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAiB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAYlE,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,wBAAwB,GACzB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EAAE,GAAG,CAAC;IACxB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,SAAS,EAAE,GAAG,CAAC;IACf,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CAqoBA"}
1
+ {"version":3,"file":"NewDashboardModal.d.ts","sourceRoot":"","sources":["../../../src/modals/NewDashboardModal.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAiB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAYlE,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,wBAAwB,GACzB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EAAE,GAAG,CAAC;IACxB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,SAAS,EAAE,GAAG,CAAC;IACf,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CAgqBA"}
@@ -31,6 +31,7 @@ function NewDashboardModal({ isOpen, setIsOpen, onSave, ModalComponent, TextInpu
31
31
  const [initialRange, setInitialRange] = (0, react_1.useState)({ label: 'Last 30 days', value: 'LAST_30_DAYS' });
32
32
  const [newDateFilter, setNewDateFilter] = (0, react_1.useState)(undefined);
33
33
  const [tenantKey, setTenantKey] = (0, react_1.useState)(state.client?.ownerTenantFields?.[0]);
34
+ const [isSubmitting, setIsSubmitting] = (0, react_1.useState)(false);
34
35
  const ownerTenants = (0, react_1.useMemo)(() => state.client?.allTenantTypes?.filter((tenant) => state.client?.ownerTenantFields?.includes(tenant.tenantField)), [state.client?.allTenantTypes, state.client?.ownerTenantFields]);
35
36
  const filteredTables = (0, react_1.useMemo)(() => {
36
37
  return state.tables.filter((table) => {
@@ -43,12 +44,16 @@ function NewDashboardModal({ isOpen, setIsOpen, onSave, ModalComponent, TextInpu
43
44
  return (newFilters.some((filter) => !filter.label || !filter.table || !filter.field) ||
44
45
  newDateFilter?.label === '' ||
45
46
  !tenantKey ||
46
- !selectedDashboardName);
47
- }, [newFilters, newDateFilter, selectedDashboardName]);
47
+ !selectedDashboardName ||
48
+ isSubmitting);
49
+ }, [newFilters, newDateFilter, selectedDashboardName, isSubmitting]);
48
50
  const handleAddFilter = async () => {
49
51
  setNewFilters([...newFilters, {}]);
50
52
  };
51
- const handleSubmitDashboardChanges = async () => {
53
+ const handleSubmitDashboardChanges = (0, react_1.useCallback)(async () => {
54
+ if (isSubmitting) {
55
+ return; // Prevent double submission
56
+ }
52
57
  if (!selectedDashboardName ||
53
58
  newFilters.some((filter) => !filter.label) ||
54
59
  (Object.keys(newDateFilter ?? {}).length && !newDateFilter?.label)) {
@@ -107,26 +112,47 @@ function NewDashboardModal({ isOpen, setIsOpen, onSave, ModalComponent, TextInpu
107
112
  alert('Your dashboard must have an owner');
108
113
  return;
109
114
  }
110
- await createDashboard({
111
- name: selectedDashboardName.trim(),
112
- filters: updatedFilters,
113
- dateFilter: newDateFilter
114
- ? {
115
- ...newDateFilter,
116
- // comparison: isDateComparison,
117
- comparison: false,
118
- primaryRange: initialRange,
119
- }
120
- : undefined,
121
- dashboardOwners: [tenantKey],
122
- });
123
- onSave(selectedDashboardName, tenantKey);
124
- await (0, delay_1.delay)(200);
125
- setIsOpen(false);
126
- setSelectedDashboardName('');
127
- setNewFilters([]);
128
- // setIsDateComparison(false);
129
- };
115
+ setIsSubmitting(true);
116
+ try {
117
+ await createDashboard({
118
+ name: selectedDashboardName.trim(),
119
+ filters: updatedFilters,
120
+ dateFilter: newDateFilter
121
+ ? {
122
+ ...newDateFilter,
123
+ // comparison: isDateComparison,
124
+ comparison: false,
125
+ primaryRange: initialRange,
126
+ }
127
+ : undefined,
128
+ dashboardOwners: [tenantKey],
129
+ });
130
+ onSave(selectedDashboardName, tenantKey);
131
+ await (0, delay_1.delay)(200);
132
+ setIsOpen(false);
133
+ setSelectedDashboardName('');
134
+ setNewFilters([]);
135
+ // setIsDateComparison(false);
136
+ }
137
+ catch (error) {
138
+ console.error('Error creating dashboard:', error);
139
+ // Optionally show an error message to the user
140
+ }
141
+ finally {
142
+ setIsSubmitting(false);
143
+ }
144
+ }, [
145
+ isSubmitting,
146
+ selectedDashboardName,
147
+ newFilters,
148
+ newDateFilter,
149
+ dashNames,
150
+ tenantKey,
151
+ initialRange,
152
+ createDashboard,
153
+ onSave,
154
+ setIsOpen,
155
+ ]);
130
156
  const handleDeleteFilter = (index) => {
131
157
  setNewFilters(newFilters.filter((_, i) => i !== index));
132
158
  };
@@ -245,13 +271,13 @@ function NewDashboardModal({ isOpen, setIsOpen, onSave, ModalComponent, TextInpu
245
271
  }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Field" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: filter?.field ?? '', options: filter?.table
246
272
  ? filteredTables
247
273
  .find((t) => t.name === filter.table)
248
- .columns.filter((column) => (0, columnProcessing_1.convertFieldTypeToJSType)(column.fieldType) === 'string')
274
+ ?.columns.filter((column) => (0, columnProcessing_1.convertFieldTypeToJSType)(column.fieldType) === 'string')
249
275
  .map((column) => {
250
276
  return {
251
- label: column.name,
252
- value: column.name,
277
+ label: column.label || column.field,
278
+ value: column.field,
253
279
  };
254
- })
280
+ }) || []
255
281
  : [], onChange: (e) => {
256
282
  // Capitalize the label
257
283
  const updatedFilters = newFilters.map((otherFilter, i) => index === i
@@ -297,5 +323,5 @@ function NewDashboardModal({ isOpen, setIsOpen, onSave, ModalComponent, TextInpu
297
323
  cursor: 'pointer',
298
324
  width: '100%',
299
325
  }, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#4C5462", width: "20", height: "20", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z", clipRule: "evenodd" }) }) })] }) })] })] }));
300
- }) })), (0, jsx_runtime_1.jsx)("div", { style: { height: 12 } }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAddFilter, label: "Add filter +" })] }), (0, jsx_runtime_1.jsx)("div", { style: { height: 18 } }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleSubmitDashboardChanges, label: 'Create', disabled: saveButtonDisabled }) })] }) }));
326
+ }) })), (0, jsx_runtime_1.jsx)("div", { style: { height: 12 } }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAddFilter, label: "Add filter +" })] }), (0, jsx_runtime_1.jsx)("div", { style: { height: 18 } }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleSubmitDashboardChanges, label: isSubmitting ? 'Creating...' : 'Create', disabled: saveButtonDisabled }) })] }) }));
301
327
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PromoteReportModal.d.ts","sourceRoot":"","sources":["../../../src/modals/PromoteReportModal.tsx"],"names":[],"mappings":"AAIA,UAAU,kBAAkB;IAC1B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,QAAQ,EACR,eAAe,EACf,oBAAoB,GACrB,EAAE,kBAAkB,2CA4LpB"}
1
+ {"version":3,"file":"PromoteReportModal.d.ts","sourceRoot":"","sources":["../../../src/modals/PromoteReportModal.tsx"],"names":[],"mappings":"AAIA,UAAU,kBAAkB;IAC1B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,QAAQ,EACR,eAAe,EACf,oBAAoB,GACrB,EAAE,kBAAkB,2CA2MpB"}
@@ -6,7 +6,7 @@ const react_1 = require("react");
6
6
  const AdminProvider_1 = require("../AdminProvider");
7
7
  const react_2 = require("@quillsql/react");
8
8
  function PromoteReportModal({ ModalComponent, HeaderComponent, ButtonComponent, SelectComponent, CheckboxComponent, isOpen, setIsOpen, reportId, currentClientId, currentDashboardName, }) {
9
- const { state, quillFetchWithToken } = (0, AdminProvider_1.useAdmin)();
9
+ const { state, quillFetchWithToken, eventTracking } = (0, AdminProvider_1.useAdmin)();
10
10
  const { dashboards } = (0, react_2.useDashboards)();
11
11
  const [selectedClientId, setSelectedClientId] = (0, react_1.useState)(currentClientId);
12
12
  const [dashboardName, setDashboardName] = (0, react_1.useState)(null);
@@ -51,7 +51,7 @@ function PromoteReportModal({ ModalComponent, HeaderComponent, ButtonComponent,
51
51
  dashboardName: dashboardName,
52
52
  itemId: reportId,
53
53
  skipWarning,
54
- addMissingTables: autoPromoteVirtualTables,
54
+ addMissingTables: autoPromoteVirtualTables && currentClientId !== selectedClientId,
55
55
  },
56
56
  adminMode: true,
57
57
  });
@@ -81,6 +81,17 @@ function PromoteReportModal({ ModalComponent, HeaderComponent, ButtonComponent,
81
81
  alert('Report promoted successfully.');
82
82
  }
83
83
  catch (error) {
84
+ eventTracking?.logError?.({
85
+ type: 'bug', // TODO: determine type
86
+ severity: 'high',
87
+ message: 'Error promoting report',
88
+ errorMessage: error.message,
89
+ errorStack: error.stack,
90
+ errorData: {
91
+ caller: 'PromoteReportModal',
92
+ function: 'handlePromote',
93
+ },
94
+ });
84
95
  console.error('Promotion failed:', error);
85
96
  }
86
97
  };
@@ -115,13 +126,13 @@ function PromoteReportModal({ ModalComponent, HeaderComponent, ButtonComponent,
115
126
  display: 'flex',
116
127
  justifyContent: 'space-between',
117
128
  gap: 12,
118
- }, children: [(0, jsx_runtime_1.jsx)(CheckboxComponent, { label: "Add missing tables", isChecked: autoPromoteVirtualTables, onChange: () => {
129
+ }, children: [(0, jsx_runtime_1.jsx)(CheckboxComponent, { label: "Add missing tables", isChecked: autoPromoteVirtualTables && currentClientId !== selectedClientId, onChange: () => {
119
130
  setAutoPromoteVirtualTables(!autoPromoteVirtualTables);
120
131
  }, labelStyle: {
121
132
  color: '#666666',
122
133
  fontSize: '13px',
123
134
  fontWeight: 400,
124
- } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
135
+ }, disabled: currentClientId === selectedClientId }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
125
136
  handlePromote();
126
137
  setIsOpen(false);
127
138
  }, label: "Promote Report", disabled: !selectedClientId || !dashboardName, width: 160 })] })] })] }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"PromoteViewModal.d.ts","sourceRoot":"","sources":["../../../src/modals/PromoteViewModal.tsx"],"names":[],"mappings":"AAIA,UAAU,wBAAwB;IAChC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,EAC/C,cAAc,EACd,eAAe,EACf,eAAe,EACf,MAAM,EACN,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,IAAI,GACL,EAAE,wBAAwB,2CA2H1B"}
1
+ {"version":3,"file":"PromoteViewModal.d.ts","sourceRoot":"","sources":["../../../src/modals/PromoteViewModal.tsx"],"names":[],"mappings":"AAIA,UAAU,wBAAwB;IAChC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,EAC/C,cAAc,EACd,eAAe,EACf,eAAe,EACf,MAAM,EACN,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,IAAI,GACL,EAAE,wBAAwB,2CAsI1B"}
@@ -6,10 +6,10 @@ const react_1 = require("react");
6
6
  const QuillSelectWithCombo_1 = require("../components/QuillSelectWithCombo");
7
7
  const AdminProvider_1 = require("../AdminProvider");
8
8
  function PromoteVirtualTableModal({ ModalComponent, HeaderComponent, ButtonComponent, isOpen, setIsOpen, clientId, client, clients, view, }) {
9
- const { state, quillFetchWithToken } = (0, AdminProvider_1.useAdmin)();
9
+ const { state, quillFetchWithToken, eventTracking } = (0, AdminProvider_1.useAdmin)();
10
10
  const [selectedClientId, setClientId] = (0, react_1.useState)(undefined);
11
11
  (0, react_1.useEffect)(() => {
12
- setClientId(clients[0].id);
12
+ setClientId(clients[0]?.id);
13
13
  }, [clients]);
14
14
  const handlePromote = async (skipWarning = false) => {
15
15
  if (!selectedClientId) {
@@ -51,6 +51,17 @@ function PromoteVirtualTableModal({ ModalComponent, HeaderComponent, ButtonCompo
51
51
  alert('Virtual Table promoted successfully.');
52
52
  }
53
53
  catch (error) {
54
+ eventTracking?.logError?.({
55
+ type: 'bug', // TODO: determine type
56
+ severity: 'high',
57
+ message: 'Error promoting virtual table',
58
+ errorMessage: error.message,
59
+ errorStack: error.stack,
60
+ errorData: {
61
+ caller: 'PromoteViewModal',
62
+ function: 'handlePromote',
63
+ },
64
+ });
54
65
  console.error('Promotion failed:', error);
55
66
  }
56
67
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonPrimitive.d.ts","sourceRoot":"","sources":["../../../src/primitives/ButtonPrimitive.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAgB,MAAM,UAAU,CAAC;AAGpD,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAC7B,oBAAoB,GAAG;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAgGF,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ButtonPrimitive.d.ts","sourceRoot":"","sources":["../../../src/primitives/ButtonPrimitive.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAC7B,oBAAoB,GAAG;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAsGF,CAAC;AAEF,eAAe,eAAe,CAAC"}