@quillsql/admin 1.6.4 → 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 (222) hide show
  1. package/dist/cjs/Admin.d.ts +11 -8
  2. package/dist/cjs/Admin.d.ts.map +1 -1
  3. package/dist/cjs/Admin.js +114 -7
  4. package/dist/cjs/AdminProvider.d.ts +24 -5
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +173 -85
  7. package/dist/cjs/api/ConnectionClient.d.ts +6 -3
  8. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  9. package/dist/cjs/api/ConnectionClient.js +66 -6
  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/ClipboardButton.d.ts.map +1 -1
  13. package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
  14. package/dist/cjs/components/DashboardSelectPopover.js +29 -1
  15. package/dist/cjs/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  16. package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts +1 -1
  17. package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts.map +1 -1
  18. package/dist/cjs/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -1
  19. package/dist/cjs/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  20. package/dist/cjs/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
  21. package/dist/cjs/components/InternalDashboard/InternalDashboard.js +114 -34
  22. package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
  23. package/dist/cjs/components/OrgSelect.js +48 -4
  24. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +5 -1
  25. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  26. package/dist/cjs/components/QuillMultiSelectWithCombo.js +328 -149
  27. package/dist/cjs/components/QuillSelectWithCombo.d.ts +4 -3
  28. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  29. package/dist/cjs/components/QuillSelectWithCombo.js +34 -6
  30. package/dist/cjs/components/QuillToolTipPortal.d.ts.map +1 -1
  31. package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
  32. package/dist/cjs/components/SqlTextEditor.js +15 -2
  33. package/dist/cjs/components/Tenants/EditTenant.d.ts.map +1 -1
  34. package/dist/cjs/components/Tenants/EditTenant.js +51 -8
  35. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  36. package/dist/cjs/components/UiComponents.js +1 -0
  37. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  38. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +50 -2
  39. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  40. package/dist/cjs/forms/client_onboard/ConnectSchema.js +33 -1
  41. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts +2 -1
  42. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
  43. package/dist/cjs/forms/client_onboard/CreateVirtualTables.js +55 -21
  44. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.js +1 -1
  45. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.js +1 -1
  46. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
  47. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.js +92 -10
  48. package/dist/cjs/hooks/useDatabaseSchema.d.ts.map +1 -1
  49. package/dist/cjs/hooks/useDatabaseSchema.js +12 -1
  50. package/dist/cjs/hooks/useLongLoading.d.ts +13 -0
  51. package/dist/cjs/hooks/useLongLoading.d.ts.map +1 -0
  52. package/dist/cjs/hooks/useLongLoading.js +67 -0
  53. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  54. package/dist/cjs/hooks/useThrottle.d.ts.map +1 -1
  55. package/dist/cjs/icons/ArrowDownHeadIcon.d.ts.map +1 -1
  56. package/dist/cjs/icons/CheckCircleIcon.d.ts.map +1 -1
  57. package/dist/cjs/icons/ExclamationFilledIcon.d.ts.map +1 -1
  58. package/dist/cjs/icons/ExteriorLinkIcon.d.ts.map +1 -1
  59. package/dist/cjs/icons/QuestionMarkCircleIcon.d.ts.map +1 -1
  60. package/dist/cjs/modals/CodePreview.d.ts.map +1 -1
  61. package/dist/cjs/modals/CodePreview.js +7 -2
  62. package/dist/cjs/modals/CreateEnvironmentModal.d.ts +5 -0
  63. package/dist/cjs/modals/CreateEnvironmentModal.d.ts.map +1 -0
  64. package/dist/cjs/modals/CreateEnvironmentModal.js +21 -0
  65. package/dist/cjs/modals/EditEnvironmentModal.d.ts.map +1 -1
  66. package/dist/cjs/modals/EditEnvironmentModal.js +67 -15
  67. package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -1
  68. package/dist/cjs/modals/EditFiltersModal.js +12 -8
  69. package/dist/cjs/modals/NewDashboardModal.d.ts.map +1 -1
  70. package/dist/cjs/modals/NewDashboardModal.js +54 -28
  71. package/dist/cjs/modals/PromoteReportModal.d.ts.map +1 -1
  72. package/dist/cjs/modals/PromoteReportModal.js +15 -4
  73. package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
  74. package/dist/cjs/modals/PromoteViewModal.js +13 -2
  75. package/dist/cjs/primitives/CheckboxPrimitive.d.ts.map +1 -1
  76. package/dist/cjs/primitives/CheckboxPrimitive.js +2 -0
  77. package/dist/cjs/primitives/PopoverPrimitive.d.ts.map +1 -1
  78. package/dist/cjs/primitives/PopoverPrimitive.js +16 -5
  79. package/dist/cjs/primitives/TogglePrimitive.d.ts.map +1 -1
  80. package/dist/cjs/public_components/ChartQueryBuilder.d.ts.map +1 -1
  81. package/dist/cjs/public_components/ChartQueryBuilder.js +6 -6
  82. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  83. package/dist/cjs/public_components/CreateEnvironment.js +49 -16
  84. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  85. package/dist/cjs/public_components/DashboardManager.js +63 -5
  86. package/dist/cjs/public_components/EnvSelectPopover.d.ts.map +1 -1
  87. package/dist/cjs/public_components/EnvSelectPopover.js +31 -3
  88. package/dist/cjs/public_components/VirtualTableManager.d.ts.map +1 -1
  89. package/dist/cjs/public_components/VirtualTableManager.js +95 -5
  90. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.js +41 -2
  91. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  92. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  93. package/dist/cjs/utils/columnProcessing.js +6 -1
  94. package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
  95. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  96. package/dist/cjs/utils/databases.d.ts +6 -1
  97. package/dist/cjs/utils/databases.d.ts.map +1 -1
  98. package/dist/cjs/utils/databases.js +18 -0
  99. package/dist/cjs/utils/delay.d.ts.map +1 -1
  100. package/dist/cjs/utils/filter.d.ts +17 -21
  101. package/dist/cjs/utils/filter.d.ts.map +1 -1
  102. package/dist/cjs/utils/filter.js +6 -6
  103. package/dist/cjs/utils/report.d.ts +5 -5
  104. package/dist/cjs/utils/report.d.ts.map +1 -1
  105. package/dist/cjs/utils/schema.d.ts +6 -3
  106. package/dist/cjs/utils/schema.d.ts.map +1 -1
  107. package/dist/cjs/utils/schema.js +42 -3
  108. package/dist/cjs/utils/table.d.ts.map +1 -1
  109. package/dist/cjs/utils/tenants.d.ts.map +1 -1
  110. package/dist/cjs/utils/ui.d.ts.map +1 -1
  111. package/dist/esm/Admin.d.ts +11 -8
  112. package/dist/esm/Admin.d.ts.map +1 -1
  113. package/dist/esm/Admin.js +115 -8
  114. package/dist/esm/AdminProvider.d.ts +24 -5
  115. package/dist/esm/AdminProvider.d.ts.map +1 -1
  116. package/dist/esm/AdminProvider.js +174 -86
  117. package/dist/esm/api/ConnectionClient.d.ts +6 -3
  118. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  119. package/dist/esm/api/ConnectionClient.js +66 -6
  120. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  121. package/dist/esm/assets/XIcon.d.ts.map +1 -1
  122. package/dist/esm/components/ClipboardButton.d.ts.map +1 -1
  123. package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
  124. package/dist/esm/components/DashboardSelectPopover.js +29 -1
  125. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  126. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts +1 -1
  127. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts.map +1 -1
  128. package/dist/esm/components/InternalDashboard/DashboardFilter.js +1 -1
  129. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -1
  130. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  131. package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
  132. package/dist/esm/components/InternalDashboard/InternalDashboard.js +115 -35
  133. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  134. package/dist/esm/components/OrgSelect.js +48 -4
  135. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +5 -1
  136. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  137. package/dist/esm/components/QuillMultiSelectWithCombo.js +328 -149
  138. package/dist/esm/components/QuillSelectWithCombo.d.ts +4 -3
  139. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  140. package/dist/esm/components/QuillSelectWithCombo.js +34 -6
  141. package/dist/esm/components/QuillToolTipPortal.d.ts.map +1 -1
  142. package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
  143. package/dist/esm/components/SqlTextEditor.js +15 -2
  144. package/dist/esm/components/Tenants/EditTenant.d.ts.map +1 -1
  145. package/dist/esm/components/Tenants/EditTenant.js +51 -8
  146. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  147. package/dist/esm/components/UiComponents.js +1 -0
  148. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  149. package/dist/esm/forms/client_onboard/ConnectDatabase.js +50 -2
  150. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  151. package/dist/esm/forms/client_onboard/ConnectSchema.js +33 -1
  152. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts +2 -1
  153. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
  154. package/dist/esm/forms/client_onboard/CreateVirtualTables.js +56 -22
  155. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.js +1 -1
  156. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.js +1 -1
  157. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
  158. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.js +93 -11
  159. package/dist/esm/hooks/useDatabaseSchema.d.ts.map +1 -1
  160. package/dist/esm/hooks/useDatabaseSchema.js +12 -1
  161. package/dist/esm/hooks/useLongLoading.d.ts +13 -0
  162. package/dist/esm/hooks/useLongLoading.d.ts.map +1 -0
  163. package/dist/esm/hooks/useLongLoading.js +64 -0
  164. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  165. package/dist/esm/hooks/useThrottle.d.ts.map +1 -1
  166. package/dist/esm/icons/ArrowDownHeadIcon.d.ts.map +1 -1
  167. package/dist/esm/icons/CheckCircleIcon.d.ts.map +1 -1
  168. package/dist/esm/icons/ExclamationFilledIcon.d.ts.map +1 -1
  169. package/dist/esm/icons/ExteriorLinkIcon.d.ts.map +1 -1
  170. package/dist/esm/icons/QuestionMarkCircleIcon.d.ts.map +1 -1
  171. package/dist/esm/modals/CodePreview.d.ts.map +1 -1
  172. package/dist/esm/modals/CodePreview.js +7 -2
  173. package/dist/esm/modals/CreateEnvironmentModal.d.ts +5 -0
  174. package/dist/esm/modals/CreateEnvironmentModal.d.ts.map +1 -0
  175. package/dist/esm/modals/CreateEnvironmentModal.js +15 -0
  176. package/dist/esm/modals/EditEnvironmentModal.d.ts.map +1 -1
  177. package/dist/esm/modals/EditEnvironmentModal.js +67 -15
  178. package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -1
  179. package/dist/esm/modals/EditFiltersModal.js +13 -9
  180. package/dist/esm/modals/NewDashboardModal.d.ts.map +1 -1
  181. package/dist/esm/modals/NewDashboardModal.js +55 -29
  182. package/dist/esm/modals/PromoteReportModal.d.ts.map +1 -1
  183. package/dist/esm/modals/PromoteReportModal.js +15 -4
  184. package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
  185. package/dist/esm/modals/PromoteViewModal.js +13 -2
  186. package/dist/esm/primitives/CheckboxPrimitive.d.ts.map +1 -1
  187. package/dist/esm/primitives/CheckboxPrimitive.js +2 -0
  188. package/dist/esm/primitives/PopoverPrimitive.d.ts.map +1 -1
  189. package/dist/esm/primitives/PopoverPrimitive.js +16 -5
  190. package/dist/esm/primitives/TogglePrimitive.d.ts.map +1 -1
  191. package/dist/esm/public_components/ChartQueryBuilder.d.ts.map +1 -1
  192. package/dist/esm/public_components/ChartQueryBuilder.js +8 -8
  193. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  194. package/dist/esm/public_components/CreateEnvironment.js +49 -16
  195. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  196. package/dist/esm/public_components/DashboardManager.js +64 -6
  197. package/dist/esm/public_components/EnvSelectPopover.d.ts.map +1 -1
  198. package/dist/esm/public_components/EnvSelectPopover.js +31 -3
  199. package/dist/esm/public_components/VirtualTableManager.d.ts.map +1 -1
  200. package/dist/esm/public_components/VirtualTableManager.js +95 -5
  201. package/dist/esm/public_components/__tests__/CreateEnvironment.test.js +41 -2
  202. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  203. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  204. package/dist/esm/utils/columnProcessing.js +6 -1
  205. package/dist/esm/utils/dataEditor.d.ts.map +1 -1
  206. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  207. package/dist/esm/utils/databases.d.ts +6 -1
  208. package/dist/esm/utils/databases.d.ts.map +1 -1
  209. package/dist/esm/utils/databases.js +18 -0
  210. package/dist/esm/utils/delay.d.ts.map +1 -1
  211. package/dist/esm/utils/filter.d.ts +17 -21
  212. package/dist/esm/utils/filter.d.ts.map +1 -1
  213. package/dist/esm/utils/filter.js +5 -5
  214. package/dist/esm/utils/report.d.ts +5 -5
  215. package/dist/esm/utils/report.d.ts.map +1 -1
  216. package/dist/esm/utils/schema.d.ts +6 -3
  217. package/dist/esm/utils/schema.d.ts.map +1 -1
  218. package/dist/esm/utils/schema.js +42 -3
  219. package/dist/esm/utils/table.d.ts.map +1 -1
  220. package/dist/esm/utils/tenants.d.ts.map +1 -1
  221. package/dist/esm/utils/ui.d.ts.map +1 -1
  222. package/package.json +1 -1
