From 5f4ea0e6141fad9711602a533021e6a4f69e3417 Mon Sep 17 00:00:00 2001 From: "Justin Kolasa (from Dev Box)" Date: Tue, 22 Apr 2025 08:50:29 -0400 Subject: [PATCH] master pull --- .npmrc | 4 +++- .vscode/settings.json | 3 ++- src/Explorer/Explorer.tsx | 21 +++++++++++++++++++ .../CommandBarComponentButtonFactory.tsx | 15 +++++++++++++ src/Shared/Telemetry/TelemetryConstants.ts | 1 + 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/.npmrc b/.npmrc index bcfa17a91..1dbf42d9f 100644 --- a/.npmrc +++ b/.npmrc @@ -1,4 +1,6 @@ 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/.vscode/settings.json b/.vscode/settings.json index a57d40961..2f7aad2d1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,5 +24,6 @@ "source.organizeImports": "explicit" }, "typescript.preferences.importModuleSpecifier": "non-relative", - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "esbenp.prettier-vscode", + "sarif-viewer.connectToGithubCodeScanning": "off" } diff --git a/src/Explorer/Explorer.tsx b/src/Explorer/Explorer.tsx index e62bfe5b3..d3d7cfbbc 100644 --- a/src/Explorer/Explorer.tsx +++ b/src/Explorer/Explorer.tsx @@ -282,6 +282,27 @@ 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}` + clearInProgressMessage(); + logConsoleInfo("Opening Visual Studio Code for this account"); + 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)}`); + TelemetryProcessor.traceFailure(Action.OpenVSCode, {}, startTime); + } + } + public async openCESCVAFeedbackBlade(): Promise { sendMessage({ type: MessageTypes.OpenCESCVAFeedbackBlade }); Logger.logInfo( diff --git a/src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.tsx b/src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.tsx index 49c513a0a..7d6c4630b 100644 --- a/src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.tsx +++ b/src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.tsx @@ -14,6 +14,7 @@ import OpenQueryFromDiskIcon from "../../../../images/OpenQueryFromDisk.svg"; import OpenInTabIcon from "../../../../images/open-in-tab.svg"; import SettingsIcon from "../../../../images/settings_15x15.svg"; import SynapseIcon from "../../../../images/synapse-link.svg"; +import VSCodeIcon from "../../../../images/vscode.svg"; import { AuthType } from "../../../AuthType"; import * as Constants from "../../../Common/Constants"; import { Platform, configContext } from "../../../ConfigContext"; @@ -60,6 +61,8 @@ export function createStaticCommandBarButtons( addDivider(); buttons.push(addSynapseLink); } + const addVsCode = createOpenVsCodeDialogButton(container); + buttons.push(addVsCode); } if (isDataplaneRbacSupported(userContext.apiType)) { @@ -267,6 +270,18 @@ function createOpenSynapseLinkDialogButton(container: Explorer): CommandButtonCo }; } +function createOpenVsCodeDialogButton(container: Explorer): CommandButtonComponentProps { + const label = "Open in VS Code"; + return { + iconSrc: VSCodeIcon, + iconAlt: label, + onCommandClick: () => container.openInVsCode(), + commandButtonLabel: label, + hasPopup: false, + ariaLabel: label, + }; +} + function createLoginForEntraIDButton(container: Explorer): CommandButtonComponentProps { if (configContext.platform !== Platform.Portal) { return undefined; diff --git a/src/Shared/Telemetry/TelemetryConstants.ts b/src/Shared/Telemetry/TelemetryConstants.ts index d61a2cf8f..23b4c47e4 100644 --- a/src/Shared/Telemetry/TelemetryConstants.ts +++ b/src/Shared/Telemetry/TelemetryConstants.ts @@ -146,6 +146,7 @@ export enum Action { SavePersistedTabState, DeletePersistedTabState, UploadDocuments, // Used in Fabric. Please do not rename. + OpenVSCode, } export const ActionModifiers = {