From aab624e2419e9ff73aba45141a666fbbfa214a4f Mon Sep 17 00:00:00 2001 From: Hardikkumar Nai <80053762+hardiknai-techm@users.noreply.github.com> Date: Wed, 5 May 2021 09:31:13 +0530 Subject: [PATCH 1/6] Create End to End Graph Test (#745) --- .github/workflows/ci.yml | 1 + package.json | 2 +- test/graph/container.spec.ts | 37 ++++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 test/graph/container.spec.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 76bb1325e..d63657b1d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -138,6 +138,7 @@ jobs: matrix: test-file: - ./test/cassandra/container.spec.ts + - ./test/graph/container.spec.ts - ./test/sql/container.spec.ts - ./test/mongo/container.spec.ts - ./test/selfServe/selfServeExample.spec.ts diff --git a/package.json b/package.json index 4ca769a57..8a6d354f1 100644 --- a/package.json +++ b/package.json @@ -191,7 +191,7 @@ "pack:fast": "node --max_old_space_size=10196 ./node_modules/webpack/bin/webpack.js --mode development --progress", "copyToConsumers": "node copyToConsumers", "test": "rimraf coverage && jest", - "test:e2e": "jest -c ./jest.config.e2e.js --detectOpenHandles", + "test:e2e": "jest -c ./jest.config.playwright.js --detectOpenHandles", "watch": "npm run start", "wait-for-server": "wait-on -t 240000 -i 5000 -v https-get://0.0.0.0:1234/", "build:ase": "gulp build:ase", diff --git a/test/graph/container.spec.ts b/test/graph/container.spec.ts new file mode 100644 index 000000000..d5ee55e1e --- /dev/null +++ b/test/graph/container.spec.ts @@ -0,0 +1,37 @@ +import { jest } from "@jest/globals"; +import "expect-playwright"; +import { safeClick } from "../utils/safeClick"; +import { generateDatabaseNameWithTimestamp, generateUniqueName } from "../utils/shared"; +jest.setTimeout(240000); + +test("Graph CRUD", async () => { + const databaseId = generateDatabaseNameWithTimestamp(); + const containerId = generateUniqueName("container"); + + await page.goto("https://localhost:1234/testExplorer.html?accountName=portal-gremlin-runner"); + await page.waitForSelector("iframe"); + const explorer = page.frame({ + name: "explorer", + }); + + // Create new database and graph + await explorer.click('[data-test="New Graph"]'); + await explorer.fill('[aria-label="New database id"]', databaseId); + await explorer.fill('[aria-label="Graph id"]', containerId); + await explorer.fill('[aria-label="Partition key"]', "/pk"); + await explorer.click("#sidePanelOkButton"); + await safeClick(explorer, `.nodeItem >> text=${databaseId}`); + await safeClick(explorer, `.nodeItem >> text=${containerId}`); + // Delete database and graph + await safeClick(explorer, `[data-test="${containerId}"] [aria-label="More"]`); + await safeClick(explorer, 'button[role="menuitem"]:has-text("Delete Graph")'); + await explorer.fill('text=* Confirm by typing the graph id >> input[type="text"]', containerId); + await explorer.click('[aria-label="Submit"]'); + await explorer.click(`[data-test="${databaseId}"] [aria-label="More"]`); + await explorer.click('button[role="menuitem"]:has-text("Delete Database")'); + await explorer.click('text=* Confirm by typing the database id >> input[type="text"]'); + await explorer.fill('text=* Confirm by typing the database id >> input[type="text"]', databaseId); + await explorer.click("#sidePanelOkButton"); + await expect(explorer).not.toHaveText(".dataResourceTree", databaseId); + await expect(explorer).not.toHaveText(".dataResourceTree", containerId); +}); From d1d28885d02aac7fd6b41438084cbb936522084b Mon Sep 17 00:00:00 2001 From: Tanuj Mittal Date: Tue, 4 May 2021 22:42:27 -0700 Subject: [PATCH 2/6] Use CellOutputViewer for SchemaAnalyzer (#747) --- src/CellOutputViewer/CellOutputViewer.less | 10 ++ src/CellOutputViewer/CellOutputViewer.tsx | 44 +++---- .../outputs/SandboxOutputs.tsx | 8 +- .../SchemaAnalyzerComponent.less | 7 +- .../SchemaAnalyzerComponent.tsx | 122 +++++++++--------- 5 files changed, 97 insertions(+), 94 deletions(-) create mode 100644 src/CellOutputViewer/CellOutputViewer.less diff --git a/src/CellOutputViewer/CellOutputViewer.less b/src/CellOutputViewer/CellOutputViewer.less new file mode 100644 index 000000000..2e79facc7 --- /dev/null +++ b/src/CellOutputViewer/CellOutputViewer.less @@ -0,0 +1,10 @@ +.schema-analyzer-cell-outputs { + padding: 10px; +} + +.schema-analyzer-cell-output { + margin-bottom: 20px; + padding: 10px; + border-radius: 2px; + box-shadow: rgba(0, 0, 0, 13%) 0px 1.6px 3.6px 0px, rgba(0, 0, 0, 11%) 0px 0.3px 0.9px 0px; +} \ No newline at end of file diff --git a/src/CellOutputViewer/CellOutputViewer.tsx b/src/CellOutputViewer/CellOutputViewer.tsx index d5b8eb933..3ddd72ca8 100644 --- a/src/CellOutputViewer/CellOutputViewer.tsx +++ b/src/CellOutputViewer/CellOutputViewer.tsx @@ -11,13 +11,14 @@ import * as ReactDOM from "react-dom"; import "../../externals/iframeResizer.contentWindow.min.js"; // Required for iFrameResizer to work import "../Explorer/Notebook/NotebookRenderer/base.css"; import "../Explorer/Notebook/NotebookRenderer/default.css"; +import "./CellOutputViewer.less"; import { TransformMedia } from "./TransformMedia"; export interface CellOutputViewerProps { id: string; contentRef: ContentRef; - hidden: boolean; - expanded: boolean; + outputsContainerClassName: string; + outputClassName: string; outputs: OnDiskOutput[]; onMetadataChange: (metadata: JSONObject, mediaType: string, index?: number) => void; } @@ -34,27 +35,26 @@ const onInit = async () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const props = (event as any).data as CellOutputViewerProps; const outputs = ( -
+
{props.outputs?.map((output, index) => ( - - props.onMetadataChange(metadata, mediaType, index)} - /> - props.onMetadataChange(metadata, mediaType, index)} - /> - - - +
+ + props.onMetadataChange(metadata, mediaType, index)} + /> + props.onMetadataChange(metadata, mediaType, index)} + /> + + + +
))}
); diff --git a/src/Explorer/Notebook/NotebookRenderer/outputs/SandboxOutputs.tsx b/src/Explorer/Notebook/NotebookRenderer/outputs/SandboxOutputs.tsx index 40f42fd35..a9cf76757 100644 --- a/src/Explorer/Notebook/NotebookRenderer/outputs/SandboxOutputs.tsx +++ b/src/Explorer/Notebook/NotebookRenderer/outputs/SandboxOutputs.tsx @@ -15,6 +15,8 @@ import { CellOutputViewerProps } from "../../../../CellOutputViewer/CellOutputVi interface ComponentProps { id: string; contentRef: ContentRef; + outputsContainerClassName?: string; + outputClassName?: string; } interface StateProps { @@ -59,8 +61,10 @@ export class SandboxOutputs extends React.PureComponent outputToJS(output)), onMetadataChange: this.props.onMetadataChange, }; diff --git a/src/Explorer/Notebook/SchemaAnalyzerComponent/SchemaAnalyzerComponent.less b/src/Explorer/Notebook/SchemaAnalyzerComponent/SchemaAnalyzerComponent.less index f98d9729a..1a077c600 100644 --- a/src/Explorer/Notebook/SchemaAnalyzerComponent/SchemaAnalyzerComponent.less +++ b/src/Explorer/Notebook/SchemaAnalyzerComponent/SchemaAnalyzerComponent.less @@ -1,10 +1,5 @@ -.shemaAnalyzerComponent { +.schemaAnalyzerComponent { width: 100%; height: 100%; overflow-y: auto; -} - -.schemaAnalyzerCard { - max-width: 4096px; - width: 100%; } \ No newline at end of file diff --git a/src/Explorer/Notebook/SchemaAnalyzerComponent/SchemaAnalyzerComponent.tsx b/src/Explorer/Notebook/SchemaAnalyzerComponent/SchemaAnalyzerComponent.tsx index cf53bf2db..1836a8a14 100644 --- a/src/Explorer/Notebook/SchemaAnalyzerComponent/SchemaAnalyzerComponent.tsx +++ b/src/Explorer/Notebook/SchemaAnalyzerComponent/SchemaAnalyzerComponent.tsx @@ -1,14 +1,12 @@ import { ImmutableOutput } from "@nteract/commutable"; import { actions, AppState, ContentRef, KernelRef, selectors } from "@nteract/core"; -import { KernelOutputError, Output, StreamText } from "@nteract/outputs"; -import TransformMedia from "@nteract/stateful-components/lib/outputs/transform-media"; -import { Card } from "@uifabric/react-cards"; import Immutable from "immutable"; import { FontIcon, PrimaryButton, Spinner, SpinnerSize, Stack, Text, TextField } from "office-ui-fabric-react"; import * as React from "react"; import { connect } from "react-redux"; import { Dispatch } from "redux"; import loadTransform from "../NotebookComponent/loadTransform"; +import SandboxOutputs from "../NotebookRenderer/outputs/SandboxOutputs"; import "./SchemaAnalyzerComponent.less"; interface SchemaAnalyzerComponentPureProps { @@ -91,70 +89,66 @@ export class SchemaAnalyzerComponent extends React.Component< const showSchemaOutput = isKernelIdle && outputs.size > 0; return ( - - - - - - - - - - - - - {showSchemaOutput ? ( - outputs.map((output, index) => ( - - - - - - - - - - - )) - ) : this.state.isFiltering ? ( - - {isKernelBusy && } +
+ + + + + + + + + + - ) : ( - <> + + {showSchemaOutput ? ( + + ) : this.state.isFiltering ? ( - + {isKernelBusy && } - - Explore your schema - - - - Quickly visualize your schema to infer the frequency, types and ranges of fields in your data set. - - - - - - {isKernelBusy && } - - )} - + ) : ( + <> + + + + + Explore your schema + + + + Quickly visualize your schema to infer the frequency, types and ranges of fields in your data set. + + + + + + {isKernelBusy && } + + )} + +
); } } From fdd12b41c49364fd9f064379af0c2ad33d16f360 Mon Sep 17 00:00:00 2001 From: Hardikkumar Nai <80053762+hardiknai-techm@users.noreply.github.com> Date: Wed, 5 May 2021 23:30:01 +0530 Subject: [PATCH 3/6] Remove Explorer.defaultExperience (#680) Co-authored-by: Steve Faulkner --- src/Common/Constants.ts | 22 +--- src/Common/CosmosClient.test.ts | 3 +- src/Contracts/DataModels.ts | 1 - .../NotebookTerminalComponent.test.tsx | 4 - .../ScaleComponent.test.tsx | 13 +- .../SettingsComponent.test.tsx.snap | 4 - .../ContainerSampleGenerator.test.ts | 1 - src/Explorer/Explorer.tsx | 16 --- src/Explorer/Panes/AddCollectionPane.test.ts | 11 +- src/Explorer/Panes/AddDatabasePane.test.ts | 2 - .../GitHubReposPanel.test.tsx.snap | 1 - .../StringInputPane.test.tsx.snap | 1 - ...eteDatabaseConfirmationPanel.test.tsx.snap | 1 - src/Explorer/Tabs/DocumentsTab.test.ts | 10 +- src/Explorer/Tabs/NotebookTabBase.ts | 3 +- src/Explorer/Tabs/TabsManager.test.ts | 1 - src/Explorer/Tree/Database.test.ts | 9 +- src/GitHub/GitHubOAuthService.test.ts | 1 - src/Juno/JunoClient.test.ts | 1 - src/Platform/Emulator/emulatorAccount.tsx | 5 +- src/Platform/Hosted/Authorization.ts | 4 +- src/Platform/Hosted/HostedUtils.ts | 21 ++-- src/Shared/DefaultExperienceUtility.test.ts | 94 +++----------- src/Shared/DefaultExperienceUtility.ts | 115 +++--------------- src/UserContext.ts | 2 +- src/hooks/useKnockoutExplorer.ts | 8 +- 26 files changed, 77 insertions(+), 277 deletions(-) diff --git a/src/Common/Constants.ts b/src/Common/Constants.ts index e6b545793..097c4237f 100644 --- a/src/Common/Constants.ts +++ b/src/Common/Constants.ts @@ -65,28 +65,18 @@ export class ClientDefaults { public static readonly arcadiaTokenRefreshIntervalPaddingMs: number = 2000; } -export class AccountKind { - public static DocumentDB: string = "DocumentDB"; - public static MongoDB: string = "MongoDB"; - public static Parse: string = "Parse"; - public static GlobalDocumentDB: string = "GlobalDocumentDB"; - public static Default: string = AccountKind.DocumentDB; +export enum AccountKind { + DocumentDB = "DocumentDB", + MongoDB = "MongoDB", + Parse = "Parse", + GlobalDocumentDB = "GlobalDocumentDB", + Default = "DocumentDB", } export class CorrelationBackend { public static Url: string = "https://aka.ms/cosmosdbanalytics"; } -export class DefaultAccountExperience { - public static DocumentDB: string = "DocumentDB"; - public static Graph: string = "Graph"; - public static MongoDB: string = "MongoDB"; - public static ApiForMongoDB: string = "Azure Cosmos DB for MongoDB API"; - public static Table: string = "Table"; - public static Cassandra: string = "Cassandra"; - public static Default: string = DefaultAccountExperience.DocumentDB; -} - export class CapabilityNames { public static EnableTable: string = "EnableTable"; public static EnableGremlin: string = "EnableGremlin"; diff --git a/src/Common/CosmosClient.test.ts b/src/Common/CosmosClient.test.ts index ea91efa53..96505f208 100644 --- a/src/Common/CosmosClient.test.ts +++ b/src/Common/CosmosClient.test.ts @@ -1,5 +1,5 @@ import { ResourceType } from "@azure/cosmos/dist-esm/common/constants"; -import { configContext, Platform, updateConfigContext, resetConfigContext } from "../ConfigContext"; +import { Platform, resetConfigContext, updateConfigContext } from "../ConfigContext"; import { updateUserContext } from "../UserContext"; import { endpoint, getTokenFromAuthService, requestPlugin, tokenProvider } from "./CosmosClient"; @@ -91,7 +91,6 @@ describe("endpoint", () => { location: "foo", type: "foo", kind: "foo", - tags: [], properties: { documentEndpoint: "bar", gremlinEndpoint: "foo", diff --git a/src/Contracts/DataModels.ts b/src/Contracts/DataModels.ts index 4e3085b45..aece6a04a 100644 --- a/src/Contracts/DataModels.ts +++ b/src/Contracts/DataModels.ts @@ -4,7 +4,6 @@ export interface DatabaseAccount { location: string; type: string; kind: string; - tags: any; properties: DatabaseAccountExtendedProperties; } diff --git a/src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx b/src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx index cca31f60a..627041b38 100644 --- a/src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx +++ b/src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx @@ -13,7 +13,6 @@ const createTestDatabaseAccount = (): DataModels.DatabaseAccount => { gremlinEndpoint: null, tableEndpoint: null, }, - tags: "testTags", type: "testType", }; }; @@ -30,7 +29,6 @@ const createTestMongo32DatabaseAccount = (): DataModels.DatabaseAccount => { gremlinEndpoint: null, tableEndpoint: null, }, - tags: "testTags", type: "testType", }; }; @@ -48,7 +46,6 @@ const createTestMongo36DatabaseAccount = (): DataModels.DatabaseAccount => { tableEndpoint: null, mongoEndpoint: "https://testMongoEndpoint.azure.com/", }, - tags: "testTags", type: "testType", }; }; @@ -65,7 +62,6 @@ const createTestCassandraDatabaseAccount = (): DataModels.DatabaseAccount => { gremlinEndpoint: null, tableEndpoint: null, }, - tags: "testTags", type: "testType", }; }; diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.test.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.test.tsx index de31b2d5f..cead8bdae 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.test.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.test.tsx @@ -1,14 +1,14 @@ import { shallow } from "enzyme"; +import ko from "knockout"; import React from "react"; -import { ScaleComponent, ScaleComponentProps } from "./ScaleComponent"; -import { container, collection } from "../TestUtils"; -import { ThroughputInputAutoPilotV3Component } from "./ThroughputInputComponents/ThroughputInputAutoPilotV3Component"; -import Explorer from "../../../Explorer"; import * as Constants from "../../../../Common/Constants"; import * as DataModels from "../../../../Contracts/DataModels"; -import { throughputUnit } from "../SettingsRenderUtils"; import * as SharedConstants from "../../../../Shared/Constants"; -import ko from "knockout"; +import Explorer from "../../../Explorer"; +import { throughputUnit } from "../SettingsRenderUtils"; +import { collection, container } from "../TestUtils"; +import { ScaleComponent, ScaleComponentProps } from "./ScaleComponent"; +import { ThroughputInputAutoPilotV3Component } from "./ThroughputInputComponents/ThroughputInputAutoPilotV3Component"; describe("ScaleComponent", () => { const nonNationalCloudContainer = new Explorer(); @@ -87,7 +87,6 @@ describe("ScaleComponent", () => { location: undefined, type: undefined, kind: "documentdb", - tags: undefined, properties: { documentEndpoint: undefined, tableEndpoint: undefined, diff --git a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap index f116d83f7..d7279c245 100644 --- a/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap +++ b/src/Explorer/Controls/Settings/__snapshots__/SettingsComponent.test.tsx.snap @@ -424,7 +424,6 @@ exports[`SettingsComponent renders 1`] = ` }, "databaseAccount": [Function], "databases": [Function], - "defaultExperience": [Function], "deleteCollectionText": [Function], "deleteDatabaseText": [Function], "gitHubClient": GitHubClient { @@ -1710,7 +1709,6 @@ exports[`SettingsComponent renders 1`] = ` }, "databaseAccount": [Function], "databases": [Function], - "defaultExperience": [Function], "deleteCollectionText": [Function], "deleteDatabaseText": [Function], "gitHubClient": GitHubClient { @@ -3009,7 +3007,6 @@ exports[`SettingsComponent renders 1`] = ` }, "databaseAccount": [Function], "databases": [Function], - "defaultExperience": [Function], "deleteCollectionText": [Function], "deleteDatabaseText": [Function], "gitHubClient": GitHubClient { @@ -4295,7 +4292,6 @@ exports[`SettingsComponent renders 1`] = ` }, "databaseAccount": [Function], "databases": [Function], - "defaultExperience": [Function], "deleteCollectionText": [Function], "deleteDatabaseText": [Function], "gitHubClient": GitHubClient { diff --git a/src/Explorer/DataSamples/ContainerSampleGenerator.test.ts b/src/Explorer/DataSamples/ContainerSampleGenerator.test.ts index fdab3a30d..75d059dc3 100644 --- a/src/Explorer/DataSamples/ContainerSampleGenerator.test.ts +++ b/src/Explorer/DataSamples/ContainerSampleGenerator.test.ts @@ -79,7 +79,6 @@ describe("ContainerSampleGenerator", () => { location: "foo", type: "foo", kind: "foo", - tags: [], properties: { documentEndpoint: "bar", gremlinEndpoint: "foo", diff --git a/src/Explorer/Explorer.tsx b/src/Explorer/Explorer.tsx index 5b368781f..2b6292e44 100644 --- a/src/Explorer/Explorer.tsx +++ b/src/Explorer/Explorer.tsx @@ -115,11 +115,6 @@ export default class Explorer { * */ public databaseAccount: ko.Observable; public collectionCreationDefaults: ViewModels.CollectionCreationDefaults = SharedConstants.CollectionCreationDefaults; - /** - * @deprecated - * Use userContext.apiType instead - * */ - public defaultExperience: ko.Observable; public isFixedCollectionWithSharedThroughputSupported: ko.Computed; /** * @deprecated @@ -376,17 +371,6 @@ export default class Explorer { bounds: splitterBounds, direction: SplitterDirection.Vertical, }); - this.defaultExperience = ko.observable(); - // this.databaseAccount.subscribe((databaseAccount) => { - // const defaultExperience: string = DefaultExperienceUtility.getDefaultExperienceFromDatabaseAccount( - // databaseAccount - // ); - // this.defaultExperience(defaultExperience); - // // TODO. Remove this entirely - // updateUserContext({ - // apiType: DefaultExperienceUtility.mapDefaultExperienceStringToEnum(defaultExperience), - // }); - // }); this.isFixedCollectionWithSharedThroughputSupported = ko.computed(() => { if (userContext.features.enableFixedCollectionWithSharedThroughput) { diff --git a/src/Explorer/Panes/AddCollectionPane.test.ts b/src/Explorer/Panes/AddCollectionPane.test.ts index 887f8c5bb..2465074ee 100644 --- a/src/Explorer/Panes/AddCollectionPane.test.ts +++ b/src/Explorer/Panes/AddCollectionPane.test.ts @@ -20,7 +20,6 @@ describe("Add Collection Pane", () => { enableFreeTier: false, }, type: undefined, - tags: [], }; const mockFreeTierDatabaseAccount: DatabaseAccount = { @@ -36,7 +35,6 @@ describe("Add Collection Pane", () => { enableFreeTier: true, }, type: undefined, - tags: [], }; beforeEach(() => { @@ -44,7 +42,13 @@ describe("Add Collection Pane", () => { }); it("should be true if graph API and partition key is not /id nor /label", () => { - explorer.defaultExperience(Constants.DefaultAccountExperience.Graph.toLowerCase()); + updateUserContext({ + databaseAccount: { + properties: { + capabilities: [{ name: "EnableGremlin" }], + }, + } as DatabaseAccount, + }); const addCollectionPane = explorer.addCollectionPane as AddCollectionPane; addCollectionPane.partitionKey("/blah"); expect(addCollectionPane.isValid()).toBe(true); @@ -58,7 +62,6 @@ describe("Add Collection Pane", () => { }, } as DatabaseAccount, }); - const addCollectionPane = explorer.addCollectionPane as AddCollectionPane; addCollectionPane.partitionKey("/id"); expect(addCollectionPane.isValid()).toBe(false); diff --git a/src/Explorer/Panes/AddDatabasePane.test.ts b/src/Explorer/Panes/AddDatabasePane.test.ts index 711a9cfc1..5e8072884 100644 --- a/src/Explorer/Panes/AddDatabasePane.test.ts +++ b/src/Explorer/Panes/AddDatabasePane.test.ts @@ -21,7 +21,6 @@ describe("Add Database Pane", () => { enableFreeTier: false, }, type: undefined, - tags: [], }; const mockFreeTierDatabaseAccount: DatabaseAccount = { @@ -37,7 +36,6 @@ describe("Add Database Pane", () => { enableFreeTier: true, }, type: undefined, - tags: [], }; beforeEach(() => { diff --git a/src/Explorer/Panes/GitHubReposPanel/__snapshots__/GitHubReposPanel.test.tsx.snap b/src/Explorer/Panes/GitHubReposPanel/__snapshots__/GitHubReposPanel.test.tsx.snap index 6b308f110..71b70e0ed 100644 --- a/src/Explorer/Panes/GitHubReposPanel/__snapshots__/GitHubReposPanel.test.tsx.snap +++ b/src/Explorer/Panes/GitHubReposPanel/__snapshots__/GitHubReposPanel.test.tsx.snap @@ -413,7 +413,6 @@ exports[`GitHub Repos Panel should render Default properly 1`] = ` }, "databaseAccount": [Function], "databases": [Function], - "defaultExperience": [Function], "deleteCollectionText": [Function], "deleteDatabaseText": [Function], "gitHubClient": GitHubClient { diff --git a/src/Explorer/Panes/StringInputPane/__snapshots__/StringInputPane.test.tsx.snap b/src/Explorer/Panes/StringInputPane/__snapshots__/StringInputPane.test.tsx.snap index 0e664fad9..30051a5d8 100644 --- a/src/Explorer/Panes/StringInputPane/__snapshots__/StringInputPane.test.tsx.snap +++ b/src/Explorer/Panes/StringInputPane/__snapshots__/StringInputPane.test.tsx.snap @@ -403,7 +403,6 @@ exports[`StringInput Pane should render Create new directory properly 1`] = ` }, "databaseAccount": [Function], "databases": [Function], - "defaultExperience": [Function], "deleteCollectionText": [Function], "deleteDatabaseText": [Function], "gitHubClient": GitHubClient { diff --git a/src/Explorer/Panes/__snapshots__/DeleteDatabaseConfirmationPanel.test.tsx.snap b/src/Explorer/Panes/__snapshots__/DeleteDatabaseConfirmationPanel.test.tsx.snap index 46710be04..dd8b81d1a 100644 --- a/src/Explorer/Panes/__snapshots__/DeleteDatabaseConfirmationPanel.test.tsx.snap +++ b/src/Explorer/Panes/__snapshots__/DeleteDatabaseConfirmationPanel.test.tsx.snap @@ -401,7 +401,6 @@ exports[`Delete Database Confirmation Pane submit() Should call delete database }, "databaseAccount": [Function], "databases": [Function], - "defaultExperience": [Function], "deleteCollectionText": [Function], "deleteDatabaseText": [Function], "gitHubClient": GitHubClient { diff --git a/src/Explorer/Tabs/DocumentsTab.test.ts b/src/Explorer/Tabs/DocumentsTab.test.ts index 8ebb6a8ad..6321a4afb 100644 --- a/src/Explorer/Tabs/DocumentsTab.test.ts +++ b/src/Explorer/Tabs/DocumentsTab.test.ts @@ -1,5 +1,5 @@ import * as ko from "knockout"; -import * as Constants from "../../Common/Constants"; +import { DatabaseAccount } from "../../Contracts/DataModels"; import * as ViewModels from "../../Contracts/ViewModels"; import { updateUserContext } from "../../UserContext"; import { CommandButtonComponentProps } from "../Controls/CommandButton/CommandButtonComponent"; @@ -27,7 +27,13 @@ describe("Documents tab", () => { describe("showPartitionKey", () => { const explorer = new Explorer(); const mongoExplorer = new Explorer(); - mongoExplorer.defaultExperience(Constants.DefaultAccountExperience.MongoDB); + updateUserContext({ + databaseAccount: { + properties: { + capabilities: [{ name: "EnableGremlin" }], + }, + } as DatabaseAccount, + }); const collectionWithoutPartitionKey = ({ id: ko.observable("foo"), diff --git a/src/Explorer/Tabs/NotebookTabBase.ts b/src/Explorer/Tabs/NotebookTabBase.ts index e74f12b86..096328fda 100644 --- a/src/Explorer/Tabs/NotebookTabBase.ts +++ b/src/Explorer/Tabs/NotebookTabBase.ts @@ -3,6 +3,7 @@ import * as DataModels from "../../Contracts/DataModels"; import * as ViewModels from "../../Contracts/ViewModels"; import { ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; +import { userContext } from "../../UserContext"; import Explorer from "../Explorer"; import { NotebookClientV2 } from "../Notebook/NotebookClientV2"; import TabsBase from "./TabsBase"; @@ -29,7 +30,7 @@ export default class NotebookTabBase extends TabsBase { NotebookTabBase.clientManager = new NotebookClientV2({ connectionInfo: this.container.notebookServerInfo(), databaseAccountName: this.container.databaseAccount().name, - defaultExperience: this.container.defaultExperience(), + defaultExperience: userContext.apiType, contentProvider: this.container.notebookManager?.notebookContentProvider, }); } diff --git a/src/Explorer/Tabs/TabsManager.test.ts b/src/Explorer/Tabs/TabsManager.test.ts index ac0adb5ce..19c192456 100644 --- a/src/Explorer/Tabs/TabsManager.test.ts +++ b/src/Explorer/Tabs/TabsManager.test.ts @@ -23,7 +23,6 @@ describe("Tabs manager tests", () => { location: "", type: "", kind: "", - tags: "", properties: undefined, }); diff --git a/src/Explorer/Tree/Database.test.ts b/src/Explorer/Tree/Database.test.ts index c37e0be94..d364adca5 100644 --- a/src/Explorer/Tree/Database.test.ts +++ b/src/Explorer/Tree/Database.test.ts @@ -1,10 +1,10 @@ -import * as DataModels from "../../Contracts/DataModels"; import * as ko from "knockout"; -import Database from "./Database"; -import Explorer from "../Explorer"; import { HttpStatusCodes } from "../../Common/Constants"; +import * as DataModels from "../../Contracts/DataModels"; import { JunoClient } from "../../Juno/JunoClient"; -import { userContext, updateUserContext } from "../../UserContext"; +import { updateUserContext, userContext } from "../../UserContext"; +import Explorer from "../Explorer"; +import Database from "./Database"; const createMockContainer = (): Explorer => { const mockContainer = new Explorer(); @@ -19,7 +19,6 @@ updateUserContext({ name: "fakeName", location: "fakeLocation", type: "fakeType", - tags: undefined, kind: "fakeKind", properties: { documentEndpoint: "fakeEndpoint", diff --git a/src/GitHub/GitHubOAuthService.test.ts b/src/GitHub/GitHubOAuthService.test.ts index 43f510c16..1e0169153 100644 --- a/src/GitHub/GitHubOAuthService.test.ts +++ b/src/GitHub/GitHubOAuthService.test.ts @@ -14,7 +14,6 @@ const sampleDatabaseAccount: DataModels.DatabaseAccount = { location: "location", type: "type", kind: "kind", - tags: [], properties: { documentEndpoint: "documentEndpoint", gremlinEndpoint: "gremlinEndpoint", diff --git a/src/Juno/JunoClient.test.ts b/src/Juno/JunoClient.test.ts index 73e2a3cf8..2e4e571c4 100644 --- a/src/Juno/JunoClient.test.ts +++ b/src/Juno/JunoClient.test.ts @@ -13,7 +13,6 @@ const sampleDatabaseAccount: DatabaseAccount = { location: "location", type: "type", kind: "kind", - tags: [], properties: { documentEndpoint: "documentEndpoint", gremlinEndpoint: "gremlinEndpoint", diff --git a/src/Platform/Emulator/emulatorAccount.tsx b/src/Platform/Emulator/emulatorAccount.tsx index 5042a53a6..295f9ee6f 100644 --- a/src/Platform/Emulator/emulatorAccount.tsx +++ b/src/Platform/Emulator/emulatorAccount.tsx @@ -1,4 +1,4 @@ -import { AccountKind, DefaultAccountExperience, TagNames } from "../../Common/Constants"; +import { AccountKind } from "../../Common/Constants"; export const emulatorAccount = { name: "", @@ -6,9 +6,6 @@ export const emulatorAccount = { location: "", type: "", kind: AccountKind.DocumentDB, - tags: { - [TagNames.defaultExperience]: DefaultAccountExperience.DocumentDB, - }, properties: { documentEndpoint: "", tableEndpoint: "", diff --git a/src/Platform/Hosted/Authorization.ts b/src/Platform/Hosted/Authorization.ts index 64cd00a72..da9bfb6e1 100644 --- a/src/Platform/Hosted/Authorization.ts +++ b/src/Platform/Hosted/Authorization.ts @@ -1,4 +1,3 @@ -import Q from "q"; import * as Constants from "../../Common/Constants"; import { configContext } from "../../ConfigContext"; import * as DataModels from "../../Contracts/DataModels"; @@ -21,8 +20,7 @@ export default class AuthHeadersUtil { const databaseAccount = userContext.databaseAccount; const subscriptionId: string = userContext.subscriptionId; const resourceGroup = userContext.resourceGroup; - const defaultExperience: string = DefaultExperienceUtility.getDefaultExperienceFromDatabaseAccount(databaseAccount); - const apiKind: DataModels.ApiKind = DefaultExperienceUtility.getApiKindFromDefaultExperience(defaultExperience); + const apiKind: DataModels.ApiKind = DefaultExperienceUtility.getApiKindFromDefaultExperience(userContext.apiType); const accountEndpoint = (databaseAccount && databaseAccount.properties.documentEndpoint) || ""; const sid = subscriptionId || ""; const rg = resourceGroup || ""; diff --git a/src/Platform/Hosted/HostedUtils.ts b/src/Platform/Hosted/HostedUtils.ts index 85ef302f3..8cc59daa4 100644 --- a/src/Platform/Hosted/HostedUtils.ts +++ b/src/Platform/Hosted/HostedUtils.ts @@ -1,27 +1,28 @@ -import { DefaultAccountExperience, CapabilityNames, AccountKind } from "../../Common/Constants"; +import { AccountKind, CapabilityNames } from "../../Common/Constants"; import { AccessInputMetadata, ApiKind } from "../../Contracts/DataModels"; import { DefaultExperienceUtility } from "../../Shared/DefaultExperienceUtility"; +import { userContext } from "../../UserContext"; export function getDatabaseAccountPropertiesFromMetadata(metadata: AccessInputMetadata): unknown { let properties = { documentEndpoint: metadata.documentEndpoint }; - const apiExperience: string = DefaultExperienceUtility.getDefaultExperienceFromApiKind(metadata.apiKind); + const apiExperience = DefaultExperienceUtility.getDefaultExperienceFromApiKind(metadata.apiKind); - if (apiExperience === DefaultAccountExperience.Cassandra) { + if (apiExperience === "Cassandra") { properties = Object.assign(properties, { cassandraEndpoint: metadata.apiEndpoint, capabilities: [{ name: CapabilityNames.EnableCassandra }], }); - } else if (apiExperience === DefaultAccountExperience.Table) { + } else if (apiExperience === "Tables") { properties = Object.assign(properties, { tableEndpoint: metadata.apiEndpoint, capabilities: [{ name: CapabilityNames.EnableTable }], }); - } else if (apiExperience === DefaultAccountExperience.Graph) { + } else if (apiExperience === "Gremlin") { properties = Object.assign(properties, { gremlinEndpoint: metadata.apiEndpoint, capabilities: [{ name: CapabilityNames.EnableGremlin }], }); - } else if (apiExperience === DefaultAccountExperience.MongoDB) { + } else if (apiExperience === "Mongo") { if (metadata.apiKind === ApiKind.MongoDBCompute) { properties = Object.assign(properties, { mongoEndpoint: metadata.mongoEndpoint, @@ -31,12 +32,8 @@ export function getDatabaseAccountPropertiesFromMetadata(metadata: AccessInputMe return properties; } -export function getDatabaseAccountKindFromExperience(apiExperience: string): string { - if (apiExperience === DefaultAccountExperience.MongoDB) { - return AccountKind.MongoDB; - } - - if (apiExperience === DefaultAccountExperience.ApiForMongoDB) { +export function getDatabaseAccountKindFromExperience(apiExperience: typeof userContext.apiType): AccountKind { + if (apiExperience === "Mongo") { return AccountKind.MongoDB; } diff --git a/src/Shared/DefaultExperienceUtility.test.ts b/src/Shared/DefaultExperienceUtility.test.ts index ece1d6e88..c72b46823 100644 --- a/src/Shared/DefaultExperienceUtility.test.ts +++ b/src/Shared/DefaultExperienceUtility.test.ts @@ -1,133 +1,67 @@ -import * as Constants from "../Common/Constants"; import * as DataModels from "../Contracts/DataModels"; -import * as ViewModels from "../Contracts/ViewModels"; +import { userContext } from "../UserContext"; import { DefaultExperienceUtility } from "./DefaultExperienceUtility"; describe("Default Experience Utility", () => { describe("getDefaultExperienceFromApiKind()", () => { - function runScenario(apiKind: number, expectedExperience: string): void { + function runScenario(apiKind: number, expectedExperience: typeof userContext.apiType): void { const resolvedExperience = DefaultExperienceUtility.getDefaultExperienceFromApiKind(apiKind); expect(resolvedExperience).toEqual(expectedExperience); } describe("On SQL", () => { - it("should return SQL", () => runScenario(DataModels.ApiKind.SQL, Constants.DefaultAccountExperience.DocumentDB)); + it("should return SQL", () => runScenario(DataModels.ApiKind.SQL, "SQL")); }); describe("On MongoDB", () => { - it("should return MongoDB", () => - runScenario(DataModels.ApiKind.MongoDB, Constants.DefaultAccountExperience.MongoDB)); + it("should return MongoDB", () => runScenario(DataModels.ApiKind.MongoDB, "Mongo")); }); describe("On Table", () => { - it("should return Table", () => runScenario(DataModels.ApiKind.Table, Constants.DefaultAccountExperience.Table)); + it("should return Table", () => runScenario(DataModels.ApiKind.Table, "Tables")); }); describe("On Cassandra", () => { - it("should return Cassandra", () => - runScenario(DataModels.ApiKind.Cassandra, Constants.DefaultAccountExperience.Cassandra)); + it("should return Cassandra", () => runScenario(DataModels.ApiKind.Cassandra, "Cassandra")); }); describe("On Graph", () => { - it("should return Graph", () => runScenario(DataModels.ApiKind.Graph, Constants.DefaultAccountExperience.Graph)); + it("should return Graph", () => runScenario(DataModels.ApiKind.Graph, "Gremlin")); }); describe("On unknown", () => { - it("should return Default", () => runScenario(-1, Constants.DefaultAccountExperience.Default)); + it("should return Default", () => runScenario(-1, "SQL")); }); }); describe("getApiKindFromDefaultExperience()", () => { - function runScenario(defaultExperience: string, expectedApiKind: number): void { + function runScenario(defaultExperience: typeof userContext.apiType, expectedApiKind: number): void { const resolvedApiKind = DefaultExperienceUtility.getApiKindFromDefaultExperience(defaultExperience); expect(resolvedApiKind).toEqual(expectedApiKind); } describe("On SQL", () => { - it("should return SQL", () => runScenario(Constants.DefaultAccountExperience.DocumentDB, DataModels.ApiKind.SQL)); + it("should return SQL", () => runScenario("SQL", DataModels.ApiKind.SQL)); }); describe("On MongoDB", () => { - it("should return MongoDB", () => - runScenario(Constants.DefaultAccountExperience.MongoDB, DataModels.ApiKind.MongoDB)); + it("should return MongoDB", () => runScenario("Mongo", DataModels.ApiKind.MongoDB)); }); describe("On Table", () => { - it("should return Table", () => runScenario(Constants.DefaultAccountExperience.Table, DataModels.ApiKind.Table)); + it("should return Table", () => runScenario("Tables", DataModels.ApiKind.Table)); }); describe("On Cassandra", () => { - it("should return Cassandra", () => - runScenario(Constants.DefaultAccountExperience.Cassandra, DataModels.ApiKind.Cassandra)); + it("should return Cassandra", () => runScenario("Cassandra", DataModels.ApiKind.Cassandra)); }); describe("On Graph", () => { - it("should return Graph", () => runScenario(Constants.DefaultAccountExperience.Graph, DataModels.ApiKind.Graph)); + it("should return Graph", () => runScenario("Gremlin", DataModels.ApiKind.Graph)); }); describe("On null", () => { it("should return SQL", () => runScenario(null, DataModels.ApiKind.SQL)); }); }); - - describe("getDefaultExperienceFromDatabaseAccount()", () => { - function runScenario(databaseAccount: DataModels.DatabaseAccount, expectedDefaultExperience: string): void { - const resolvedExperience = DefaultExperienceUtility.getDefaultExperienceFromDatabaseAccount(databaseAccount); - expect(resolvedExperience).toEqual(expectedDefaultExperience); - } - - const databaseAccountWithWrongTagsAndCapabilities: DataModels.DatabaseAccount = { - id: "test", - kind: "GlobalDocumentDB", - name: "test", - location: "somewhere", - type: "DocumentDB", - tags: { - defaultExperience: "Gremlin (graph)", - }, - properties: { - documentEndpoint: "", - cassandraEndpoint: "", - gremlinEndpoint: "", - tableEndpoint: "", - capabilities: [ - { - name: Constants.CapabilityNames.EnableGremlin, - description: "something", - }, - ], - }, - }; - - const databaseAccountWithApiKind: DataModels.DatabaseAccount = { - id: "test", - kind: Constants.AccountKind.MongoDB, - name: "test", - location: "somewhere", - type: "DocumentDB", - tags: {}, - properties: { - documentEndpoint: "", - cassandraEndpoint: "", - gremlinEndpoint: "", - tableEndpoint: "", - capabilities: [ - { - name: Constants.CapabilityNames.EnableGremlin, - description: "something", - }, - ], - }, - }; - - describe("Disregard tags", () => { - it("should return Graph", () => - runScenario(databaseAccountWithWrongTagsAndCapabilities, Constants.DefaultAccountExperience.Graph)); - }); - - describe("Respect Kind over capabilities", () => { - it("should return MongoDB", () => - runScenario(databaseAccountWithApiKind, Constants.DefaultAccountExperience.MongoDB)); - }); - }); }); diff --git a/src/Shared/DefaultExperienceUtility.ts b/src/Shared/DefaultExperienceUtility.ts index bee402c1c..27635968e 100644 --- a/src/Shared/DefaultExperienceUtility.ts +++ b/src/Shared/DefaultExperienceUtility.ts @@ -1,132 +1,47 @@ -import * as _ from "underscore"; -import * as Constants from "../Common/Constants"; import * as DataModels from "../Contracts/DataModels"; +import { userContext } from "../UserContext"; export class DefaultExperienceUtility { - public static getDefaultExperienceFromDatabaseAccount(databaseAccount: DataModels.DatabaseAccount): string | null { - if (!databaseAccount) { - return null; - } - - const kind: string = - databaseAccount && databaseAccount.kind && databaseAccount.kind && databaseAccount.kind.toLowerCase(); - const capabilities = (databaseAccount.properties && databaseAccount.properties.capabilities) || []; - - return DefaultExperienceUtility._getDefaultExperience(kind, capabilities); - } - - public static getApiKindFromDefaultExperience(defaultExperience: string): DataModels.ApiKind { + public static getApiKindFromDefaultExperience(defaultExperience: typeof userContext.apiType): DataModels.ApiKind { if (!defaultExperience) { return DataModels.ApiKind.SQL; } switch (defaultExperience) { - case Constants.DefaultAccountExperience.DocumentDB: + case "SQL": return DataModels.ApiKind.SQL; - case Constants.DefaultAccountExperience.MongoDB: - case Constants.DefaultAccountExperience.ApiForMongoDB: + case "Mongo": return DataModels.ApiKind.MongoDB; - case Constants.DefaultAccountExperience.Table: + case "Tables": return DataModels.ApiKind.Table; - case Constants.DefaultAccountExperience.Cassandra: + case "Cassandra": return DataModels.ApiKind.Cassandra; - case Constants.DefaultAccountExperience.Graph: + case "Gremlin": return DataModels.ApiKind.Graph; default: return DataModels.ApiKind.SQL; } } - public static getDefaultExperienceFromApiKind(apiKind: DataModels.ApiKind): string { + public static getDefaultExperienceFromApiKind(apiKind: DataModels.ApiKind): typeof userContext.apiType { if (apiKind == null) { - return Constants.DefaultAccountExperience.Default; + return "SQL"; } switch (apiKind) { case DataModels.ApiKind.SQL: - return Constants.DefaultAccountExperience.DocumentDB; + return "SQL"; case DataModels.ApiKind.MongoDB: case DataModels.ApiKind.MongoDBCompute: - return Constants.DefaultAccountExperience.MongoDB; + return "Mongo"; case DataModels.ApiKind.Table: - return Constants.DefaultAccountExperience.Table; + return "Tables"; case DataModels.ApiKind.Cassandra: - return Constants.DefaultAccountExperience.Cassandra; + return "Cassandra"; case DataModels.ApiKind.Graph: - return Constants.DefaultAccountExperience.Graph; + return "Gremlin"; default: - return Constants.DefaultAccountExperience.Default; + return "SQL"; } } - - private static _getDefaultExperience(kind: string, capabilities: DataModels.Capability[]): string { - const defaultDefaultExperience: string = Constants.DefaultAccountExperience.DocumentDB; - const defaultExperienceFromKind: string = DefaultExperienceUtility._getDefaultExperienceFromAccountKind(kind) || ""; - const defaultExperienceFromCapabilities: string = - DefaultExperienceUtility._getDefaultExperienceFromAccountCapabilities(capabilities) || ""; - if (!!defaultExperienceFromKind) { - return defaultExperienceFromKind; - } - - if (!!defaultExperienceFromCapabilities) { - return defaultExperienceFromCapabilities; - } - - return defaultDefaultExperience; - } - - private static _getDefaultExperienceFromAccountKind(kind: string): string | null { - if (!kind) { - return null; - } - - if (kind.toLowerCase() === Constants.AccountKind.MongoDB.toLowerCase()) { - return Constants.DefaultAccountExperience.MongoDB; - } - - if (kind.toLowerCase() === Constants.AccountKind.Parse.toLowerCase()) { - return Constants.DefaultAccountExperience.MongoDB; - } - - return null; - } - - private static _getDefaultExperienceFromAccountCapabilities(capabilities: DataModels.Capability[]): string | null { - if (!capabilities) { - return null; - } - - if (!Array.isArray(capabilities)) { - return null; - } - - const enableTable = DefaultExperienceUtility._findCapability(capabilities, Constants.CapabilityNames.EnableTable); - if (enableTable) { - return Constants.DefaultAccountExperience.Table; - } - - const enableGremlin = DefaultExperienceUtility._findCapability( - capabilities, - Constants.CapabilityNames.EnableGremlin - ); - if (enableGremlin) { - return Constants.DefaultAccountExperience.Graph; - } - - const enableCassandra = DefaultExperienceUtility._findCapability( - capabilities, - Constants.CapabilityNames.EnableCassandra - ); - if (enableCassandra) { - return Constants.DefaultAccountExperience.Cassandra; - } - - return null; - } - - private static _findCapability(capabilities: DataModels.Capability[], capabilityName: string): DataModels.Capability { - return _.find(capabilities, (capability) => { - return capability && capability.name && capability.name.toLowerCase() === capabilityName.toLowerCase(); - }); - } } diff --git a/src/UserContext.ts b/src/UserContext.ts index 45b1a805e..0cbec9226 100644 --- a/src/UserContext.ts +++ b/src/UserContext.ts @@ -27,7 +27,7 @@ interface UserContext { readonly hasWriteAccess: boolean; } -type ApiType = "SQL" | "Mongo" | "Gremlin" | "Tables" | "Cassandra"; +export type ApiType = "SQL" | "Mongo" | "Gremlin" | "Tables" | "Cassandra"; export type PortalEnv = "localhost" | "blackforest" | "fairfax" | "mooncake" | "prod" | "dev"; const features = extractFeatures(); diff --git a/src/hooks/useKnockoutExplorer.ts b/src/hooks/useKnockoutExplorer.ts index 2905474a9..ceea5557c 100644 --- a/src/hooks/useKnockoutExplorer.ts +++ b/src/hooks/useKnockoutExplorer.ts @@ -1,7 +1,7 @@ import { useEffect, useState } from "react"; import { applyExplorerBindings } from "../applyExplorerBindings"; import { AuthType } from "../AuthType"; -import { AccountKind, DefaultAccountExperience } from "../Common/Constants"; +import { AccountKind } from "../Common/Constants"; import { normalizeArmEndpoint } from "../Common/EnvironmentUtility"; import { sendMessage, sendReadyMessage } from "../Common/MessageHandler"; import { configContext, Platform, updateConfigContext } from "../ConfigContext"; @@ -141,8 +141,6 @@ function configureHostedWithResourceToken(config: ResourceToken, explorerParams: name: parsedResourceToken.accountEndpoint, kind: AccountKind.GlobalDocumentDB, properties: { documentEndpoint: parsedResourceToken.accountEndpoint }, - // Resource tokens can only be used with SQL API - tags: { defaultExperience: DefaultAccountExperience.DocumentDB }, }; updateUserContext({ databaseAccount, @@ -165,9 +163,7 @@ function configureHostedWithEncryptedToken(config: EncryptedToken, explorerParam authType: AuthType.EncryptedToken, accessToken: encodeURIComponent(config.encryptedToken), }); - const apiExperience: string = DefaultExperienceUtility.getDefaultExperienceFromApiKind( - config.encryptedTokenMetadata.apiKind - ); + const apiExperience = DefaultExperienceUtility.getDefaultExperienceFromApiKind(config.encryptedTokenMetadata.apiKind); const explorer = new Explorer(explorerParams); explorer.configure({ databaseAccount: { From 8c05ac740c4b99d774619f158ec8683406a7bc86 Mon Sep 17 00:00:00 2001 From: Hardikkumar Nai <80053762+hardiknai-techm@users.noreply.github.com> Date: Thu, 6 May 2021 03:24:50 +0530 Subject: [PATCH 4/6] Remove Explorer.databaseAccount (#717) Co-authored-by: Steve Faulkner --- jest.config.js | 1 + package-lock.json | 816 +++++++++++------- package.json | 1 + src/Common/CosmosClient.ts | 7 +- src/Common/MongoProxyClient.ts | 12 +- src/Common/PortalNotifications.ts | 8 +- src/Common/QueriesClient.ts | 7 +- src/Common/dataAccess/createCollection.ts | 6 +- src/Common/dataAccess/createDatabase.ts | 7 +- src/Common/dataAccess/deleteCollection.ts | 10 +- src/Common/dataAccess/deleteDatabase.ts | 10 +- .../dataAccess/getCollectionDataUsageSize.ts | 10 +- src/Common/dataAccess/readCollectionOffer.ts | 10 +- src/Common/dataAccess/readCollections.ts | 11 +- src/Common/dataAccess/readDatabaseOffer.ts | 10 +- src/Common/dataAccess/readDatabases.ts | 10 +- .../dataAccess/readMongoDBCollection.tsx | 8 +- .../dataAccess/readUserDefinedFunctions.ts | 9 +- src/Common/dataAccess/updateCollection.ts | 10 +- src/Common/dataAccess/updateOffer.ts | 45 +- .../dataAccess/updateStoredProcedure.ts | 16 +- src/Common/dataAccess/updateTrigger.ts | 15 +- .../dataAccess/updateUserDefinedFunction.ts | 15 +- .../DirectoryListComponent.test.tsx.snap | 20 +- .../CodeOfConductComponent/index.test.tsx | 2 +- .../Settings/SettingsComponent.test.tsx | 27 +- .../Controls/Settings/SettingsComponent.tsx | 11 +- .../ScaleComponent.test.tsx | 38 +- .../SettingsSubComponents/ScaleComponent.tsx | 8 +- .../SettingsComponent.test.tsx.snap | 12 - .../ThroughputInput/ThroughputInput.tsx | 6 +- .../DataSamples/ContainerSampleGenerator.ts | 2 +- src/Explorer/Explorer.tsx | 73 +- .../CommandBar/CommandBarComponentAdapter.tsx | 3 +- .../CommandBarComponentButtonFactory.tsx | 14 +- .../Notebook/NotebookContainerClient.ts | 8 +- src/Explorer/Notebook/NotebookManager.tsx | 5 +- src/Explorer/Panes/AddCollectionPane.test.ts | 74 +- src/Explorer/Panes/AddCollectionPane.ts | 19 +- src/Explorer/Panes/AddCollectionPanel.tsx | 4 +- src/Explorer/Panes/AddDatabasePane.test.ts | 76 +- src/Explorer/Panes/AddDatabasePane.ts | 18 +- .../Panes/CassandraAddCollectionPane.ts | 27 +- ...teCollectionConfirmationPane.test.tsx.snap | 34 +- .../ExecuteSprocParamsPane.test.tsx.snap | 84 +- .../GitHubReposPanel.test.tsx.snap | 3 - .../SetupNotebooksPanel.test.tsx.snap | 8 +- .../StringInputPane.test.tsx.snap | 3 - .../__snapshots__/index.test.tsx.snap | 48 +- .../AddTableEntityPanel.test.tsx.snap | 122 +-- .../EditTableEntityPanel.test.tsx.snap | 122 +-- ...eteDatabaseConfirmationPanel.test.tsx.snap | 35 +- src/Explorer/Tables/TableDataClient.ts | 37 +- src/Explorer/Tabs/MongoShellTab.ts | 17 +- src/Explorer/Tabs/NotebookTabBase.ts | 2 +- src/Explorer/Tabs/TabsManager.test.ts | 18 +- src/Explorer/Tabs/TerminalTab.tsx | 3 +- src/Explorer/Tree/Collection.ts | 10 +- src/Explorer/Tree/Database.ts | 2 +- src/Explorer/Tree/ResourceTreeAdapter.tsx | 5 +- src/GitHub/GitHubOAuthService.test.ts | 18 +- src/Juno/JunoClient.test.ts | 15 +- src/Juno/JunoClient.ts | 4 +- src/Platform/Hosted/Authorization.ts | 8 +- src/SelfServe/Example/SelfServeExample.rp.ts | 10 +- src/SelfServe/SelfServeUtils.tsx | 8 +- src/hooks/useKnockoutExplorer.ts | 6 - 67 files changed, 1077 insertions(+), 1046 deletions(-) diff --git a/jest.config.js b/jest.config.js index b1e027c3f..2aff547f7 100644 --- a/jest.config.js +++ b/jest.config.js @@ -69,6 +69,7 @@ module.exports = { moduleNameMapper: { "^.*[.](svg|png|gif|less|css)$": "/mockModule", "@nteract/stateful-components/(.*)$": "/mockModule", + "monaco-editor/(.*)$": "/__mocks__/monaco-editor", "office-ui-fabric-react/lib/(.*)$": "office-ui-fabric-react/lib-commonjs/$1", // https://github.com/OfficeDev/office-ui-fabric-react/wiki/Fabric-6-Release-Notes "^dnd-core$": "dnd-core/dist/cjs", "^react-dnd$": "react-dnd/dist/cjs", diff --git a/package-lock.json b/package-lock.json index 855337a5f..450d71a4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2110,76 +2110,37 @@ } }, "@fluentui/date-time-utilities": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-7.9.0.tgz", - "integrity": "sha512-D8p5WWeonqRO1EgIvo7WSlX1rcm87r2VQd62zTJPQImx8rpwc77CRI+iAvfxyVHRZMdt4Qk6Jq99dUaudPWaZw==", + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-7.9.1.tgz", + "integrity": "sha512-o8iU1VIY+QsqVRWARKiky29fh4KR1xaKSgMClXIi65qkt8EDDhjmlzL0KVDEoDA2GWukwb/1PpaVCWDg4v3cUQ==", "requires": { - "@uifabric/set-version": "^7.0.23", + "@uifabric/set-version": "^7.0.24", "tslib": "^1.10.0" } }, "@fluentui/dom-utilities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-1.1.1.tgz", - "integrity": "sha512-w40gi8fzCpwa7U8cONiuu8rszPStkVOL/weDf5pCbYEb1gdaV7MDPSNkgM6IV0Kz+k017noDgK9Fv4ru1Dwz1g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-1.1.2.tgz", + "integrity": "sha512-XqPS7l3YoMwxdNlaYF6S2Mp0K3FmVIOIy2K3YkMc+eRxu9wFK6emr2Q/3rBhtG5u/On37NExRT7/5CTLnoi9gw==", "requires": { - "@uifabric/set-version": "^7.0.23", + "@uifabric/set-version": "^7.0.24", "tslib": "^1.10.0" } }, "@fluentui/keyboard-key": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.2.12.tgz", - "integrity": "sha512-t3yIbbPKJubb22vQ/FIWwS9vFAzaPYzFxKWPHVWLtxs/P+5yL+LD3B16DRtYreWAdl9CZvEbos58ChLZ0KHwSQ==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.2.17.tgz", + "integrity": "sha512-iT1bU56rKrKEOfODoW6fScY11qj3iaYrZ+z11T6fo5+TDm84UGkkXjLXJTE57ZJzg0/gbccHQWYv+chY7bJN8Q==", "requires": { "tslib": "^1.10.0" } }, - "@fluentui/react-focus": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-7.17.1.tgz", - "integrity": "sha512-Nulq2pE4pX6Pf+tGZl8uLp8VfqUzx3elC5v7QvYSBdjnZK8ykitdsa+Sd3PKYWW2EMlzVRSptlzbuJ6JyEDQKQ==", - "requires": { - "@fluentui/keyboard-key": "^0.2.12", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/styling": "^7.16.19", - "@uifabric/utilities": "^7.33.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "@uifabric/styling": { - "version": "7.16.19", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.16.19.tgz", - "integrity": "sha512-T5fjUCx0LbzUC8Myw15YCaBjdGbSrihWSiPHtLVW77k59yWAW947XnH73QngE8xU7kyKPH3AhQrUEBMB2NjHag==", - "requires": { - "@fluentui/theme": "^1.7.1", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/utilities": "^7.33.2", - "tslib": "^1.10.0" - } - } - } - }, "@fluentui/react-window-provider": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-1.0.1.tgz", - "integrity": "sha512-5hvruDyF0uE8+6YN6Y+d2sEzexBadxUNxUjDcDreTPsmtHPwF5FPBYLhoD7T84L5U4YNvKxKh25tYJm6E0GE2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-1.0.2.tgz", + "integrity": "sha512-fGSgL3Vp/+6t1Ysfz21FWZmqsU+iFVxOigvHnm5uKVyyRPwtaabv/F6kQ2y5isLMI2YmJaUd2i0cDJKu8ggrvw==", "requires": { - "@uifabric/set-version": "^7.0.23", - "tslib": "^1.10.0" - } - }, - "@fluentui/theme": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-1.7.1.tgz", - "integrity": "sha512-cwx8gJ0O9d+Z8g6Lq7BgDgH8XPfSloUSy0GN3fWHJGrDCBPcnmz6/GKbbvxw9PZ2t1iNcAzJEJNT6NyuOOobPA==", - "requires": { - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/utilities": "^7.33.2", + "@uifabric/set-version": "^7.0.24", "tslib": "^1.10.0" } }, @@ -5850,131 +5811,37 @@ } }, "@uifabric/azure-themes": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@uifabric/azure-themes/-/azure-themes-7.6.7.tgz", - "integrity": "sha512-KlfcjxoVn66wamYjWxZY1b7ezMIcX08ZbDZNKMvh/C9zchTqQ8P/cFAcfiBrxhKL3HJtb0CBFkhd3lYcQD76jg==", + "version": "7.7.32", + "resolved": "https://registry.npmjs.org/@uifabric/azure-themes/-/azure-themes-7.7.32.tgz", + "integrity": "sha512-S7mym3EQ/WjRu0+VHLv6HP06BvaszaEl1jXvI8IiP19aWn+AYWEtdB0BjTA8/SUc1PXrRWG/wZgucOgLvKncDA==", "requires": { - "@fluentui/theme": "^1.7.1", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "office-ui-fabric-react": "^7.157.0", + "@fluentui/theme": "^1.7.4", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "office-ui-fabric-react": "^7.168.2", "tslib": "^1.10.0" }, "dependencies": { - "@uifabric/styling": { - "version": "7.16.19", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.16.19.tgz", - "integrity": "sha512-T5fjUCx0LbzUC8Myw15YCaBjdGbSrihWSiPHtLVW77k59yWAW947XnH73QngE8xU7kyKPH3AhQrUEBMB2NjHag==", + "@fluentui/react-focus": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-7.17.6.tgz", + "integrity": "sha512-JkLWNDe567lhvbnIhbYv9nUWYDIVN06utc3krs0UZBI+A0YZtQmftBtY0ghXo4PSjgozZocdu9sYkkgZOgyRLg==", "requires": { - "@fluentui/theme": "^1.7.1", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/utilities": "^7.33.2", + "@fluentui/keyboard-key": "^0.2.12", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "@uifabric/utilities": "^7.33.5", "tslib": "^1.10.0" } }, - "office-ui-fabric-react": { - "version": "7.157.0", - "resolved": "https://registry.npmjs.org/office-ui-fabric-react/-/office-ui-fabric-react-7.157.0.tgz", - "integrity": "sha512-nS0RfhQKho2S2hiUxHcgM47AZUK1EzbjkdWkofNHQk8q0PwJkQPTUjTbSuxhQNLzXHiaQJz930ZYUvRCZvlL1w==", - "requires": { - "@fluentui/date-time-utilities": "^7.9.0", - "@fluentui/react-focus": "^7.17.1", - "@fluentui/react-window-provider": "^1.0.1", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/foundation": "^7.9.21", - "@uifabric/icons": "^7.5.18", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/react-hooks": "^7.13.9", - "@uifabric/set-version": "^7.0.23", - "@uifabric/styling": "^7.16.19", - "@uifabric/utilities": "^7.33.2", - "prop-types": "^15.7.2", - "tslib": "^1.10.0" - } - } - } - }, - "@uifabric/file-type-icons": { - "version": "7.6.24", - "resolved": "https://registry.npmjs.org/@uifabric/file-type-icons/-/file-type-icons-7.6.24.tgz", - "integrity": "sha512-dmBpfWrWovw/TtwUtamfY4UqwsSqzTGm0Npvo/9b0mkIANrO6MGuz8M4MqvAWbzi/vq0dlGP5FF+ShkhtmrMnw==", - "requires": { - "@uifabric/set-version": "^7.0.23", - "@uifabric/styling": "^7.16.19", - "tslib": "^1.10.0" - }, - "dependencies": { - "@uifabric/styling": { - "version": "7.16.19", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.16.19.tgz", - "integrity": "sha512-T5fjUCx0LbzUC8Myw15YCaBjdGbSrihWSiPHtLVW77k59yWAW947XnH73QngE8xU7kyKPH3AhQrUEBMB2NjHag==", - "requires": { - "@fluentui/theme": "^1.7.1", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/utilities": "^7.33.2", - "tslib": "^1.10.0" - } - } - } - }, - "@uifabric/foundation": { - "version": "7.9.21", - "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-7.9.21.tgz", - "integrity": "sha512-z58pcC0hJr6S0iYLxNFoqfrfLIMxbSxFHRirk5LDT2HXbiVIYbJwbK4O0InS+sz3chdx8GGSdIUz7muXeT/D+A==", - "requires": { - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/styling": "^7.16.19", - "@uifabric/utilities": "^7.33.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "@uifabric/styling": { - "version": "7.16.19", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.16.19.tgz", - "integrity": "sha512-T5fjUCx0LbzUC8Myw15YCaBjdGbSrihWSiPHtLVW77k59yWAW947XnH73QngE8xU7kyKPH3AhQrUEBMB2NjHag==", - "requires": { - "@fluentui/theme": "^1.7.1", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/utilities": "^7.33.2", - "tslib": "^1.10.0" - } - } - } - }, - "@uifabric/icons": { - "version": "7.5.18", - "resolved": "https://registry.npmjs.org/@uifabric/icons/-/icons-7.5.18.tgz", - "integrity": "sha512-gLPEccWlTER9NiXcOHZ+dSJ3tgLAQ4mTf3hTlKV7e7dKBTl95jzcemG5S2NJQ7xWPTH3+5K1Bpd+nqZo9EJw3w==", - "requires": { - "@uifabric/set-version": "^7.0.23", - "@uifabric/styling": "^7.16.19", - "tslib": "^1.10.0" - }, - "dependencies": { - "@fluentui/dom-utilities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-1.1.2.tgz", - "integrity": "sha512-XqPS7l3YoMwxdNlaYF6S2Mp0K3FmVIOIy2K3YkMc+eRxu9wFK6emr2Q/3rBhtG5u/On37NExRT7/5CTLnoi9gw==", + "@fluentui/react-window-provider": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-1.0.2.tgz", + "integrity": "sha512-fGSgL3Vp/+6t1Ysfz21FWZmqsU+iFVxOigvHnm5uKVyyRPwtaabv/F6kQ2y5isLMI2YmJaUd2i0cDJKu8ggrvw==", "requires": { "@uifabric/set-version": "^7.0.24", "tslib": "^1.10.0" - }, - "dependencies": { - "@uifabric/set-version": { - "version": "7.0.24", - "resolved": "https://registry.npmjs.org/@uifabric/set-version/-/set-version-7.0.24.tgz", - "integrity": "sha512-t0Pt21dRqdC707/ConVJC0WvcQ/KF7tKLU8AZY7YdjgJpMHi1c0C427DB4jfUY19I92f60LOQyhJ4efH+KpFEg==", - "requires": { - "tslib": "^1.10.0" - } - } } }, "@fluentui/theme": { @@ -5986,60 +5853,178 @@ "@uifabric/set-version": "^7.0.24", "@uifabric/utilities": "^7.33.5", "tslib": "^1.10.0" - }, - "dependencies": { - "@uifabric/merge-styles": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-7.19.2.tgz", - "integrity": "sha512-kTlhwglDqwVgIaJq+0yXgzi65plGhmFcPrfme/rXUGMJZoU+qlGT5jXj5d3kuI59p6VB8jWEg9DAxHozhYeu0g==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - } - }, - "@uifabric/set-version": { - "version": "7.0.24", - "resolved": "https://registry.npmjs.org/@uifabric/set-version/-/set-version-7.0.24.tgz", - "integrity": "sha512-t0Pt21dRqdC707/ConVJC0WvcQ/KF7tKLU8AZY7YdjgJpMHi1c0C427DB4jfUY19I92f60LOQyhJ4efH+KpFEg==", - "requires": { - "tslib": "^1.10.0" - } - }, - "@uifabric/utilities": { - "version": "7.33.5", - "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.5.tgz", - "integrity": "sha512-I+Oi0deD/xltSluFY8l2EVd/J4mvOaMljxKO2knSD9/KoGDlo/o5GN4gbnVo8nIt76HWHLAk3KtlJKJm6BhbIQ==", - "requires": { - "@fluentui/dom-utilities": "^1.1.2", - "@uifabric/merge-styles": "^7.19.2", - "@uifabric/set-version": "^7.0.24", - "prop-types": "^15.7.2", - "tslib": "^1.10.0" - } - } + } + }, + "@types/react": { + "version": "16.14.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.5.tgz", + "integrity": "sha512-YRRv9DNZhaVTVRh9Wmmit7Y0UFhEVqXqCSw3uazRWMxa2x85hWQZ5BN24i7GXZbaclaLXEcodEeIHsjBA8eAMw==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "16.9.12", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.12.tgz", + "integrity": "sha512-i7NPZZpPte3jtVOoW+eLB7G/jsX5OM6GqQnH+lC0nq0rqwlK0x8WcMEvYDgFWqWhWMlTltTimzdMax6wYfZssA==", + "requires": { + "@types/react": "^16" + } + }, + "@uifabric/foundation": { + "version": "7.9.26", + "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-7.9.26.tgz", + "integrity": "sha512-1FLTb+jlH/Tuel2L9wT/zLl5ZW6W4Lbjrs5VUVjv81vWxzznvPnTf8+Ew0qkzaH7xDuMNMl7okswhV0IfJyheg==", + "requires": { + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/react-hooks": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@uifabric/react-hooks/-/react-hooks-7.14.0.tgz", + "integrity": "sha512-Ndu/DEKHF4gFXEZa2AGgSkdWaj+njVrsSyXbkWRh2UZReFWnH1LMko9p/ZCwk1i9kAd5CUmyIfURUzIEya9YCg==", + "requires": { + "@fluentui/react-window-provider": "^1.0.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" } }, "@uifabric/styling": { - "version": "7.16.19", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.16.19.tgz", - "integrity": "sha512-T5fjUCx0LbzUC8Myw15YCaBjdGbSrihWSiPHtLVW77k59yWAW947XnH73QngE8xU7kyKPH3AhQrUEBMB2NjHag==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.19.0.tgz", + "integrity": "sha512-fXComDtGV7dHF4rP4cLHwI6fC+1f/nvPavpMBz4IQdySwixta9TVMKbzt0OA6i0mJztqZCVAd27F/sl9R/JmcQ==", "requires": { - "@fluentui/theme": "^1.7.1", + "@fluentui/theme": "^1.7.4", "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/utilities": "^7.33.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/utilities": { + "version": "7.33.5", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.5.tgz", + "integrity": "sha512-I+Oi0deD/xltSluFY8l2EVd/J4mvOaMljxKO2knSD9/KoGDlo/o5GN4gbnVo8nIt76HWHLAk3KtlJKJm6BhbIQ==", + "requires": { + "@fluentui/dom-utilities": "^1.1.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "prop-types": "^15.7.2", + "tslib": "^1.10.0" + } + }, + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + }, + "office-ui-fabric-react": { + "version": "7.168.2", + "resolved": "https://registry.npmjs.org/office-ui-fabric-react/-/office-ui-fabric-react-7.168.2.tgz", + "integrity": "sha512-ssN6/6K4Z/PdT2ExE1q61B34w6LqfQrqTvrlq/NfSvDk7USxXvP3+rd7HQAUrynSsWx2MnNeYt23d34sSHLCKw==", + "requires": { + "@fluentui/date-time-utilities": "^7.9.1", + "@fluentui/react-focus": "^7.17.6", + "@fluentui/react-window-provider": "^1.0.2", + "@microsoft/load-themed-styles": "^1.10.26", + "@uifabric/foundation": "^7.9.26", + "@uifabric/icons": "^7.5.23", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/react-hooks": "^7.14.0", + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "@uifabric/utilities": "^7.33.5", + "prop-types": "^15.7.2", "tslib": "^1.10.0" } } } }, - "@uifabric/merge-styles": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-7.19.1.tgz", - "integrity": "sha512-yqUwmk62Kgu216QNPE9vOfS3h0kiSbTvoqM5QcZi+IzpqsBOlzZx3A9Er9UiDaqHRd5lsYF5pO/jeUULmBWF/A==", + "@uifabric/icons": { + "version": "7.5.23", + "resolved": "https://registry.npmjs.org/@uifabric/icons/-/icons-7.5.23.tgz", + "integrity": "sha512-eIvUbH0EWgFgdfgFfINgqS2ZVZTyJ/9n5nR4bmcyAe75wsKxm4ser4WIT9IvaBF6+HFVfjUF/v6+VMD7y2LBng==", "requires": { - "@uifabric/set-version": "^7.0.23", + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "@fluentui/theme": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-1.7.4.tgz", + "integrity": "sha512-o4eo7lstLxxXl1g2RR9yz18Yt8yjQO/LbQuZjsiAfv/4Bf0CRnb+3j1F7gxIdBWAchKj9gzaMpIFijfI98pvYQ==", + "requires": { + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@types/react": { + "version": "16.14.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.5.tgz", + "integrity": "sha512-YRRv9DNZhaVTVRh9Wmmit7Y0UFhEVqXqCSw3uazRWMxa2x85hWQZ5BN24i7GXZbaclaLXEcodEeIHsjBA8eAMw==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "16.9.12", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.12.tgz", + "integrity": "sha512-i7NPZZpPte3jtVOoW+eLB7G/jsX5OM6GqQnH+lC0nq0rqwlK0x8WcMEvYDgFWqWhWMlTltTimzdMax6wYfZssA==", + "requires": { + "@types/react": "^16" + } + }, + "@uifabric/styling": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.19.0.tgz", + "integrity": "sha512-fXComDtGV7dHF4rP4cLHwI6fC+1f/nvPavpMBz4IQdySwixta9TVMKbzt0OA6i0mJztqZCVAd27F/sl9R/JmcQ==", + "requires": { + "@fluentui/theme": "^1.7.4", + "@microsoft/load-themed-styles": "^1.10.26", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/utilities": { + "version": "7.33.5", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.5.tgz", + "integrity": "sha512-I+Oi0deD/xltSluFY8l2EVd/J4mvOaMljxKO2knSD9/KoGDlo/o5GN4gbnVo8nIt76HWHLAk3KtlJKJm6BhbIQ==", + "requires": { + "@fluentui/dom-utilities": "^1.1.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "prop-types": "^15.7.2", + "tslib": "^1.10.0" + } + }, + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + } + } + }, + "@uifabric/merge-styles": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-7.19.2.tgz", + "integrity": "sha512-kTlhwglDqwVgIaJq+0yXgzi65plGhmFcPrfme/rXUGMJZoU+qlGT5jXj5d3kuI59p6VB8jWEg9DAxHozhYeu0g==", + "requires": { + "@uifabric/set-version": "^7.0.24", "tslib": "^1.10.0" } }, @@ -6058,23 +6043,83 @@ "@uifabric/utilities": "^7.23.0", "office-ui-fabric-react": "^7.121.10", "tslib": "^1.10.0" + }, + "dependencies": { + "@fluentui/theme": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-1.7.4.tgz", + "integrity": "sha512-o4eo7lstLxxXl1g2RR9yz18Yt8yjQO/LbQuZjsiAfv/4Bf0CRnb+3j1F7gxIdBWAchKj9gzaMpIFijfI98pvYQ==", + "requires": { + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/file-type-icons": { + "version": "7.6.30", + "resolved": "https://registry.npmjs.org/@uifabric/file-type-icons/-/file-type-icons-7.6.30.tgz", + "integrity": "sha512-NpZ5kKFxmT60EvHzKSD9XpKYDLBCJDZw3ae3WhW4k2z67RKo5yOZ76hzN9y3UWW3E0qMw9r2+zFF7JukjQYHtw==", + "requires": { + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "tslib": "^1.10.0" + } + }, + "@uifabric/foundation": { + "version": "7.9.26", + "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-7.9.26.tgz", + "integrity": "sha512-1FLTb+jlH/Tuel2L9wT/zLl5ZW6W4Lbjrs5VUVjv81vWxzznvPnTf8+Ew0qkzaH7xDuMNMl7okswhV0IfJyheg==", + "requires": { + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/styling": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.19.0.tgz", + "integrity": "sha512-fXComDtGV7dHF4rP4cLHwI6fC+1f/nvPavpMBz4IQdySwixta9TVMKbzt0OA6i0mJztqZCVAd27F/sl9R/JmcQ==", + "requires": { + "@fluentui/theme": "^1.7.4", + "@microsoft/load-themed-styles": "^1.10.26", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/utilities": { + "version": "7.33.5", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.5.tgz", + "integrity": "sha512-I+Oi0deD/xltSluFY8l2EVd/J4mvOaMljxKO2knSD9/KoGDlo/o5GN4gbnVo8nIt76HWHLAk3KtlJKJm6BhbIQ==", + "requires": { + "@fluentui/dom-utilities": "^1.1.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "prop-types": "^15.7.2", + "tslib": "^1.10.0" + } + } } }, "@uifabric/react-hooks": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@uifabric/react-hooks/-/react-hooks-7.13.9.tgz", - "integrity": "sha512-VtDg2b3ypYXX7MLp1STk1Fj6ZIeZktXnm0hu1Os/pGvq6xkuLRly5XP6ZSHitm8K7ZcMo48CcNL8smmiXprBQg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@uifabric/react-hooks/-/react-hooks-7.14.0.tgz", + "integrity": "sha512-Ndu/DEKHF4gFXEZa2AGgSkdWaj+njVrsSyXbkWRh2UZReFWnH1LMko9p/ZCwk1i9kAd5CUmyIfURUzIEya9YCg==", "requires": { - "@fluentui/react-window-provider": "^1.0.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/utilities": "^7.33.2", + "@fluentui/react-window-provider": "^1.0.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", "tslib": "^1.10.0" } }, "@uifabric/set-version": { - "version": "7.0.23", - "resolved": "https://registry.npmjs.org/@uifabric/set-version/-/set-version-7.0.23.tgz", - "integrity": "sha512-9E+YKtnH2kyMKnK9XZZsqyM8OCxEJIIfxtaThTlQpYOzrWAGJxQADFbZ7+Usi0U2xHnWNPFROjq+B9ocEzhqMA==", + "version": "7.0.24", + "resolved": "https://registry.npmjs.org/@uifabric/set-version/-/set-version-7.0.24.tgz", + "integrity": "sha512-t0Pt21dRqdC707/ConVJC0WvcQ/KF7tKLU8AZY7YdjgJpMHi1c0C427DB4jfUY19I92f60LOQyhJ4efH+KpFEg==", "requires": { "tslib": "^1.10.0" } @@ -6089,49 +6134,177 @@ "@uifabric/set-version": "^7.0.15", "@uifabric/utilities": "^7.23.0", "tslib": "^1.10.0" - } - }, - "@uifabric/theme-samples": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/@uifabric/theme-samples/-/theme-samples-7.2.6.tgz", - "integrity": "sha512-oDBKF1I9E9kd75Jmi/WYkd7oMNMMpmkdcrasjnLGjAr8uQUCHIZAWL6Kf0R7EHdvqOupX7LrDZtj4BBBAICfmw==", - "requires": { - "@fluentui/theme": "^1.7.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/variants": "^7.2.32", - "office-ui-fabric-react": "^7.157.0", - "tslib": "^1.10.0" }, "dependencies": { - "@uifabric/styling": { - "version": "7.16.19", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.16.19.tgz", - "integrity": "sha512-T5fjUCx0LbzUC8Myw15YCaBjdGbSrihWSiPHtLVW77k59yWAW947XnH73QngE8xU7kyKPH3AhQrUEBMB2NjHag==", + "@types/react": { + "version": "16.14.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.5.tgz", + "integrity": "sha512-YRRv9DNZhaVTVRh9Wmmit7Y0UFhEVqXqCSw3uazRWMxa2x85hWQZ5BN24i7GXZbaclaLXEcodEeIHsjBA8eAMw==", "requires": { - "@fluentui/theme": "^1.7.1", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", - "@uifabric/utilities": "^7.33.2", + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "16.9.12", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.12.tgz", + "integrity": "sha512-i7NPZZpPte3jtVOoW+eLB7G/jsX5OM6GqQnH+lC0nq0rqwlK0x8WcMEvYDgFWqWhWMlTltTimzdMax6wYfZssA==", + "requires": { + "@types/react": "^16" + } + }, + "@uifabric/utilities": { + "version": "7.33.5", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.5.tgz", + "integrity": "sha512-I+Oi0deD/xltSluFY8l2EVd/J4mvOaMljxKO2knSD9/KoGDlo/o5GN4gbnVo8nIt76HWHLAk3KtlJKJm6BhbIQ==", + "requires": { + "@fluentui/dom-utilities": "^1.1.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "prop-types": "^15.7.2", "tslib": "^1.10.0" } }, - "office-ui-fabric-react": { - "version": "7.157.0", - "resolved": "https://registry.npmjs.org/office-ui-fabric-react/-/office-ui-fabric-react-7.157.0.tgz", - "integrity": "sha512-nS0RfhQKho2S2hiUxHcgM47AZUK1EzbjkdWkofNHQk8q0PwJkQPTUjTbSuxhQNLzXHiaQJz930ZYUvRCZvlL1w==", + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + } + } + }, + "@uifabric/theme-samples": { + "version": "7.2.34", + "resolved": "https://registry.npmjs.org/@uifabric/theme-samples/-/theme-samples-7.2.34.tgz", + "integrity": "sha512-olraurYMgXOA3ytPcm8oBcXj/eWZ04pAtpENkHQVujR6Ok4qqka1neVchTW7IBUgw+X+Rl/ampT7sqq77h2JYw==", + "requires": { + "@fluentui/theme": "^1.7.4", + "@uifabric/set-version": "^7.0.24", + "@uifabric/variants": "^7.2.35", + "office-ui-fabric-react": "^7.168.2", + "tslib": "^1.10.0" + }, + "dependencies": { + "@fluentui/react-focus": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-7.17.6.tgz", + "integrity": "sha512-JkLWNDe567lhvbnIhbYv9nUWYDIVN06utc3krs0UZBI+A0YZtQmftBtY0ghXo4PSjgozZocdu9sYkkgZOgyRLg==", "requires": { - "@fluentui/date-time-utilities": "^7.9.0", - "@fluentui/react-focus": "^7.17.1", - "@fluentui/react-window-provider": "^1.0.1", + "@fluentui/keyboard-key": "^0.2.12", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@fluentui/react-window-provider": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-1.0.2.tgz", + "integrity": "sha512-fGSgL3Vp/+6t1Ysfz21FWZmqsU+iFVxOigvHnm5uKVyyRPwtaabv/F6kQ2y5isLMI2YmJaUd2i0cDJKu8ggrvw==", + "requires": { + "@uifabric/set-version": "^7.0.24", + "tslib": "^1.10.0" + } + }, + "@fluentui/theme": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-1.7.4.tgz", + "integrity": "sha512-o4eo7lstLxxXl1g2RR9yz18Yt8yjQO/LbQuZjsiAfv/4Bf0CRnb+3j1F7gxIdBWAchKj9gzaMpIFijfI98pvYQ==", + "requires": { + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@types/react": { + "version": "16.14.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.5.tgz", + "integrity": "sha512-YRRv9DNZhaVTVRh9Wmmit7Y0UFhEVqXqCSw3uazRWMxa2x85hWQZ5BN24i7GXZbaclaLXEcodEeIHsjBA8eAMw==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "16.9.12", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.12.tgz", + "integrity": "sha512-i7NPZZpPte3jtVOoW+eLB7G/jsX5OM6GqQnH+lC0nq0rqwlK0x8WcMEvYDgFWqWhWMlTltTimzdMax6wYfZssA==", + "requires": { + "@types/react": "^16" + } + }, + "@uifabric/foundation": { + "version": "7.9.26", + "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-7.9.26.tgz", + "integrity": "sha512-1FLTb+jlH/Tuel2L9wT/zLl5ZW6W4Lbjrs5VUVjv81vWxzznvPnTf8+Ew0qkzaH7xDuMNMl7okswhV0IfJyheg==", + "requires": { + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/react-hooks": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@uifabric/react-hooks/-/react-hooks-7.14.0.tgz", + "integrity": "sha512-Ndu/DEKHF4gFXEZa2AGgSkdWaj+njVrsSyXbkWRh2UZReFWnH1LMko9p/ZCwk1i9kAd5CUmyIfURUzIEya9YCg==", + "requires": { + "@fluentui/react-window-provider": "^1.0.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/styling": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.19.0.tgz", + "integrity": "sha512-fXComDtGV7dHF4rP4cLHwI6fC+1f/nvPavpMBz4IQdySwixta9TVMKbzt0OA6i0mJztqZCVAd27F/sl9R/JmcQ==", + "requires": { + "@fluentui/theme": "^1.7.4", "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/foundation": "^7.9.21", - "@uifabric/icons": "^7.5.18", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/react-hooks": "^7.13.9", - "@uifabric/set-version": "^7.0.23", - "@uifabric/styling": "^7.16.19", - "@uifabric/utilities": "^7.33.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@uifabric/utilities": { + "version": "7.33.5", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.5.tgz", + "integrity": "sha512-I+Oi0deD/xltSluFY8l2EVd/J4mvOaMljxKO2knSD9/KoGDlo/o5GN4gbnVo8nIt76HWHLAk3KtlJKJm6BhbIQ==", + "requires": { + "@fluentui/dom-utilities": "^1.1.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "prop-types": "^15.7.2", + "tslib": "^1.10.0" + } + }, + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + }, + "office-ui-fabric-react": { + "version": "7.168.2", + "resolved": "https://registry.npmjs.org/office-ui-fabric-react/-/office-ui-fabric-react-7.168.2.tgz", + "integrity": "sha512-ssN6/6K4Z/PdT2ExE1q61B34w6LqfQrqTvrlq/NfSvDk7USxXvP3+rd7HQAUrynSsWx2MnNeYt23d34sSHLCKw==", + "requires": { + "@fluentui/date-time-utilities": "^7.9.1", + "@fluentui/react-focus": "^7.17.6", + "@fluentui/react-window-provider": "^1.0.2", + "@microsoft/load-themed-styles": "^1.10.26", + "@uifabric/foundation": "^7.9.26", + "@uifabric/icons": "^7.5.23", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/react-hooks": "^7.14.0", + "@uifabric/set-version": "^7.0.24", + "@uifabric/styling": "^7.19.0", + "@uifabric/utilities": "^7.33.5", "prop-types": "^15.7.2", "tslib": "^1.10.0" } @@ -6139,25 +6312,73 @@ } }, "@uifabric/utilities": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.2.tgz", - "integrity": "sha512-v2c3IUJdpru/hoGNOwIW549O5D4XBAc5sLpB7RREGI5ywoWuIJlNyYtBEGOwhAY62J2blj11qi86Ep+oZDM/Kw==", + "version": "7.33.5", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.5.tgz", + "integrity": "sha512-I+Oi0deD/xltSluFY8l2EVd/J4mvOaMljxKO2knSD9/KoGDlo/o5GN4gbnVo8nIt76HWHLAk3KtlJKJm6BhbIQ==", "requires": { - "@fluentui/dom-utilities": "^1.1.1", - "@uifabric/merge-styles": "^7.19.1", - "@uifabric/set-version": "^7.0.23", + "@fluentui/dom-utilities": "^1.1.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", "prop-types": "^15.7.2", "tslib": "^1.10.0" } }, "@uifabric/variants": { - "version": "7.2.32", - "resolved": "https://registry.npmjs.org/@uifabric/variants/-/variants-7.2.32.tgz", - "integrity": "sha512-ffyizuMGyF/8SnPqBvdQ5IceiN5nVQkrUI0+GhCuKmZC7IDlW+srjfzzjHZ9QLmnb3N5e/qlCrjbhfgFvTfZ6w==", + "version": "7.2.35", + "resolved": "https://registry.npmjs.org/@uifabric/variants/-/variants-7.2.35.tgz", + "integrity": "sha512-pK9n0QM3wYuE/f7scOhkW0jsSx1BPU6RePeuMJcoriCgK6zeN66p5ySwh+UhjuEtoGaSfVxeFve02hWNTfO8vg==", "requires": { - "@fluentui/theme": "^1.7.1", - "@uifabric/set-version": "^7.0.23", + "@fluentui/theme": "^1.7.4", + "@uifabric/set-version": "^7.0.24", "tslib": "^1.10.0" + }, + "dependencies": { + "@fluentui/theme": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-1.7.4.tgz", + "integrity": "sha512-o4eo7lstLxxXl1g2RR9yz18Yt8yjQO/LbQuZjsiAfv/4Bf0CRnb+3j1F7gxIdBWAchKj9gzaMpIFijfI98pvYQ==", + "requires": { + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "@uifabric/utilities": "^7.33.5", + "tslib": "^1.10.0" + } + }, + "@types/react": { + "version": "16.14.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.5.tgz", + "integrity": "sha512-YRRv9DNZhaVTVRh9Wmmit7Y0UFhEVqXqCSw3uazRWMxa2x85hWQZ5BN24i7GXZbaclaLXEcodEeIHsjBA8eAMw==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "16.9.12", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.12.tgz", + "integrity": "sha512-i7NPZZpPte3jtVOoW+eLB7G/jsX5OM6GqQnH+lC0nq0rqwlK0x8WcMEvYDgFWqWhWMlTltTimzdMax6wYfZssA==", + "requires": { + "@types/react": "^16" + } + }, + "@uifabric/utilities": { + "version": "7.33.5", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.33.5.tgz", + "integrity": "sha512-I+Oi0deD/xltSluFY8l2EVd/J4mvOaMljxKO2knSD9/KoGDlo/o5GN4gbnVo8nIt76HWHLAk3KtlJKJm6BhbIQ==", + "requires": { + "@fluentui/dom-utilities": "^1.1.2", + "@uifabric/merge-styles": "^7.19.2", + "@uifabric/set-version": "^7.0.24", + "prop-types": "^15.7.2", + "tslib": "^1.10.0" + } + }, + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + } } }, "@ungap/url-search-params": { @@ -7261,9 +7482,9 @@ "integrity": "sha1-SfiW1uhYpKSZ34XDj7OZua/4QPg=" }, "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "optional": true, "requires": { "buffer": "^5.5.0", @@ -7939,9 +8160,9 @@ }, "dependencies": { "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "optional": true, "requires": { @@ -19353,9 +19574,9 @@ } }, "node-abi": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", - "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.26.0.tgz", + "integrity": "sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ==", "optional": true, "requires": { "semver": "^5.4.1" @@ -20065,24 +20286,6 @@ "tslib": "^1.10.0" }, "dependencies": { - "@fluentui/date-time-utilities": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-7.9.1.tgz", - "integrity": "sha512-o8iU1VIY+QsqVRWARKiky29fh4KR1xaKSgMClXIi65qkt8EDDhjmlzL0KVDEoDA2GWukwb/1PpaVCWDg4v3cUQ==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - } - }, - "@fluentui/dom-utilities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-1.1.2.tgz", - "integrity": "sha512-XqPS7l3YoMwxdNlaYF6S2Mp0K3FmVIOIy2K3YkMc+eRxu9wFK6emr2Q/3rBhtG5u/On37NExRT7/5CTLnoi9gw==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - } - }, "@fluentui/react-focus": { "version": "7.17.6", "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-7.17.6.tgz", @@ -20128,25 +20331,6 @@ "tslib": "^1.10.0" } }, - "@uifabric/icons": { - "version": "7.5.23", - "resolved": "https://registry.npmjs.org/@uifabric/icons/-/icons-7.5.23.tgz", - "integrity": "sha512-eIvUbH0EWgFgdfgFfINgqS2ZVZTyJ/9n5nR4bmcyAe75wsKxm4ser4WIT9IvaBF6+HFVfjUF/v6+VMD7y2LBng==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.19.0", - "tslib": "^1.10.0" - } - }, - "@uifabric/merge-styles": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-7.19.2.tgz", - "integrity": "sha512-kTlhwglDqwVgIaJq+0yXgzi65plGhmFcPrfme/rXUGMJZoU+qlGT5jXj5d3kuI59p6VB8jWEg9DAxHozhYeu0g==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - } - }, "@uifabric/react-hooks": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@uifabric/react-hooks/-/react-hooks-7.14.0.tgz", @@ -20158,14 +20342,6 @@ "tslib": "^1.10.0" } }, - "@uifabric/set-version": { - "version": "7.0.24", - "resolved": "https://registry.npmjs.org/@uifabric/set-version/-/set-version-7.0.24.tgz", - "integrity": "sha512-t0Pt21dRqdC707/ConVJC0WvcQ/KF7tKLU8AZY7YdjgJpMHi1c0C427DB4jfUY19I92f60LOQyhJ4efH+KpFEg==", - "requires": { - "tslib": "^1.10.0" - } - }, "@uifabric/styling": { "version": "7.19.0", "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.19.0.tgz", diff --git a/package.json b/package.json index 8a6d354f1..70b1bf588 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@types/mkdirp": "1.0.1", "@types/node-fetch": "2.5.7", "@uifabric/react-cards": "0.109.110", + "@uifabric/react-hooks": "7.14.0", "@uifabric/styling": "7.13.7", "applicationinsights": "1.8.0", "bootstrap": "3.4.1", diff --git a/src/Common/CosmosClient.ts b/src/Common/CosmosClient.ts index 4e3029290..9ba100b3b 100644 --- a/src/Common/CosmosClient.ts +++ b/src/Common/CosmosClient.ts @@ -43,12 +43,7 @@ export const endpoint = () => { const location = _global.parent ? _global.parent.location : _global.location; return configContext.EMULATOR_ENDPOINT || location.origin; } - return ( - userContext.endpoint || - (userContext.databaseAccount && - userContext.databaseAccount.properties && - userContext.databaseAccount.properties.documentEndpoint) - ); + return userContext.endpoint || userContext?.databaseAccount?.properties?.documentEndpoint; }; export async function getTokenFromAuthService(verb: string, resourceType: string, resourceId?: string): Promise { diff --git a/src/Common/MongoProxyClient.ts b/src/Common/MongoProxyClient.ts index ad22c9257..f9f5b356d 100644 --- a/src/Common/MongoProxyClient.ts +++ b/src/Common/MongoProxyClient.ts @@ -61,7 +61,7 @@ export function queryDocuments( query: string, continuationToken?: string ): Promise { - const databaseAccount = userContext.databaseAccount; + const { databaseAccount } = userContext; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const params = { db: databaseId, @@ -121,7 +121,7 @@ export function readDocument( collection: Collection, documentId: DocumentId ): Promise { - const databaseAccount = userContext.databaseAccount; + const { databaseAccount } = userContext; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const idComponents = documentId.self.split("/"); const path = idComponents.slice(0, 4).join("/"); @@ -167,7 +167,7 @@ export function createDocument( partitionKeyProperty: string, documentContent: unknown ): Promise { - const databaseAccount = userContext.databaseAccount; + const { databaseAccount } = userContext; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const params = { db: databaseId, @@ -206,7 +206,7 @@ export function updateDocument( documentId: DocumentId, documentContent: string ): Promise { - const databaseAccount = userContext.databaseAccount; + const { databaseAccount } = userContext; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const idComponents = documentId.self.split("/"); const path = idComponents.slice(0, 5).join("/"); @@ -247,7 +247,7 @@ export function updateDocument( } export function deleteDocument(databaseId: string, collection: Collection, documentId: DocumentId): Promise { - const databaseAccount = userContext.databaseAccount; + const { databaseAccount } = userContext; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const idComponents = documentId.self.split("/"); const path = idComponents.slice(0, 5).join("/"); @@ -289,7 +289,7 @@ export function deleteDocument(databaseId: string, collection: Collection, docum export function createMongoCollectionWithProxy( params: DataModels.CreateCollectionParams ): Promise { - const databaseAccount = userContext.databaseAccount; + const { databaseAccount } = userContext; const shardKey: string = params.partitionKey?.paths[0]; const mongoParams: DataModels.MongoParameters = { resourceUrl: databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint, diff --git a/src/Common/PortalNotifications.ts b/src/Common/PortalNotifications.ts index 4298b0b8f..774c37cad 100644 --- a/src/Common/PortalNotifications.ts +++ b/src/Common/PortalNotifications.ts @@ -1,8 +1,8 @@ +import { configContext, Platform } from "../ConfigContext"; import * as DataModels from "../Contracts/DataModels"; import * as ViewModels from "../Contracts/ViewModels"; -import { getAuthorizationHeader } from "../Utils/AuthorizationUtils"; import { userContext } from "../UserContext"; -import { configContext, Platform } from "../ConfigContext"; +import { getAuthorizationHeader } from "../Utils/AuthorizationUtils"; const notificationsPath = () => { switch (configContext.platform) { @@ -20,9 +20,7 @@ export const fetchPortalNotifications = async (): Promise => { - const defaultExperience = userContext.apiType; - switch (defaultExperience) { + const { apiType } = userContext; + switch (apiType) { case "SQL": return createSqlContainer(params); case "Mongo": @@ -75,7 +75,7 @@ const createCollectionWithARM = async (params: DataModels.CreateCollectionParams case "Tables": return createTable(params); default: - throw new Error(`Unsupported default experience type: ${defaultExperience}`); + throw new Error(`Unsupported default experience type: ${apiType}`); } }; diff --git a/src/Common/dataAccess/createDatabase.ts b/src/Common/dataAccess/createDatabase.ts index d6ea3b834..fc4172ce5 100644 --- a/src/Common/dataAccess/createDatabase.ts +++ b/src/Common/dataAccess/createDatabase.ts @@ -48,8 +48,9 @@ export async function createDatabase(params: DataModels.CreateDatabaseParams): P } async function createDatabaseWithARM(params: DataModels.CreateDatabaseParams): Promise { - const defaultExperience = userContext.apiType; - switch (defaultExperience) { + const { apiType } = userContext; + + switch (apiType) { case "SQL": return createSqlDatabase(params); case "Mongo": @@ -59,7 +60,7 @@ async function createDatabaseWithARM(params: DataModels.CreateDatabaseParams): P case "Gremlin": return createGremlineDatabase(params); default: - throw new Error(`Unsupported default experience type: ${defaultExperience}`); + throw new Error(`Unsupported default experience type: ${apiType}`); } } diff --git a/src/Common/dataAccess/deleteCollection.ts b/src/Common/dataAccess/deleteCollection.ts index b1d15ee4b..ec3dd7453 100644 --- a/src/Common/dataAccess/deleteCollection.ts +++ b/src/Common/dataAccess/deleteCollection.ts @@ -27,12 +27,10 @@ export async function deleteCollection(databaseId: string, collectionId: string) } function deleteCollectionWithARM(databaseId: string, collectionId: string): Promise { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; - const defaultExperience = userContext.apiType; + const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext; + const accountName = databaseAccount.name; - switch (defaultExperience) { + switch (apiType) { case "SQL": return deleteSqlContainer(subscriptionId, resourceGroup, accountName, databaseId, collectionId); case "Mongo": @@ -44,6 +42,6 @@ function deleteCollectionWithARM(databaseId: string, collectionId: string): Prom case "Tables": return deleteTable(subscriptionId, resourceGroup, accountName, collectionId); default: - throw new Error(`Unsupported default experience type: ${defaultExperience}`); + throw new Error(`Unsupported default experience type: ${apiType}`); } } diff --git a/src/Common/dataAccess/deleteDatabase.ts b/src/Common/dataAccess/deleteDatabase.ts index f30084fc3..4e7d3523c 100644 --- a/src/Common/dataAccess/deleteDatabase.ts +++ b/src/Common/dataAccess/deleteDatabase.ts @@ -30,12 +30,10 @@ export async function deleteDatabase(databaseId: string): Promise { } function deleteDatabaseWithARM(databaseId: string): Promise { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; - const defaultExperience = userContext.apiType; + const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext; + const accountName = databaseAccount.name; - switch (defaultExperience) { + switch (apiType) { case "SQL": return deleteSqlDatabase(subscriptionId, resourceGroup, accountName, databaseId); case "Mongo": @@ -45,6 +43,6 @@ function deleteDatabaseWithARM(databaseId: string): Promise { case "Gremlin": return deleteGremlinDatabase(subscriptionId, resourceGroup, accountName, databaseId); default: - throw new Error(`Unsupported default experience type: ${defaultExperience}`); + throw new Error(`Unsupported default experience type: ${apiType}`); } } diff --git a/src/Common/dataAccess/getCollectionDataUsageSize.ts b/src/Common/dataAccess/getCollectionDataUsageSize.ts index a86f22c25..bb53bc6ac 100644 --- a/src/Common/dataAccess/getCollectionDataUsageSize.ts +++ b/src/Common/dataAccess/getCollectionDataUsageSize.ts @@ -1,8 +1,8 @@ import { AuthType } from "../../AuthType"; -import { armRequest } from "../../Utils/arm/request"; import { configContext } from "../../ConfigContext"; -import { handleError } from "../ErrorHandlingUtils"; import { userContext } from "../../UserContext"; +import { armRequest } from "../../Utils/arm/request"; +import { handleError } from "../ErrorHandlingUtils"; interface TimeSeriesData { data: { @@ -45,9 +45,9 @@ export const getCollectionUsageSizeInKB = async (databaseName: string, container return undefined; } - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; + const filter = `DatabaseName eq '${databaseName}' and CollectionName eq '${containerName}'`; const metricNames = "DataUsage,IndexUsage"; const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/providers/microsoft.insights/metrics`; diff --git a/src/Common/dataAccess/readCollectionOffer.ts b/src/Common/dataAccess/readCollectionOffer.ts index b83d37cb7..4b1e0a9e8 100644 --- a/src/Common/dataAccess/readCollectionOffer.ts +++ b/src/Common/dataAccess/readCollectionOffer.ts @@ -28,14 +28,12 @@ export const readCollectionOffer = async (params: ReadCollectionOfferParams): Pr }; const readCollectionOfferWithARM = async (databaseId: string, collectionId: string): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; - const defaultExperience = userContext.apiType; + const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext; + const accountName = databaseAccount.name; let rpResponse; try { - switch (defaultExperience) { + switch (apiType) { case "SQL": rpResponse = await getSqlContainerThroughput( subscriptionId, @@ -76,7 +74,7 @@ const readCollectionOfferWithARM = async (databaseId: string, collectionId: stri rpResponse = await getTableThroughput(subscriptionId, resourceGroup, accountName, collectionId); break; default: - throw new Error(`Unsupported default experience type: ${defaultExperience}`); + throw new Error(`Unsupported default experience type: ${apiType}`); } } catch (error) { if (error.code !== "NotFound") { diff --git a/src/Common/dataAccess/readCollections.ts b/src/Common/dataAccess/readCollections.ts index f12b8074f..7161f598c 100644 --- a/src/Common/dataAccess/readCollections.ts +++ b/src/Common/dataAccess/readCollections.ts @@ -29,12 +29,11 @@ export async function readCollections(databaseId: string): Promise { let rpResponse; - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; - const defaultExperience = userContext.apiType; - switch (defaultExperience) { + const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext; + const accountName = databaseAccount.name; + + switch (apiType) { case "SQL": rpResponse = await listSqlContainers(subscriptionId, resourceGroup, accountName, databaseId); break; @@ -51,7 +50,7 @@ async function readCollectionsWithARM(databaseId: string): Promise collection.properties?.resource as DataModels.Collection); diff --git a/src/Common/dataAccess/readDatabaseOffer.ts b/src/Common/dataAccess/readDatabaseOffer.ts index 17cc80afd..b26976a64 100644 --- a/src/Common/dataAccess/readDatabaseOffer.ts +++ b/src/Common/dataAccess/readDatabaseOffer.ts @@ -27,14 +27,12 @@ export const readDatabaseOffer = async (params: ReadDatabaseOfferParams): Promis }; const readDatabaseOfferWithARM = async (databaseId: string): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; - const defaultExperience = userContext.apiType; + const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext; + const accountName = databaseAccount.name; let rpResponse; try { - switch (defaultExperience) { + switch (apiType) { case "SQL": rpResponse = await getSqlDatabaseThroughput(subscriptionId, resourceGroup, accountName, databaseId); break; @@ -48,7 +46,7 @@ const readDatabaseOfferWithARM = async (databaseId: string): Promise => { rpResponse = await getGremlinDatabaseThroughput(subscriptionId, resourceGroup, accountName, databaseId); break; default: - throw new Error(`Unsupported default experience type: ${defaultExperience}`); + throw new Error(`Unsupported default experience type: ${apiType}`); } } catch (error) { if (error.code !== "NotFound") { diff --git a/src/Common/dataAccess/readDatabases.ts b/src/Common/dataAccess/readDatabases.ts index 1026c0654..079c92269 100644 --- a/src/Common/dataAccess/readDatabases.ts +++ b/src/Common/dataAccess/readDatabases.ts @@ -29,12 +29,10 @@ export async function readDatabases(): Promise { async function readDatabasesWithARM(): Promise { let rpResponse; - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; - const defaultExperience = userContext.apiType; + const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext; + const accountName = databaseAccount.name; - switch (defaultExperience) { + switch (apiType) { case "SQL": rpResponse = await listSqlDatabases(subscriptionId, resourceGroup, accountName); break; @@ -48,7 +46,7 @@ async function readDatabasesWithARM(): Promise { rpResponse = await listGremlinDatabases(subscriptionId, resourceGroup, accountName); break; default: - throw new Error(`Unsupported default experience type: ${defaultExperience}`); + throw new Error(`Unsupported default experience type: ${apiType}`); } return rpResponse?.value?.map((database) => database.properties?.resource as DataModels.Database); diff --git a/src/Common/dataAccess/readMongoDBCollection.tsx b/src/Common/dataAccess/readMongoDBCollection.tsx index 240e81315..e7ae32c79 100644 --- a/src/Common/dataAccess/readMongoDBCollection.tsx +++ b/src/Common/dataAccess/readMongoDBCollection.tsx @@ -1,9 +1,9 @@ +import { AuthType } from "../../AuthType"; import { userContext } from "../../UserContext"; import { getMongoDBCollection } from "../../Utils/arm/generatedClients/2020-04-01/mongoDBResources"; import { MongoDBCollectionResource } from "../../Utils/arm/generatedClients/2020-04-01/types"; import { logConsoleProgress } from "../../Utils/NotificationConsoleUtils"; import { handleError } from "../ErrorHandlingUtils"; -import { AuthType } from "../../AuthType"; export async function readMongoDBCollectionThroughRP( databaseId: string, @@ -13,9 +13,9 @@ export async function readMongoDBCollectionThroughRP( return undefined; } let collection: MongoDBCollectionResource; - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; const clearMessage = logConsoleProgress(`Reading container ${collectionId}`); try { diff --git a/src/Common/dataAccess/readUserDefinedFunctions.ts b/src/Common/dataAccess/readUserDefinedFunctions.ts index f1a0f52c5..813ff95c5 100644 --- a/src/Common/dataAccess/readUserDefinedFunctions.ts +++ b/src/Common/dataAccess/readUserDefinedFunctions.ts @@ -11,12 +11,13 @@ export async function readUserDefinedFunctions( collectionId: string ): Promise<(UserDefinedFunctionDefinition & Resource)[]> { const clearMessage = logConsoleProgress(`Querying user defined functions for container ${collectionId}`); + const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") { const rpResponse = await listSqlUserDefinedFunctions( - userContext.subscriptionId, - userContext.resourceGroup, - userContext.databaseAccount.name, + subscriptionId, + resourceGroup, + databaseAccount.name, databaseId, collectionId ); diff --git a/src/Common/dataAccess/updateCollection.ts b/src/Common/dataAccess/updateCollection.ts index f3b9d5002..2d022bbe9 100644 --- a/src/Common/dataAccess/updateCollection.ts +++ b/src/Common/dataAccess/updateCollection.ts @@ -63,12 +63,10 @@ async function updateCollectionWithARM( collectionId: string, newCollection: Partial ): Promise { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; - const defaultExperience = userContext.apiType; + const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext; + const accountName = databaseAccount.name; - switch (defaultExperience) { + switch (apiType) { case "SQL": return updateSqlContainer(databaseId, collectionId, subscriptionId, resourceGroup, accountName, newCollection); case "Cassandra": @@ -87,7 +85,7 @@ async function updateCollectionWithARM( newCollection ); default: - throw new Error(`Unsupported default experience type: ${defaultExperience}`); + throw new Error(`Unsupported default experience type: ${apiType}`); } } diff --git a/src/Common/dataAccess/updateOffer.ts b/src/Common/dataAccess/updateOffer.ts index 0050f3648..7f132d729 100644 --- a/src/Common/dataAccess/updateOffer.ts +++ b/src/Common/dataAccess/updateOffer.ts @@ -144,9 +144,8 @@ const updateDatabaseOfferWithARM = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateSqlContainerToAutoscale( @@ -178,9 +177,8 @@ const updateSqlContainerOffer = async (params: UpdateOfferParams): Promise }; const updateMongoCollectionOffer = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateMongoDBCollectionToAutoscale( @@ -212,9 +210,8 @@ const updateMongoCollectionOffer = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateCassandraTableToAutoscale( @@ -246,9 +243,8 @@ const updateCassandraTableOffer = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateGremlinGraphToAutoscale( @@ -280,9 +276,8 @@ const updateGremlinGraphOffer = async (params: UpdateOfferParams): Promise }; const updateTableOffer = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateTableToAutoscale(subscriptionId, resourceGroup, accountName, params.collectionId); @@ -295,9 +290,8 @@ const updateTableOffer = async (params: UpdateOfferParams): Promise => { }; const updateSqlDatabaseOffer = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateSqlDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId); @@ -310,9 +304,8 @@ const updateSqlDatabaseOffer = async (params: UpdateOfferParams): Promise }; const updateMongoDatabaseOffer = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateMongoDBDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId); @@ -325,9 +318,8 @@ const updateMongoDatabaseOffer = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateCassandraKeyspaceToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId); @@ -340,9 +332,8 @@ const updateCassandraKeyspaceOffer = async (params: UpdateOfferParams): Promise< }; const updateGremlinDatabaseOffer = async (params: UpdateOfferParams): Promise => { - const subscriptionId = userContext.subscriptionId; - const resourceGroup = userContext.resourceGroup; - const accountName = userContext.databaseAccount.name; + const { subscriptionId, resourceGroup, databaseAccount } = userContext; + const accountName = databaseAccount.name; if (params.migrateToAutoPilot) { await migrateGremlinDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId); diff --git a/src/Common/dataAccess/updateStoredProcedure.ts b/src/Common/dataAccess/updateStoredProcedure.ts index 9889ac519..dd6d86f66 100644 --- a/src/Common/dataAccess/updateStoredProcedure.ts +++ b/src/Common/dataAccess/updateStoredProcedure.ts @@ -20,11 +20,13 @@ export async function updateStoredProcedure( ): Promise { const clearMessage = logConsoleProgress(`Updating stored procedure ${storedProcedure.id}`); try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; + + if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") { const getResponse = await getSqlStoredProcedure( - userContext.subscriptionId, - userContext.resourceGroup, - userContext.databaseAccount.name, + subscriptionId, + resourceGroup, + databaseAccount.name, databaseId, collectionId, storedProcedure.id @@ -38,9 +40,9 @@ export async function updateStoredProcedure( }, }; const rpResponse = await createUpdateSqlStoredProcedure( - userContext.subscriptionId, - userContext.resourceGroup, - userContext.databaseAccount.name, + subscriptionId, + resourceGroup, + databaseAccount.name, databaseId, collectionId, storedProcedure.id, diff --git a/src/Common/dataAccess/updateTrigger.ts b/src/Common/dataAccess/updateTrigger.ts index f4898052b..d43463738 100644 --- a/src/Common/dataAccess/updateTrigger.ts +++ b/src/Common/dataAccess/updateTrigger.ts @@ -16,12 +16,13 @@ export async function updateTrigger( trigger: TriggerDefinition ): Promise { const clearMessage = logConsoleProgress(`Updating trigger ${trigger.id}`); + const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") { const getResponse = await getSqlTrigger( - userContext.subscriptionId, - userContext.resourceGroup, - userContext.databaseAccount.name, + subscriptionId, + resourceGroup, + databaseAccount.name, databaseId, collectionId, trigger.id @@ -35,9 +36,9 @@ export async function updateTrigger( }, }; const rpResponse = await createUpdateSqlTrigger( - userContext.subscriptionId, - userContext.resourceGroup, - userContext.databaseAccount.name, + subscriptionId, + resourceGroup, + databaseAccount.name, databaseId, collectionId, trigger.id, diff --git a/src/Common/dataAccess/updateUserDefinedFunction.ts b/src/Common/dataAccess/updateUserDefinedFunction.ts index 1d50951d6..3b9449915 100644 --- a/src/Common/dataAccess/updateUserDefinedFunction.ts +++ b/src/Common/dataAccess/updateUserDefinedFunction.ts @@ -19,12 +19,13 @@ export async function updateUserDefinedFunction( userDefinedFunction: UserDefinedFunctionDefinition ): Promise { const clearMessage = logConsoleProgress(`Updating user defined function ${userDefinedFunction.id}`); + const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext; try { - if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { + if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") { const getResponse = await getSqlUserDefinedFunction( - userContext.subscriptionId, - userContext.resourceGroup, - userContext.databaseAccount.name, + subscriptionId, + resourceGroup, + databaseAccount.name, databaseId, collectionId, userDefinedFunction.id @@ -38,9 +39,9 @@ export async function updateUserDefinedFunction( }, }; const rpResponse = await createUpdateSqlUserDefinedFunction( - userContext.subscriptionId, - userContext.resourceGroup, - userContext.databaseAccount.name, + subscriptionId, + resourceGroup, + databaseAccount.name, databaseId, collectionId, userDefinedFunction.id, diff --git a/src/Explorer/Controls/Directory/__snapshots__/DirectoryListComponent.test.tsx.snap b/src/Explorer/Controls/Directory/__snapshots__/DirectoryListComponent.test.tsx.snap index df48f5459..c22935fcd 100644 --- a/src/Explorer/Controls/Directory/__snapshots__/DirectoryListComponent.test.tsx.snap +++ b/src/Explorer/Controls/Directory/__snapshots__/DirectoryListComponent.test.tsx.snap @@ -350,11 +350,11 @@ exports[`test render renders with filters 1`] = ` } >