@@ -20,6 +20,7 @@ const columnProcessing_1 = require("../../utils/columnProcessing");
20
20
  const AdminProvider_1 = require("../../AdminProvider");
21
21
  const constants_1 = require("../../utils/constants");
22
22
  const prism_react_renderer_1 = require("prism-react-renderer");
23
+ const useLongLoading_1 = require("../../hooks/useLongLoading");
23
24
  function CreateVirtualTables({ containerStyle, header1Style, header2Style, environmentDetails, databaseSchema, completeOnboarding, client, state, tenantInit, isLoading, sqlTables, setSqlTables, }) {
24
25
  const [queryInfo, setQueryInfo] = (0, react_2.useState)({
25
26
  name: '',
@@ -33,11 +34,24 @@ function CreateVirtualTables({ containerStyle, header1Style, header2Style, envir
33
34
  const [openModalButtonLoading, setOpenModalButtonLoading] = (0, react_2.useState)(false);
34
35
  const [askAIButtonLoading, setAskAIButtonLoading] = (0, react_2.useState)(false);
35
36
  const [runQueryButtonLoading, setRunQueryButtonLoading] = (0, react_2.useState)(false);
37
+ (0, useLongLoading_1.useLongLoading)(openModalButtonLoading, {
38
+ origin: 'CreateVirtualTables',
39
+ loadDescription: 'Opening virtual table modal',
40
+ });
41
+ (0, useLongLoading_1.useLongLoading)(askAIButtonLoading, {
42
+ origin: 'CreateVirtualTables',
43
+ loadDescription: 'Asking AI',
44
+ });
45
+ (0, useLongLoading_1.useLongLoading)(runQueryButtonLoading, {
46
+ origin: 'CreateVirtualTables',
47
+ loadDescription: 'Running query',
48
+ });
36
49
  const [failingTenant, setFailingTenant] = (0, react_2.useState)(undefined);
50
+ const [failingTenantErrorType, setFailingTenantErrorType] = (0, react_2.useState)(undefined);
37
51
  const [tableSearchQuery, setTableSearchQuery] = (0, react_2.useState)('');
38
52
  const [displayedTableData, setDisplayedTableData] = (0, react_2.useState)(databaseSchema);
39
53
  const middleColumn = (0, react_2.useRef)(null);
40
- const { getToken, quillFetchWithToken } = (0, AdminProvider_1.useAdmin)();
54
+ const { getToken, quillFetchWithToken, eventTracking } = (0, AdminProvider_1.useAdmin)();
41
55
  (0, react_2.useEffect)(() => {
42
56
  const scrollToBottom = () => {
43
57
  // Scroll to the bottom of the container (or page)
@@ -66,6 +80,7 @@ function CreateVirtualTables({ containerStyle, header1Style, header2Style, envir
66
80
  }) ?? [], client.clientId, tenantField === constants_1.SINGLE_TENANT || override ? [] : [tenantField], state.queryEndpoint, state.queryHeaders, getToken);
67
81
  if (results.failingTenant) {
68
82
  setFailingTenant(results.failingTenant);
83
+ setFailingTenantErrorType(results.failingTenantErrorType);
69
84
  return;
70
85
  }
71
86
  if (results.success && results.tables) {
@@ -169,7 +184,7 @@ function CreateVirtualTables({ containerStyle, header1Style, header2Style, envir
169
184
  paddingLeft: 16,
170
185
  paddingRight: 16,
171
186
  marginTop: 2,
172
- }, schema: displayedTableData, databaseType: environmentDetails?.type, resizable: false }) }), (0, jsx_runtime_1.jsxs)("div", { style: {
187
+ }, schema: databaseSchema, databaseType: environmentDetails?.type, resizable: false }) }), (0, jsx_runtime_1.jsxs)("div", { style: {
173
188
  display: 'flex',
174
189
  flexDirection: 'row',
175
190
  paddingTop: 12,
@@ -178,7 +193,7 @@ function CreateVirtualTables({ containerStyle, header1Style, header2Style, envir
178
193
  height: 70,
179
194
  }, children: [(0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: 'Run query', isLoading: runQueryButtonLoading, onClick: async () => {
180
195
  setRunQueryButtonLoading(true);
181
- const getSqlResults = await (0, ConnectionClient_1.getVirtualTableData)(client.clientId, queryInfo.query, environmentDetails.type, state.queryEndpoint, getToken, client.queryHeaders);
196
+ const getSqlResults = await (0, ConnectionClient_1.getVirtualTableData)(client.clientId, queryInfo.query, environmentDetails.type, state.queryEndpoint, getToken, eventTracking, client.queryHeaders);
182
197
  if (!getSqlResults.success) {
183
198
  setErrorInfo({ status: true, msg: getSqlResults.error });
184
199
  }
@@ -218,6 +233,7 @@ function CreateVirtualTables({ containerStyle, header1Style, header2Style, envir
218
233
  const duplicateColumns2 = (0, VirtualTableManager_1.getDuplicateColumns)(tableData?.fields);
219
234
  if (duplicateColumns2.length > 0) {
220
235
  alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
236
+ setOpenModalButtonLoading(false);
221
237
  return;
222
238
  }
223
239
  const clientId = client?.publicKey || client?.clientId;
@@ -312,7 +328,7 @@ function CreateVirtualTables({ containerStyle, header1Style, header2Style, envir
312
328
  completeOnboarding();
313
329
  }, style: {
314
330
  // marginBottom: -8,
315
- }, isLoading: isLoading }) })) : null] })] }), (0, jsx_runtime_1.jsx)(TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant, onOverride: () => addVirtualTable(true) }), (0, jsx_runtime_1.jsx)(VirtualTableModal, { isOpen: virtualTableModalOpen, setIsOpen: setVirtualTableModalOpen, queryInfo: queryInfo, setQueryInfo: setQueryInfo, addVirtualTable: () => addVirtualTable(false) })] }));
331
+ }, isLoading: isLoading }) })) : null] })] }), (0, jsx_runtime_1.jsx)(TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant, onOverride: () => addVirtualTable(true), errorType: failingTenantErrorType }), (0, jsx_runtime_1.jsx)(VirtualTableModal, { isOpen: virtualTableModalOpen, setIsOpen: setVirtualTableModalOpen, queryInfo: queryInfo, setQueryInfo: setQueryInfo, addVirtualTable: () => addVirtualTable(false) })] }));
316
332
  }
