@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
@@ -6,15 +6,20 @@ import { EditTenant } from '../../components/Tenants/EditTenant';
6
6
  import CardSection from '../../components/CardSection';
7
7
  import { useDatabaseSchema } from '../../hooks/useDatabaseSchema';
8
8
  import { MemoizedButton } from '../../components/UiComponents';
9
+ import { useLongLoading } from '../../hooks/useLongLoading';
9
10
  export default function ConnectSchema({ containerStyle, header1Style,
10
11
  // header2Style,
11
12
  databaseSchema, connection, tenantInit, onTenantCreation, clientId, selectedSchemas, state, label, returnToConnectDatabase, }) {
12
13
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
13
14
  const [formError, setFormError] = useState(undefined);
14
15
  const [isSubmitTenantLoading, setSubmitTenantLoading] = useState(false);
16
+ useLongLoading(isSubmitTenantLoading, {
17
+ origin: 'ConnectSchema',
18
+ loadDescription: 'Submitting tenant',
19
+ });
15
20
  const [tenantToEdit, setTenantToEdit] = useState(tenantInit?.ownerTenant);
16
21
  const { schema, isLoading } = useDatabaseSchema();
17
- const { quillFetchWithToken } = useAdmin();
22
+ const { quillFetchWithToken, eventTracking } = useAdmin();
18
23
  const tenantRequest = async (tenant, mode, isOnboarding) => {
19
24
  return await quillFetchWithToken({
20
25
  client: {
@@ -70,6 +75,17 @@ databaseSchema, connection, tenantInit, onTenantCreation, clientId, selectedSche
70
75
  }
71
76
  catch (e) {
72
77
  console.log('error', e);
78
+ eventTracking?.logError?.({
79
+ type: 'bug', // TODO: determine type
80
+ severity: 'high',
81
+ message: 'Error updating tenant',
82
+ errorMessage: e.message,
83
+ errorStack: e.stack,
84
+ errorData: {
85
+ caller: 'ConnectSchema',
86
+ function: 'onSubmitEditTenant',
87
+ },
88
+ });
73
89
  setFormError('Error updating tenant');
74
90
  }
75
91
  finally {
@@ -99,11 +115,27 @@ databaseSchema, connection, tenantInit, onTenantCreation, clientId, selectedSche
99
115
  if (!results?.length) {
100
116
  setFormError(`No rows were returned from this ${tenant.tenantTableQuery ? 'query' : 'table'}`);
101
117
  }
118
+ const uniqueIds = new Set(results?.map((r) => r.id));
119
+ if (uniqueIds.size < results?.length) {
120
+ setFormError('Duplicate tenant IDs found in results. Each tenant must have a unique ID.');
121
+ return [];
122
+ }
102
123
  return results;
103
124
  }
104
125
  }
105
126
  catch (e) {
106
127
  console.log('error', e);
128
+ eventTracking?.logError?.({
129
+ type: 'bug', // TODO: determine type
130
+ severity: 'high',
131
+ message: 'Error validating tenant',
132
+ errorMessage: e.message,
133
+ errorStack: e.stack,
134
+ errorData: {
135
+ caller: 'ConnectSchema',
136
+ function: 'onValidateEditTenant',
137
+ },
138
+ });
107
139
  setFormError('Error validating tenant');
108
140
  return [];
109
141
  }
@@ -123,7 +155,8 @@ databaseSchema, connection, tenantInit, onTenantCreation, clientId, selectedSche
123
155
  }, children: [_jsx("h2", { style: {
124
156
  fontSize: 15,
125
157
  fontWeight: 500,
126
- color: '#6e6e6e',
158
+ color: state.theme?.secondaryTextColor,
159
+ fontFamily: state.theme?.fontFamily,
127
160
  paddingBottom: 20,
128
161
  }, children: `How do you represent your customers in your database?` }), _jsx(EditTenant, { tenant: tenantToEdit, setTenant: (tenant) => setTenantToEdit(tenant), setCreateNewTenant: () => { }, onSubmitEditTenant: onSubmitEditTenant, onValidateEditTenant: onValidateEditTenant, SecondaryButtonComponent: SecondaryButtonPrimitive, TextInputComponent: TextInputPrimitive, ButtonComponent: MemoizedButton, isSubmitTenantLoading: isSubmitTenantLoading, client: {
129
162
  id: clientId,
@@ -138,6 +171,7 @@ databaseSchema, connection, tenantInit, onTenantCreation, clientId, selectedSche
138
171
  display: 'flex',
139
172
  flexDirection: 'column',
140
173
  gap: 20,
174
+ fontFamily: state.theme?.fontFamily,
141
175
  width: '100%',
142
176
  }, children: [_jsx(CardSection, { children: noTables ? 'Schema Issue' : 'Tenant Issue' }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 5 }, children: [_jsx("div", { style: {
143
177
  color: 'red',
@@ -38,10 +38,11 @@ export declare function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQue
38
38
  }) => void;
39
39
  addVirtualTable: (e: boolean) => Promise<void>;
40
40
  }): import("react/jsx-runtime").JSX.Element;
41
- export declare function TenantFieldModal({ isOpen, setClosed, tenant, onOverride, }: {
41
+ export declare function TenantFieldModal({ isOpen, setClosed, tenant, onOverride, errorType, }: {
42
42
  isOpen: boolean;
43
43
  setClosed: () => void;
44
44
  tenant?: QuillTenant;
45
45
  onOverride?: () => void;
46
+ errorType?: 'missing' | 'type_mismatch';
46
47
  }): import("react/jsx-runtime").JSX.Element;
47
48
  //# sourceMappingURL=CreateVirtualTables.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateVirtualTables.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/CreateVirtualTables.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+B,MAAM,OAAO,CAAC;AACnE,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAY3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOvD,OAAO,EAAE,KAAK,EAAY,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,GACb,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IACpC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,IAAI,CAAC;CAClE,2CAoiBA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,EACT,SAAS,EACT,YAAY,EACZ,eAAe,GAChB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD,2CAqHA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,GACX,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,2CA8EA"}
1
+ {"version":3,"file":"CreateVirtualTables.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/CreateVirtualTables.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+B,MAAM,OAAO,CAAC;AACnE,OAAO,EAAkB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOvD,OAAO,EAAE,KAAK,EAAY,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,GACb,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IACpC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,IAAI,CAAC;CAClE,2CA2jBA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,EACT,SAAS,EACT,YAAY,EACZ,eAAe,GAChB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD,2CA2HA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAqB,GACtB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,eAAe,CAAC;CACzC,2CAwHA"}
@@ -1,5 +1,5 @@
1
1
  import { createElement as _createElement } from "react";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useEffect, useRef, useState } from 'react';
4
4
  import { ButtonPrimitive, ModalPrimitive, SecondaryButtonPrimitive, TextInputPrimitive, } from '../../primitives';
5
5
  import { createVirtualTable, getQueryFromAiWithConnection, getVirtualTableData, } from '../../api/ConnectionClient';
@@ -12,6 +12,7 @@ import { processColumnReference } from '../../utils/columnProcessing';
12
12
  import { useAdmin } from '../../AdminProvider';
13
13
  import { SINGLE_TENANT } from '../../utils/constants';
14
14
  import { Highlight, themes } from 'prism-react-renderer';
15
+ import { useLongLoading } from '../../hooks/useLongLoading';
15
16
  export default function CreateVirtualTables({ containerStyle, header1Style, header2Style, environmentDetails, databaseSchema, completeOnboarding, client, state, tenantInit, isLoading, sqlTables, setSqlTables, }) {
16
17
  const [queryInfo, setQueryInfo] = useState({
17
18
  name: '',
@@ -25,11 +26,24 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
25
26
  const [openModalButtonLoading, setOpenModalButtonLoading] = useState(false);
26
27
  const [askAIButtonLoading, setAskAIButtonLoading] = useState(false);
27
28
  const [runQueryButtonLoading, setRunQueryButtonLoading] = useState(false);
29
+ useLongLoading(openModalButtonLoading, {
30
+ origin: 'CreateVirtualTables',
31
+ loadDescription: 'Opening virtual table modal',
32
+ });
33
+ useLongLoading(askAIButtonLoading, {
34
+ origin: 'CreateVirtualTables',
35
+ loadDescription: 'Asking AI',
36
+ });
37
+ useLongLoading(runQueryButtonLoading, {
38
+ origin: 'CreateVirtualTables',
39
+ loadDescription: 'Running query',
40
+ });
28
41
  const [failingTenant, setFailingTenant] = useState(undefined);
42
+ const [failingTenantErrorType, setFailingTenantErrorType] = useState(undefined);
29
43
  const [tableSearchQuery, setTableSearchQuery] = useState('');
30
44
  const [displayedTableData, setDisplayedTableData] = useState(databaseSchema);
31
45
  const middleColumn = useRef(null);
32
- const { getToken, quillFetchWithToken } = useAdmin();
46
+ const { getToken, quillFetchWithToken, eventTracking } = useAdmin();
33
47
  useEffect(() => {
34
48
  const scrollToBottom = () => {
35
49
  // Scroll to the bottom of the container (or page)
@@ -58,6 +72,7 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
58
72
  }) ?? [], client.clientId, tenantField === SINGLE_TENANT || override ? [] : [tenantField], state.queryEndpoint, state.queryHeaders, getToken);
59
73
  if (results.failingTenant) {
60
74
  setFailingTenant(results.failingTenant);
75
+ setFailingTenantErrorType(results.failingTenantErrorType);
61
76
  return;
62
77
  }
63
78
  if (results.success && results.tables) {
@@ -152,7 +167,7 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
152
167
  whiteSpace: 'normal',
153
168
  }, displayBelow: true, children: _jsx(ButtonPrimitive, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: async () => {
154
169
  setAskAIButtonLoading(true);
155
- const results = await getQueryFromAiWithConnection(state.queryEndpoint, aiPrompt, client.clientId, getToken, client.schemaNames);
170
+ const results = await getQueryFromAiWithConnection(state.isSelfHosted, databaseSchema, state.queryEndpoint, aiPrompt, client.clientId, getToken, client.schemaNames, state.queryHeaders);
156
171
  setQueryInfo({ name: queryInfo.name, query: results });
157
172
  setAskAIButtonLoading(false);
158
173
  }, style: { width: '90px' }, disabled: aiPrompt.trim().length > 500 }) })] }), _jsx("div", { "data-testid": "quill-sql-text-editor", children: _jsx(SqlTextEditor, { value: queryInfo.query, setValue: (e) => {
@@ -161,7 +176,7 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
161
176
  paddingLeft: 16,
162
177
  paddingRight: 16,
163
178
  marginTop: 2,
164
- }, schema: displayedTableData, databaseType: environmentDetails?.type, resizable: false }) }), _jsxs("div", { style: {
179
+ }, schema: databaseSchema, databaseType: environmentDetails?.type, resizable: false }) }), _jsxs("div", { style: {
165
180
  display: 'flex',
166
181
  flexDirection: 'row',
167
182
  paddingTop: 12,
@@ -170,7 +185,7 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
170
185
  height: 70,
171
186
  }, children: [_jsx(ButtonPrimitive, { label: 'Run query', isLoading: runQueryButtonLoading, onClick: async () => {
172
187
  setRunQueryButtonLoading(true);
173
- const getSqlResults = await getVirtualTableData(client.clientId, queryInfo.query, environmentDetails.type, state.queryEndpoint, getToken);
188
+ const getSqlResults = await getVirtualTableData(client.clientId, queryInfo.query, environmentDetails.type, state.queryEndpoint, getToken, eventTracking, client.queryHeaders);
174
189
  if (!getSqlResults.success) {
175
190
  setErrorInfo({ status: true, msg: getSqlResults.error });
176
191
  }
@@ -210,6 +225,7 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
210
225
  const duplicateColumns2 = getDuplicateColumns(tableData?.fields);
211
226
  if (duplicateColumns2.length > 0) {
212
227
  alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
228
+ setOpenModalButtonLoading(false);
213
229
  return;
214
230
  }
215
231
  const clientId = client?.publicKey || client?.clientId;
@@ -304,18 +320,21 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
304
320
  completeOnboarding();
305
321
  }, style: {
306
322
  // marginBottom: -8,
307
- }, isLoading: isLoading }) })) : null] })] }), _jsx(TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant, onOverride: () => addVirtualTable(true) }), _jsx(VirtualTableModal, { isOpen: virtualTableModalOpen, setIsOpen: setVirtualTableModalOpen, queryInfo: queryInfo, setQueryInfo: setQueryInfo, addVirtualTable: () => addVirtualTable(false) })] }));
323
+ }, isLoading: isLoading }) })) : null] })] }), _jsx(TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant, onOverride: () => addVirtualTable(true), errorType: failingTenantErrorType }), _jsx(VirtualTableModal, { isOpen: virtualTableModalOpen, setIsOpen: setVirtualTableModalOpen, queryInfo: queryInfo, setQueryInfo: setQueryInfo, addVirtualTable: () => addVirtualTable(false) })] }));
308
324
  }
