diff --git a/src/Explorer/Explorer.tsx b/src/Explorer/Explorer.tsx index a07a7dad3..30c051662 100644 --- a/src/Explorer/Explorer.tsx +++ b/src/Explorer/Explorer.tsx @@ -282,6 +282,42 @@ export default class Explorer { } } + public openInVsCode(): void { + const activeTab = useTabs.getState().activeTab; + const resourceId = encodeURIComponent(userContext.databaseAccount.id); + const database = encodeURIComponent(activeTab?.collection?.databaseId); + const container = encodeURIComponent(activeTab?.collection?.id()); + const baseUrl = `vscode://ms-azuretools.vscode-cosmosdb?resourceId=${resourceId}`; + const vscodeUrl = activeTab ? `${baseUrl}&database=${database}&container=${container}` : baseUrl; + + const openVSCodeDialogProps: DialogProps = { + linkProps: { + linkText: "Download Visual Studio Code", + linkUrl: "https://code.visualstudio.com/download", + }, + isModal: true, + title: `Open your Azure Cosmos DB account in Visual Studio Code`, + subText: `Please ensure Visual Studio Code is installed on your device. + If you don't have it installed, please download it from the link below.`, + primaryButtonText: "Open in VS Code", + secondaryButtonText: "Cancel", + + onPrimaryButtonClick: () => { + try { + window.location.href = vscodeUrl; + TelemetryProcessor.traceStart(Action.OpenVSCode); + } catch (error) { + logConsoleError(`Failed to open VS Code: ${getErrorMessage(error)}`); + } + }, + onSecondaryButtonClick: () => { + useDialog.getState().closeDialog(); + TelemetryProcessor.traceCancel(Action.OpenVSCode); + }, + }; + useDialog.getState().openDialog(openVSCodeDialogProps); + } + public async openCESCVAFeedbackBlade(): Promise { sendMessage({ type: MessageTypes.OpenCESCVAFeedbackBlade }); Logger.logInfo( diff --git a/src/Shared/Telemetry/TelemetryConstants.ts b/src/Shared/Telemetry/TelemetryConstants.ts index c20a49f93..031d061cc 100644 --- a/src/Shared/Telemetry/TelemetryConstants.ts +++ b/src/Shared/Telemetry/TelemetryConstants.ts @@ -149,6 +149,7 @@ export enum Action { UploadDocuments, // Used in Fabric. Please do not rename. CloudShellUserConsent, CloudShellTerminalSession, + OpenVSCode, } export const ActionModifiers = {