Remove window.dataExplorerPlatform (#279)

More cleanup for #253 
- Remove window.dataExplorerPlatform
- Remove explorer factories
This commit is contained in:
Steve Faulkner 2020-10-14 22:25:13 -05:00 committed by GitHub
parent 39f7ef331a
commit 821f665e78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 63 additions and 143 deletions

View File

@ -112,7 +112,6 @@ describe("endpoint", () => {
describe("requestPlugin", () => { describe("requestPlugin", () => {
beforeEach(() => { beforeEach(() => {
delete window.dataExplorerPlatform;
resetConfigContext(); resetConfigContext();
}); });

View File

@ -5,7 +5,6 @@ import { container, collection } from "../TestUtils";
import { ThroughputInputAutoPilotV3Component } from "./ThroughputInputComponents/ThroughputInputAutoPilotV3Component"; import { ThroughputInputAutoPilotV3Component } from "./ThroughputInputComponents/ThroughputInputAutoPilotV3Component";
import Explorer from "../../../Explorer"; import Explorer from "../../../Explorer";
import * as Constants from "../../../../Common/Constants"; import * as Constants from "../../../../Common/Constants";
import { PlatformType } from "../../../../PlatformType";
import * as DataModels from "../../../../Contracts/DataModels"; import * as DataModels from "../../../../Contracts/DataModels";
import { throughputUnit } from "../SettingsRenderUtils"; import { throughputUnit } from "../SettingsRenderUtils";
import * as SharedConstants from "../../../../Shared/Constants"; import * as SharedConstants from "../../../../Shared/Constants";
@ -13,7 +12,6 @@ import ko from "knockout";
describe("ScaleComponent", () => { describe("ScaleComponent", () => {
const nonNationalCloudContainer = new Explorer(); const nonNationalCloudContainer = new Explorer();
nonNationalCloudContainer.getPlatformType = () => PlatformType.Portal;
nonNationalCloudContainer.isRunningOnNationalCloud = () => false; nonNationalCloudContainer.isRunningOnNationalCloud = () => false;
const targetThroughput = 6000; const targetThroughput = 6000;
@ -119,7 +117,7 @@ describe("ScaleComponent", () => {
it("getThroughputTitle", () => { it("getThroughputTitle", () => {
let scaleComponent = new ScaleComponent(baseProps); let scaleComponent = new ScaleComponent(baseProps);
expect(scaleComponent.getThroughputTitle()).toEqual("Throughput (6,000 - 40,000 RU/s)"); expect(scaleComponent.getThroughputTitle()).toEqual("Throughput (6,000 - unlimited RU/s)");
let newProps = { ...baseProps, container: nonNationalCloudContainer }; let newProps = { ...baseProps, container: nonNationalCloudContainer };
scaleComponent = new ScaleComponent(newProps); scaleComponent = new ScaleComponent(newProps);
@ -132,7 +130,7 @@ describe("ScaleComponent", () => {
it("canThroughputExceedMaximumValue", () => { it("canThroughputExceedMaximumValue", () => {
let scaleComponent = new ScaleComponent(baseProps); let scaleComponent = new ScaleComponent(baseProps);
expect(scaleComponent.canThroughputExceedMaximumValue()).toEqual(false); expect(scaleComponent.canThroughputExceedMaximumValue()).toEqual(true);
const newProps = { ...baseProps, container: nonNationalCloudContainer }; const newProps = { ...baseProps, container: nonNationalCloudContainer };
scaleComponent = new ScaleComponent(newProps); scaleComponent = new ScaleComponent(newProps);

View File

@ -5,7 +5,6 @@ import * as ViewModels from "../../../../Contracts/ViewModels";
import * as DataModels from "../../../../Contracts/DataModels"; import * as DataModels from "../../../../Contracts/DataModels";
import * as SharedConstants from "../../../../Shared/Constants"; import * as SharedConstants from "../../../../Shared/Constants";
import Explorer from "../../../Explorer"; import Explorer from "../../../Explorer";
import { PlatformType } from "../../../../PlatformType";
import { import {
getTextFieldStyles, getTextFieldStyles,
subComponentStackProps, subComponentStackProps,
@ -78,7 +77,7 @@ export class ScaleComponent extends React.Component<ScaleComponentProps> {
}; };
public getMaxRUThroughputInputLimit = (): number => { public getMaxRUThroughputInputLimit = (): number => {
if (this.props.container?.getPlatformType() === PlatformType.Hosted && this.props.collection.partitionKey) { if (configContext.platform === Platform.Hosted && this.props.collection.partitionKey) {
return SharedConstants.CollectionCreation.DefaultCollectionRUs1Million; return SharedConstants.CollectionCreation.DefaultCollectionRUs1Million;
} }
@ -100,8 +99,7 @@ export class ScaleComponent extends React.Component<ScaleComponentProps> {
public canThroughputExceedMaximumValue = (): boolean => { public canThroughputExceedMaximumValue = (): boolean => {
const isPublicAzurePortal: boolean = const isPublicAzurePortal: boolean =
this.props.container.getPlatformType() === PlatformType.Portal && configContext.platform === Platform.Portal && !this.props.container.isRunningOnNationalCloud();
!this.props.container.isRunningOnNationalCloud();
const hasPartitionKey = !!this.props.collection.partitionKey; const hasPartitionKey = !!this.props.collection.partitionKey;
return isPublicAzurePortal && hasPartitionKey; return isPublicAzurePortal && hasPartitionKey;

View File

@ -39,13 +39,13 @@ exports[`ScaleComponent renders with correct intiial notification 1`] = `
} }
> >
<ThroughputInputAutoPilotV3Component <ThroughputInputAutoPilotV3Component
canExceedMaximumValue={false} canExceedMaximumValue={true}
getThroughputWarningMessage={[Function]} getThroughputWarningMessage={[Function]}
isAutoPilotSelected={false} isAutoPilotSelected={false}
isEmulator={false} isEmulator={false}
isEnabled={true} isEnabled={true}
isFixed={false} isFixed={false}
label="Throughput (6,000 - 40,000 RU/s)" label="Throughput (6,000 - unlimited RU/s)"
maxAutoPilotThroughput={4000} maxAutoPilotThroughput={4000}
maxAutoPilotThroughputBaseline={4000} maxAutoPilotThroughputBaseline={4000}
maximum={40000} maximum={40000}

View File

@ -37,7 +37,7 @@ import { BindingHandlersRegisterer } from "../Bindings/BindingHandlersRegisterer
import { BrowseQueriesPane } from "./Panes/BrowseQueriesPane"; import { BrowseQueriesPane } from "./Panes/BrowseQueriesPane";
import { CassandraAPIDataClient, TableDataClient, TablesAPIDataClient } from "./Tables/TableDataClient"; import { CassandraAPIDataClient, TableDataClient, TablesAPIDataClient } from "./Tables/TableDataClient";
import { CommandBarComponentAdapter } from "./Menus/CommandBar/CommandBarComponentAdapter"; import { CommandBarComponentAdapter } from "./Menus/CommandBar/CommandBarComponentAdapter";
import { configContext, updateConfigContext } from "../ConfigContext"; import { configContext, Platform, updateConfigContext } from "../ConfigContext";
import { ConsoleData, ConsoleDataType } from "./Menus/NotificationConsole/NotificationConsoleComponent"; import { ConsoleData, ConsoleDataType } from "./Menus/NotificationConsole/NotificationConsoleComponent";
import { decryptJWTToken, getAuthorizationHeader } from "../Utils/AuthorizationUtils"; import { decryptJWTToken, getAuthorizationHeader } from "../Utils/AuthorizationUtils";
import { DefaultExperienceUtility } from "../Shared/DefaultExperienceUtility"; import { DefaultExperienceUtility } from "../Shared/DefaultExperienceUtility";
@ -58,7 +58,6 @@ import { NotebookUtil } from "./Notebook/NotebookUtil";
import { NotebookWorkspaceManager } from "../NotebookWorkspaceManager/NotebookWorkspaceManager"; import { NotebookWorkspaceManager } from "../NotebookWorkspaceManager/NotebookWorkspaceManager";
import { NotificationConsoleComponentAdapter } from "./Menus/NotificationConsole/NotificationConsoleComponentAdapter"; import { NotificationConsoleComponentAdapter } from "./Menus/NotificationConsole/NotificationConsoleComponentAdapter";
import * as NotificationConsoleUtils from "../Utils/NotificationConsoleUtils"; import * as NotificationConsoleUtils from "../Utils/NotificationConsoleUtils";
import { PlatformType } from "../PlatformType";
import { QueriesClient } from "../Common/QueriesClient"; import { QueriesClient } from "../Common/QueriesClient";
import { QuerySelectPane } from "./Panes/Tables/QuerySelectPane"; import { QuerySelectPane } from "./Panes/Tables/QuerySelectPane";
import { RenewAdHocAccessPane } from "./Panes/RenewAdHocAccessPane"; import { RenewAdHocAccessPane } from "./Panes/RenewAdHocAccessPane";
@ -565,9 +564,7 @@ export default class Explorer {
this.isHostedDataExplorerEnabled = ko.computed<boolean>( this.isHostedDataExplorerEnabled = ko.computed<boolean>(
() => () =>
this.getPlatformType() === PlatformType.Portal && configContext.platform === Platform.Portal && !this.isRunningOnNationalCloud() && !this.isPreferredApiGraph()
!this.isRunningOnNationalCloud() &&
!this.isPreferredApiGraph()
); );
this.isRightPanelV2Enabled = ko.computed<boolean>(() => this.isRightPanelV2Enabled = ko.computed<boolean>(() =>
this.isFeatureEnabled(Constants.Features.enableRightPanelV2) this.isFeatureEnabled(Constants.Features.enableRightPanelV2)
@ -1793,7 +1790,7 @@ export default class Explorer {
const message: any = event.data.data; const message: any = event.data.data;
const inputs: ViewModels.DataExplorerInputsFrame = message.inputs; const inputs: ViewModels.DataExplorerInputsFrame = message.inputs;
const isRunningInPortal = window.dataExplorerPlatform == PlatformType.Portal; const isRunningInPortal = configContext.platform === Platform.Portal;
const isRunningInDevMode = process.env.NODE_ENV === "development"; const isRunningInDevMode = process.env.NODE_ENV === "development";
if (inputs && configContext.BACKEND_ENDPOINT && isRunningInPortal && isRunningInDevMode) { if (inputs && configContext.BACKEND_ENDPOINT && isRunningInPortal && isRunningInDevMode) {
inputs.extensionEndpoint = configContext.PROXY_PATH; inputs.extensionEndpoint = configContext.PROXY_PATH;
@ -2009,10 +2006,6 @@ export default class Explorer {
this._panes.forEach((pane: ContextualPaneBase) => pane.close()); this._panes.forEach((pane: ContextualPaneBase) => pane.close());
} }
public getPlatformType(): PlatformType {
return window.dataExplorerPlatform;
}
public isRunningOnNationalCloud(): boolean { public isRunningOnNationalCloud(): boolean {
return ( return (
this.serverId() === Constants.ServerIds.blackforest || this.serverId() === Constants.ServerIds.blackforest ||

View File

@ -1,5 +1,4 @@
import * as ViewModels from "../../../Contracts/ViewModels"; import * as ViewModels from "../../../Contracts/ViewModels";
import { PlatformType } from "../../../PlatformType";
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants"; import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
import { Areas } from "../../../Common/Constants"; import { Areas } from "../../../Common/Constants";
import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor"; import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
@ -159,7 +158,7 @@ export class CommandBarComponentButtonFactory {
public static createControlCommandBarButtons(container: Explorer): CommandButtonComponentProps[] { public static createControlCommandBarButtons(container: Explorer): CommandButtonComponentProps[] {
const buttons: CommandButtonComponentProps[] = []; const buttons: CommandButtonComponentProps[] = [];
if (window.dataExplorerPlatform === PlatformType.Hosted) { if (configContext.platform === Platform.Hosted) {
return buttons; return buttons;
} }

View File

@ -14,8 +14,6 @@ import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstan
import { configContext, Platform } from "../../ConfigContext"; import { configContext, Platform } from "../../ConfigContext";
import { ContextualPaneBase } from "./ContextualPaneBase"; import { ContextualPaneBase } from "./ContextualPaneBase";
import { DynamicListItem } from "../Controls/DynamicList/DynamicListComponent"; import { DynamicListItem } from "../Controls/DynamicList/DynamicListComponent";
import { HashMap } from "../../Common/HashMap";
import { PlatformType } from "../../PlatformType";
import { refreshCachedResources } from "../../Common/DocumentClientUtilityBase"; import { refreshCachedResources } from "../../Common/DocumentClientUtilityBase";
import { createCollection } from "../../Common/dataAccess/createCollection"; import { createCollection } from "../../Common/dataAccess/createCollection";
@ -327,7 +325,7 @@ export default class AddCollectionPane extends ContextualPaneBase {
if ( if (
configContext.platform !== Platform.Emulator && configContext.platform !== Platform.Emulator &&
!this.container.isTryCosmosDBSubscription() && !this.container.isTryCosmosDBSubscription() &&
this.container.getPlatformType() !== PlatformType.Portal configContext.platform !== Platform.Portal
) { ) {
const offerThroughput: number = this._getThroughput(); const offerThroughput: number = this._getThroughput();
return offerThroughput <= 100000; return offerThroughput <= 100000;

View File

@ -11,7 +11,6 @@ import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants";
import { ContextualPaneBase } from "./ContextualPaneBase"; import { ContextualPaneBase } from "./ContextualPaneBase";
import { createDatabase } from "../../Common/dataAccess/createDatabase"; import { createDatabase } from "../../Common/dataAccess/createDatabase";
import { PlatformType } from "../../PlatformType";
import { configContext, Platform } from "../../ConfigContext"; import { configContext, Platform } from "../../ConfigContext";
export default class AddDatabasePane extends ContextualPaneBase { export default class AddDatabasePane extends ContextualPaneBase {
@ -183,7 +182,7 @@ export default class AddDatabasePane extends ContextualPaneBase {
if ( if (
configContext.platform !== Platform.Emulator && configContext.platform !== Platform.Emulator &&
!this.container.isTryCosmosDBSubscription() && !this.container.isTryCosmosDBSubscription() &&
this.container.getPlatformType() !== PlatformType.Portal configContext.platform !== Platform.Portal
) { ) {
const offerThroughput: number = this.throughput(); const offerThroughput: number = this.throughput();
return offerThroughput <= 100000; return offerThroughput <= 100000;

View File

@ -13,7 +13,6 @@ import SaveIcon from "../../../images/save-cosmos.svg";
import TabsBase from "./TabsBase"; import TabsBase from "./TabsBase";
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
import { Action } from "../../Shared/Telemetry/TelemetryConstants"; import { Action } from "../../Shared/Telemetry/TelemetryConstants";
import { PlatformType } from "../../PlatformType";
import { RequestOptions } from "@azure/cosmos/dist-esm"; import { RequestOptions } from "@azure/cosmos/dist-esm";
import Explorer from "../Explorer"; import Explorer from "../Explorer";
import { updateOffer } from "../../Common/dataAccess/updateOffer"; import { updateOffer } from "../../Common/dataAccess/updateOffer";
@ -200,16 +199,14 @@ export default class DatabaseSettingsTab extends TabsBase implements ViewModels.
return configContext.platform !== Platform.Emulator; return configContext.platform !== Platform.Emulator;
}); });
this.shouldDisplayPortalUsePrompt = ko.pureComputed<boolean>( this.shouldDisplayPortalUsePrompt = ko.pureComputed<boolean>(() => configContext.platform === Platform.Hosted);
() => this.container.getPlatformType() === PlatformType.Hosted
);
this.canThroughputExceedMaximumValue = ko.pureComputed<boolean>( this.canThroughputExceedMaximumValue = ko.pureComputed<boolean>(
() => this.container.getPlatformType() === PlatformType.Portal && !this.container.isRunningOnNationalCloud() () => configContext.platform === Platform.Portal && !this.container.isRunningOnNationalCloud()
); );
this.canRequestSupport = ko.pureComputed(() => { this.canRequestSupport = ko.pureComputed(() => {
if ( if (
configContext.platform === Platform.Emulator || configContext.platform === Platform.Emulator ||
this.container.getPlatformType() === PlatformType.Hosted || configContext.platform === Platform.Hosted ||
this.canThroughputExceedMaximumValue() this.canThroughputExceedMaximumValue()
) { ) {
return false; return false;
@ -273,7 +270,7 @@ export default class DatabaseSettingsTab extends TabsBase implements ViewModels.
}); });
this.maxRUThroughputInputLimit = ko.pureComputed<number>(() => { this.maxRUThroughputInputLimit = ko.pureComputed<number>(() => {
if (this.container && this.container.getPlatformType() === PlatformType.Hosted) { if (configContext.platform === Platform.Hosted) {
return SharedConstants.CollectionCreation.DefaultCollectionRUs1Million; return SharedConstants.CollectionCreation.DefaultCollectionRUs1Million;
} }

View File

@ -10,10 +10,9 @@ import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstan
import { ConsoleDataType } from "../Menus/NotificationConsole/NotificationConsoleComponent"; import { ConsoleDataType } from "../Menus/NotificationConsole/NotificationConsoleComponent";
import { HashMap } from "../../Common/HashMap"; import { HashMap } from "../../Common/HashMap";
import * as NotificationConsoleUtils from "../../Utils/NotificationConsoleUtils"; import * as NotificationConsoleUtils from "../../Utils/NotificationConsoleUtils";
import { PlatformType } from "../../PlatformType";
import Explorer from "../Explorer"; import Explorer from "../Explorer";
import { userContext } from "../../UserContext"; import { userContext } from "../../UserContext";
import { configContext } from "../../ConfigContext"; import { configContext, Platform } from "../../ConfigContext";
export default class MongoShellTab extends TabsBase { export default class MongoShellTab extends TabsBase {
public url: ko.Computed<string>; public url: ko.Computed<string>;
@ -31,7 +30,7 @@ export default class MongoShellTab extends TabsBase {
const accountName = account && account.name; const accountName = account && account.name;
const mongoEndpoint = account && (account.properties.mongoEndpoint || account.properties.documentEndpoint); const mongoEndpoint = account && (account.properties.mongoEndpoint || account.properties.documentEndpoint);
this._runtimeEndpoint = window.dataExplorerPlatform === PlatformType.Hosted ? configContext.BACKEND_ENDPOINT : ""; this._runtimeEndpoint = configContext.platform === Platform.Hosted ? configContext.BACKEND_ENDPOINT : "";
const extensionEndpoint: string = configContext.BACKEND_ENDPOINT || this._runtimeEndpoint || ""; const extensionEndpoint: string = configContext.BACKEND_ENDPOINT || this._runtimeEndpoint || "";
let baseUrl = "/content/mongoshell/dist/"; let baseUrl = "/content/mongoshell/dist/";
if (this._container.serverId() === "localhost") { if (this._container.serverId() === "localhost") {

View File

@ -14,7 +14,6 @@ import SaveIcon from "../../../images/save-cosmos.svg";
import TabsBase from "./TabsBase"; import TabsBase from "./TabsBase";
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants";
import { PlatformType } from "../../PlatformType";
import { RequestOptions } from "@azure/cosmos/dist-esm"; import { RequestOptions } from "@azure/cosmos/dist-esm";
import Explorer from "../Explorer"; import Explorer from "../Explorer";
import { updateOffer } from "../../Common/dataAccess/updateOffer"; import { updateOffer } from "../../Common/dataAccess/updateOffer";
@ -494,7 +493,7 @@ export default class SettingsTab extends TabsBase implements ViewModels.WaitsFor
this.canThroughputExceedMaximumValue = ko.pureComputed<boolean>(() => { this.canThroughputExceedMaximumValue = ko.pureComputed<boolean>(() => {
const isPublicAzurePortal: boolean = const isPublicAzurePortal: boolean =
this.container.getPlatformType() === PlatformType.Portal && !this.container.isRunningOnNationalCloud(); configContext.platform === Platform.Portal && !this.container.isRunningOnNationalCloud();
const hasPartitionKey = !!this.collection.partitionKey; const hasPartitionKey = !!this.collection.partitionKey;
return isPublicAzurePortal && hasPartitionKey; return isPublicAzurePortal && hasPartitionKey;
@ -513,7 +512,7 @@ export default class SettingsTab extends TabsBase implements ViewModels.WaitsFor
return false; return false;
} }
if (this.container.getPlatformType() === PlatformType.Hosted) { if (configContext.platform === Platform.Hosted) {
return false; return false;
} }
@ -526,7 +525,7 @@ export default class SettingsTab extends TabsBase implements ViewModels.WaitsFor
}); });
this.shouldDisplayPortalUsePrompt = ko.pureComputed<boolean>( this.shouldDisplayPortalUsePrompt = ko.pureComputed<boolean>(
() => this.container.getPlatformType() === PlatformType.Hosted && !!this.collection.partitionKey () => configContext.platform === Platform.Hosted && !!this.collection.partitionKey
); );
this.minRUs = ko.computed<number>(() => { this.minRUs = ko.computed<number>(() => {
@ -597,7 +596,7 @@ export default class SettingsTab extends TabsBase implements ViewModels.WaitsFor
}); });
this.maxRUThroughputInputLimit = ko.pureComputed<number>(() => { this.maxRUThroughputInputLimit = ko.pureComputed<number>(() => {
if (this.container && this.container.getPlatformType() === PlatformType.Hosted && this.collection.partitionKey) { if (configContext.platform === Platform.Hosted && this.collection.partitionKey) {
return SharedConstants.CollectionCreation.DefaultCollectionRUs1Million; return SharedConstants.CollectionCreation.DefaultCollectionRUs1Million;
} }

View File

@ -14,7 +14,6 @@ import { readCollectionQuotaInfo } from "../../Common/dataAccess/readCollectionQ
import * as Logger from "../../Common/Logger"; import * as Logger from "../../Common/Logger";
import * as DataModels from "../../Contracts/DataModels"; import * as DataModels from "../../Contracts/DataModels";
import * as ViewModels from "../../Contracts/ViewModels"; import * as ViewModels from "../../Contracts/ViewModels";
import { PlatformType } from "../../PlatformType";
import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
import * as NotificationConsoleUtils from "../../Utils/NotificationConsoleUtils"; import * as NotificationConsoleUtils from "../../Utils/NotificationConsoleUtils";
@ -36,7 +35,7 @@ import DocumentId from "./DocumentId";
import StoredProcedure from "./StoredProcedure"; import StoredProcedure from "./StoredProcedure";
import Trigger from "./Trigger"; import Trigger from "./Trigger";
import UserDefinedFunction from "./UserDefinedFunction"; import UserDefinedFunction from "./UserDefinedFunction";
import { configContext } from "../../ConfigContext"; import { configContext, Platform } from "../../ConfigContext";
import Explorer from "../Explorer"; import Explorer from "../Explorer";
import { userContext } from "../../UserContext"; import { userContext } from "../../UserContext";
import TabsBase from "../Tabs/TabsBase"; import TabsBase from "../Tabs/TabsBase";
@ -1030,9 +1029,8 @@ export default class Collection implements ViewModels.Collection {
} }
public uploadFiles = (fileList: FileList): Q.Promise<UploadDetails> => { public uploadFiles = (fileList: FileList): Q.Promise<UploadDetails> => {
const platformType: string = PlatformType[(<any>window).dataExplorerPlatform];
// TODO: right now web worker is not working with AAD flow. Use main thread for upload for now until we have backend upload capability // TODO: right now web worker is not working with AAD flow. Use main thread for upload for now until we have backend upload capability
if (platformType === PlatformType[PlatformType.Hosted] && window.authType === AuthType.AAD) { if (configContext.platform === Platform.Hosted && window.authType === AuthType.AAD) {
return this._uploadFilesCors(fileList); return this._uploadFilesCors(fileList);
} }
const documentUploader: Worker = new UploadWorker(); const documentUploader: Worker = new UploadWorker();

View File

@ -65,7 +65,6 @@ import { BindingHandlersRegisterer } from "./Bindings/BindingHandlersRegisterer"
import * as Emulator from "./Platform/Emulator/Main"; import * as Emulator from "./Platform/Emulator/Main";
import Hosted from "./Platform/Hosted/Main"; import Hosted from "./Platform/Hosted/Main";
import * as Portal from "./Platform/Portal/Main"; import * as Portal from "./Platform/Portal/Main";
import { PlatformType } from "./PlatformType";
import { AuthType } from "./AuthType"; import { AuthType } from "./AuthType";
import { initializeIcons } from "office-ui-fabric-react/lib/Icons"; import { initializeIcons } from "office-ui-fabric-react/lib/Icons";
@ -81,8 +80,6 @@ window.authType = AuthType.AAD;
initializeConfiguration().then(config => { initializeConfiguration().then(config => {
if (config.platform === Platform.Hosted) { if (config.platform === Platform.Hosted) {
try { try {
// TODO Remove. All window variables should move to src/Config file
window.dataExplorerPlatform = PlatformType.Hosted;
Hosted.initializeExplorer().then( Hosted.initializeExplorer().then(
(explorer: Explorer) => { (explorer: Explorer) => {
applyExplorerBindings(explorer); applyExplorerBindings(explorer);
@ -108,14 +105,10 @@ initializeConfiguration().then(config => {
console.log(e); console.log(e);
} }
} else if (config.platform === Platform.Emulator) { } else if (config.platform === Platform.Emulator) {
// TODO Remove. All window variables should move to src/Config file
window.dataExplorerPlatform = PlatformType.Emulator;
window.authType = AuthType.MasterKey; window.authType = AuthType.MasterKey;
const explorer = Emulator.initializeExplorer(); const explorer = Emulator.initializeExplorer();
applyExplorerBindings(explorer); applyExplorerBindings(explorer);
} else if (config.platform === Platform.Portal) { } else if (config.platform === Platform.Portal) {
// TODO Remove. All window variables should move to src/Config file
window.dataExplorerPlatform = PlatformType.Portal;
TelemetryProcessor.trace(Action.InitializeDataExplorer, ActionModifiers.Open, {}); TelemetryProcessor.trace(Action.InitializeDataExplorer, ActionModifiers.Open, {});
const explorer = Portal.initializeExplorer(); const explorer = Portal.initializeExplorer();
TelemetryProcessor.trace(Action.InitializeDataExplorer, ActionModifiers.IFrameReady, {}); TelemetryProcessor.trace(Action.InitializeDataExplorer, ActionModifiers.IFrameReady, {});

View File

@ -1,27 +0,0 @@
import { AccountKind, TagNames, DefaultAccountExperience } from "../../Common/Constants";
import Explorer from "../../Explorer/Explorer";
export default class EmulatorExplorerFactory {
public static createExplorer(): Explorer {
const explorer: Explorer = new Explorer();
explorer.databaseAccount({
name: "",
id: "",
location: "",
type: "",
kind: AccountKind.DocumentDB,
tags: {
[TagNames.defaultExperience]: DefaultAccountExperience.DocumentDB
},
properties: {
documentEndpoint: "",
tableEndpoint: "",
gremlinEndpoint: "",
cassandraEndpoint: ""
}
});
explorer.isAccountReady(true);
return explorer;
}
}

View File

@ -1,6 +1,24 @@
import EmulatorExplorerFactory from "./ExplorerFactory";
import Explorer from "../../Explorer/Explorer"; import Explorer from "../../Explorer/Explorer";
import { AccountKind, DefaultAccountExperience, TagNames } from "../../Common/Constants";
export function initializeExplorer(): Explorer { export function initializeExplorer(): Explorer {
return EmulatorExplorerFactory.createExplorer(); const explorer = new Explorer();
explorer.databaseAccount({
name: "",
id: "",
location: "",
type: "",
kind: AccountKind.DocumentDB,
tags: {
[TagNames.defaultExperience]: DefaultAccountExperience.DocumentDB
},
properties: {
documentEndpoint: "",
tableEndpoint: "",
gremlinEndpoint: "",
cassandraEndpoint: ""
}
});
explorer.isAccountReady(true);
return explorer;
} }

View File

@ -1,15 +0,0 @@
import Explorer from "../../Explorer/Explorer";
export default class HostedExplorerFactory {
public createExplorer(): Explorer {
const explorer = new Explorer();
return explorer;
}
public static reInitializeDocumentClientUtilityForExplorer(explorer: Explorer): void {
if (!!explorer) {
explorer.notificationConsoleData([]);
}
}
}

View File

@ -1,7 +1,5 @@
import * as Constants from "../../Common/Constants"; import * as Constants from "../../Common/Constants";
import * as ViewModels from "../../Contracts/ViewModels";
import AuthHeadersUtil from "./Authorization"; import AuthHeadersUtil from "./Authorization";
import HostedExplorerFactory from "./ExplorerFactory";
import Q from "q"; import Q from "q";
import { import {
AccessInputMetadata, AccessInputMetadata,
@ -211,7 +209,7 @@ export default class Main {
Main._getAccessInputMetadata(Main._encryptedToken).then( Main._getAccessInputMetadata(Main._encryptedToken).then(
() => { () => {
if (explorer.isConnectExplorerVisible()) { if (explorer.isConnectExplorerVisible()) {
HostedExplorerFactory.reInitializeDocumentClientUtilityForExplorer(explorer); explorer.notificationConsoleData([]);
explorer.hideConnectExplorerForm(); explorer.hideConnectExplorerForm();
} }
@ -378,8 +376,7 @@ export default class Main {
} }
private static _instantiateExplorer(): Explorer { private static _instantiateExplorer(): Explorer {
const hostedExplorerFactory = new HostedExplorerFactory(); const explorer = new Explorer();
const explorer = hostedExplorerFactory.createExplorer();
// workaround to resolve cyclic refs with view // workaround to resolve cyclic refs with view
explorer.renewExplorerShareAccess = Main.renewExplorerAccess; explorer.renewExplorerShareAccess = Main.renewExplorerAccess;
window.addEventListener("message", explorer.handleMessage.bind(explorer), false); window.addEventListener("message", explorer.handleMessage.bind(explorer), false);
@ -483,7 +480,7 @@ export default class Main {
Main._accessInputMetadata = Main._getAccessInputMetadataFromAccountEndpoint(properties.accountEndpoint); Main._accessInputMetadata = Main._getAccessInputMetadataFromAccountEndpoint(properties.accountEndpoint);
if (explorer.isConnectExplorerVisible()) { if (explorer.isConnectExplorerVisible()) {
HostedExplorerFactory.reInitializeDocumentClientUtilityForExplorer(explorer); explorer.notificationConsoleData([]);
explorer.hideConnectExplorerForm(); explorer.hideConnectExplorerForm();
} }
@ -570,7 +567,7 @@ export default class Main {
this._explorer.hideConnectExplorerForm(); this._explorer.hideConnectExplorerForm();
const masterKey = Main._getMasterKey(keys); const masterKey = Main._getMasterKey(keys);
HostedExplorerFactory.reInitializeDocumentClientUtilityForExplorer(this._explorer); this._explorer.notificationConsoleData([]);
Main._setExplorerReady(this._explorer, masterKey, account, authorizationToken); Main._setExplorerReady(this._explorer, masterKey, account, authorizationToken);
} }

View File

@ -1,9 +0,0 @@
import Explorer from "../../Explorer/Explorer";
export default class PortalExplorerFactory {
public createExplorer(): Explorer {
var explorer = new Explorer();
return explorer;
}
}

View File

@ -1,10 +1,8 @@
import PortalExplorerFactory from "./ExplorerFactory";
import "../../Explorer/Tables/DataTable/DataTableBindingManager"; import "../../Explorer/Tables/DataTable/DataTableBindingManager";
import Explorer from "../../Explorer/Explorer"; import Explorer from "../../Explorer/Explorer";
export function initializeExplorer(): Explorer { export function initializeExplorer(): Explorer {
const portalExplorerFactory = new PortalExplorerFactory(); const explorer = new Explorer();
const explorer = portalExplorerFactory.createExplorer();
window.addEventListener("message", explorer.handleMessage.bind(explorer), false); window.addEventListener("message", explorer.handleMessage.bind(explorer), false);
return explorer; return explorer;

View File

@ -1,10 +0,0 @@
// TODO: Should be owned by parent iframe
export enum PlatformType {
// RuntimeProxy and MongoEmulator no longer used, but kept here to preserve enum structure
RuntimeProxy,
MongoEmulator,
Hosted,
Emulator,
Portal
}

View File

@ -1,17 +1,17 @@
import { configContext, Platform } from "../ConfigContext";
import * as ViewModels from "../Contracts/ViewModels"; import * as ViewModels from "../Contracts/ViewModels";
import { PlatformType } from "../PlatformType";
import { PortalTokenProvider } from "./PortalTokenProvider"; import { PortalTokenProvider } from "./PortalTokenProvider";
export class TokenProviderFactory { export class TokenProviderFactory {
private constructor() {} private constructor() {}
public static create(): ViewModels.TokenProvider { public static create(): ViewModels.TokenProvider {
const platformType = window.dataExplorerPlatform; const platformType = configContext.platform;
switch (platformType) { switch (platformType) {
case PlatformType.Portal: case Platform.Portal:
case PlatformType.Hosted: case Platform.Hosted:
return new PortalTokenProvider(); return new PortalTokenProvider();
case PlatformType.Emulator: case Platform.Emulator:
default: default:
// should never get into this state // should never get into this state
throw new Error(`Unknown platform ${platformType}`); throw new Error(`Unknown platform ${platformType}`);

View File

@ -1,9 +1,9 @@
import * as Constants from "../Common/Constants"; import * as Constants from "../Common/Constants";
import * as AuthorizationUtils from "./AuthorizationUtils"; import * as AuthorizationUtils from "./AuthorizationUtils";
import { AuthType } from "../AuthType"; import { AuthType } from "../AuthType";
import { PlatformType } from "../PlatformType";
import Explorer from "../Explorer/Explorer"; import Explorer from "../Explorer/Explorer";
import { updateUserContext } from "../UserContext"; import { updateUserContext } from "../UserContext";
import { Platform, updateConfigContext } from "../ConfigContext";
jest.mock("../Explorer/Explorer"); jest.mock("../Explorer/Explorer");
describe("AuthorizationUtils", () => { describe("AuthorizationUtils", () => {
@ -65,12 +65,13 @@ describe("AuthorizationUtils", () => {
beforeEach(() => { beforeEach(() => {
jest.clearAllMocks(); jest.clearAllMocks();
window.dataExplorer = explorer; window.dataExplorer = explorer;
window.dataExplorerPlatform = PlatformType.Hosted; updateConfigContext({
platform: Platform.Hosted
});
}); });
afterEach(() => { afterEach(() => {
window.dataExplorer = undefined; window.dataExplorer = undefined;
window.dataExplorerPlatform = undefined;
}); });
it("should not open token renewal prompt if status code is undefined", () => { it("should not open token renewal prompt if status code is undefined", () => {
@ -89,7 +90,9 @@ describe("AuthorizationUtils", () => {
}); });
it("should not open token renewal prompt if running on a different platform", () => { it("should not open token renewal prompt if running on a different platform", () => {
window.dataExplorerPlatform = PlatformType.Portal; updateConfigContext({
platform: Platform.Portal
});
AuthorizationUtils.displayTokenRenewalPromptForStatus(Constants.HttpStatusCodes.Unauthorized); AuthorizationUtils.displayTokenRenewalPromptForStatus(Constants.HttpStatusCodes.Unauthorized);
expect(explorer.displayGuestAccessTokenRenewalPrompt).not.toHaveBeenCalled(); expect(explorer.displayGuestAccessTokenRenewalPrompt).not.toHaveBeenCalled();
}); });

View File

@ -3,8 +3,7 @@ import * as ViewModels from "../Contracts/ViewModels";
import AuthHeadersUtil from "../Platform/Hosted/Authorization"; import AuthHeadersUtil from "../Platform/Hosted/Authorization";
import { AuthType } from "../AuthType"; import { AuthType } from "../AuthType";
import * as Logger from "../Common/Logger"; import * as Logger from "../Common/Logger";
import { PlatformType } from "../PlatformType"; import { configContext, Platform } from "../ConfigContext";
import { configContext } from "../ConfigContext";
import { userContext } from "../UserContext"; import { userContext } from "../UserContext";
export function getAuthorizationHeader(): ViewModels.AuthorizationTokenHeaderMetadata { export function getAuthorizationHeader(): ViewModels.AuthorizationTokenHeaderMetadata {
@ -57,13 +56,12 @@ export function decryptJWTToken(token: string) {
} }
export function displayTokenRenewalPromptForStatus(httpStatusCode: number): void { export function displayTokenRenewalPromptForStatus(httpStatusCode: number): void {
const platformType = window.dataExplorerPlatform;
const explorer = window.dataExplorer; const explorer = window.dataExplorer;
if ( if (
httpStatusCode == null || httpStatusCode == null ||
httpStatusCode != Constants.HttpStatusCodes.Unauthorized || httpStatusCode != Constants.HttpStatusCodes.Unauthorized ||
platformType !== PlatformType.Hosted configContext.platform !== Platform.Hosted
) { ) {
return; return;
} }

2
src/global.d.ts vendored
View File

@ -1,11 +1,9 @@
import { AuthType } from "./AuthType"; import { AuthType } from "./AuthType";
import { PlatformType } from "./PlatformType";
import Explorer from "./Explorer/Explorer"; import Explorer from "./Explorer/Explorer";
declare global { declare global {
interface Window { interface Window {
authType: AuthType; authType: AuthType;
dataExplorerPlatform: PlatformType;
dataExplorer: Explorer; dataExplorer: Explorer;
__REACT_DEVTOOLS_GLOBAL_HOOK__: any; __REACT_DEVTOOLS_GLOBAL_HOOK__: any;
$: any; $: any;

View File

@ -56,7 +56,6 @@
"./src/GitHub/GitHubConnector.ts", "./src/GitHub/GitHubConnector.ts",
"./src/Index.ts", "./src/Index.ts",
"./src/NotebookWorkspaceManager/NotebookWorkspaceResourceProviderMockClients.ts", "./src/NotebookWorkspaceManager/NotebookWorkspaceResourceProviderMockClients.ts",
"./src/PlatformType.ts",
"./src/ReactDevTools.ts", "./src/ReactDevTools.ts",
"./src/ResourceProvider/IResourceProviderClient.ts", "./src/ResourceProvider/IResourceProviderClient.ts",
"./src/Shared/ExplorerSettings.ts", "./src/Shared/ExplorerSettings.ts",