309
325
  export function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQueryInfo, addVirtualTable, }) {
326
+ const { state: { theme }, } = useAdmin();
310
327
  return (_jsx(ModalPrimitive, { isOpen: isOpen, onClose: () => {
311
328
  setIsOpen(false);
312
329
  }, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '100%' }, children: [_jsx("h1", { style: {
313
330
  fontSize: 24,
331
+ fontFamily: theme.fontFamily,
314
332
  fontWeight: 600,
315
333
  color: '#212121',
316
334
  paddingBottom: 20,
317
335
  }, children: "Add Virtual Table" }), _jsx("h3", { style: {
318
336
  fontWeight: '600',
337
+ fontFamily: theme.fontFamily,
319
338
  fontSize: '14px',
320
339
  marginBottom: '6px',
321
340
  color: '#212121',
@@ -325,6 +344,7 @@ export function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQueryInfo,
325
344
  setQueryInfo({ name: e.target.value, query: queryInfo.query });
326
345
  }, placeholder: "Name..." }), _jsx("h3", { style: {
327
346
  fontWeight: '600',
347
+ fontFamily: theme.fontFamily,
328
348
  fontSize: '14px',
329
349
  marginBottom: '6px',
330
350
  marginTop: '12px',
@@ -356,32 +376,50 @@ export function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQueryInfo,
356
376
  setIsOpen(false);
357
377
  } })] })] }) }));
