@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
@@ -6,13 +6,13 @@ import StepDisplay from '../components/StepDisplay';
6
6
  import ConnectSchema from '../forms/client_onboard/ConnectSchema';
7
7
  import { useAdmin } from '../AdminProvider';
8
8
  import { getDatabaseConnectionFormat, } from '../utils/databases';
9
- import CreateVirtualTables from '../forms/client_onboard/CreateVirtualTables';
10
9
  import { getTableColumnsBySchema } from '../api/ConnectionClient';
11
10
  import { quillFetch } from '../utils/dataFetcher';
11
+ import { useLongLoading } from '../hooks/useLongLoading';
12
12
  export default function CreateEnvironment({ onOnboardComplete, containerStyle, }) {
13
13
  const parentRef = React.useRef(null);
14
- const { state, dispatch, setClient, getToken, quillFetchWithToken } = useAdmin();
15
- const domainName = state.client?.domainName || state.domainName;
14
+ const { state, dispatch, setClient, getToken, quillFetchWithToken, eventTracking, } = useAdmin();
15
+ const clerkOrgId = state.client?.clerkOrgId || state.clerkOrgId;
16
16
  const defaultDatabaseType = state.client?.databaseType || 'PostgreSQL';
17
17
  const [createEnvSteps, setCreateEnvSteps] = useState({
18
18
  connectDB: {
@@ -40,6 +40,14 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
40
40
  }), [newClient, connection, databaseSchema]);
41
41
  const [tenantInit, setTenantInit] = useState({});
42
42
  const [fetchSchemasLoading, setFetchSchemasLoading] = useState(false);
43
+ useLongLoading(onboardingCompleteIsLoading, {
44
+ origin: 'CreateEnvironment',
45
+ loadDescription: 'Finishing onboarding',
46
+ });
47
+ useLongLoading(fetchSchemasLoading, {
48
+ origin: 'CreateEnvironment',
49
+ loadDescription: 'Fetching schemas',
50
+ });
43
51
  const onConnectDatabase = useCallback(async (clientId) => {
44
52
  setTenantInit({});
45
53
  setSqlTables([]);
@@ -58,6 +66,10 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
58
66
  getToken,
59
67
  });
60
68
  }
69
+ eventTracking?.logEvent?.('start-onboarding', {
70
+ clientId,
71
+ clerkOrgId,
72
+ });
61
73
  setNewClient({
62
74
  clientId,
63
75
  });
@@ -71,7 +83,7 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
71
83
  clientId,
72
84
  databaseType: connectionInfo.type,
73
85
  schemaNames: selectedSchemaNames,
74
- domainName,
86
+ clerkOrgId,
75
87
  });
76
88
  // FIXME: Error handling
77
89
  try {
@@ -92,10 +104,31 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
92
104
  openStep('connectSchema');
93
105
  })
94
106
  .catch((error) => {
107
+ eventTracking?.logError?.({
108
+ type: 'bug', // TODO: determine type
109
+ severity: 'high',
110
+ message: 'Error fetching schema',
111
+ errorMessage: error.message,
112
+ errorData: {
113
+ caller: 'CreateEnvironment',
114
+ function: 'setEnvironmentDetails',
115
+ },
116
+ });
95
117
  console.error(error);
96
118
  });
97
119
  }
98
120
  catch (error) {
121
+ eventTracking?.logError?.({
122
+ type: 'bug', // TODO: determine type
123
+ severity: 'high',
124
+ message: 'Error setting up database',
125
+ errorMessage: error.message,
126
+ errorStack: error.stack,
127
+ errorData: {
128
+ caller: 'CreateEnvironment',
129
+ function: 'setEnvironmentDetails',
130
+ },
131
+ });
99
132
  console.error(error);
100
133
  }
101
134
  setFetchSchemasLoading(false);
@@ -114,6 +147,7 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
114
147
  };
115
148
  const finishOnboarding = async () => {
116
149
  setOnboardingCompleteIsLoading(true);
150
+ const orgName = localStorage.getItem('orgName'); // Set via portal, alternatively, pass a prop through Admin Provider
117
151
  // TODO: Anyone could create a client with some domain through this endpoint
118
152
  const response = await quillFetchWithToken({
119
153
  client: {
@@ -128,8 +162,9 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
128
162
  ...newClient,
129
163
  allTenantTypes: undefined,
130
164
  },
131
- domainName: domainName,
165
+ clerkOrgId: clerkOrgId,
132
166
  clientId: newClient.clientId,
167
+ orgName,
133
168
  },
134
169
  adminMode: true,
135
170
  });