317
333
  function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQueryInfo, addVirtualTable, }) {
318
334
  const { state: { theme }, } = (0, AdminProvider_1.useAdmin)();
@@ -368,32 +384,50 @@ function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQueryInfo, addVirt
368
384
  setIsOpen(false);
369
385
  } })] })] }) }));
370
386
  }
371
- function TenantFieldModal({ isOpen, setClosed, tenant, onOverride, }) {
387
+ function TenantFieldModal({ isOpen, setClosed, tenant, onOverride, errorType = 'missing', }) {
388
+ const { state: { theme }, } = (0, AdminProvider_1.useAdmin)();
372
389
  return ((0, jsx_runtime_1.jsx)(primitives_1.ModalPrimitive, { isOpen: isOpen, onClose: () => setClosed(), children: (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', width: '500px' }, children: [(0, jsx_runtime_1.jsx)("h1", { style: {
373
390
  fontSize: 24,
374
391
  fontWeight: 600,
375
392
  color: '#212121',
376
393
  paddingBottom: 14,
377
- }, children: "Foreign Key Missing" }), (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: '12px' }, children: [(0, jsx_runtime_1.jsx)("span", { style: {
378
- color: '#212121',
379
- fontWeight: 600,
380
- backgroundColor: '#f7f7f7',
381
- padding: '2px 4px',
382
- borderRadius: 4,
383
- border: '1px solid #e0e0e0',
384
- }, children: tenant?.name }), "'s foreign key", ' ', (0, jsx_runtime_1.jsx)("span", { style: {
385
- color: 'red',
386
- fontWeight: 600,
387
- backgroundColor: '#f7f7f7',
388
- padding: '2px 4px',
389
- borderRadius: 4,
390
- border: '1px solid #e0e0e0',
391
- }, children: tenant?.tenantField.replaceAll('"', '') }), ' ', "is not present in the current query to allow for filtering.", onOverride ? ((0, jsx_runtime_1.jsxs)("span", { children: [' ', "Only override if this data is meant to be accessible by", ' ', (0, jsx_runtime_1.jsx)("strong", { children: "every tenant" }), " (this is rare)"] })) : ((0, jsx_runtime_1.jsxs)("span", { children: [' ', "If this tenant is not meant to filter this data, remove it from the owners dropdown"] }))] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("div", { style: {
394
+ fontFamily: theme.fontFamily,
395
+ }, children: errorType === 'missing'
396
+ ? 'Foreign Key Missing'
397
+ : 'Foreign Key Type Mismatch' }), (0, jsx_runtime_1.jsx)("div", { style: { marginBottom: '12px', fontFamily: theme.fontFamily }, children: errorType === 'missing' ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { style: {
398
+ color: '#212121',
399
+ fontWeight: 600,
400
+ backgroundColor: '#f7f7f7',
401
+ padding: '2px 4px',
402
+ borderRadius: 4,
403
+ border: '1px solid #e0e0e0',
404
+ }, children: tenant?.name }), "'s foreign key", ' ', (0, jsx_runtime_1.jsx)("span", { style: {
405
+ color: 'red',
406
+ fontWeight: 600,
407
+ backgroundColor: '#f7f7f7',
408
+ padding: '2px 4px',
409
+ borderRadius: 4,
410
+ border: '1px solid #e0e0e0',
411
+ }, children: tenant?.tenantField.replaceAll('"', '') }), ' ', "is not present in the current query to allow for filtering.", onOverride ? ((0, jsx_runtime_1.jsxs)("span", { children: [' ', "Only override if this data is meant to be accessible by", ' ', (0, jsx_runtime_1.jsx)("strong", { children: "every tenant" }), " (this is rare)"] })) : ((0, jsx_runtime_1.jsxs)("span", { children: [' ', "If this tenant is not meant to filter this data, remove it from the owners dropdown"] }))] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["The foreign key", ' ', (0, jsx_runtime_1.jsx)("span", { style: {
412
+ color: 'red',
413
+ fontWeight: 600,
414
+ backgroundColor: '#f7f7f7',
415
+ padding: '2px 4px',
416
+ borderRadius: 4,
417
+ border: '1px solid #e0e0e0',
418
+ }, children: tenant?.tenantField.replaceAll('"', '') }), ' ', "in your query has a type that does not match the tenant ID type for", ' ', (0, jsx_runtime_1.jsx)("span", { style: {
419
+ color: '#212121',
420
+ fontWeight: 600,
421
+ backgroundColor: '#f7f7f7',
422
+ padding: '2px 4px',
423
+ borderRadius: 4,
424
+ border: '1px solid #e0e0e0',
425
+ }, children: tenant?.name }), ". Please modify your query to ensure the foreign key type matches the tenant ID type."] })) }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("div", { style: {
392
426
  display: 'flex',
393
427
  flexDirection: 'row',
394
428
  gap: '12px',
395
429
  justifyContent: 'flex-end',
396
- }, children: [onOverride && ((0, jsx_runtime_1.jsx)(primitives_1.SecondaryButtonPrimitive, { label: "Override", onClick: () => {
430
+ }, children: [onOverride && errorType === 'missing' && ((0, jsx_runtime_1.jsx)(primitives_1.SecondaryButtonPrimitive, { label: "Override", onClick: () => {
397
431
  onOverride();
398
432
  setClosed();
399
433
  } })), (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: "Got It", onClick: () => setClosed() })] })] }) }));
