diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.test.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.test.tsx index 4658a969a..f9c710cb3 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.test.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.test.tsx @@ -143,4 +143,39 @@ describe("SubSettingsComponent", () => { expect(subSettingsComponentInstance.getTtlValue(TtlType.On)).toEqual(TtlOn); expect(subSettingsComponentInstance.getTtlValue(TtlType.Off)).toEqual(TtlOff); }); + + it("uniqueKey is visible", () => { + updateUserContext({ + databaseAccount: { + properties: { + capabilities: [{ name: "EnableSQL" }], + }, + } as DatabaseAccount, + }); + const subSettingsComponent = new SubSettingsComponent(baseProps); + expect(subSettingsComponent.getUniqueKeyVisible()).toEqual(true); + }); + + it("uniqueKey not visible due to no keys", () => { + const props = { + ...baseProps, + ...(baseProps.collection.rawDataModel.uniqueKeyPolicy.uniqueKeys = []), + }; + const subSettingsComponent = new SubSettingsComponent(props); + expect(subSettingsComponent.getUniqueKeyVisible()).toEqual(false); + }); + + it("uniqueKey not visible for API", () => { + const newContainer = new Explorer(); + updateUserContext({ + databaseAccount: { + properties: { + capabilities: [{ name: "EnableMongo" }], + }, + } as DatabaseAccount, + }); + const props = { ...baseProps, container: newContainer }; + const subSettingsComponent = new SubSettingsComponent(props); + expect(subSettingsComponent.getUniqueKeyVisible()).toEqual(false); + }); }); diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.tsx index 75dd1a017..09b9bcba5 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.tsx @@ -63,12 +63,16 @@ export class SubSettingsComponent extends React.Component this.props.collection.partitionKey?.version >= 2; public isHierarchicalPartitionedContainer = (): boolean => this.props.collection.partitionKey?.kind === "MultiHash"; + public getUniqueKeyVisible = (): boolean => { + return this.props.collection.rawDataModel.uniqueKeyPolicy?.uniqueKeys.length > 0 && userContext.apiType === "SQL"; + }; + + private getUniqueKeyValue = (): string => { + const paths = this.props.collection.rawDataModel.uniqueKeyPolicy?.uniqueKeys?.[0]?.paths; + return paths?.join(", ") || ""; + }; + + private getUniqueKeyComponent = (): JSX.Element => ( + + {this.getUniqueKeyVisible() && ( + + )} + + ); + public render(): JSX.Element { return ( @@ -363,6 +389,8 @@ export class SubSettingsComponent extends React.Component ); } diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/__snapshots__/SubSettingsComponent.test.tsx.snap b/src/Explorer/Controls/Settings/SettingsSubComponents/__snapshots__/SubSettingsComponent.test.tsx.snap index db6960740..9d5471ccc 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/__snapshots__/SubSettingsComponent.test.tsx.snap +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/__snapshots__/SubSettingsComponent.test.tsx.snap @@ -231,6 +231,34 @@ exports[`SubSettingsComponent analyticalTimeToLive hidden 1`] = ` Non-hierarchically partitioned container. + + + `; @@ -520,6 +548,34 @@ exports[`SubSettingsComponent analyticalTimeToLiveSeconds hidden 1`] = ` Non-hierarchically partitioned container. + + + `; @@ -769,6 +825,34 @@ exports[`SubSettingsComponent changeFeedPolicy hidden 1`] = ` Non-hierarchically partitioned container. + + + `; @@ -1083,6 +1167,34 @@ exports[`SubSettingsComponent renders 1`] = ` Non-hierarchically partitioned container. + + + `; @@ -1371,5 +1483,33 @@ exports[`SubSettingsComponent timeToLiveSeconds hidden 1`] = ` Non-hierarchically partitioned container. + + + `; diff --git a/src/Explorer/Controls/Settings/TestUtils.tsx b/src/Explorer/Controls/Settings/TestUtils.tsx index 71d939584..96dfbddb3 100644 --- a/src/Explorer/Controls/Settings/TestUtils.tsx +++ b/src/Explorer/Controls/Settings/TestUtils.tsx @@ -17,7 +17,15 @@ export const collection = { includedPaths: [], excludedPaths: [], }), - uniqueKeyPolicy: {} as DataModels.UniqueKeyPolicy, + rawDataModel: { + uniqueKeyPolicy: { + uniqueKeys: [ + { + paths: ["/id"], + }, + ], + }, + }, usageSizeInKB: ko.observable(100), offer: ko.observable({ autoscaleMaxThroughput: undefined, diff --git a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap index 7a54134db..5e9b0d7ce 100644 --- a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap +++ b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap @@ -71,8 +71,18 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyProperties": [ "partitionKey", ], + "rawDataModel": { + "uniqueKeyPolicy": { + "uniqueKeys": [ + { + "paths": [ + "/id", + ], + }, + ], + }, + }, "readSettings": [Function], - "uniqueKeyPolicy": {}, "usageSizeInKB": [Function], "vectorEmbeddingPolicy": [Function], } @@ -153,8 +163,18 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyProperties": [ "partitionKey", ], + "rawDataModel": { + "uniqueKeyPolicy": { + "uniqueKeys": [ + { + "paths": [ + "/id", + ], + }, + ], + }, + }, "readSettings": [Function], - "uniqueKeyPolicy": {}, "usageSizeInKB": [Function], "vectorEmbeddingPolicy": [Function], } @@ -274,8 +294,18 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyProperties": [ "partitionKey", ], + "rawDataModel": { + "uniqueKeyPolicy": { + "uniqueKeys": [ + { + "paths": [ + "/id", + ], + }, + ], + }, + }, "readSettings": [Function], - "uniqueKeyPolicy": {}, "usageSizeInKB": [Function], "vectorEmbeddingPolicy": [Function], } @@ -404,8 +434,18 @@ exports[`SettingsComponent renders 1`] = ` "partitionKeyProperties": [ "partitionKey", ], + "rawDataModel": { + "uniqueKeyPolicy": { + "uniqueKeys": [ + { + "paths": [ + "/id", + ], + }, + ], + }, + }, "readSettings": [Function], - "uniqueKeyPolicy": {}, "usageSizeInKB": [Function], "vectorEmbeddingPolicy": [Function], }