diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.tsx index a45ee4230..8b2cf2d43 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.tsx @@ -1,23 +1,23 @@ +import { Label, Link, MessageBar, MessageBarType, Stack, Text, TextField } from "office-ui-fabric-react"; import * as React from "react"; import * as Constants from "../../../../Common/Constants"; -import { ThroughputInputAutoPilotV3Component } from "./ThroughputInputComponents/ThroughputInputAutoPilotV3Component"; -import * as ViewModels from "../../../../Contracts/ViewModels"; +import { configContext, Platform } from "../../../../ConfigContext"; import * as DataModels from "../../../../Contracts/DataModels"; +import * as ViewModels from "../../../../Contracts/ViewModels"; import * as SharedConstants from "../../../../Shared/Constants"; +import * as AutoPilotUtils from "../../../../Utils/AutoPilotUtils"; import Explorer from "../../../Explorer"; import { getTextFieldStyles, - subComponentStackProps, - titleAndInputStackProps, - throughputUnit, getThroughputApplyLongDelayMessage, getThroughputApplyShortDelayMessage, + subComponentStackProps, + throughputUnit, + titleAndInputStackProps, updateThroughputBeyondLimitWarningMessage, } from "../SettingsRenderUtils"; import { hasDatabaseSharedThroughput } from "../SettingsUtils"; -import * as AutoPilotUtils from "../../../../Utils/AutoPilotUtils"; -import { Link, Text, TextField, Stack, Label, MessageBar, MessageBarType } from "office-ui-fabric-react"; -import { configContext, Platform } from "../../../../ConfigContext"; +import { ThroughputInputAutoPilotV3Component } from "./ThroughputInputComponents/ThroughputInputAutoPilotV3Component"; export interface ScaleComponentProps { collection: ViewModels.Collection; @@ -172,7 +172,6 @@ export class ScaleComponent extends React.Component { databaseAccount={this.props.container.databaseAccount()} databaseName={this.databaseId} collectionName={this.collectionId} - serverId={this.props.container.serverId()} throughput={this.props.throughput} throughputBaseline={this.props.throughputBaseline} onThroughputChange={this.props.onThroughputChange} diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.test.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.test.tsx index e102edd73..2944ee0e4 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.test.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.test.tsx @@ -1,17 +1,16 @@ import { shallow } from "enzyme"; import React from "react"; +import * as DataModels from "../../../../../Contracts/DataModels"; import { ThroughputInputAutoPilotV3Component, ThroughputInputAutoPilotV3Props, } from "./ThroughputInputAutoPilotV3Component"; -import * as DataModels from "../../../../../Contracts/DataModels"; describe("ThroughputInputAutoPilotV3Component", () => { const baseProps: ThroughputInputAutoPilotV3Props = { databaseAccount: {} as DataModels.DatabaseAccount, databaseName: "test", collectionName: "test", - serverId: undefined, wasAutopilotOriginallySet: false, throughput: 100, throughputBaseline: 100, diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx index 1a2516655..e0629269c 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx @@ -1,55 +1,53 @@ -import React from "react"; -import * as AutoPilotUtils from "../../../../../Utils/AutoPilotUtils"; import { - getTextFieldStyles, - getToolTipContainer, - noLeftPaddingCheckBoxStyle, - titleAndInputStackProps, - checkBoxAndInputStackProps, - getChoiceGroupStyles, - messageBarStyles, - getEstimatedSpendingElement, - getAutoPilotV3SpendElement, - manualToAutoscaleDisclaimerElement, - saveThroughputWarningMessage, - ManualEstimatedSpendingDisplayProps, - AutoscaleEstimatedSpendingDisplayProps, - PriceBreakdown, - getRuPriceBreakdown, - transparentDetailsHeaderStyle, -} from "../../SettingsRenderUtils"; -import { - Text, - TextField, - ChoiceGroup, - IChoiceGroupOption, Checkbox, - Stack, + ChoiceGroup, + FontIcon, + IChoiceGroupOption, + IColumn, Label, Link, MessageBar, - FontIcon, - IColumn, + Stack, + Text, + TextField, } from "office-ui-fabric-react"; -import { ToolTipLabelComponent } from "../ToolTipLabelComponent"; -import { getSanitizedInputValue, IsComponentDirtyResult, isDirty } from "../../SettingsUtils"; -import * as SharedConstants from "../../../../../Shared/Constants"; -import * as DataModels from "../../../../../Contracts/DataModels"; -import { Int32 } from "../../../../Panes/Tables/Validators/EntityPropertyValidationCommon"; -import { userContext } from "../../../../../UserContext"; -import { SubscriptionType } from "../../../../../Contracts/SubscriptionType"; -import { usageInGB, calculateEstimateNumber } from "../../../../../Utils/PricingUtils"; +import React from "react"; import { Features } from "../../../../../Common/Constants"; -import { minAutoPilotThroughput } from "../../../../../Utils/AutoPilotUtils"; - -import * as TelemetryProcessor from "../../../../../Shared/Telemetry/TelemetryProcessor"; +import * as DataModels from "../../../../../Contracts/DataModels"; +import { SubscriptionType } from "../../../../../Contracts/SubscriptionType"; +import * as SharedConstants from "../../../../../Shared/Constants"; import { Action, ActionModifiers } from "../../../../../Shared/Telemetry/TelemetryConstants"; +import * as TelemetryProcessor from "../../../../../Shared/Telemetry/TelemetryProcessor"; +import { userContext } from "../../../../../UserContext"; +import * as AutoPilotUtils from "../../../../../Utils/AutoPilotUtils"; +import { minAutoPilotThroughput } from "../../../../../Utils/AutoPilotUtils"; +import { calculateEstimateNumber, usageInGB } from "../../../../../Utils/PricingUtils"; +import { Int32 } from "../../../../Panes/Tables/Validators/EntityPropertyValidationCommon"; +import { + AutoscaleEstimatedSpendingDisplayProps, + checkBoxAndInputStackProps, + getAutoPilotV3SpendElement, + getChoiceGroupStyles, + getEstimatedSpendingElement, + getRuPriceBreakdown, + getTextFieldStyles, + getToolTipContainer, + ManualEstimatedSpendingDisplayProps, + manualToAutoscaleDisclaimerElement, + messageBarStyles, + noLeftPaddingCheckBoxStyle, + PriceBreakdown, + saveThroughputWarningMessage, + titleAndInputStackProps, + transparentDetailsHeaderStyle, +} from "../../SettingsRenderUtils"; +import { getSanitizedInputValue, IsComponentDirtyResult, isDirty } from "../../SettingsUtils"; +import { ToolTipLabelComponent } from "../ToolTipLabelComponent"; export interface ThroughputInputAutoPilotV3Props { databaseAccount: DataModels.DatabaseAccount; databaseName: string; collectionName: string; - serverId: string; throughput: number; throughputBaseline: number; onThroughputChange: (newThroughput: number) => void; @@ -182,7 +180,6 @@ export class ThroughputInputAutoPilotV3Component extends React.Component< } const isDirty: boolean = this.IsComponentDirty().isDiscardable; - const serverId: string = this.props.serverId; const regions = account?.properties?.readLocations?.length || 1; const multimaster = account?.properties?.enableMultipleWriteLocations || false; @@ -192,7 +189,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component< estimatedSpend = this.getEstimatedManualSpendElement( // if migrating from autoscale to manual, we use the autoscale RUs value as that is what will be set... this.overrideWithAutoPilotSettings() ? this.props.maxAutoPilotThroughput : this.props.throughputBaseline, - serverId, + userContext.portalEnv, regions, multimaster, isDirty ? this.props.throughput : undefined @@ -200,7 +197,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component< } else { estimatedSpend = this.getEstimatedAutoscaleSpendElement( this.props.maxAutoPilotThroughputBaseline, - serverId, + userContext.portalEnv, regions, multimaster, isDirty ? this.props.maxAutoPilotThroughput : undefined diff --git a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap index 742d0b932..defce3016 100644 --- a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap +++ b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap @@ -1059,7 +1059,6 @@ exports[`SettingsComponent renders 1`] = ` }, "selectedDatabaseId": [Function], "selectedNode": [Function], - "serverId": [Function], "setInProgressConsoleDataIdToBeDeleted": undefined, "setIsNotificationConsoleExpanded": undefined, "setNotificationConsoleData": undefined, @@ -2259,7 +2258,6 @@ exports[`SettingsComponent renders 1`] = ` }, "selectedDatabaseId": [Function], "selectedNode": [Function], - "serverId": [Function], "setInProgressConsoleDataIdToBeDeleted": undefined, "setIsNotificationConsoleExpanded": undefined, "setNotificationConsoleData": undefined, @@ -3472,7 +3470,6 @@ exports[`SettingsComponent renders 1`] = ` }, "selectedDatabaseId": [Function], "selectedNode": [Function], - "serverId": [Function], "setInProgressConsoleDataIdToBeDeleted": undefined, "setIsNotificationConsoleExpanded": undefined, "setNotificationConsoleData": undefined, @@ -4672,7 +4669,6 @@ exports[`SettingsComponent renders 1`] = ` }, "selectedDatabaseId": [Function], "selectedNode": [Function], - "serverId": [Function], "setInProgressConsoleDataIdToBeDeleted": undefined, "setIsNotificationConsoleExpanded": undefined, "setNotificationConsoleData": undefined, diff --git a/src/Explorer/Explorer.tsx b/src/Explorer/Explorer.tsx index c4ea90dfe..970068fec 100644 --- a/src/Explorer/Explorer.tsx +++ b/src/Explorer/Explorer.tsx @@ -163,7 +163,6 @@ export default class Explorer { public isAccountReady: ko.Observable; public canSaveQueries: ko.Computed; public features: ko.Observable; - public serverId: ko.Observable; public isTryCosmosDBSubscription: ko.Observable; public queriesClient: QueriesClient; public tableDataClient: TableDataClient; @@ -398,7 +397,6 @@ export default class Explorer { this.memoryUsageInfo = ko.observable(); this.features = ko.observable(); - this.serverId = ko.observable(); this.queriesClient = new QueriesClient(this); this.isTryCosmosDBSubscription = ko.observable(false); @@ -1443,7 +1441,6 @@ export default class Explorer { this.collectionCreationDefaults = inputs.defaultCollectionThroughput; } this.features(inputs.features); - this.serverId(inputs.serverId ?? Constants.ServerIds.productionPortal); this.databaseAccount(databaseAccount); this.subscriptionType(inputs.subscriptionType ?? SharedConstants.CollectionCreation.DefaultSubscriptionType); this.hasWriteAccess(inputs.hasWriteAccess ?? true); @@ -1531,9 +1528,9 @@ export default class Explorer { public isRunningOnNationalCloud(): boolean { return ( - this.serverId() === Constants.ServerIds.blackforest || - this.serverId() === Constants.ServerIds.fairfax || - this.serverId() === Constants.ServerIds.mooncake + userContext.portalEnv === "blackforest" || + userContext.portalEnv === "fairfax" || + userContext.portalEnv === "mooncake" ); } diff --git a/src/Explorer/Panes/AddCollectionPane.ts b/src/Explorer/Panes/AddCollectionPane.ts index bc14278ca..51ca127b0 100644 --- a/src/Explorer/Panes/AddCollectionPane.ts +++ b/src/Explorer/Panes/AddCollectionPane.ts @@ -1,22 +1,22 @@ -import * as _ from "underscore"; -import * as AddCollectionUtility from "../../Shared/AddCollectionUtility"; -import * as AutoPilotUtils from "../../Utils/AutoPilotUtils"; -import * as Constants from "../../Common/Constants"; -import * as DataModels from "../../Contracts/DataModels"; import * as ko from "knockout"; -import * as PricingUtils from "../../Utils/PricingUtils"; -import * as SharedConstants from "../../Shared/Constants"; -import * as ViewModels from "../../Contracts/ViewModels"; -import { SubscriptionType } from "../../Contracts/SubscriptionType"; -import editable from "../../Common/EditableUtility"; -import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; -import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; -import { configContext, Platform } from "../../ConfigContext"; -import { ContextualPaneBase } from "./ContextualPaneBase"; -import { DynamicListItem } from "../Controls/DynamicList/DynamicListComponent"; +import * as _ from "underscore"; +import * as Constants from "../../Common/Constants"; import { createCollection } from "../../Common/dataAccess/createCollection"; +import editable from "../../Common/EditableUtility"; import { getErrorMessage, getErrorStack } from "../../Common/ErrorHandlingUtils"; +import { configContext, Platform } from "../../ConfigContext"; +import * as DataModels from "../../Contracts/DataModels"; +import { SubscriptionType } from "../../Contracts/SubscriptionType"; +import * as ViewModels from "../../Contracts/ViewModels"; +import * as AddCollectionUtility from "../../Shared/AddCollectionUtility"; +import * as SharedConstants from "../../Shared/Constants"; +import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; +import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import { userContext } from "../../UserContext"; +import * as AutoPilotUtils from "../../Utils/AutoPilotUtils"; +import * as PricingUtils from "../../Utils/PricingUtils"; +import { DynamicListItem } from "../Controls/DynamicList/DynamicListComponent"; +import { ContextualPaneBase } from "./ContextualPaneBase"; export interface AddCollectionPaneOptions extends ViewModels.PaneOptions { isPreferredApiTable: ko.Computed; @@ -186,7 +186,6 @@ export default class AddCollectionPane extends ContextualPaneBase { return ""; } - const serverId: string = this.container.serverId(); const regions = (account && account.properties && @@ -200,23 +199,28 @@ export default class AddCollectionPane extends ContextualPaneBase { if (!this.isSharedAutoPilotSelected()) { throughputSpendAckText = PricingUtils.getEstimatedSpendAcknowledgeString( offerThroughput, - serverId, + userContext.portalEnv, regions, multimaster, this.isSharedAutoPilotSelected() ); - estimatedSpend = PricingUtils.getEstimatedSpendHtml(offerThroughput, serverId, regions, multimaster); + estimatedSpend = PricingUtils.getEstimatedSpendHtml( + offerThroughput, + userContext.portalEnv, + regions, + multimaster + ); } else { throughputSpendAckText = PricingUtils.getEstimatedSpendAcknowledgeString( this.sharedAutoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster, this.isSharedAutoPilotSelected() ); estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( this.sharedAutoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster ); @@ -240,7 +244,6 @@ export default class AddCollectionPane extends ContextualPaneBase { return ""; } - const serverId: string = this.container.serverId(); const regions = (account && account.properties && @@ -254,28 +257,28 @@ export default class AddCollectionPane extends ContextualPaneBase { if (!this.isAutoPilotSelected()) { throughputSpendAckText = PricingUtils.getEstimatedSpendAcknowledgeString( this.throughputMultiPartition(), - serverId, + userContext.portalEnv, regions, multimaster, this.isAutoPilotSelected() ); estimatedSpend = PricingUtils.getEstimatedSpendHtml( this.throughputMultiPartition(), - serverId, + userContext.portalEnv, regions, multimaster ); } else { throughputSpendAckText = PricingUtils.getEstimatedSpendAcknowledgeString( this.autoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster, this.isAutoPilotSelected() ); estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( this.autoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster ); @@ -489,7 +492,7 @@ export default class AddCollectionPane extends ContextualPaneBase { this.upsellMessage = ko.pureComputed(() => { return PricingUtils.getUpsellMessage( - this.container.serverId(), + userContext.portalEnv, this.isFreeTierAccount(), this.container.isFirstResourceCreated(), this.container.defaultExperience(), diff --git a/src/Explorer/Panes/AddDatabasePane.ts b/src/Explorer/Panes/AddDatabasePane.ts index d9a4c876d..937de124d 100644 --- a/src/Explorer/Panes/AddDatabasePane.ts +++ b/src/Explorer/Panes/AddDatabasePane.ts @@ -1,19 +1,19 @@ -import * as AutoPilotUtils from "../../Utils/AutoPilotUtils"; -import * as Constants from "../../Common/Constants"; -import * as DataModels from "../../Contracts/DataModels"; import * as ko from "knockout"; -import * as PricingUtils from "../../Utils/PricingUtils"; -import * as SharedConstants from "../../Shared/Constants"; -import * as ViewModels from "../../Contracts/ViewModels"; -import editable from "../../Common/EditableUtility"; -import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; -import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; -import { ContextualPaneBase } from "./ContextualPaneBase"; +import * as Constants from "../../Common/Constants"; import { createDatabase } from "../../Common/dataAccess/createDatabase"; -import { configContext, Platform } from "../../ConfigContext"; +import editable from "../../Common/EditableUtility"; import { getErrorMessage, getErrorStack } from "../../Common/ErrorHandlingUtils"; +import { configContext, Platform } from "../../ConfigContext"; +import * as DataModels from "../../Contracts/DataModels"; import { SubscriptionType } from "../../Contracts/SubscriptionType"; +import * as ViewModels from "../../Contracts/ViewModels"; +import * as SharedConstants from "../../Shared/Constants"; +import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; +import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import { userContext } from "../../UserContext"; +import * as AutoPilotUtils from "../../Utils/AutoPilotUtils"; +import * as PricingUtils from "../../Utils/PricingUtils"; +import { ContextualPaneBase } from "./ContextualPaneBase"; export default class AddDatabasePane extends ContextualPaneBase { public defaultExperience: ko.Computed; @@ -122,7 +122,6 @@ export default class AddDatabasePane extends ContextualPaneBase { return ""; } - const serverId = this.container.serverId(); const regions = (account && account.properties && @@ -134,10 +133,15 @@ export default class AddDatabasePane extends ContextualPaneBase { let estimatedSpendAcknowledge: string; let estimatedSpend: string; if (!this.isAutoPilotSelected()) { - estimatedSpend = PricingUtils.getEstimatedSpendHtml(offerThroughput, serverId, regions, multimaster); + estimatedSpend = PricingUtils.getEstimatedSpendHtml( + offerThroughput, + userContext.portalEnv, + regions, + multimaster + ); estimatedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( offerThroughput, - serverId, + userContext.portalEnv, regions, multimaster, this.isAutoPilotSelected() @@ -145,13 +149,13 @@ export default class AddDatabasePane extends ContextualPaneBase { } else { estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( this.maxAutoPilotThroughputSet(), - serverId, + userContext.portalEnv, regions, multimaster ); estimatedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( this.maxAutoPilotThroughputSet(), - serverId, + userContext.portalEnv, regions, multimaster, this.isAutoPilotSelected() @@ -239,7 +243,7 @@ export default class AddDatabasePane extends ContextualPaneBase { this.upsellMessage = ko.pureComputed(() => { return PricingUtils.getUpsellMessage( - this.container.serverId(), + userContext.portalEnv, this.isFreeTierAccount(), this.container.isFirstResourceCreated(), this.container.defaultExperience(), diff --git a/src/Explorer/Panes/CassandraAddCollectionPane.ts b/src/Explorer/Panes/CassandraAddCollectionPane.ts index 306491e7b..7de0b353f 100644 --- a/src/Explorer/Panes/CassandraAddCollectionPane.ts +++ b/src/Explorer/Panes/CassandraAddCollectionPane.ts @@ -1,21 +1,21 @@ -import * as _ from "underscore"; -import * as AddCollectionUtility from "../../Shared/AddCollectionUtility"; -import * as AutoPilotUtils from "../../Utils/AutoPilotUtils"; -import * as Constants from "../../Common/Constants"; -import * as DataModels from "../../Contracts/DataModels"; import * as ko from "knockout"; -import * as PricingUtils from "../../Utils/PricingUtils"; -import * as SharedConstants from "../../Shared/Constants"; -import * as ViewModels from "../../Contracts/ViewModels"; -import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; -import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; -import { CassandraAPIDataClient } from "../Tables/TableDataClient"; -import { ContextualPaneBase } from "./ContextualPaneBase"; +import * as _ from "underscore"; +import * as Constants from "../../Common/Constants"; +import { getErrorMessage, getErrorStack } from "../../Common/ErrorHandlingUtils"; import { HashMap } from "../../Common/HashMap"; import { configContext, Platform } from "../../ConfigContext"; -import { getErrorMessage, getErrorStack } from "../../Common/ErrorHandlingUtils"; +import * as DataModels from "../../Contracts/DataModels"; import { SubscriptionType } from "../../Contracts/SubscriptionType"; +import * as ViewModels from "../../Contracts/ViewModels"; +import * as AddCollectionUtility from "../../Shared/AddCollectionUtility"; +import * as SharedConstants from "../../Shared/Constants"; +import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; +import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import { userContext } from "../../UserContext"; +import * as AutoPilotUtils from "../../Utils/AutoPilotUtils"; +import * as PricingUtils from "../../Utils/PricingUtils"; +import { CassandraAPIDataClient } from "../Tables/TableDataClient"; +import { ContextualPaneBase } from "./ContextualPaneBase"; export default class CassandraAddCollectionPane extends ContextualPaneBase { public createTableQuery: ko.Observable; @@ -127,7 +127,6 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { return ""; } - const serverId = this.container.serverId(); const regions = (account && account.properties && @@ -139,10 +138,15 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { let estimatedSpend: string; let estimatedDedicatedSpendAcknowledge: string; if (!this.isAutoPilotSelected()) { - estimatedSpend = PricingUtils.getEstimatedSpendHtml(offerThroughput, serverId, regions, multimaster); + estimatedSpend = PricingUtils.getEstimatedSpendHtml( + offerThroughput, + userContext.portalEnv, + regions, + multimaster + ); estimatedDedicatedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( offerThroughput, - serverId, + userContext.portalEnv, regions, multimaster, this.isAutoPilotSelected() @@ -150,13 +154,13 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { } else { estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( this.selectedAutoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster ); estimatedDedicatedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( this.selectedAutoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster, this.isAutoPilotSelected() @@ -172,7 +176,6 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { return ""; } - const serverId = this.container.serverId(); const regions = (account && account.properties && @@ -183,10 +186,15 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { let estimatedSpend: string; let estimatedSharedSpendAcknowledge: string; if (!this.isSharedAutoPilotSelected()) { - estimatedSpend = PricingUtils.getEstimatedSpendHtml(this.keyspaceThroughput(), serverId, regions, multimaster); + estimatedSpend = PricingUtils.getEstimatedSpendHtml( + this.keyspaceThroughput(), + userContext.portalEnv, + regions, + multimaster + ); estimatedSharedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( this.keyspaceThroughput(), - serverId, + userContext.portalEnv, regions, multimaster, this.isSharedAutoPilotSelected() @@ -194,13 +202,13 @@ export default class CassandraAddCollectionPane extends ContextualPaneBase { } else { estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( this.sharedAutoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster ); estimatedSharedSpendAcknowledge = PricingUtils.getEstimatedSpendAcknowledgeString( this.sharedAutoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster, this.isSharedAutoPilotSelected() diff --git a/src/Explorer/Tabs/DatabaseSettingsTab.ts b/src/Explorer/Tabs/DatabaseSettingsTab.ts index d6a2766d5..ec89e0ab8 100644 --- a/src/Explorer/Tabs/DatabaseSettingsTab.ts +++ b/src/Explorer/Tabs/DatabaseSettingsTab.ts @@ -136,7 +136,6 @@ export default class DatabaseSettingsTab extends TabsBase implements ViewModels. return ""; } - const serverId = this.container.serverId(); const regions = (account && account.properties && @@ -150,14 +149,14 @@ export default class DatabaseSettingsTab extends TabsBase implements ViewModels. estimatedSpend = PricingUtils.getEstimatedSpendHtml( // if migrating from autoscale to manual, we use the autoscale RUs value as that is what will be set... this.overrideWithAutoPilotSettings() ? this.autoPilotThroughput() : this.throughput(), - serverId, + userContext.portalEnv, regions, multimaster ); } else { estimatedSpend = PricingUtils.getEstimatedAutoscaleSpendHtml( this.autoPilotThroughput(), - serverId, + userContext.portalEnv, regions, multimaster ); diff --git a/src/Explorer/Tabs/MongoShellTab.ts b/src/Explorer/Tabs/MongoShellTab.ts index 8ec2ec006..5af951b29 100644 --- a/src/Explorer/Tabs/MongoShellTab.ts +++ b/src/Explorer/Tabs/MongoShellTab.ts @@ -1,18 +1,16 @@ -import * as Constants from "../../Common/Constants"; import * as ko from "knockout"; -import * as ViewModels from "../../Contracts/ViewModels"; -import AuthHeadersUtil from "../../Platform/Hosted/Authorization"; -import { isInvalidParentFrameOrigin } from "../../Utils/MessageValidation"; -import Q from "q"; -import TabsBase from "./TabsBase"; -import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; -import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; -import { ConsoleDataType } from "../Menus/NotificationConsole/NotificationConsoleComponent"; +import * as Constants from "../../Common/Constants"; import { HashMap } from "../../Common/HashMap"; +import { configContext, Platform } from "../../ConfigContext"; +import * as ViewModels from "../../Contracts/ViewModels"; +import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; +import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; +import { userContext } from "../../UserContext"; +import { isInvalidParentFrameOrigin } from "../../Utils/MessageValidation"; import * as NotificationConsoleUtils from "../../Utils/NotificationConsoleUtils"; import Explorer from "../Explorer"; -import { userContext } from "../../UserContext"; -import { configContext, Platform } from "../../ConfigContext"; +import { ConsoleDataType } from "../Menus/NotificationConsole/NotificationConsoleComponent"; +import TabsBase from "./TabsBase"; export default class MongoShellTab extends TabsBase { public url: ko.Computed; @@ -33,7 +31,7 @@ export default class MongoShellTab extends TabsBase { this._runtimeEndpoint = configContext.platform === Platform.Hosted ? configContext.BACKEND_ENDPOINT : ""; const extensionEndpoint: string = configContext.BACKEND_ENDPOINT || this._runtimeEndpoint || ""; let baseUrl = "/content/mongoshell/dist/"; - if (this._container.serverId() === "localhost") { + if (userContext.portalEnv === "localhost") { baseUrl = "/content/mongoshell/"; } diff --git a/src/UserContext.ts b/src/UserContext.ts index 1308a95c9..8e36076c7 100644 --- a/src/UserContext.ts +++ b/src/UserContext.ts @@ -20,11 +20,15 @@ interface UserContext { // API Type is not yet provided by ARM. You need to manually inspect all the capabilities+kind so we abstract that logic in userContext // This is coming in a future Cosmos ARM API version as a prperty on databaseAccount apiType?: ApiType; + portalEnv?: PortalEnv; } type ApiType = "SQL" | "Mongo" | "Gremlin" | "Tables" | "Cassandra"; +export type PortalEnv = "localhost" | "blackforest" | "fairfax" | "mooncake" | "prod" | "dev"; -const userContext: UserContext = {}; +const userContext: UserContext = { + portalEnv: "prod", +}; function updateUserContext(newContext: UserContext): void { Object.assign(userContext, newContext); diff --git a/src/hooks/useKnockoutExplorer.ts b/src/hooks/useKnockoutExplorer.ts index ff5609915..f1186b908 100644 --- a/src/hooks/useKnockoutExplorer.ts +++ b/src/hooks/useKnockoutExplorer.ts @@ -25,7 +25,7 @@ import { getDatabaseAccountPropertiesFromMetadata, } from "../Platform/Hosted/HostedUtils"; import { DefaultExperienceUtility } from "../Shared/DefaultExperienceUtility"; -import { updateUserContext } from "../UserContext"; +import { PortalEnv, updateUserContext } from "../UserContext"; import { listKeys } from "../Utils/arm/generatedClients/2020-04-01/databaseAccounts"; import { isInvalidParentFrameOrigin } from "../Utils/MessageValidation"; @@ -260,6 +260,7 @@ async function configurePortal(explorerParams: ExplorerParams): Promise