From 844b6e6b6535478842462cab5d27bc69113572f8 Mon Sep 17 00:00:00 2001 From: Bikram Choudhury Date: Wed, 29 Oct 2025 18:36:13 +0530 Subject: [PATCH] show copyjob screen from portal navigation --- src/Contracts/ViewModels.ts | 1 + src/Explorer/ContainerCopy/CopyJobUtils.ts | 15 +++++++++++++-- src/hooks/useKnockoutExplorer.ts | 13 +++++++------ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/Contracts/ViewModels.ts b/src/Contracts/ViewModels.ts index 6963129db..04ba5250b 100644 --- a/src/Contracts/ViewModels.ts +++ b/src/Contracts/ViewModels.ts @@ -444,6 +444,7 @@ export interface DataExplorerInputsFrame { }; feedbackPolicies?: any; aadToken?: string; + containerCopyEnabled?: boolean; } export interface SelfServeFrameInputs { diff --git a/src/Explorer/ContainerCopy/CopyJobUtils.ts b/src/Explorer/ContainerCopy/CopyJobUtils.ts index f52878971..87c6585d5 100644 --- a/src/Explorer/ContainerCopy/CopyJobUtils.ts +++ b/src/Explorer/ContainerCopy/CopyJobUtils.ts @@ -1,10 +1,21 @@ import { DatabaseAccount } from "Contracts/DataModels"; import { CopyJobErrorType } from "./Types"; +const azurePortalMpacEndpoint = "https://ms.portal.azure.com/"; + export const buildResourceLink = (resource: DatabaseAccount): string => { const resourceId = resource.id; - // TODO: update "ms.portal.azure.com" based on environment (e.g. for PROD or Fairfax) - return `https://ms.portal.azure.com/#resource${resourceId}`; + let parentOrigin = window.location.ancestorOrigins?.[0] ?? window.location.origin; + + if (/\/\/localhost:/.test(parentOrigin)) { + parentOrigin = azurePortalMpacEndpoint; + } else if (/\/\/cosmos\.azure/.test(parentOrigin)) { + parentOrigin = parentOrigin.replace("cosmos.azure", "portal.azure"); + } + + parentOrigin = parentOrigin.replace(/\/$/, ""); + + return `${parentOrigin}/#resource${resourceId}`; }; export const COSMOS_SQL_COMPONENT = "CosmosDBSql"; diff --git a/src/hooks/useKnockoutExplorer.ts b/src/hooks/useKnockoutExplorer.ts index e5d4160ae..1fd29f47f 100644 --- a/src/hooks/useKnockoutExplorer.ts +++ b/src/hooks/useKnockoutExplorer.ts @@ -959,12 +959,13 @@ function updateContextsFromPortalMessage(inputs: DataExplorerInputsFrame) { if (inputs.features) { Object.assign(userContext.features, extractFeatures(new URLSearchParams(inputs.features))); } - // somehow we need to make enableContainerCopy true for platform: portal & apiType: SQL - // Ideally we need to pass this as a feature flag from portal or in a query param - // Then we will fetch the value from query param and set this to true - // For now setting it to true unconditionally - if (userContext.apiType === "SQL") { - Object.assign(userContext.features, { enableContainerCopy: true }); + + if ( + configContext.platform === Platform.Portal && + inputs.containerCopyEnabled && + userContext.apiType === "SQL" + ) { + Object.assign(userContext.features, { enableContainerCopy: inputs.containerCopyEnabled }); } if (inputs.flights) {