@@ -137,7 +172,15 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
137
172
  setOnboardingCompleteIsLoading(false);
138
173
  throw new Error(response.message);
139
174
  }
175
+ eventTracking?.logEvent?.('finish-onboarding', {
176
+ clientId: newClient.clientId,
177
+ clerkOrgId: clerkOrgId,
178
+ });
140
179
  setClient(response.data.client);
180
+ dispatch({
181
+ type: 'UPDATE_CLIENTS',
182
+ payload: response.data.client,
183
+ });
141
184
  sessionStorage.removeItem('quill-adminState');
142
185
  sessionStorage.setItem('quill-client', JSON.stringify(response.data.client));
143
186
  dispatch({
@@ -195,7 +238,7 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
195
238
  ownerTenantFields: [tenantInit.ownerTenant.tenantField],
196
239
  allTenantTypes: [tenantInit.ownerTenant],
197
240
  });
198
- openStep('createVirtualTables');
241
+ finishOnboarding();
199
242
  }, returnToConnectDatabase: () => {
200
243
  setNewClient({
201
244
  ...newClient,
@@ -209,15 +252,5 @@ export default function CreateEnvironment({ onOnboardComplete, containerStyle, }
209
252
  !!newClient?.schemaNames?.length) {
210
253
  openStep('connectSchema');
211
254
  }
212
- } })), createEnvSteps.createVirtualTables.open ? (_jsx(CreateVirtualTables, { containerStyle: {
213
- borderRadius: 6,
214
- border: '1px solid #e7e7e7',
215
- boxShadow: '0px 1px 6px rgba(0, 0, 0, 0.07)',
216
- height: 'calc(100vh - 59px)',
217
- width: 'calc(100vw - 200px)',
218
- }, header1Style: header1Style, header2Style: header2Style, databaseSchema: databaseSchema, environmentDetails: connection, completeOnboarding: finishOnboarding, state: state, client: newClient, tenantInit: tenantInit, isLoading: onboardingCompleteIsLoading, sqlTables: sqlTables, setSqlTables: setSqlTables })) : (_jsx(StepDisplay, { label: "Create Virtual Tables", completed: false, header1Style: header1Style, onClick: () => {
219
- if (tenantInit?.ownerTenant) {
220
- openStep('createVirtualTables');
221
- }
222
255
  } }))] }));
223
256
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardManager.d.ts","sourceRoot":"","sources":["../../../src/public_components/DashboardManager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4C,MAAM,OAAO,CAAC;AAwChF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,6BAA6B,EAAE,6BAA6B,EAC5D,cAAc,GACf,EAAE;IACD,6BAA6B,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3C,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC,2CAi0BA"}
1
+ {"version":3,"file":"DashboardManager.d.ts","sourceRoot":"","sources":["../../../src/public_components/DashboardManager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4C,MAAM,OAAO,CAAC;AA6ChF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,6BAA6B,EAAE,6BAA6B,EAC5D,cAAc,GACf,EAAE;IACD,6BAA6B,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3C,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC,2CAw3BA"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useCallback, useEffect, useRef, useState } from 'react';
3
3
  import { useAdmin } from '../AdminProvider';
4
4
  import { OrgSelect, EnvSelectPopover, DashboardSelectPopover, } from '../components';
5
- import { useDashboard, useDashboards } from '@quillsql/react';
5
+ import { useDashboardInternal, useDashboards, } from '@quillsql/react';
6
6
  import { deleteReport, ReportWrapper } from '../Admin';
7
7
  import { ButtonPrimitive, HeaderPrimitive, ModalPrimitive, SecondaryButtonPrimitive, TextInputPrimitive, CheckboxPrimitive, } from '../primitives';
8
8
  import { NewDashboardModal } from '../modals/NewDashboardModal';
@@ -21,9 +21,10 @@ import { Popover } from '../primitives/PopoverPrimitive';
21
21
  import CodePreview from '../modals/CodePreview';
22
22
  import SavedQueriesModal from '../modals/SavedQueriesModal';
23
23
  import { InternalDashboard } from '../components/InternalDashboard/InternalDashboard';
24
- import CreateEnvironment from './CreateEnvironment';
24
+ import { useLongLoading } from '../hooks/useLongLoading';
25
+ import CreateEnvironmentModal from '../modals/CreateEnvironmentModal';
25
26
  export default function DashboardManager({ navigateToVirtualTableManager: navigateToVirtualTableManager, containerStyle, }) {
26
- const { state, dispatch, clientLoading, setClient, getToken, quillFetchWithToken, } = useAdmin();
27
+ const { state, dispatch, clientLoading, setClient, getToken, quillFetchWithToken, eventTracking, } = useAdmin();
27
28
  const parentRef = useRef(null);
28
29
  const envSelectPopoverRef = useRef(null);
29
30
  const dashboardSelectPopoverRef = useRef(null);
@@ -35,8 +36,12 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
35
36
  //FIXME: we don't want to lift up this state
36
37
  const [userFilters, setUserFilters] = useState([]);
37
38
  const [showCreateEnvironmentModal, setShowCreateEnvironmentModal] = useState(false);
38
- const { data: dashboardConfig, reload: reloadDashboard } = useDashboard(state.selectedDashboard, userFilters);
39
+ const { data: dashboardConfig, reload: reloadDashboard } = useDashboardInternal(state.selectedDashboard, userFilters);
39
40
  const { dashboards, isLoading: dashboardsLoading } = useDashboards();
41
+ useLongLoading(dashboardsLoading, {
42
+ origin: 'DashboardManager',
43
+ loadDescription: 'Loading dashboards',
44
+ });
40
45
  const { setSelectedDashboard } = useDashboardManager();
41
46
  // const [editMode, setEditMode] = useState(true);
42
47
  const [autoPromoteVirtualTables, setAutoPromoteVirtualTables] = useState(true);
@@ -57,6 +62,15 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
57
62
  type: 'SET_ACTIVE_COMPONENT',
58
63
  payload: 'Report',
59
64
  });
