diff --git a/src/Explorer/Controls/Settings/SettingsComponent.tsx b/src/Explorer/Controls/Settings/SettingsComponent.tsx index 95f7159cc..475a7b14b 100644 --- a/src/Explorer/Controls/Settings/SettingsComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsComponent.tsx @@ -16,7 +16,7 @@ import { import { useIndexingPolicyStore } from "Explorer/Tabs/QueryTab/ResultsView"; import { useDatabases } from "Explorer/useDatabases"; import { isFabricNative } from "Platform/Fabric/FabricUtil"; -import { isCapabilityEnabled, isVectorSearchEnabled } from "Utils/CapabilityUtils"; +import { isVectorSearchEnabled } from "Utils/CapabilityUtils"; import { isRunningOnPublicCloud } from "Utils/CloudUtils"; import * as React from "react"; import DiscardIcon from "../../../../images/discard.svg"; @@ -70,6 +70,7 @@ import { getMongoNotification, getTabTitle, hasDatabaseSharedThroughput, + isDataMaskingEnabled, isDirty, parseConflictResolutionMode, parseConflictResolutionProcedure, @@ -1073,8 +1074,8 @@ export class SettingsComponent extends React.Component { - const hasDataMaskingCapability = isCapabilityEnabled(Constants.CapabilityNames.EnableDynamicDataMasking); - const isSqlAccount = userContext.apiType === "SQL"; - - return isSqlAccount && hasDataMaskingCapability; // Only show for SQL accounts with DDM capability - }; - - if (shouldEnableDDM()) { + if (isDataMaskingEnabled(this.collection.dataMaskingPolicy?.())) { const dataMaskingComponentProps: DataMaskingComponentProps = { shouldDiscardDataMasking: this.state.shouldDiscardDataMasking, resetShouldDiscardDataMasking: this.resetShouldDiscardDataMasking, diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/DataMaskingComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/DataMaskingComponent.tsx index 80314fe7c..6e316fea6 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/DataMaskingComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/DataMaskingComponent.tsx @@ -1,12 +1,10 @@ import { MessageBar, MessageBarType, Stack } from "@fluentui/react"; import * as monaco from "monaco-editor"; import * as React from "react"; -import * as Constants from "../../../../Common/Constants"; import * as DataModels from "../../../../Contracts/DataModels"; -import { isCapabilityEnabled } from "../../../../Utils/CapabilityUtils"; import { loadMonaco } from "../../../LazyMonaco"; import { titleAndInputStackProps, unsavedEditorWarningMessage } from "../SettingsRenderUtils"; -import { isDirty as isContentDirty } from "../SettingsUtils"; +import { isDataMaskingEnabled, isDirty as isContentDirty } from "../SettingsUtils"; export interface DataMaskingComponentProps { shouldDiscardDataMasking: boolean; @@ -140,7 +138,7 @@ export class DataMaskingComponent extends React.Component { + const isSqlAccount = userContext.apiType === "SQL"; + if (!isSqlAccount) { + return false; + } + + const hasDataMaskingCapability = isCapabilityEnabled(Constants.CapabilityNames.EnableDynamicDataMasking); + const hasDataMaskingPolicyFromCollection = + dataMaskingPolicy?.includedPaths?.length > 0 || dataMaskingPolicy?.excludedPaths?.length > 0; + + return hasDataMaskingCapability || hasDataMaskingPolicyFromCollection; +}; + export const parseConflictResolutionMode = (modeFromBackend: string): DataModels.ConflictResolutionMode => { // Backend can contain different casing as it does case-insensitive comparisson if (!modeFromBackend) { diff --git a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap index 569bfd035..c03e0e9ad 100644 --- a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap +++ b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap @@ -604,6 +604,60 @@ exports[`SettingsComponent renders 1`] = ` /> + + + + +