@@ -96,7 +96,7 @@ describe('ConnectSchema', () => {
96
96
  theme: Admin_1.defaultTheme,
97
97
  organizationIdSet: false,
98
98
  dateFilter: {},
99
- domainName: '',
99
+ clerkOrgId: '',
100
100
  databaseTypeMismatch: { show: false, backendDatabaseType: '' },
101
101
  selectedTenantField: undefined,
102
102
  selectedTenantValues: undefined,
@@ -80,7 +80,7 @@ describe('CreateVirtualTables', () => {
80
80
  theme: Admin_1.defaultTheme,
81
81
  organizationIdSet: false,
82
82
  dateFilter: {},
83
- domainName: '',
83
+ clerkOrgId: '',
84
84
  databaseTypeMismatch: { show: false, backendDatabaseType: '' },
85
85
  selectedTenantField: undefined,
86
86
  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,CA+gB3C"}
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"}
@@ -30,6 +30,7 @@ function CreateEditVirtualTable({ containerStyle, initialVirtualTable, closeEdit
30
30
  client.ownerTenantFields?.filter((f) => f !== constants_1.SINGLE_TENANT) ??
31
31
  []);
32
32
  const [failingTenant, setFailingTenant] = (0, react_2.useState)(undefined);
33
+ const [failingTenantErrorType, setFailingTenantErrorType] = (0, react_2.useState)(undefined);
33
34
  const [isLoading, setIsLoading] = (0, react_2.useState)(false);
34
35
  const [tableSearchQuery, setTableSearchQuery] = (0, react_2.useState)('');
35
36
  const [editorMounted, setEditorMounted] = (0, react_2.useState)(false);
@@ -37,15 +38,37 @@ function CreateEditVirtualTable({ containerStyle, initialVirtualTable, closeEdit
37
38
  const [errorInfo, setErrorInfo] = (0, react_2.useState)({ show: false, message: '' });
38
39
  const [tableData, setTableData] = (0, react_2.useState)(undefined);
39
40
  const [runningQuery, setRunningQuery] = (0, react_2.useState)(false);
40
- const { state, getToken, quillFetchWithToken } = (0, AdminProvider_1.useAdmin)();
41
+ const { state, getToken, quillFetchWithToken, eventTracking } = (0, AdminProvider_1.useAdmin)();
41
42
  const containerRef = (0, react_2.useRef)(null);
42
43
  const addEditProcessVirtualTable = async (override = false) => {
43
- const failingTenant = virtualTableOwners?.find((field) => tableData &&
44
+ const missingTenantField = virtualTableOwners?.find((field) => tableData &&
44
45
  !tableData.fields.find((col) => col.name === field?.replaceAll('"', '')));
45
- if (!override && tableData && failingTenant) {
46
- const tenant = client.allTenantTypes?.find((t) => t.tenantField === failingTenant);
47
- setFailingTenant(tenant);
48
- return;
46
+ if (!override && tableData) {
47
+ if (missingTenantField) {
48
+ const tenant = client.allTenantTypes?.find((t) => t.tenantField === missingTenantField);
49
+ setFailingTenant(tenant);
50
+ setFailingTenantErrorType('missing');
51
+ return;
52
+ }
53
+ else {
54
+ // let typeMismatchedTenant: QuillTenant | undefined;
55
+ // check that the all tenant field type match
56
+ // loop through all virtualTableOwneers and check the field type
57
+ const typeMismatchedTenant = virtualTableOwners.find((owner) => {
58
+ const tenant = client.allTenantTypes?.find((t) => t.tenantField === owner);
59
+ const tableDataField = tableData.fields.find((col) => col.name === owner?.replaceAll('"', ''));
60
+ return ((tenant?.fieldType === 'string' &&
61
+ (0, columnProcessing_1.isNumberType)(tableDataField?.fieldType ?? '')) ||
62
+ (tenant?.fieldType === 'number' &&
63
+ (0, columnProcessing_1.isStringType)(tableDataField?.fieldType ?? '')));
64
+ });
65
+ if (typeMismatchedTenant) {
66
+ const tenant = client.allTenantTypes?.find((t) => t.tenantField === typeMismatchedTenant);
67
+ setFailingTenant(tenant);
68
+ setFailingTenantErrorType('type_mismatch');
69
+ return;
70
+ }
71
+ }
49
72
  }
50
73
  addEditVirtualTable(initialVirtualTable ? 'edit' : 'add', ranVirtualTableQuery, virtualTableOwners, name, initialVirtualTable ? initialVirtualTable._id : undefined, tableData?.fields || [], override);
51
74
  };
@@ -60,6 +83,12 @@ function CreateEditVirtualTable({ containerStyle, initialVirtualTable, closeEdit
60
83
  // Run query on mount
61
84
  (0, react_2.useEffect)(() => {
62
85
  if (initialVirtualTable) {
86
+ eventTracking?.addBreadcrumb?.({
87
+ message: 'Initial Query Run on CreateEditVirtualTable load',
88
+ category: 'network',
89
+ level: 'info',
90
+ timestamp: Date.now(),
91
+ });
63
92
  handleRunQuery(initialVirtualTable.viewQuery);
64
93
  }
65
94
  }, []);
@@ -67,6 +96,12 @@ function CreateEditVirtualTable({ containerStyle, initialVirtualTable, closeEdit
67
96
  setErrorInfo({ show: false, message: '' });
68
97
  setVirtualTableAddable(false);
69
98
  setAskAIButtonLoading(true);
99
+ eventTracking?.addBreadcrumb?.({
100
+ message: 'Used Ask AI in CreateEditVirtualTable',
101
+ category: 'network',
102
+ level: 'info',
103
+ timestamp: Date.now(),
104
+ });
70
105
  const results = await (0, ConnectionClient_1.getQueryFromAiWithConnection)(state.isSelfHosted, allTableData, state.queryEndpoint, aiPrompt, state.client._id, getToken, state.client.schemaNames, state.queryHeaders);
71
106
  setEditVirtualTableQuery(results);
72
107
  setAskAIButtonLoading(false);
@@ -112,7 +147,7 @@ function CreateEditVirtualTable({ containerStyle, initialVirtualTable, closeEdit
112
147
  return;
113
148
  }
114
149
  setIsLoading(true);
115
- const resp = await (0, ConnectionClient_1.getVirtualTableData)(state.client._id, query, state.client.databaseType, state.queryEndpoint, getToken, state.queryHeaders);
150
+ const resp = await (0, ConnectionClient_1.getVirtualTableData)(state.client._id, query, state.client.databaseType, state.queryEndpoint, getToken, eventTracking, state.queryHeaders);
116
151
  if (!resp.success) {
117
152
  setErrorInfo({ show: true, message: resp.error });
118
153
  setTableData(undefined);
@@ -249,10 +284,27 @@ function CreateEditVirtualTable({ containerStyle, initialVirtualTable, closeEdit
249
284
  flexDirection: 'row',
250
285
  justifyContent: 'space-between',
251
286
  }, children: [(0, jsx_runtime_1.jsx)(ButtonComponent, { label: 'Run query', onClick: () => {
287
+ eventTracking?.addBreadcrumb?.({
288
+ message: 'Clicked run query button in CreateEditVirtualTable',
289
+ category: 'interaction',
290
+ level: 'info',
291
+ timestamp: Date.now(),
292
+ });
252
293
  handleRunQuery();
253
294
  } }), !!dashboardOwnerTenants?.length && ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { label: 'Owner Tenants', width: 230, value: virtualTableOwners, options: dashboardOwnerTenants?.map((f) => {
254
295
  return { value: f.tenantField, label: f.name };
255
- }) ?? [], onChange: (e) => setVirtualTableOwners(e.target.value), allSelectedLabel: (0, jsx_runtime_1.jsx)("div", { children: "All tenants" }), noneSelectedLabel: (0, jsx_runtime_1.jsx)("div", { children: "No owners" }) }))] })), errorInfo.show ? ((0, jsx_runtime_1.jsx)("div", { style: {
296
+ }) ?? [], onChange: (e) => {
297
+ setVirtualTableOwners(e.target.value);
298
+ eventTracking?.addBreadcrumb?.({
299
+ message: 'Changed owner tenants in CreateEditVirtualTable',
300
+ category: 'interaction',
301
+ level: 'info',
302
+ timestamp: Date.now(),
303
+ data: {
304
+ ownerTenants: e.target.value,
305
+ },
306
+ });
307
+ }, allSelectedLabel: (0, jsx_runtime_1.jsx)("div", { children: "All tenants" }), noneSelectedLabel: (0, jsx_runtime_1.jsx)("div", { children: "No owners" }) }))] })), errorInfo.show ? ((0, jsx_runtime_1.jsx)("div", { style: {
256
308
  fontSize: 15,
257
309
  fontWeight: '400',
258
310
  width: '100%',
@@ -274,7 +326,37 @@ function CreateEditVirtualTable({ containerStyle, initialVirtualTable, closeEdit
274
326
  flexDirection: 'row',
275
327
  gap: 12,
276
328
  marginTop: 'auto',
277
- }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: closeEditVirtualTable, label: 'Discard changes' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { label: `${initialVirtualTable ? 'Save changes' : 'Create virtual table'}`, onClick: () => {
329
+ }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
330
+ closeEditVirtualTable();
331
+ eventTracking?.addBreadcrumb?.({
332
+ message: 'Clicked discard changes button in CreateEditVirtualTable',
333
+ category: 'interaction',
334
+ level: 'info',
335
+ timestamp: Date.now(),
336
+ });
337
+ }, label: 'Discard changes' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { label: `${initialVirtualTable ? 'Save changes' : 'Create virtual table'}`, onClick: () => {
338
+ if (initialVirtualTable) {
339
+ eventTracking?.addBreadcrumb?.({
340
+ message: 'Saved changes to existing virtual table',
341
+ data: {
342
+ virtualTable: initialVirtualTable.name,
343
+ },
344
+ category: 'interaction',
345
+ level: 'info',
346
+ timestamp: Date.now(),
347
+ });
348
+ }
349
+ else {
350
+ eventTracking?.addBreadcrumb?.({
351
+ message: 'Created new virtual table',
352
+ data: {
353
+ virtualTable: name,
354
+ },
355
+ category: 'interaction',
356
+ level: 'info',
357
+ timestamp: Date.now(),
358
+ });
359
+ }
278
360
  const duplicateColumns = (0, VirtualTableManager_1.getDuplicateColumns)(tableData?.fields);
279
361
  if (duplicateColumns.length > 0) {
280
362
  alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns.join('\n')}`);
@@ -294,5 +376,5 @@ function CreateEditVirtualTable({ containerStyle, initialVirtualTable, closeEdit
294
376
  display: 'flex',
295
377
  flexDirection: 'row',
296
378
  gap: 12,
297
- }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: closeEditVirtualTable, label: 'Discard changes' }) }))] })] }), (0, jsx_runtime_1.jsx)(CreateVirtualTables_1.TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant })] }) }));
379
+ }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: closeEditVirtualTable, label: 'Discard changes' }) }))] })] }), (0, jsx_runtime_1.jsx)(CreateVirtualTables_1.TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant, errorType: failingTenantErrorType })] }) }));
298
380
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useDatabaseSchema.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDatabaseSchema.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB;;;CAgE7B,CAAC"}
1
+ {"version":3,"file":"useDatabaseSchema.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDatabaseSchema.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB;;;CA2E7B,CAAC"}
@@ -5,7 +5,7 @@ const AdminProvider_1 = require("../AdminProvider");
5
5
  const react_1 = require("react");
6
6
  const ConnectionClient_1 = require("../api/ConnectionClient");
7
7
  const useDatabaseSchema = () => {
8
- const { state, dispatch, getToken } = (0, AdminProvider_1.useAdmin)();
8
+ const { state, dispatch, getToken, eventTracking } = (0, AdminProvider_1.useAdmin)();
9
9
  const [isLoading, setIsLoading] = (0, react_1.useState)(state.databaseSchema?.id !== state.client.id);
10
10
  const idRef = (0, react_1.useRef)(null);
11
11
  (0, react_1.useEffect)(() => {
@@ -39,6 +39,17 @@ const useDatabaseSchema = () => {
39
39
  });
40
40
  }
41
41
  catch (e) {
42
+ eventTracking?.logError?.({
43
+ type: 'bug', // TODO: determine type
44
+ severity: 'high',
45
+ message: 'Error fetching schema',
46
+ errorMessage: e.message,
47
+ errorStack: e.stack,
48
+ errorData: {
49
+ caller: 'useDatabaseSchema',
50
+ function: 'fetchSchema',
51
+ },
52
+ });
42
53
  console.error(e);
43
54
  }
44
55
  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"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLongLoading = useLongLoading;
4
+ const react_1 = require("react");
5
+ const AdminProvider_1 = require("../AdminProvider");
6
+ function useLongLoading(isLoading, meta) {
7
+ const { origin, expectedLoadTime = 5000, abnormalLoadTime = 15000, loadDescription, } = meta;
8
+ const [isLongLoading, setIsLongLoading] = (0, react_1.useState)(false);
9
+ const [isAbnormalLoading, setIsAbnormalLoading] = (0, react_1.useState)(false);
10
+ const { eventTracking } = (0, AdminProvider_1.useAdmin)();
11
+ (0, react_1.useEffect)(() => {
12
+ let longTimer = null;
13
+ let abnormalTimer = null;
14
+ if (isLoading) {
15
+ // Set timer for long loading
16
+ longTimer = setTimeout(() => {
17
+ setIsLongLoading(true);
18
+ eventTracking?.logError?.({
19
+ type: 'timeout',
20
+ severity: 'medium',
21
+ message: `${origin} loading is taking longer than expected`,
22
+ errorData: {
23
+ loadDescription,
24
+ expectedLoadTime,
25
+ currentTime: Date.now(),
26
+ },
27
+ });
28
+ // Set timer for abnormal loading
29
+ abnormalTimer = setTimeout(() => {
30
+ setIsAbnormalLoading(true);
31
+ eventTracking?.logError?.({
32
+ type: 'timeout',
33
+ severity: 'high',
34
+ message: `${origin} loading is taking abnormally long`,
35
+ errorData: {
36
+ loadDescription,
37
+ expectedLoadTime,
38
+ abnormalLoadTime,
39
+ currentTime: Date.now(),
40
+ },
41
+ });
42
+ }, abnormalLoadTime - expectedLoadTime);
43
+ }, expectedLoadTime);
44
+ }
45
+ else {
46
+ setIsLongLoading(false);
47
+ setIsAbnormalLoading(false);
48
+ }
49
+ return () => {
50
+ if (longTimer)
51
+ clearTimeout(longTimer);
52
+ if (abnormalTimer)
53
+ clearTimeout(abnormalTimer);
54
+ };
55
+ }, [
56
+ isLoading,
57
+ origin,
58
+ expectedLoadTime,
59
+ abnormalLoadTime,
60
+ loadDescription,
61
+ eventTracking,
62
+ ]);
63
+ return {
64
+ isLongLoading,
65
+ isAbnormalLoading,
66
+ };
67
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,QAChB,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,WAC3B;IAAE,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAA;CAAE,cACnB,OAAO,SA2BpB,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAAa,WAAW,KAAG,MAoBzD,CAAC;AAqBF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,GACrB,KAAK,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,EACpC,SAAS;IAAE,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAA;CAAE,EAC/B,YAAY,OAAO,SA2BpB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,SAAS,WAAW,KAAG,MAoBzD,CAAC;AAqBF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useThrottle.d.ts","sourceRoot":"","sources":["../../../src/hooks/useThrottle.tsx"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAClC,KAAK,EAAE,MAAM,aAGI,GAAG,EAAE,UAOvB"}
1
+ {"version":3,"file":"useThrottle.d.ts","sourceRoot":"","sources":["../../../src/hooks/useThrottle.tsx"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAClC,KAAK,EAAE,MAAM,IAGL,GAAG,MAAM,GAAG,EAAE,UAOvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ArrowDownHeadIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/ArrowDownHeadIcon.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,iBAAiB;;6CActB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"ArrowDownHeadIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/ArrowDownHeadIcon.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,iBAAiB,GAAI;;CAAY,4CActC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CheckCircleIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/CheckCircleIcon.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe;;6CAepB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"CheckCircleIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/CheckCircleIcon.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe,GAAI;;CAAY,4CAepC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExclamationFilledIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/ExclamationFilledIcon.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,qBAAqB;;6CAa1B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"ExclamationFilledIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/ExclamationFilledIcon.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,qBAAqB,GAAI;;CAAY,4CAa1C,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExteriorLinkIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/ExteriorLinkIcon.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB;;6CAcrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"ExteriorLinkIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/ExteriorLinkIcon.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB,GAAI;;CAAY,4CAcrC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"QuestionMarkCircleIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/QuestionMarkCircleIcon.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,sBAAsB;;6CAgB3B,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"QuestionMarkCircleIcon.d.ts","sourceRoot":"","sources":["../../../src/icons/QuestionMarkCircleIcon.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,sBAAsB,GAAI;;CAAY,4CAgB3C,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CodePreview.d.ts","sourceRoot":"","sources":["../../../src/modals/CodePreview.tsx"],"names":[],"mappings":"AAeA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAc,EACd,MAAM,EACN,SAAS,GACV,EAAE;IACD,cAAc,EAAE,GAAG,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC,kDA4OA"}
1
+ {"version":3,"file":"CodePreview.d.ts","sourceRoot":"","sources":["../../../src/modals/CodePreview.tsx"],"names":[],"mappings":"AAeA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAc,EACd,MAAM,EACN,SAAS,GACV,EAAE;IACD,cAAc,EAAE,GAAG,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC,kDAoPA"}
@@ -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,2CAy4BA"}
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"}