65
+ eventTracking?.addBreadcrumb?.({
66
+ message: 'Clicked report in DashboardManager',
67
+ data: {
68
+ report: elem.id,
69
+ },
70
+ category: 'navigation',
71
+ level: 'info',
72
+ timestamp: Date.now(),
73
+ });
60
74
  }, [dispatch]);
61
75
  const hoverActions = (data) => {
62
76
  return (_jsx("div", { style: {
@@ -80,7 +94,7 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
80
94
  gap: 4,
81
95
  }, onClick: async (event) => {
82
96
  event.stopPropagation();
83
- if (await deleteReport(data.id, state, getToken)) {
97
+ if (await deleteReport(data.id, state, getToken, eventTracking)) {
84
98
  reloadDashboard(undefined, false, {
85
99
  report: { id: data.id },
86
100
  action: 'delete',
@@ -154,11 +168,22 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
154
168
  }
155
169
  catch (error) {
156
170
  console.error('Promotion failed:', error);
171
+ eventTracking?.logError?.({
172
+ type: 'bug', // TODO: determine type
173
+ severity: 'high',
174
+ message: 'Error promoting dashboard',
175
+ errorMessage: error.message,
176
+ errorStack: error.stack,
177
+ errorData: {
178
+ caller: 'DashboardManager',
179
+ function: 'handlePromote',
180
+ },
181
+ });
157
182
  alert('Could not promote this dashboard.');
158
183
  }
159
184
  };
160
185
  if (showCreateEnvironmentModal) {
161
- return (_jsx(ModalPrimitive, { isOpen: showCreateEnvironmentModal, onClose: () => setShowCreateEnvironmentModal(false), children: _jsx(CreateEnvironment, { onOnboardComplete: () => setShowCreateEnvironmentModal(false) }) }));
186
+ return (_jsx(CreateEnvironmentModal, { showCreateEnvironmentModal: showCreateEnvironmentModal, setShowCreateEnvironmentModal: setShowCreateEnvironmentModal }));
162
187
  }
163
188
  return (_jsxs("div", { style: containerStyle, children: [(state.activeComponent === 'Report Builder' ||
164
189
  state.activeComponent === 'SQL Editor') && (_jsx(ChartQueryBuilder, { activeComponent: state.activeComponent, destinationDashboard: state.selectedDashboard ??
@@ -268,6 +293,12 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
268
293
  type: 'SET_ACTIVE_COMPONENT',
269
294
  payload: 'CodePreview',
270
295
  });
296
+ eventTracking?.addBreadcrumb?.({
297
+ message: 'Opened embed preview in DashboardManager',
298
+ category: 'navigation',
299
+ level: 'info',
300
+ timestamp: Date.now(),
301
+ });
271
302
  }, label: "Embed Preview" }), _jsx(Popover, { content: _jsxs("div", { style: {
272
303
  display: 'flex',
273
304
  flexDirection: 'column',
@@ -281,6 +312,12 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
281
312
  type: 'SET_ACTIVE_COMPONENT',
282
313
  payload: 'Report Builder',
283
314
  });
315
+ eventTracking?.addBreadcrumb?.({
316
+ message: 'Opened report builder in DashboardManager',
317
+ category: 'navigation',
318
+ level: 'info',
319
+ timestamp: Date.now(),
320
+ });
284
321
  }, label: "Report Builder \u2197" }), _jsx(SecondaryButtonPrimitive, { onClick: () => {
285
322
  if (!state.selectedDashboard) {
286
323
  return;
@@ -289,6 +326,12 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
289
326
  type: 'SET_ACTIVE_COMPONENT',
290
327
  payload: 'SQL Editor',
291
328
  });
329
+ eventTracking?.addBreadcrumb?.({
330
+ message: 'Opened SQL editor in DashboardManager',
331
+ category: 'navigation',
332
+ level: 'info',
333
+ timestamp: Date.now(),
334
+ });
292
335
  }, label: "SQL Editor \u2197" }), _jsx(SecondaryButtonPrimitive, { onClick: () => {
293
336
  if (!state.selectedDashboard) {
294
337
  return;
@@ -297,6 +340,12 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
297
340
  type: 'SET_ACTIVE_COMPONENT',
298
341
  payload: 'SavedQueries',
299
342
  });
343
+ eventTracking?.addBreadcrumb?.({
344
+ message: 'Opened saved queries in DashboardManager',
345
+ category: 'navigation',
346
+ level: 'info',
347
+ timestamp: Date.now(),
348
+ });
300
349
  }, label: "Saved Queries \u2197" })] }), trigger: _jsx(ButtonPrimitive
301
350
  // onClick={() => {
302
351
  // if (!state.selectedDashboard) {
@@ -360,6 +409,15 @@ export default function DashboardManager({ navigateToVirtualTableManager: naviga
360
409
  dashboardsLoading ||
361
410
  dashboards?.filter((d) => d.name !== SAVED_QUERIES_DASHBOARD)
362
411
  .length ? (_jsx("div", { style: { width: '100%', position: 'relative' }, children: _jsx(InternalDashboard, { name: state.selectedDashboard ?? '', containerStyle: { padding: 25, width: '100%' }, onClickReport: handleClickReport, hoverActions: hoverActions, onUserFiltersUpdated: setUserFilters, parentLoading: clientLoading || dashboardsLoading, onManageDashboard: () => {
412
+ eventTracking?.addBreadcrumb?.({
413
+ message: 'Opened manage dashboard in DashboardManager',
414
+ data: {
415
+ dashboard: state.selectedDashboard,
416
+ },
417
+ category: 'navigation',
418
+ level: 'info',
419
+ timestamp: Date.now(),
420
+ });
363
421
  setEditFilterModalIsOpen(true);
364
422
  } }) })) : null] }), !clientLoading && !dashboardsLoading && (_jsxs(_Fragment, { children: [_jsx(EditEnvironmentModal, { isOpen: editEnvironmentModalIsOpen, setIsOpen: setEditEnvironmentModalIsOpen, onSave: async () => {
365
423
  await reloadDashboard(state.selectedDashboard ?? undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"EnvSelectPopover.d.ts","sourceRoot":"","sources":["../../../src/public_components/EnvSelectPopover.tsx"],"names":[],"mappings":"AAMA,UAAU,qBAAqB;IAC7B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,yBAAyB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;CACrC;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,OAAO,EACP,SAAS,EACT,MAAM,EACN,KAAK,EACL,yBAAyB,EACzB,SAAS,EACT,SAAS,EACT,sBAAsB,GACvB,EAAE,qBAAqB,2CAwOvB"}
1
+ {"version":3,"file":"EnvSelectPopover.d.ts","sourceRoot":"","sources":["../../../src/public_components/EnvSelectPopover.tsx"],"names":[],"mappings":"AAMA,UAAU,qBAAqB;IAC7B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,yBAAyB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;CACrC;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,OAAO,EACP,SAAS,EACT,MAAM,EACN,KAAK,EACL,yBAAyB,EACzB,SAAS,EACT,SAAS,EACT,sBAAsB,GACvB,EAAE,qBAAqB,2CAsQvB"}
@@ -6,7 +6,7 @@ import MiniButtonPrimitive from '../primitives/MiniButtonPrimitive';
6
6
  import { LoadingSpinner } from '../components/UiComponents';
7
7
  import { ListboxTextInput } from '../components/QuillMultiSelectWithCombo';
8
8
  export default function EnvSelectPopover({ clients, setClient, client, theme, onSelectedEditEnvironment, parentRef, isLoading, onCreateNewEnvironment, }) {
9
- const { state, dispatch } = useAdmin();
9
+ const { state, dispatch, eventTracking } = useAdmin();
10
10
  const [isOpen, setIsOpen] = useState(false);
11
11
  const [searchQuery, setSearchQuery] = useState('');
12
12
  const filteredClients = useMemo(() => {
@@ -20,6 +20,15 @@ export default function EnvSelectPopover({ clients, setClient, client, theme, on
20
20
  dispatch({ type: 'SET_ACTIVE_QUERY', payload: '' });
21
21
  dispatch({ type: 'SET_ACTIVE_EDIT_ITEM', payload: null });
22
22
  }
23
+ eventTracking?.addBreadcrumb?.({
24
+ message: 'Set client in EnvSelectPopover',
25
+ data: {
26
+ clientId: selectedClient._id || selectedClient.id,
27
+ },
28
+ category: 'navigation',
29
+ level: 'info',
30
+ timestamp: Date.now(),
31
+ });
23
32
  setClient(selectedClient);
24
33
  setIsOpen(false);
25
34
  };
@@ -84,7 +93,9 @@ export default function EnvSelectPopover({ clients, setClient, client, theme, on
84
93
  boxSizing: 'border-box',
85
94
  fontSize: 14,
86
95
  maxHeight: '50vh',
87
- }, setIsOpen: setIsOpen, onClick: () => { }, children: !isLoading ? (_jsxs(_Fragment, { children: [_jsx(ListboxTextInput, { id: "quill-search-bar", placeholder: "Search", value: searchQuery, onChange: setSearchQuery, width: 180 }), _jsx("div", { style: {
96
+ }, setIsOpen: setIsOpen, onClick: () => { }, children: !isLoading ? (_jsxs(_Fragment, { children: [_jsx(ListboxTextInput, { id: "quill-search-bar", placeholder: "Search", value: searchQuery, onChange: (e) => {
97
+ setSearchQuery(e);
98
+ }, width: 180 }), _jsx("div", { style: {
88
99
  height: 9,
89
100
  width: 230,
90
101
  borderTop: `1px solid ${state.theme?.borderColor ?? '#e7e7e7'}`,
@@ -93,6 +104,15 @@ export default function EnvSelectPopover({ clients, setClient, client, theme, on
93
104
  : undefined, item: item.name, isSelected: client._id === item._id, hoverActions: onSelectedEditEnvironment
94
105
  ? (item) => (_jsx(MiniButtonPrimitive, { label: "Manage", onClick: () => {
95
106
  onSelectedEditEnvironment(item);
107
+ eventTracking?.addBreadcrumb?.({
108
+ message: 'Opened manage environment in EnvSelectPopover',
109
+ data: {
110
+ environment: item,
111
+ },
112
+ category: 'navigation',
113
+ level: 'info',
114
+ timestamp: Date.now(),
115
+ });
96
116
  setIsOpen(false);
97
117
  }, style: {
98
118
  marginRight: -8,
@@ -102,7 +122,15 @@ export default function EnvSelectPopover({ clients, setClient, client, theme, on
102
122
  color: theme.secondaryTextColor,
103
123
  backgroundColor: theme.backgroundColor,
104
124
  } }))
105
- : undefined }, item._id))), _jsx("div", { className: 'quill-list-select', style: { paddingBottom: 6, cursor: 'pointer' }, children: _jsxs("a", { onClick: onCreateNewEnvironment, style: {
125
+ : undefined }, item._id))), _jsx("div", { className: 'quill-list-select', style: { paddingBottom: 6, cursor: 'pointer' }, children: _jsxs("a", { onClick: () => {
126
+ eventTracking?.addBreadcrumb?.({
127
+ message: 'Opened create new environment in EnvSelectPopover',
128
+ category: 'navigation',
129
+ level: 'info',
130
+ timestamp: Date.now(),
131
+ });
132
+ onCreateNewEnvironment?.();
133
+ }, style: {
106
134
  height: 42,
107
135
  width: 216,
108
136
  borderRadius: 6,
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualTableManager.d.ts","sourceRoot":"","sources":["../../../src/public_components/VirtualTableManager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwC,MAAM,OAAO,CAAC;AA2C5E,eAAO,MAAM,mBAAmB,aAAc,GAAG,EAAE,aAalD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,cAAc,EACd,YAAY,GACb,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,2CAw+BA"}
1
+ {"version":3,"file":"VirtualTableManager.d.ts","sourceRoot":"","sources":["../../../src/public_components/VirtualTableManager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwC,MAAM,OAAO,CAAC;AA2C5E,eAAO,MAAM,mBAAmB,GAAI,UAAU,GAAG,EAAE,aAalD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,cAAc,EACd,YAAY,GACb,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,2CAukCA"}
@@ -23,7 +23,7 @@ import { onlySingleDatabaseTenant } from '../utils/tenants';
23
23
  import { useDatabaseSchema } from '../hooks/useDatabaseSchema';
24
24
  import InputLabel from '../components/InputLabel';
25
25
  import { useDashboardManager } from '../hooks/useDashboardManager';
26
- import CreateEnvironment from './CreateEnvironment';
26
+ import CreateEnvironmentModal from '../modals/CreateEnvironmentModal';
27
27
  export const getDuplicateColumns = (columns) => {
28
28
  if (!columns) {
29
29
  return [];
@@ -64,7 +64,7 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
64
64
  const [showCreateEnvironmentModal, setShowCreateEnvironmentModal] = useState(false);
65
65
  const parentRef = useRef(null);
66
66
  const envHeaderRef = useRef(null);
67
- const { state, dispatch, clientLoading, setClient, getToken, quillFetchWithToken, } = useAdmin();
67
+ const { state, dispatch, clientLoading, setClient, getToken, quillFetchWithToken, eventTracking, } = useAdmin();
68
68
  const closeEditModal = () => {
69
69
  setEditModalIsOpen(false);
70
70
  setEditName('');
@@ -80,6 +80,16 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
80
80
  setEditError(table.broken ? (table.error ?? 'Invalid query') : undefined);
81
81
  setCustomFieldInfo(table.customFieldInfo);
82
82
  !suppressModal && setEditModalIsOpen(true);
83
+ eventTracking?.addBreadcrumb?.({
84
+ message: 'Clicked table cell in VirtualTableManager',
85
+ data: {
86
+ table: table.name,
87
+ suppressModal: suppressModal,
88
+ },
89
+ category: 'interaction',
90
+ level: 'info',
91
+ timestamp: Date.now(),
92
+ });
83
93
  };
84
94
  const reloadTables = async (tables) => {
85
95
  const tempClient = {
@@ -256,6 +266,17 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
256
266
  setEditQueryView(false);
257
267
  }
258
268
  catch (e) {
269
+ eventTracking?.logError?.({
270
+ type: 'bug', // TODO: determine type
271
+ severity: 'high',
272
+ message: 'Error submitting virtual table',
273
+ errorMessage: e.message,
274
+ errorStack: e.stack,
275
+ errorData: {
276
+ caller: 'VirtualTableManager',
277
+ function: 'handleModalSubmit',
278
+ },
279
+ });
259
280
  console.error(e);
260
281
  }
261
282
  };
@@ -283,6 +304,15 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
283
304
  alert(`This table is referenced in the following dashboard filter${filtersIsPlural}.\n\n${referencedFilterInfo.join('\n')} \n\nPlease delete those filters before deleting this table.`);
284
305
  return;
285
306
  }
307
+ eventTracking?.addBreadcrumb?.({
308
+ message: 'Confirmed delete table in VirtualTableManager',
309
+ data: {
310
+ table: name,
311
+ },
312
+ category: 'interaction',
313
+ level: 'info',
314
+ timestamp: Date.now(),
315
+ });
286
316
  const response = await requestDeleteVirtualTable(id, state, getToken);
287
317
  await reloadTables();
288
318
  return response;
@@ -298,7 +328,7 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
298
328
  }
299
329
  };
300
330
  if (showCreateEnvironmentModal) {
301
- return (_jsx(ModalPrimitive, { isOpen: showCreateEnvironmentModal, onClose: () => setShowCreateEnvironmentModal(false), children: _jsx(CreateEnvironment, { onOnboardComplete: () => setShowCreateEnvironmentModal(false) }) }));
331
+ return (_jsx(CreateEnvironmentModal, { showCreateEnvironmentModal: showCreateEnvironmentModal, setShowCreateEnvironmentModal: setShowCreateEnvironmentModal }));
302
332
  }
303
333
  return (_jsx("div", { style: { ...containerStyle }, children: _jsxs("div", { style: {
304
334
  minHeight: '100%',
@@ -347,6 +377,12 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
347
377
  flexDirection: 'row',
348
378
  gap: 8,
349
379
  }, children: [_jsx(SecondaryButtonPrimitive, { onClick: () => {
380
+ eventTracking?.addBreadcrumb?.({
381
+ message: 'Clicked refresh tables button in VirtualTableManager',
382
+ category: 'interaction',
383
+ level: 'info',
384
+ timestamp: Date.now(),
385
+ });
350
386
  reloadTables(tables);
351
387
  }, label: "Refresh Tables" }), _jsx(ButtonPrimitive, { onClick: () => {
352
388
  setEditName('');
@@ -354,6 +390,12 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
354
390
  setEditVirtualTableId('');
355
391
  setInitialVirtualTable(undefined);
356
392
  setEditQueryView(true);
393
+ eventTracking?.addBreadcrumb?.({
394
+ message: 'Clicked add virtual table button in VirtualTableManager',
395
+ category: 'interaction',
396
+ level: 'info',
397
+ timestamp: Date.now(),
398
+ });
357
399
  }, label: "Add Virtual Table +" })] }))] }) })), clientLoading || areTablesLoading ? (_jsx("div", { style: {
358
400
  display: 'grid',
359
401
  gridGap: 24,
@@ -372,6 +414,12 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
372
414
  overflow: 'hidden',
373
415
  }, children: _jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", children: [_jsx("rect", { width: "100%", height: "100%", fill: '#F9F9FA' }), _jsx("defs", { fill: '#F9F9FA', children: _jsxs("linearGradient", { id: "skeletonGradient", x1: "0%", y1: "0%", x2: "10%", y2: "0%", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { offset: "0%", stopColor: "rgba(255,255,255,0)" }), _jsx("stop", { offset: "50%", stopColor: "#FEFEFE" }), _jsx("stop", { offset: "100%", stopColor: "rgba(255,255,255,0)" }), _jsx("animate", { attributeName: "x1", from: "-100%", to: "100%", dur: "2s", repeatCount: "indefinite" }), _jsx("animate", { attributeName: "x2", from: "-50%", to: "150%", dur: "2s", repeatCount: "indefinite" })] }) }), _jsx("rect", { width: "50%", height: "100%", fill: "url(#skeletonGradient)", children: _jsx("animate", { attributeName: "x", from: "-100%", to: "100%", dur: "2s", repeatCount: "indefinite" }) })] }) }) }, i))) }, 'edit-view-query')) : state.databaseTypeMismatch.show ? (_jsx(DatabaseMismatchCard, { environmentName: state.client.name, environmentDatabaseType: state.client.databaseType, backendDatabaseType: state.databaseTypeMismatch.backendDatabaseType })) : (_jsxs(_Fragment, { children: [!editQueryView ? (tables && tables.length === 0 ? (_jsx(EmptyVirtualTablesComponent, { onClick: () => {
374
416
  setEditQueryView(true);
417
+ eventTracking?.addBreadcrumb?.({
418
+ message: 'Clicked EmptyVirtualTablesComponent in VirtualTableManager',
419
+ category: 'interaction',
420
+ level: 'info',
421
+ timestamp: Date.now(),
422
+ });
375
423
  } })) : (_jsx("div", { style: {
376
424
  display: 'grid',
377
425
  gridGap: 24,
@@ -385,6 +433,12 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
385
433
  }, children: tables && tables?.length ? (_jsxs(_Fragment, { children: [tables.map((table) => (_jsx(TableCell, { table: table, clickTableCellHeader: clickTableCell, clickTableCellBody: () => {
386
434
  clickTableCell(table, true);
387
435
  setEditQueryView(true);
436
+ eventTracking?.addBreadcrumb?.({
437
+ message: 'Clicked table body in VirtualTableManager',
438
+ category: 'interaction',
439
+ level: 'info',
440
+ timestamp: Date.now(),
441
+ });
388
442
  }, isLoading: loadingTables[table._id], reloadAction: (table) => reloadTables([table]), hoverActions: (table) => (_jsxs("div", { style: {
389
443
  display: 'flex',
390
444
  flexDirection: 'row',
@@ -403,6 +457,15 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
403
457
  border: `0 solid ${state.theme?.borderColor ?? '#e7e7e7'}`,
404
458
  }, onClick: (event) => {
405
459
  event.stopPropagation();
460
+ eventTracking?.addBreadcrumb?.({
461
+ message: 'Clicked edit query button in VirtualTableManager Table Cell',
462
+ data: {
463
+ table: table.name,
464
+ },
465
+ category: 'interaction',
466
+ level: 'info',
467
+ timestamp: Date.now(),
468
+ });
406
469
  clickTableCell(table, true);
407
470
  setEditQueryView(true);
408
471
  }, className: "secondary-button-quill", children: [_jsx("style", { children: `.secondary-button-quill { background: white } .secondary-button-quill:hover { background: #F4F4F5 }` }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", height: 12, width: 12, style: {
@@ -422,6 +485,15 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
422
485
  border: `0 solid ${state.theme?.borderColor ?? '#e7e7e7'}`,
423
486
  }, onClick: (event) => {
424
487
  event.stopPropagation();
488
+ eventTracking?.addBreadcrumb?.({
489
+ message: 'Clicked table settings in VirtualTableManager Table Cell',
490
+ data: {
491
+ table: table.name,
492
+ },
493
+ category: 'interaction',
494
+ level: 'info',
495
+ timestamp: Date.now(),
496
+ });
425
497
  clickTableCell(table);
426
498
  }, className: "secondary-button-quill", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", height: 16, width: 16, style: {
427
499
  marginLeft: 'auto',
@@ -446,6 +518,15 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
446
518
  border: `0 solid ${state.theme?.borderColor ?? '#e7e7e7'}`,
447
519
  }, className: "secondary-button-quill", onClick: (event) => {
448
520
  event.stopPropagation();
521
+ eventTracking?.addBreadcrumb?.({
522
+ message: 'Clicked refresh table button in VirtualTableManager Table Cell',
523
+ data: {
524
+ table: table.name,
525
+ },
526
+ category: 'interaction',
527
+ level: 'info',
528
+ timestamp: Date.now(),
529
+ });
449
530
  reloadTables([table]);
450
531
  }, children: [_jsx("style", { children: `.secondary-button-quill { background: white } .secondary-button-quill:hover { background: #F4F4F5 }` }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16", strokeWidth: 1.5, height: 16, width: 16, style: {
451
532
  marginLeft: 'auto',
@@ -464,6 +545,15 @@ export default function VirtualTableManager({ containerStyle, virtualTable, }) {
464
545
  alignItems: 'center',
465
546
  }, onClick: (event) => {
466
547
  event.stopPropagation();
548
+ eventTracking?.addBreadcrumb?.({
549
+ message: 'Clicked delete table button in VirtualTableManager Table Cell',
550
+ data: {
551
+ table: table.name,
552
+ },
553
+ category: 'interaction',
554
+ level: 'info',
555
+ timestamp: Date.now(),
556
+ });
467
557
  deleteVirtualTable(table._id, table.name, table.name);
468
558
  }, className: "secondary-button-quill", children: [_jsx("style", { children: `.secondary-button-quill { background: white } .secondary-button-quill:hover { background: #F4F4F5 }` }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", height: 14, width: 14, style: {
469
559
  marginLeft: 'auto',
@@ -500,7 +590,7 @@ function EditAddViewModal({ viewName, viewQuery, viewOwnerTenantFields, viewId,
500
590
  const [tableData, setTableData] = useState(undefined);
501
591
  const [errorInfo, setErrorInfo] = useState({ show: false, message: '' });
502
592
  const clientIsSingleTenant = useMemo(() => onlySingleDatabaseTenant(state.client), [state.client]);
503
- const { getToken } = useAdmin();
593
+ const { getToken, eventTracking } = useAdmin();
504
594
  useEffect(() => {
505
595
  setCustomFieldQuery(customFieldInfo?.query || '');
506
596
  setCustomFieldType(customFieldInfo?.type || 'eav');
@@ -622,7 +712,7 @@ function EditAddViewModal({ viewName, viewQuery, viewOwnerTenantFields, viewId,
622
712
  }
623
713
  setErrorInfo({ show: false, message: '' });
624
714
  setRunQueryButtonLoading(true);
625
- const getSqlResults = await getVirtualTableData(state.client._id, customFieldQuery, state.client.databaseType, state.queryEndpoint, getToken, state.queryHeaders);
715
+ const getSqlResults = await getVirtualTableData(state.client._id, customFieldQuery, state.client.databaseType, state.queryEndpoint, getToken, eventTracking, state.queryHeaders);
626
716
  if (!getSqlResults.success) {
627
717
  setErrorInfo({
628
718
  show: true,