358
378
  }
359
- export function TenantFieldModal({ isOpen, setClosed, tenant, onOverride, }) {
379
+ export function TenantFieldModal({ isOpen, setClosed, tenant, onOverride, errorType = 'missing', }) {
380
+ const { state: { theme }, } = useAdmin();
360
381
  return (_jsx(ModalPrimitive, { isOpen: isOpen, onClose: () => setClosed(), children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '500px' }, children: [_jsx("h1", { style: {
361
382
  fontSize: 24,
362
383
  fontWeight: 600,
363
384
  color: '#212121',
364
385
  paddingBottom: 14,
365
- }, children: "Foreign Key Missing" }), _jsxs("div", { style: { marginBottom: '12px' }, children: [_jsx("span", { style: {
366
- color: '#212121',
367
- fontWeight: 600,
368
- backgroundColor: '#f7f7f7',
369
- padding: '2px 4px',
370
- borderRadius: 4,
371
- border: '1px solid #e0e0e0',
372
- }, children: tenant?.name }), "'s foreign key", ' ', _jsx("span", { style: {
373
- color: 'red',
374
- fontWeight: 600,
375
- backgroundColor: '#f7f7f7',
376
- padding: '2px 4px',
377
- borderRadius: 4,
378
- border: '1px solid #e0e0e0',
379
- }, children: tenant?.tenantField.replaceAll('"', '') }), ' ', "is not present in the current query to allow for filtering.", onOverride ? (_jsxs("span", { children: [' ', "Only override if this data is meant to be accessible by", ' ', _jsx("strong", { children: "every tenant" }), " (this is rare)"] })) : (_jsxs("span", { children: [' ', "If this tenant is not meant to filter this data, remove it from the owners dropdown"] }))] }), _jsx("br", {}), _jsxs("div", { style: {
386
+ fontFamily: theme.fontFamily,
387
+ }, children: errorType === 'missing'
388
+ ? 'Foreign Key Missing'
389
+ : 'Foreign Key Type Mismatch' }), _jsx("div", { style: { marginBottom: '12px', fontFamily: theme.fontFamily }, children: errorType === 'missing' ? (_jsxs(_Fragment, { children: [_jsx("span", { style: {
390
+ color: '#212121',
391
+ fontWeight: 600,
392
+ backgroundColor: '#f7f7f7',
393
+ padding: '2px 4px',
394
+ borderRadius: 4,
395
+ border: '1px solid #e0e0e0',
396
+ }, children: tenant?.name }), "'s foreign key", ' ', _jsx("span", { style: {
397
+ color: 'red',
398
+ fontWeight: 600,
399
+ backgroundColor: '#f7f7f7',
400
+ padding: '2px 4px',
401
+ borderRadius: 4,
402
+ border: '1px solid #e0e0e0',
403
+ }, children: tenant?.tenantField.replaceAll('"', '') }), ' ', "is not present in the current query to allow for filtering.", onOverride ? (_jsxs("span", { children: [' ', "Only override if this data is meant to be accessible by", ' ', _jsx("strong", { children: "every tenant" }), " (this is rare)"] })) : (_jsxs("span", { children: [' ', "If this tenant is not meant to filter this data, remove it from the owners dropdown"] }))] })) : (_jsxs(_Fragment, { children: ["The foreign key", ' ', _jsx("span", { style: {
404
+ color: 'red',
405
+ fontWeight: 600,
406
+ backgroundColor: '#f7f7f7',
407
+ padding: '2px 4px',
408
+ borderRadius: 4,
409
+ border: '1px solid #e0e0e0',
410
+ }, children: tenant?.tenantField.replaceAll('"', '') }), ' ', "in your query has a type that does not match the tenant ID type for", ' ', _jsx("span", { style: {
411
+ color: '#212121',
412
+ fontWeight: 600,
413
+ backgroundColor: '#f7f7f7',
414
+ padding: '2px 4px',
415
+ borderRadius: 4,
416
+ border: '1px solid #e0e0e0',
417
+ }, children: tenant?.name }), ". Please modify your query to ensure the foreign key type matches the tenant ID type."] })) }), _jsx("br", {}), _jsxs("div", { style: {
380
418
  display: 'flex',
381
419
  flexDirection: 'row',
382
420
  gap: '12px',
383
421
  justifyContent: 'flex-end',
384
- }, children: [onOverride && (_jsx(SecondaryButtonPrimitive, { label: "Override", onClick: () => {
422
+ }, children: [onOverride && errorType === 'missing' && (_jsx(SecondaryButtonPrimitive, { label: "Override", onClick: () => {
385
423
  onOverride();
386
424
  setClosed();
387
425
  } })), _jsx(ButtonPrimitive, { label: "Got It", onClick: () => setClosed() })] })] }) }));
@@ -64,6 +64,7 @@ describe('ConnectSchema', () => {
64
64
  const mockGetToken = jest.fn();
65
65
  const mockQuillFetchWithToken = jest.fn();
66
66
  const mockState = {
67
+ isSelfHosted: false,
67
68
  queryEndpoint: 'http://test-endpoint',
68
69
  loading: true,
69
70
  publicKey: 'test-key',
@@ -90,7 +91,7 @@ describe('ConnectSchema', () => {
90
91
  theme: defaultTheme,
91
92
  organizationIdSet: false,
92
93
  dateFilter: {},
93
- domainName: '',
94
+ clerkOrgId: '',
94
95
  databaseTypeMismatch: { show: false, backendDatabaseType: '' },
95
96
  selectedTenantField: undefined,
96
97
  selectedTenantValues: undefined,
@@ -47,6 +47,7 @@ describe('CreateVirtualTables', () => {
47
47
  const mockGetToken = jest.fn();
48
48
  const mockQuillFetchWithToken = jest.fn();
49
49
  const mockState = {
50
+ isSelfHosted: false,
50
51
  queryEndpoint: 'http://test-endpoint',
51
52
  loading: true,
52
53
  publicKey: 'test-key',
@@ -74,7 +75,7 @@ describe('CreateVirtualTables', () => {
74
75
  theme: defaultTheme,
75
76
  organizationIdSet: false,
76
77
  dateFilter: {},
77
- domainName: '',
78
+ clerkOrgId: '',
78
79
  databaseTypeMismatch: { show: false, backendDatabaseType: '' },
79
80
  selectedTenantField: undefined,
80
81
  selectedTenantValues: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"CreateEditVirtualTable.d.ts","sourceRoot":"","sources":["../../../../src/forms/virtual_tables/CreateEditVirtualTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAOL,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAU,cAAc,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,UAAU,2BAA2B;IACnC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACxE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,mBAAmB,EAAE,CACnB,OAAO,EAAE,KAAK,GAAG,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,EAAE,EAC3B,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,GAAG,EAAE,EACf,QAAQ,CAAC,EAAE,OAAO,KACf,IAAI,CAAC;IACV,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EAAE,qBAAqB,EAC5C,mBAAmB,EAAE,mBAAmB,EACxC,gBAA2C,EAC3C,eAAgC,EAChC,wBAAkD,EAClD,SAA6B,EAC7B,YAAY,EACZ,eAAe,EACf,MAAM,GACP,EAAE,2BAA2B,GAAG,GAAG,CAAC,OAAO,CAqgB3C"}
1
+ {"version":3,"file":"CreateEditVirtualTable.d.ts","sourceRoot":"","sources":["../../../../src/forms/virtual_tables/CreateEditVirtualTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAOL,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,cAAc,EACd,KAAK,IAAI,SAAS,EACnB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,UAAU,2BAA2B;IACnC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACxE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,mBAAmB,EAAE,CACnB,OAAO,EAAE,KAAK,GAAG,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,EAAE,EAC3B,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,GAAG,EAAE,EACf,QAAQ,CAAC,EAAE,OAAO,KACf,IAAI,CAAC;IACV,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EAAE,qBAAqB,EAC5C,mBAAmB,EAAE,mBAAmB,EACxC,gBAA2C,EAC3C,eAAgC,EAChC,wBAAkD,EAClD,SAA6B,EAC7B,YAAY,EACZ,eAAe,EACf,MAAM,GACP,EAAE,2BAA2B,GAAG,GAAG,CAAC,OAAO,CA6mB3C"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Table, SchemaListComponent, } from '@quillsql/react';
3
- import { useEffect, useMemo, useState } from 'react';
3
+ import { useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { useAdmin } from '../../AdminProvider';
5
5
  import { getQueryFromAiWithConnection, getVirtualTableData, } from '../../api/ConnectionClient';
6
6
  import SqlTextEditor from '../../components/SqlTextEditor';
@@ -8,7 +8,7 @@ import { LoadingSpinner, MemoizedButton, MemoizedSecondaryButton, MemoizedTextIn
8
8
  import { TenantFieldModal } from '../client_onboard/CreateVirtualTables';
9
9
  import DynamicBanner from '../../components/DynamicBanner';
10
10
  import { getDuplicateColumns } from '../../public_components/VirtualTableManager';
11
- import { processColumnReference } from '../../utils/columnProcessing';
11
+ import { isNumberType, isStringType, processColumnReference, } from '../../utils/columnProcessing';
12
12
  import { processJoinASTWithDuplicateColumns } from '../../utils/astProcessing';
13
13
  import { SINGLE_TENANT } from '../../utils/constants';
14
14
  import { onlySingleDatabaseTenant } from '../../utils/tenants';
@@ -24,6 +24,7 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
24
24
  client.ownerTenantFields?.filter((f) => f !== SINGLE_TENANT) ??
25
25
  []);
26
26
  const [failingTenant, setFailingTenant] = useState(undefined);
27
+ const [failingTenantErrorType, setFailingTenantErrorType] = useState(undefined);
27
28
  const [isLoading, setIsLoading] = useState(false);
28
29
  const [tableSearchQuery, setTableSearchQuery] = useState('');
29
30
  const [editorMounted, setEditorMounted] = useState(false);
@@ -31,14 +32,37 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
31
32
  const [errorInfo, setErrorInfo] = useState({ show: false, message: '' });
32
33
  const [tableData, setTableData] = useState(undefined);
33
34
  const [runningQuery, setRunningQuery] = useState(false);
34
- const { state, getToken, quillFetchWithToken } = useAdmin();
35
+ const { state, getToken, quillFetchWithToken, eventTracking } = useAdmin();
36
+ const containerRef = useRef(null);
35
37
  const addEditProcessVirtualTable = async (override = false) => {
36
- const failingTenant = virtualTableOwners?.find((field) => tableData &&
38
+ const missingTenantField = virtualTableOwners?.find((field) => tableData &&
37
39
  !tableData.fields.find((col) => col.name === field?.replaceAll('"', '')));
38
- if (!override && tableData && failingTenant) {
39
- const tenant = client.allTenantTypes?.find((t) => t.tenantField === failingTenant);
40
- setFailingTenant(tenant);
41
- return;
40
+ if (!override && tableData) {
41
+ if (missingTenantField) {
42
+ const tenant = client.allTenantTypes?.find((t) => t.tenantField === missingTenantField);
43
+ setFailingTenant(tenant);
44
+ setFailingTenantErrorType('missing');
45
+ return;
46
+ }
47
+ else {
48
+ // let typeMismatchedTenant: QuillTenant | undefined;
49
+ // check that the all tenant field type match
50
+ // loop through all virtualTableOwneers and check the field type
51
+ const typeMismatchedTenant = virtualTableOwners.find((owner) => {
52
+ const tenant = client.allTenantTypes?.find((t) => t.tenantField === owner);
53
+ const tableDataField = tableData.fields.find((col) => col.name === owner?.replaceAll('"', ''));
54
+ return ((tenant?.fieldType === 'string' &&
55
+ isNumberType(tableDataField?.fieldType ?? '')) ||
56
+ (tenant?.fieldType === 'number' &&
57
+ isStringType(tableDataField?.fieldType ?? '')));
58
+ });
59
+ if (typeMismatchedTenant) {
60
+ const tenant = client.allTenantTypes?.find((t) => t.tenantField === typeMismatchedTenant);
61
+ setFailingTenant(tenant);
62
+ setFailingTenantErrorType('type_mismatch');
63
+ return;
64
+ }
65
+ }
42
66
  }
43
67
  addEditVirtualTable(initialVirtualTable ? 'edit' : 'add', ranVirtualTableQuery, virtualTableOwners, name, initialVirtualTable ? initialVirtualTable._id : undefined, tableData?.fields || [], override);
44
68
  };
@@ -53,6 +77,12 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
53
77
  // Run query on mount
54
78
  useEffect(() => {
55
79
  if (initialVirtualTable) {
80
+ eventTracking?.addBreadcrumb?.({
81
+ message: 'Initial Query Run on CreateEditVirtualTable load',
82
+ category: 'network',
83
+ level: 'info',
84
+ timestamp: Date.now(),
85
+ });
56
86
  handleRunQuery(initialVirtualTable.viewQuery);
57
87
  }
58
88
  }, []);
@@ -60,7 +90,13 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
60
90
  setErrorInfo({ show: false, message: '' });
61
91
  setVirtualTableAddable(false);
62
92
  setAskAIButtonLoading(true);
63
- const results = await getQueryFromAiWithConnection(state.queryEndpoint, aiPrompt, state.client._id, getToken, state.client.schemaNames);
93
+ eventTracking?.addBreadcrumb?.({
94
+ message: 'Used Ask AI in CreateEditVirtualTable',
95
+ category: 'network',
96
+ level: 'info',
97
+ timestamp: Date.now(),
98
+ });
99
+ const results = await getQueryFromAiWithConnection(state.isSelfHosted, allTableData, state.queryEndpoint, aiPrompt, state.client._id, getToken, state.client.schemaNames, state.queryHeaders);
64
100
  setEditVirtualTableQuery(results);
65
101
  setAskAIButtonLoading(false);
66
102
  };
@@ -105,7 +141,7 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
105
141
  return;
106
142
  }
107
143
  setIsLoading(true);
108
- const resp = await getVirtualTableData(state.client._id, query, state.client.databaseType, state.queryEndpoint, getToken);
144
+ const resp = await getVirtualTableData(state.client._id, query, state.client.databaseType, state.queryEndpoint, getToken, eventTracking, state.queryHeaders);
109
145
  if (!resp.success) {
110
146
  setErrorInfo({ show: true, message: resp.error });
111
147
  setTableData(undefined);
@@ -169,13 +205,16 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
169
205
  setIsLoading(false);
170
206
  setRunningQuery(false);
171
207
  };
172
- return (_jsx("div", { style: {
173
- ...containerStyle,
208
+ return (_jsx("div", { ref: containerRef, style: {
174
209
  gap: 6,
175
- height: 'calc(100vh - 130px)',
210
+ height: containerRef.current
211
+ ? `calc(100vh - ${containerRef.current.getBoundingClientRect().top ?? 0}px - 80px)`
212
+ : '100%',
213
+ // overflow: 'scroll',
214
+ ...containerStyle,
176
215
  }, children: _jsxs("div", { style: { display: 'flex', height: '100%', flexDirection: 'column' }, children: [_jsx(DynamicBanner, { header: initialVirtualTable
177
216
  ? `Edit "${initialVirtualTable.name}" Virtual Table`
178
- : 'Create Virtual Table', onExit: initialVirtualTable ? undefined : closeEditVirtualTable }), _jsxs("div", { style: {
217
+ : 'Create Virtual Table', onExit: initialVirtualTable ? undefined : closeEditVirtualTable, theme: state.theme }), _jsxs("div", { style: {
179
218
  width: '100%',
180
219
  display: 'flex',
181
220
  height: '100%',
@@ -239,10 +278,27 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
239
278
  flexDirection: 'row',
240
279
  justifyContent: 'space-between',
241
280
  }, children: [_jsx(ButtonComponent, { label: 'Run query', onClick: () => {
281
+ eventTracking?.addBreadcrumb?.({
282
+ message: 'Clicked run query button in CreateEditVirtualTable',
283
+ category: 'interaction',
284
+ level: 'info',
285
+ timestamp: Date.now(),
286
+ });
242
287
  handleRunQuery();
243
288
  } }), !!dashboardOwnerTenants?.length && (_jsx(QuillMultiSelectComponentWithCombo, { label: 'Owner Tenants', width: 230, value: virtualTableOwners, options: dashboardOwnerTenants?.map((f) => {
244
289
  return { value: f.tenantField, label: f.name };
245
- }) ?? [], onChange: (e) => setVirtualTableOwners(e.target.value), allSelectedLabel: _jsx("div", { children: "All tenants" }), noneSelectedLabel: _jsx("div", { children: "No owners" }) }))] })), errorInfo.show ? (_jsx("div", { style: {
290
+ }) ?? [], onChange: (e) => {
291
+ setVirtualTableOwners(e.target.value);
292
+ eventTracking?.addBreadcrumb?.({
293
+ message: 'Changed owner tenants in CreateEditVirtualTable',
294
+ category: 'interaction',
295
+ level: 'info',
296
+ timestamp: Date.now(),
297
+ data: {
298
+ ownerTenants: e.target.value,
299
+ },
300
+ });
301
+ }, allSelectedLabel: _jsx("div", { children: "All tenants" }), noneSelectedLabel: _jsx("div", { children: "No owners" }) }))] })), errorInfo.show ? (_jsx("div", { style: {
246
302
  fontSize: 15,
247
303
  fontWeight: '400',
248
304
  width: '100%',
@@ -264,7 +320,37 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
264
320
  flexDirection: 'row',
265
321
  gap: 12,
266
322
  marginTop: 'auto',
267
- }, children: [_jsx(SecondaryButtonComponent, { onClick: closeEditVirtualTable, label: 'Discard changes' }), _jsx(ButtonComponent, { label: `${initialVirtualTable ? 'Save changes' : 'Create virtual table'}`, onClick: () => {
323
+ }, children: [_jsx(SecondaryButtonComponent, { onClick: () => {
324
+ closeEditVirtualTable();
325
+ eventTracking?.addBreadcrumb?.({
326
+ message: 'Clicked discard changes button in CreateEditVirtualTable',
327
+ category: 'interaction',
328
+ level: 'info',
329
+ timestamp: Date.now(),
330
+ });
331
+ }, label: 'Discard changes' }), _jsx(ButtonComponent, { label: `${initialVirtualTable ? 'Save changes' : 'Create virtual table'}`, onClick: () => {
332
+ if (initialVirtualTable) {
333
+ eventTracking?.addBreadcrumb?.({
334
+ message: 'Saved changes to existing virtual table',
335
+ data: {
336
+ virtualTable: initialVirtualTable.name,
337
+ },
338
+ category: 'interaction',
339
+ level: 'info',
340
+ timestamp: Date.now(),
341
+ });
342
+ }
343
+ else {
344
+ eventTracking?.addBreadcrumb?.({
345
+ message: 'Created new virtual table',
346
+ data: {
347
+ virtualTable: name,
348
+ },
349
+ category: 'interaction',
350
+ level: 'info',
351
+ timestamp: Date.now(),
352
+ });
353
+ }
268
354
  const duplicateColumns = getDuplicateColumns(tableData?.fields);
269
355
  if (duplicateColumns.length > 0) {
270
356
  alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns.join('\n')}`);
@@ -284,5 +370,5 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
284
370
  display: 'flex',
285
371
  flexDirection: 'row',
286
372
  gap: 12,
287
- }, children: _jsx(SecondaryButtonComponent, { onClick: closeEditVirtualTable, label: 'Discard changes' }) }))] })] }), _jsx(TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant })] }) }));
373
+ }, children: _jsx(SecondaryButtonComponent, { onClick: closeEditVirtualTable, label: 'Discard changes' }) }))] })] }), _jsx(TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant, errorType: failingTenantErrorType })] }) }));
288
374
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useDatabaseSchema.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDatabaseSchema.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB;;;CAuD7B,CAAC"}
1
+ {"version":3,"file":"useDatabaseSchema.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDatabaseSchema.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB;;;CA2E7B,CAAC"}
@@ -1,15 +1,20 @@
1
1
  import { useAdmin } from '../AdminProvider';
2
- import { useEffect, useState } from 'react';
2
+ import { useEffect, useRef, useState } from 'react';
3
3
  import { getTableColumnsBySchema } from '../api/ConnectionClient';
4
4
  export const useDatabaseSchema = () => {
5
- const { state, dispatch, getToken } = useAdmin();
5
+ const { state, dispatch, getToken, eventTracking } = useAdmin();
6
6
  const [isLoading, setIsLoading] = useState(state.databaseSchema?.id !== state.client.id);
7
+ const idRef = useRef(null);
7
8
  useEffect(() => {
8
9
  const fetchSchema = async () => {
9
10
  if ((state.databaseSchema?.schema?.length ||
10
11
  state.databaseSchema?.loading) &&
11
12
  state.databaseSchema?.id === state.client.id)
12
13
  return;
14
+ if (idRef.current === state.client.id) {
15
+ return;
16
+ }
17
+ idRef.current = state.client.id;
13
18
  try {
14
19
  dispatch({
15
20
  type: 'SET_DATABASE_SCHEMA',
@@ -20,7 +25,7 @@ export const useDatabaseSchema = () => {
20
25
  },
21
26
  });
22
27
  setIsLoading(true);
23
- const schema = await getTableColumnsBySchema(state.queryEndpoint, state.client.id, getToken);
28
+ const schema = await getTableColumnsBySchema(state.isSelfHosted, state.queryEndpoint, state.client.id, state.client.databaseType, getToken, state.client.schemaNames ?? [], state.queryHeaders);
24
29
  dispatch({
25
30
  type: 'SET_DATABASE_SCHEMA',
26
31
  payload: {
@@ -31,6 +36,17 @@ export const useDatabaseSchema = () => {
31
36
  });
32
37
  }
33
38
  catch (e) {
39
+ eventTracking?.logError?.({
40
+ type: 'bug', // TODO: determine type
41
+ severity: 'high',
42
+ message: 'Error fetching schema',
43
+ errorMessage: e.message,
44
+ errorStack: e.stack,
45
+ errorData: {
46
+ caller: 'useDatabaseSchema',
47
+ function: 'fetchSchema',
48
+ },
49
+ });
34
50
  console.error(e);
35
51
  }
36
52
  finally {
@@ -0,0 +1,13 @@
1
+ type LongLoadingMeta = {
2
+ origin: string;
3
+ loadDescription: string;
4
+ expectedLoadTime?: number;
5
+ abnormalLoadTime?: number;
6
+ };
7
+ type LoadingState = {
8
+ isLongLoading: boolean;
9
+ isAbnormalLoading: boolean;
10
+ };
11
+ export declare function useLongLoading(isLoading: boolean, meta: LongLoadingMeta): LoadingState;
12
+ export {};
13
+ //# sourceMappingURL=useLongLoading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLongLoading.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLongLoading.tsx"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,cAAc,CAC5B,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,eAAe,GACpB,YAAY,CAoEd"}