@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.
- package/dist/cjs/Admin.d.ts +11 -8
- package/dist/cjs/Admin.d.ts.map +1 -1
- package/dist/cjs/Admin.js +114 -7
- package/dist/cjs/AdminProvider.d.ts +24 -5
- package/dist/cjs/AdminProvider.d.ts.map +1 -1
- package/dist/cjs/AdminProvider.js +173 -85
- package/dist/cjs/api/ConnectionClient.d.ts +6 -3
- package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
- package/dist/cjs/api/ConnectionClient.js +66 -6
- package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/XIcon.d.ts.map +1 -1
- package/dist/cjs/components/ClipboardButton.d.ts.map +1 -1
- package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
- package/dist/cjs/components/DashboardSelectPopover.js +29 -1
- package/dist/cjs/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts +1 -1
- package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -1
- package/dist/cjs/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/cjs/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
- package/dist/cjs/components/InternalDashboard/InternalDashboard.js +114 -34
- package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
- package/dist/cjs/components/OrgSelect.js +48 -4
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +5 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +328 -149
- package/dist/cjs/components/QuillSelectWithCombo.d.ts +4 -3
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +34 -6
- package/dist/cjs/components/QuillToolTipPortal.d.ts.map +1 -1
- package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
- package/dist/cjs/components/SqlTextEditor.js +15 -2
- package/dist/cjs/components/Tenants/EditTenant.d.ts.map +1 -1
- package/dist/cjs/components/Tenants/EditTenant.js +51 -8
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +1 -0
- package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
- package/dist/cjs/forms/client_onboard/ConnectDatabase.js +50 -2
- package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
- package/dist/cjs/forms/client_onboard/ConnectSchema.js +33 -1
- package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts +2 -1
- package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
- package/dist/cjs/forms/client_onboard/CreateVirtualTables.js +55 -21
- package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.js +1 -1
- package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.js +1 -1
- package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
- package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.js +92 -10
- package/dist/cjs/hooks/useDatabaseSchema.d.ts.map +1 -1
- package/dist/cjs/hooks/useDatabaseSchema.js +12 -1
- package/dist/cjs/hooks/useLongLoading.d.ts +13 -0
- package/dist/cjs/hooks/useLongLoading.d.ts.map +1 -0
- package/dist/cjs/hooks/useLongLoading.js +67 -0
- package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/cjs/hooks/useThrottle.d.ts.map +1 -1
- package/dist/cjs/icons/ArrowDownHeadIcon.d.ts.map +1 -1
- package/dist/cjs/icons/CheckCircleIcon.d.ts.map +1 -1
- package/dist/cjs/icons/ExclamationFilledIcon.d.ts.map +1 -1
- package/dist/cjs/icons/ExteriorLinkIcon.d.ts.map +1 -1
- package/dist/cjs/icons/QuestionMarkCircleIcon.d.ts.map +1 -1
- package/dist/cjs/modals/CodePreview.d.ts.map +1 -1
- package/dist/cjs/modals/CodePreview.js +7 -2
- package/dist/cjs/modals/CreateEnvironmentModal.d.ts +5 -0
- package/dist/cjs/modals/CreateEnvironmentModal.d.ts.map +1 -0
- package/dist/cjs/modals/CreateEnvironmentModal.js +21 -0
- package/dist/cjs/modals/EditEnvironmentModal.d.ts.map +1 -1
- package/dist/cjs/modals/EditEnvironmentModal.js +67 -15
- package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -1
- package/dist/cjs/modals/EditFiltersModal.js +12 -8
- package/dist/cjs/modals/NewDashboardModal.d.ts.map +1 -1
- package/dist/cjs/modals/NewDashboardModal.js +54 -28
- package/dist/cjs/modals/PromoteReportModal.d.ts.map +1 -1
- package/dist/cjs/modals/PromoteReportModal.js +15 -4
- package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
- package/dist/cjs/modals/PromoteViewModal.js +13 -2
- package/dist/cjs/primitives/CheckboxPrimitive.d.ts.map +1 -1
- package/dist/cjs/primitives/CheckboxPrimitive.js +2 -0
- package/dist/cjs/primitives/PopoverPrimitive.d.ts.map +1 -1
- package/dist/cjs/primitives/PopoverPrimitive.js +16 -5
- package/dist/cjs/primitives/TogglePrimitive.d.ts.map +1 -1
- package/dist/cjs/public_components/ChartQueryBuilder.d.ts.map +1 -1
- package/dist/cjs/public_components/ChartQueryBuilder.js +6 -6
- package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
- package/dist/cjs/public_components/CreateEnvironment.js +49 -16
- package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
- package/dist/cjs/public_components/DashboardManager.js +63 -5
- package/dist/cjs/public_components/EnvSelectPopover.d.ts.map +1 -1
- package/dist/cjs/public_components/EnvSelectPopover.js +31 -3
- package/dist/cjs/public_components/VirtualTableManager.d.ts.map +1 -1
- package/dist/cjs/public_components/VirtualTableManager.js +95 -5
- package/dist/cjs/public_components/__tests__/CreateEnvironment.test.js +41 -2
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +6 -1
- package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/databases.d.ts +6 -1
- package/dist/cjs/utils/databases.d.ts.map +1 -1
- package/dist/cjs/utils/databases.js +18 -0
- package/dist/cjs/utils/delay.d.ts.map +1 -1
- package/dist/cjs/utils/filter.d.ts +17 -21
- package/dist/cjs/utils/filter.d.ts.map +1 -1
- package/dist/cjs/utils/filter.js +6 -6
- package/dist/cjs/utils/report.d.ts +5 -5
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/schema.d.ts +6 -3
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +42 -3
- package/dist/cjs/utils/table.d.ts.map +1 -1
- package/dist/cjs/utils/tenants.d.ts.map +1 -1
- package/dist/cjs/utils/ui.d.ts.map +1 -1
- package/dist/esm/Admin.d.ts +11 -8
- package/dist/esm/Admin.d.ts.map +1 -1
- package/dist/esm/Admin.js +115 -8
- package/dist/esm/AdminProvider.d.ts +24 -5
- package/dist/esm/AdminProvider.d.ts.map +1 -1
- package/dist/esm/AdminProvider.js +174 -86
- package/dist/esm/api/ConnectionClient.d.ts +6 -3
- package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
- package/dist/esm/api/ConnectionClient.js +66 -6
- package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/XIcon.d.ts.map +1 -1
- package/dist/esm/components/ClipboardButton.d.ts.map +1 -1
- package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
- package/dist/esm/components/DashboardSelectPopover.js +29 -1
- package/dist/esm/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts +1 -1
- package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/InternalDashboard/DashboardFilter.js +1 -1
- package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -1
- package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
- package/dist/esm/components/InternalDashboard/InternalDashboard.js +115 -35
- package/dist/esm/components/OrgSelect.d.ts.map +1 -1
- package/dist/esm/components/OrgSelect.js +48 -4
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +5 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +328 -149
- package/dist/esm/components/QuillSelectWithCombo.d.ts +4 -3
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +34 -6
- package/dist/esm/components/QuillToolTipPortal.d.ts.map +1 -1
- package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
- package/dist/esm/components/SqlTextEditor.js +15 -2
- package/dist/esm/components/Tenants/EditTenant.d.ts.map +1 -1
- package/dist/esm/components/Tenants/EditTenant.js +51 -8
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +1 -0
- package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
- package/dist/esm/forms/client_onboard/ConnectDatabase.js +50 -2
- package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
- package/dist/esm/forms/client_onboard/ConnectSchema.js +33 -1
- package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts +2 -1
- package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
- package/dist/esm/forms/client_onboard/CreateVirtualTables.js +56 -22
- package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.js +1 -1
- package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.js +1 -1
- package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
- package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.js +93 -11
- package/dist/esm/hooks/useDatabaseSchema.d.ts.map +1 -1
- package/dist/esm/hooks/useDatabaseSchema.js +12 -1
- package/dist/esm/hooks/useLongLoading.d.ts +13 -0
- package/dist/esm/hooks/useLongLoading.d.ts.map +1 -0
- package/dist/esm/hooks/useLongLoading.js +64 -0
- package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/esm/hooks/useThrottle.d.ts.map +1 -1
- package/dist/esm/icons/ArrowDownHeadIcon.d.ts.map +1 -1
- package/dist/esm/icons/CheckCircleIcon.d.ts.map +1 -1
- package/dist/esm/icons/ExclamationFilledIcon.d.ts.map +1 -1
- package/dist/esm/icons/ExteriorLinkIcon.d.ts.map +1 -1
- package/dist/esm/icons/QuestionMarkCircleIcon.d.ts.map +1 -1
- package/dist/esm/modals/CodePreview.d.ts.map +1 -1
- package/dist/esm/modals/CodePreview.js +7 -2
- package/dist/esm/modals/CreateEnvironmentModal.d.ts +5 -0
- package/dist/esm/modals/CreateEnvironmentModal.d.ts.map +1 -0
- package/dist/esm/modals/CreateEnvironmentModal.js +15 -0
- package/dist/esm/modals/EditEnvironmentModal.d.ts.map +1 -1
- package/dist/esm/modals/EditEnvironmentModal.js +67 -15
- package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -1
- package/dist/esm/modals/EditFiltersModal.js +13 -9
- package/dist/esm/modals/NewDashboardModal.d.ts.map +1 -1
- package/dist/esm/modals/NewDashboardModal.js +55 -29
- package/dist/esm/modals/PromoteReportModal.d.ts.map +1 -1
- package/dist/esm/modals/PromoteReportModal.js +15 -4
- package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
- package/dist/esm/modals/PromoteViewModal.js +13 -2
- package/dist/esm/primitives/CheckboxPrimitive.d.ts.map +1 -1
- package/dist/esm/primitives/CheckboxPrimitive.js +2 -0
- package/dist/esm/primitives/PopoverPrimitive.d.ts.map +1 -1
- package/dist/esm/primitives/PopoverPrimitive.js +16 -5
- package/dist/esm/primitives/TogglePrimitive.d.ts.map +1 -1
- package/dist/esm/public_components/ChartQueryBuilder.d.ts.map +1 -1
- package/dist/esm/public_components/ChartQueryBuilder.js +8 -8
- package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
- package/dist/esm/public_components/CreateEnvironment.js +49 -16
- package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
- package/dist/esm/public_components/DashboardManager.js +64 -6
- package/dist/esm/public_components/EnvSelectPopover.d.ts.map +1 -1
- package/dist/esm/public_components/EnvSelectPopover.js +31 -3
- package/dist/esm/public_components/VirtualTableManager.d.ts.map +1 -1
- package/dist/esm/public_components/VirtualTableManager.js +95 -5
- package/dist/esm/public_components/__tests__/CreateEnvironment.test.js +41 -2
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +6 -1
- package/dist/esm/utils/dataEditor.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/databases.d.ts +6 -1
- package/dist/esm/utils/databases.d.ts.map +1 -1
- package/dist/esm/utils/databases.js +18 -0
- package/dist/esm/utils/delay.d.ts.map +1 -1
- package/dist/esm/utils/filter.d.ts +17 -21
- package/dist/esm/utils/filter.d.ts.map +1 -1
- package/dist/esm/utils/filter.js +5 -5
- package/dist/esm/utils/report.d.ts +5 -5
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/schema.d.ts +6 -3
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +42 -3
- package/dist/esm/utils/table.d.ts.map +1 -1
- package/dist/esm/utils/tenants.d.ts.map +1 -1
- package/dist/esm/utils/ui.d.ts.map +1 -1
- 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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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 {
|
|
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
|
|
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 } =
|
|
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(
|
|
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,
|
|
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:
|
|
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:
|
|
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,
|
|
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
|
|
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(
|
|
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,
|