feat: Redesign container-copy flow to select destination account and enable cross-account container creation (#2436)

* feat: Redesign container-copy flow to select destination account and enable cross-account container creation

* upgrade RBAC permissions from read only to read-write

* fix copyjob playwright tests

* swap source-destination content

* fix formating

* use targetAccountOverride for capability checks in AddCollectionPanel

* feat: localize ContainerCopy hardcoded strings using i18next and refactor readDatabasesWithARM

* removed container copy messages json file
This commit is contained in:
BChoudhury-ms
2026-05-11 17:24:51 +05:30
committed by GitHub
parent 762e12a3f9
commit d374458e1b
81 changed files with 1810 additions and 1076 deletions
+13 -10
View File
@@ -1,33 +1,36 @@
import { AccountOverride } from "Contracts/DataModels";
import { isFabricNative } from "Platform/Fabric/FabricUtil";
import * as Constants from "../Common/Constants";
import { userContext } from "../UserContext";
export const isCapabilityEnabled = (capabilityName: string): boolean => {
export const isCapabilityEnabled = (capabilityName: string, targetAccountOverride?: AccountOverride): boolean => {
const { databaseAccount } = userContext;
if (databaseAccount && databaseAccount.properties && databaseAccount.properties.capabilities) {
return databaseAccount.properties.capabilities.some((capability) => capability.name === capabilityName);
const capabilities = targetAccountOverride?.capabilities || databaseAccount?.properties?.capabilities;
if (capabilities) {
return capabilities.some((capability) => capability.name === capabilityName);
}
return false;
};
export const isServerlessAccount = (): boolean => {
export const isServerlessAccount = (targetAccountOverride?: AccountOverride): boolean => {
const { databaseAccount } = userContext;
const capacityMode = targetAccountOverride?.capacityMode || databaseAccount?.properties?.capacityMode;
return (
databaseAccount?.properties?.capacityMode === Constants.CapacityMode.Serverless ||
isCapabilityEnabled(Constants.CapabilityNames.EnableServerless)
capacityMode === Constants.CapacityMode.Serverless ||
isCapabilityEnabled(Constants.CapabilityNames.EnableServerless, targetAccountOverride)
);
};
export const isVectorSearchEnabled = (): boolean => {
export const isVectorSearchEnabled = (targetAccountOverride?: AccountOverride): boolean => {
return (
userContext.apiType === "SQL" &&
(isCapabilityEnabled(Constants.CapabilityNames.EnableNoSQLVectorSearch) || isFabricNative())
(isCapabilityEnabled(Constants.CapabilityNames.EnableNoSQLVectorSearch, targetAccountOverride) || isFabricNative())
);
};
export const isFullTextSearchPreviewFeaturesEnabled = (): boolean => {
export const isFullTextSearchPreviewFeaturesEnabled = (targetAccountOverride?: AccountOverride): boolean => {
return (
userContext.apiType === "SQL" &&
isCapabilityEnabled(Constants.CapabilityNames.EnableNoSQLFullTextSearchPreviewFeatures)
isCapabilityEnabled(Constants.CapabilityNames.EnableNoSQLFullTextSearchPreviewFeatures, targetAccountOverride)
);
};
+1 -1
View File
@@ -93,7 +93,7 @@ export const assignRole = async (
return null;
}
const accountScope = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}`;
const roleDefinitionId = `${accountScope}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000001`;
const roleDefinitionId = `${accountScope}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002`; // Built-in Contributor role definition ID for Cosmos DB
const roleAssignmentName = crypto.randomUUID();
const path = `${accountScope}/sqlRoleAssignments/${roleAssignmentName}`;