@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
@@ -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) {
@@ -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, client.queryHeaders);
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,7 +320,7 @@ 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, }) {
310
326
  const { state: { theme }, } = useAdmin();
@@ -360,32 +376,50 @@ export function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQueryInfo,
360
376
  setIsOpen(false);
361
377
  } })] })] }) }));
362
378
  }
363
- export function TenantFieldModal({ isOpen, setClosed, tenant, onOverride, }) {
379
+ export function TenantFieldModal({ isOpen, setClosed, tenant, onOverride, errorType = 'missing', }) {
380
+ const { state: { theme }, } = useAdmin();
364
381
  return (_jsx(ModalPrimitive, { isOpen: isOpen, onClose: () => setClosed(), children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '500px' }, children: [_jsx("h1", { style: {
365
382
  fontSize: 24,
366
383
  fontWeight: 600,
367
384
  color: '#212121',
368
385
  paddingBottom: 14,
369
- }, children: "Foreign Key Missing" }), _jsxs("div", { style: { marginBottom: '12px' }, children: [_jsx("span", { style: {
370
- color: '#212121',
371
- fontWeight: 600,
372
- backgroundColor: '#f7f7f7',
373
- padding: '2px 4px',
374
- borderRadius: 4,
375
- border: '1px solid #e0e0e0',
376
- }, children: tenant?.name }), "'s foreign key", ' ', _jsx("span", { style: {
377
- color: 'red',
378
- fontWeight: 600,
379
- backgroundColor: '#f7f7f7',
380
- padding: '2px 4px',
381
- borderRadius: 4,
382
- border: '1px solid #e0e0e0',
383
- }, 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: {
384
418
  display: 'flex',
385
419
  flexDirection: 'row',
386
420
  gap: '12px',
387
421
  justifyContent: 'flex-end',
388
- }, children: [onOverride && (_jsx(SecondaryButtonPrimitive, { label: "Override", onClick: () => {
422
+ }, children: [onOverride && errorType === 'missing' && (_jsx(SecondaryButtonPrimitive, { label: "Override", onClick: () => {
389
423
  onOverride();
390
424
  setClosed();
391
425
  } })), _jsx(ButtonPrimitive, { label: "Got It", onClick: () => setClosed() })] })] }) }));
@@ -91,7 +91,7 @@ describe('ConnectSchema', () => {
91
91
  theme: defaultTheme,
92
92
  organizationIdSet: false,
93
93
  dateFilter: {},
94
- domainName: '',
94
+ clerkOrgId: '',
95
95
  databaseTypeMismatch: { show: false, backendDatabaseType: '' },
96
96
  selectedTenantField: undefined,
97
97
  selectedTenantValues: undefined,
@@ -75,7 +75,7 @@ describe('CreateVirtualTables', () => {
75
75
  theme: defaultTheme,
76
76
  organizationIdSet: false,
77
77
  dateFilter: {},
78
- domainName: '',
78
+ clerkOrgId: '',
79
79
  databaseTypeMismatch: { show: false, backendDatabaseType: '' },
80
80
  selectedTenantField: undefined,
81
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,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"}
@@ -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,15 +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();
35
36
  const containerRef = useRef(null);
36
37
  const addEditProcessVirtualTable = async (override = false) => {
37
- const failingTenant = virtualTableOwners?.find((field) => tableData &&
38
+ const missingTenantField = virtualTableOwners?.find((field) => tableData &&
38
39
  !tableData.fields.find((col) => col.name === field?.replaceAll('"', '')));
39
- if (!override && tableData && failingTenant) {
40
- const tenant = client.allTenantTypes?.find((t) => t.tenantField === failingTenant);
41
- setFailingTenant(tenant);
42
- 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
+ }
43
66
  }
44
67
  addEditVirtualTable(initialVirtualTable ? 'edit' : 'add', ranVirtualTableQuery, virtualTableOwners, name, initialVirtualTable ? initialVirtualTable._id : undefined, tableData?.fields || [], override);
45
68
  };
@@ -54,6 +77,12 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
54
77
  // Run query on mount
55
78
  useEffect(() => {
56
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
+ });
57
86
  handleRunQuery(initialVirtualTable.viewQuery);
58
87
  }
59
88
  }, []);
@@ -61,6 +90,12 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
61
90
  setErrorInfo({ show: false, message: '' });
62
91
  setVirtualTableAddable(false);
63
92
  setAskAIButtonLoading(true);
93
+ eventTracking?.addBreadcrumb?.({
94
+ message: 'Used Ask AI in CreateEditVirtualTable',
95
+ category: 'network',
96
+ level: 'info',
97
+ timestamp: Date.now(),
98
+ });
64
99
  const results = await getQueryFromAiWithConnection(state.isSelfHosted, allTableData, state.queryEndpoint, aiPrompt, state.client._id, getToken, state.client.schemaNames, state.queryHeaders);
65
100
  setEditVirtualTableQuery(results);
66
101
  setAskAIButtonLoading(false);
@@ -106,7 +141,7 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
106
141
  return;
107
142
  }
108
143
  setIsLoading(true);
109
- const resp = await getVirtualTableData(state.client._id, query, state.client.databaseType, state.queryEndpoint, getToken, state.queryHeaders);
144
+ const resp = await getVirtualTableData(state.client._id, query, state.client.databaseType, state.queryEndpoint, getToken, eventTracking, state.queryHeaders);
110
145
  if (!resp.success) {
111
146
  setErrorInfo({ show: true, message: resp.error });
112
147
  setTableData(undefined);
@@ -243,10 +278,27 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
243
278
  flexDirection: 'row',
244
279
  justifyContent: 'space-between',
245
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
+ });
246
287
  handleRunQuery();
247
288
  } }), !!dashboardOwnerTenants?.length && (_jsx(QuillMultiSelectComponentWithCombo, { label: 'Owner Tenants', width: 230, value: virtualTableOwners, options: dashboardOwnerTenants?.map((f) => {
248
289
  return { value: f.tenantField, label: f.name };
249
- }) ?? [], 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: {
250
302
  fontSize: 15,
251
303
  fontWeight: '400',
252
304
  width: '100%',
@@ -268,7 +320,37 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
268
320
  flexDirection: 'row',
269
321
  gap: 12,
270
322
  marginTop: 'auto',
271
- }, 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
+ }
272
354
  const duplicateColumns = getDuplicateColumns(tableData?.fields);
273
355
  if (duplicateColumns.length > 0) {
274
356
  alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns.join('\n')}`);
@@ -288,5 +370,5 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
288
370
  display: 'flex',
289
371
  flexDirection: 'row',
290
372
  gap: 12,
291
- }, 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 })] }) }));
292
374
  }
@@ -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"}
@@ -2,7 +2,7 @@ import { useAdmin } from '../AdminProvider';
2
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
7
  const idRef = useRef(null);
8
8
  useEffect(() => {
@@ -36,6 +36,17 @@ export const useDatabaseSchema = () => {
36
36
  });
37
37
  }
38
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
+ });
39
50
  console.error(e);
40
51
  }
41
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"}
@@ -0,0 +1,64 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { useAdmin } from '../AdminProvider';
3
+ export function useLongLoading(isLoading, meta) {
4
+ const { origin, expectedLoadTime = 5000, abnormalLoadTime = 15000, loadDescription, } = meta;
5
+ const [isLongLoading, setIsLongLoading] = useState(false);
6
+ const [isAbnormalLoading, setIsAbnormalLoading] = useState(false);
7
+ const { eventTracking } = useAdmin();
8
+ useEffect(() => {
9
+ let longTimer = null;
10
+ let abnormalTimer = null;
11
+ if (isLoading) {
12
+ // Set timer for long loading
13
+ longTimer = setTimeout(() => {
14
+ setIsLongLoading(true);
15
+ eventTracking?.logError?.({
16
+ type: 'timeout',
17
+ severity: 'medium',
18
+ message: `${origin} loading is taking longer than expected`,
19
+ errorData: {
20
+ loadDescription,
21
+ expectedLoadTime,
22
+ currentTime: Date.now(),
23
+ },
24
+ });
25
+ // Set timer for abnormal loading
26
+ abnormalTimer = setTimeout(() => {
27
+ setIsAbnormalLoading(true);
28
+ eventTracking?.logError?.({
29
+ type: 'timeout',
30
+ severity: 'high',
31
+ message: `${origin} loading is taking abnormally long`,
32
+ errorData: {
33
+ loadDescription,
34
+ expectedLoadTime,
35
+ abnormalLoadTime,
36
+ currentTime: Date.now(),
37
+ },
38
+ });
39
+ }, abnormalLoadTime - expectedLoadTime);
40
+ }, expectedLoadTime);
41
+ }
42
+ else {
43
+ setIsLongLoading(false);
44
+ setIsAbnormalLoading(false);
45
+ }
46
+ return () => {
47
+ if (longTimer)
48
+ clearTimeout(longTimer);
49
+ if (abnormalTimer)
50
+ clearTimeout(abnormalTimer);
51
+ };
52
+ }, [
53
+ isLoading,
54
+ origin,
55
+ expectedLoadTime,
56
+ abnormalLoadTime,
57
+ loadDescription,
58
+ eventTracking,
59
+ ]);
60
+ return {
61
+ isLongLoading,
62
+ isAbnormalLoading,
63
+ };
64
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"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"}
@@ -8,7 +8,7 @@ import { QuillSelectComponentWithCombo } from '../components/QuillSelectWithComb
8
8
  import { Highlight, themes } from 'prism-react-renderer';
9
9
  import { MemoizedButton } from '../components/UiComponents';
10
10
  export default function CodePreview({ ModalComponent, isOpen, setIsOpen, }) {
11
- const { state } = useAdmin();
11
+ const { state, eventTracking } = useAdmin();
12
12
  const { dashboards } = useDashboards();
13
13
  const parentRef = useRef(null);
14
14
  const [modalWidth, setModalWidth] = useState(200);
@@ -16,6 +16,7 @@ export default function CodePreview({ ModalComponent, isOpen, setIsOpen, }) {
16
16
  const [toggleMode, setToggleMode] = useState('Dashboard');
17
17
  const [selectedReportId, setSelectedReportId] = useState(null);
18
18
  const [hideCode, setHideCode] = useState(false);
19
+ const [initialSizeIsSet, setInitialSizeIsSet] = useState(false);
19
20
  const selectedDashboardObject = useMemo(() => {
20
21
  return dashboards?.find((elem) => elem.name === state.selectedDashboard);
21
22
  }, [dashboards, state.selectedDashboard]);
@@ -28,6 +29,7 @@ export default function CodePreview({ ModalComponent, isOpen, setIsOpen, }) {
28
29
  setModalWidth(window.innerWidth - 80);
29
30
  }
30
31
  setModalHeight(window.innerHeight - 80);
32
+ setInitialSizeIsSet(true);
31
33
  }, []);
32
34
  useEffect(() => {
33
35
  handleResize();
@@ -51,11 +53,14 @@ export default function CodePreview({ ModalComponent, isOpen, setIsOpen, }) {
51
53
  ? `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}`
52
54
  : `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}`;
53
55
  navigator.clipboard.writeText(code);
56
+ eventTracking?.logEvent?.('embed-preview-copy-code', {
57
+ dashboardName: state.selectedDashboard,
58
+ });
54
59
  };
55
60
  if (!state.selectedDashboard) {
56
61
  return null;
57
62
  }
58
- return (_jsx("div", { ref: parentRef, children: _jsx(ModalComponent, { isOpen: isOpen, setIsOpen: setIsOpen, title: "Embed Preview", width: modalWidth, height: modalHeight, children: _jsxs("div", { style: { paddingLeft: 20, paddingRight: 20 }, children: [_jsx("div", { style: {
63
+ return (_jsx("div", { ref: parentRef, style: { visibility: initialSizeIsSet ? 'visible' : 'hidden' }, children: _jsx(ModalComponent, { isOpen: isOpen, setIsOpen: setIsOpen, title: "Embed Preview", width: modalWidth, height: modalHeight, children: _jsxs("div", { style: { paddingLeft: 20, paddingRight: 20 }, children: [_jsx("div", { style: {
59
64
  display: 'flex',
60
65
  flexDirection: 'row',
61
66
  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,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useAdmin } from '../AdminProvider';
3
+ import { ModalPrimitive } from '../primitives';
4
+ import CreateEnvironment from '../public_components/CreateEnvironment';
5
+ export default function CreateEnvironmentModal({ showCreateEnvironmentModal, setShowCreateEnvironmentModal, }) {
6
+ const { onOnboardComplete } = useAdmin();
7
+ return (_jsx(ModalPrimitive, { isOpen: showCreateEnvironmentModal, onClose: () => {
8
+ if (confirm('Are you sure you want to close this modal? Changes will not be saved.')) {
9
+ setShowCreateEnvironmentModal(false);
10
+ }
11
+ }, children: _jsx(CreateEnvironment, { onOnboardComplete: (client) => {
12
+ setShowCreateEnvironmentModal(false);
13
+ onOnboardComplete?.(client);
14
+ } }) }));
15
+ }
@@ -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"}