diff --git a/.npmrc b/.npmrc index 1dbf42d9f..bcfa17a91 100644 --- a/.npmrc +++ b/.npmrc @@ -1,6 +1,4 @@ save-exact=true -registry=https://msdata.pkgs.visualstudio.com/_packaging/cosmosdbportal/npm/registry/ -always-auth=true -allow-same-version=true + # Ignore peer dependency conflicts force=true # TODO: Remove this when we update to React 17 or higher! \ No newline at end of file diff --git a/images/vscode.svg b/images/vscode.svg new file mode 100644 index 000000000..137be57f0 --- /dev/null +++ b/images/vscode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/Explorer/Explorer.tsx b/src/Explorer/Explorer.tsx index d3d7cfbbc..21c88fc14 100644 --- a/src/Explorer/Explorer.tsx +++ b/src/Explorer/Explorer.tsx @@ -284,22 +284,38 @@ export default class Explorer { public openInVsCode(): void { const startTime = TelemetryProcessor.traceStart(Action.OpenVSCode); - const clearInProgressMessage = logConsoleProgress( - "Opening VS Code for this account.", - ); - useDialog.getState().closeDialog(); - try { - `vscode://ms-azuretools.vscode-cosmosdb?resourceId=/subscriptions/${userContext.subscriptionId}/resourceGroups/${userContext.resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${userContext?.databaseAccount}&database=${userContext.parsedResourceToken?.databaseId}&container=${userContext.parsedResourceToken?.collectionId}` - // preview version of vscode - // `vscode-insiders://ms-azuretools.vscode-cosmosdb?resourceId=/subscriptions/${userContext.subscriptionId}/resourceGroups/${userContext.resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${userContext?.databaseAccount}&database=${userContext.parsedResourceToken?.databaseId}&container=${userContext.parsedResourceToken?.databaseId}` + const clearInProgressMessage = logConsoleProgress("Opening Visual Studio Code"); + + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const activeTab = useTabs.getState().activeTab; + const database = activeTab.collection?.databaseId; + const container = activeTab.collection?.id(); + + if (!database || !container) { + logConsoleError("Failed to open Visual Studio Code, a database account and container is required to open in VS Code."); clearInProgressMessage(); - logConsoleInfo("Opening Visual Studio Code for this account"); + return; + } + + const vscodeUrl = `vscode://ms-azuretools.vscode-cosmosdb?resourceId=/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${databaseAccount.id}&database=${database}&container=${container}`; + const vscodeInsidersUrl = `vscode-insiders://ms-azuretools.vscode-cosmosdb?resourceId=/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${databaseAccount.id}&database=${database}&container=${container}`; + + console.log(userContext); + try { + logConsoleInfo("Opening Visual Studio Code"); + const linkOpened = (navigator.userAgent.includes("Insiders") && window.open(vscodeInsidersUrl)) || window.open(vscodeUrl); + + if (!linkOpened) { + logConsoleError("Visual Studio Code is not installed on this device"); + window.open("https://code.visualstudio.com/download", "_blank"); + } + TelemetryProcessor.traceSuccess(Action.OpenVSCode, {}, startTime); } catch (error) { - // If the browser can't handle a `vscode://` or `vscode-insiders://` url route them to the VS Code download page - clearInProgressMessage(); - logConsoleError(`**Visual Studio Code** isn't installed on this device. Please install it here: **https://code.visualstudio.com/download**${getErrorMessage(error)}`); + logConsoleError(`Failed to open Visual Studio Code. ${getErrorMessage(error)}`); TelemetryProcessor.traceFailure(Action.OpenVSCode, {}, startTime); + } finally { + clearInProgressMessage(); } }