merge master and resolve code conflict

This commit is contained in:
hardiknai-techm
2021-05-06 16:12:30 +05:30
193 changed files with 6769 additions and 7218 deletions

View File

@@ -138,6 +138,7 @@ jobs:
matrix: matrix:
test-file: test-file:
- ./test/cassandra/container.spec.ts - ./test/cassandra/container.spec.ts
- ./test/graph/container.spec.ts
- ./test/sql/container.spec.ts - ./test/sql/container.spec.ts
- ./test/mongo/container.spec.ts - ./test/mongo/container.spec.ts
- ./test/selfServe/selfServeExample.spec.ts - ./test/selfServe/selfServeExample.spec.ts

View File

@@ -71,7 +71,8 @@ module.exports = {
moduleNameMapper: { moduleNameMapper: {
"^.*[.](svg|png|gif|less|css)$": "<rootDir>/mockModule", "^.*[.](svg|png|gif|less|css)$": "<rootDir>/mockModule",
"@nteract/stateful-components/(.*)$": "<rootDir>/mockModule", "@nteract/stateful-components/(.*)$": "<rootDir>/mockModule",
"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 "@fluentui/react/lib/(.*)$": "@fluentui/react/lib-commonjs/$1", // https://github.com/microsoft/fluentui/wiki/Version-8-release-notes
"monaco-editor/(.*)$": "<rootDir>/__mocks__/monaco-editor",
"^dnd-core$": "dnd-core/dist/cjs", "^dnd-core$": "dnd-core/dist/cjs",
"^react-dnd$": "react-dnd/dist/cjs", "^react-dnd$": "react-dnd/dist/cjs",
"^react-dnd-html5-backend$": "react-dnd-html5-backend/dist/cjs", "^react-dnd-html5-backend$": "react-dnd-html5-backend/dist/cjs",

1459
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,6 +11,7 @@
"@azure/ms-rest-nodeauth": "3.0.7", "@azure/ms-rest-nodeauth": "3.0.7",
"@babel/plugin-proposal-class-properties": "7.13.0", "@babel/plugin-proposal-class-properties": "7.13.0",
"@babel/plugin-proposal-decorators": "7.13.15", "@babel/plugin-proposal-decorators": "7.13.15",
"@fluentui/react": "8.10.1",
"@jupyterlab/services": "6.0.2", "@jupyterlab/services": "6.0.2",
"@jupyterlab/terminal": "3.0.3", "@jupyterlab/terminal": "3.0.3",
"@microsoft/applicationinsights-web": "2.6.1", "@microsoft/applicationinsights-web": "2.6.1",
@@ -43,7 +44,6 @@
"@types/mkdirp": "1.0.1", "@types/mkdirp": "1.0.1",
"@types/node-fetch": "2.5.7", "@types/node-fetch": "2.5.7",
"@uifabric/react-cards": "0.109.110", "@uifabric/react-cards": "0.109.110",
"@uifabric/styling": "7.13.7",
"applicationinsights": "1.8.0", "applicationinsights": "1.8.0",
"bootstrap": "3.4.1", "bootstrap": "3.4.1",
"canvas": "file:./canvas", "canvas": "file:./canvas",
@@ -75,7 +75,6 @@
"monaco-editor": "0.18.1", "monaco-editor": "0.18.1",
"ms": "2.1.3", "ms": "2.1.3",
"msal": "1.4.4", "msal": "1.4.4",
"office-ui-fabric-react": "7.164.2",
"p-retry": "4.2.0", "p-retry": "4.2.0",
"plotly.js-cartesian-dist-min": "1.52.3", "plotly.js-cartesian-dist-min": "1.52.3",
"post-robot": "10.0.42", "post-robot": "10.0.42",
@@ -111,15 +110,12 @@
"@types/crossroads": "0.0.30", "@types/crossroads": "0.0.30",
"@types/d3": "5.9.2", "@types/d3": "5.9.2",
"@types/enzyme": "3.10.8", "@types/enzyme": "3.10.8",
"@types/expect-puppeteer": "4.4.5",
"@types/hasher": "0.0.31", "@types/hasher": "0.0.31",
"@types/jest": "26.0.23", "@types/jest": "26.0.23",
"@types/jest-environment-puppeteer": "4.4.1",
"@types/memoize-one": "4.1.1", "@types/memoize-one": "4.1.1",
"@types/node": "12.11.1", "@types/node": "12.11.1",
"@types/post-robot": "10.0.1", "@types/post-robot": "10.0.1",
"@types/promise.prototype.finally": "2.0.3", "@types/promise.prototype.finally": "2.0.3",
"@types/puppeteer": "5.4.3",
"@types/q": "1.5.1", "@types/q": "1.5.1",
"@types/react": "17.0.3", "@types/react": "17.0.3",
"@types/react-dom": "17.0.3", "@types/react-dom": "17.0.3",
@@ -139,7 +135,7 @@
"clean-webpack-plugin": "4.0.0-alpha.0", "clean-webpack-plugin": "4.0.0-alpha.0",
"copy-webpack-plugin": "8.1.1", "copy-webpack-plugin": "8.1.1",
"create-file-webpack": "1.0.2", "create-file-webpack": "1.0.2",
"css-loader": "5.2.4", "css-loader": "1.0.0",
"enzyme": "3.11.0", "enzyme": "3.11.0",
"enzyme-to-json": "3.6.2", "enzyme-to-json": "3.6.2",
"eslint": "7.25.0", "eslint": "7.25.0",
@@ -163,7 +159,7 @@
"less": "4.1.1", "less": "4.1.1",
"less-loader": "8.1.1", "less-loader": "8.1.1",
"less-vars-loader": "1.1.0", "less-vars-loader": "1.1.0",
"mini-css-extract-plugin": "1.6.0", "mini-css-extract-plugin": "1.5.0",
"monaco-editor-webpack-plugin": "1.7.0", "monaco-editor-webpack-plugin": "1.7.0",
"node-fetch": "2.6.1", "node-fetch": "2.6.1",
"playwright": "1.10.0", "playwright": "1.10.0",

View File

@@ -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;
}

View File

@@ -11,13 +11,14 @@ import * as ReactDOM from "react-dom";
import "../../externals/iframeResizer.contentWindow.min.js"; // Required for iFrameResizer to work import "../../externals/iframeResizer.contentWindow.min.js"; // Required for iFrameResizer to work
import "../Explorer/Notebook/NotebookRenderer/base.css"; import "../Explorer/Notebook/NotebookRenderer/base.css";
import "../Explorer/Notebook/NotebookRenderer/default.css"; import "../Explorer/Notebook/NotebookRenderer/default.css";
import "./CellOutputViewer.less";
import { TransformMedia } from "./TransformMedia"; import { TransformMedia } from "./TransformMedia";
export interface CellOutputViewerProps { export interface CellOutputViewerProps {
id: string; id: string;
contentRef: ContentRef; contentRef: ContentRef;
hidden: boolean; outputsContainerClassName: string;
expanded: boolean; outputClassName: string;
outputs: OnDiskOutput[]; outputs: OnDiskOutput[];
onMetadataChange: (metadata: JSONObject, mediaType: string, index?: number) => void; onMetadataChange: (metadata: JSONObject, mediaType: string, index?: number) => void;
} }
@@ -34,27 +35,26 @@ const onInit = async () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
const props = (event as any).data as CellOutputViewerProps; const props = (event as any).data as CellOutputViewerProps;
const outputs = ( const outputs = (
<div <div data-iframe-height className={props.outputsContainerClassName}>
data-iframe-height
className={`nteract-cell-outputs ${props.hidden ? "hidden" : ""} ${props.expanded ? "expanded" : ""}`}
>
{props.outputs?.map((output, index) => ( {props.outputs?.map((output, index) => (
<Output output={createImmutableOutput(output)} key={index}> <div className={props.outputClassName} key={index}>
<TransformMedia <Output output={createImmutableOutput(output)} key={index}>
output_type={"display_data"} <TransformMedia
id={props.id} output_type={"display_data"}
contentRef={props.contentRef} id={props.id}
onMetadataChange={(metadata, mediaType) => props.onMetadataChange(metadata, mediaType, index)} contentRef={props.contentRef}
/> onMetadataChange={(metadata, mediaType) => props.onMetadataChange(metadata, mediaType, index)}
<TransformMedia />
output_type={"execute_result"} <TransformMedia
id={props.id} output_type={"execute_result"}
contentRef={props.contentRef} id={props.id}
onMetadataChange={(metadata, mediaType) => props.onMetadataChange(metadata, mediaType, index)} contentRef={props.contentRef}
/> onMetadataChange={(metadata, mediaType) => props.onMetadataChange(metadata, mediaType, index)}
<KernelOutputError /> />
<StreamText /> <KernelOutputError />
</Output> <StreamText />
</Output>
</div>
))} ))}
</div> </div>
); );

View File

@@ -65,28 +65,18 @@ export class ClientDefaults {
public static readonly arcadiaTokenRefreshIntervalPaddingMs: number = 2000; public static readonly arcadiaTokenRefreshIntervalPaddingMs: number = 2000;
} }
export class AccountKind { export enum AccountKind {
public static DocumentDB: string = "DocumentDB"; DocumentDB = "DocumentDB",
public static MongoDB: string = "MongoDB"; MongoDB = "MongoDB",
public static Parse: string = "Parse"; Parse = "Parse",
public static GlobalDocumentDB: string = "GlobalDocumentDB"; GlobalDocumentDB = "GlobalDocumentDB",
public static Default: string = AccountKind.DocumentDB; Default = "DocumentDB",
} }
export class CorrelationBackend { export class CorrelationBackend {
public static Url: string = "https://aka.ms/cosmosdbanalytics"; 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 { export class CapabilityNames {
public static EnableTable: string = "EnableTable"; public static EnableTable: string = "EnableTable";
public static EnableGremlin: string = "EnableGremlin"; public static EnableGremlin: string = "EnableGremlin";

View File

@@ -1,5 +1,5 @@
import { ResourceType } from "@azure/cosmos/dist-esm/common/constants"; 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 { updateUserContext } from "../UserContext";
import { endpoint, getTokenFromAuthService, requestPlugin, tokenProvider } from "./CosmosClient"; import { endpoint, getTokenFromAuthService, requestPlugin, tokenProvider } from "./CosmosClient";
@@ -91,7 +91,6 @@ describe("endpoint", () => {
location: "foo", location: "foo",
type: "foo", type: "foo",
kind: "foo", kind: "foo",
tags: [],
properties: { properties: {
documentEndpoint: "bar", documentEndpoint: "bar",
gremlinEndpoint: "foo", gremlinEndpoint: "foo",

View File

@@ -43,12 +43,7 @@ export const endpoint = () => {
const location = _global.parent ? _global.parent.location : _global.location; const location = _global.parent ? _global.parent.location : _global.location;
return configContext.EMULATOR_ENDPOINT || location.origin; return configContext.EMULATOR_ENDPOINT || location.origin;
} }
return ( return userContext.endpoint || userContext?.databaseAccount?.properties?.documentEndpoint;
userContext.endpoint ||
(userContext.databaseAccount &&
userContext.databaseAccount.properties &&
userContext.databaseAccount.properties.documentEndpoint)
);
}; };
export async function getTokenFromAuthService(verb: string, resourceType: string, resourceId?: string): Promise<any> { export async function getTokenFromAuthService(verb: string, resourceType: string, resourceId?: string): Promise<any> {

View File

@@ -1,4 +1,4 @@
import { DatePicker, TextField } from "office-ui-fabric-react"; import { DatePicker, TextField } from "@fluentui/react";
import React, { FunctionComponent } from "react"; import React, { FunctionComponent } from "react";
export interface TableEntityProps { export interface TableEntityProps {

View File

@@ -61,7 +61,7 @@ export function queryDocuments(
query: string, query: string,
continuationToken?: string continuationToken?: string
): Promise<QueryResponse> { ): Promise<QueryResponse> {
const databaseAccount = userContext.databaseAccount; const { databaseAccount } = userContext;
const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint;
const params = { const params = {
db: databaseId, db: databaseId,
@@ -121,7 +121,7 @@ export function readDocument(
collection: Collection, collection: Collection,
documentId: DocumentId documentId: DocumentId
): Promise<DataModels.DocumentId> { ): Promise<DataModels.DocumentId> {
const databaseAccount = userContext.databaseAccount; const { databaseAccount } = userContext;
const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint;
const idComponents = documentId.self.split("/"); const idComponents = documentId.self.split("/");
const path = idComponents.slice(0, 4).join("/"); const path = idComponents.slice(0, 4).join("/");
@@ -167,7 +167,7 @@ export function createDocument(
partitionKeyProperty: string, partitionKeyProperty: string,
documentContent: unknown documentContent: unknown
): Promise<DataModels.DocumentId> { ): Promise<DataModels.DocumentId> {
const databaseAccount = userContext.databaseAccount; const { databaseAccount } = userContext;
const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint;
const params = { const params = {
db: databaseId, db: databaseId,
@@ -206,7 +206,7 @@ export function updateDocument(
documentId: DocumentId, documentId: DocumentId,
documentContent: string documentContent: string
): Promise<DataModels.DocumentId> { ): Promise<DataModels.DocumentId> {
const databaseAccount = userContext.databaseAccount; const { databaseAccount } = userContext;
const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint;
const idComponents = documentId.self.split("/"); const idComponents = documentId.self.split("/");
const path = idComponents.slice(0, 5).join("/"); const path = idComponents.slice(0, 5).join("/");
@@ -247,7 +247,7 @@ export function updateDocument(
} }
export function deleteDocument(databaseId: string, collection: Collection, documentId: DocumentId): Promise<void> { export function deleteDocument(databaseId: string, collection: Collection, documentId: DocumentId): Promise<void> {
const databaseAccount = userContext.databaseAccount; const { databaseAccount } = userContext;
const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint; const resourceEndpoint = databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint;
const idComponents = documentId.self.split("/"); const idComponents = documentId.self.split("/");
const path = idComponents.slice(0, 5).join("/"); const path = idComponents.slice(0, 5).join("/");
@@ -289,7 +289,7 @@ export function deleteDocument(databaseId: string, collection: Collection, docum
export function createMongoCollectionWithProxy( export function createMongoCollectionWithProxy(
params: DataModels.CreateCollectionParams params: DataModels.CreateCollectionParams
): Promise<DataModels.Collection> { ): Promise<DataModels.Collection> {
const databaseAccount = userContext.databaseAccount; const { databaseAccount } = userContext;
const shardKey: string = params.partitionKey?.paths[0]; const shardKey: string = params.partitionKey?.paths[0];
const mongoParams: DataModels.MongoParameters = { const mongoParams: DataModels.MongoParameters = {
resourceUrl: databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint, resourceUrl: databaseAccount.properties.mongoEndpoint || databaseAccount.properties.documentEndpoint,

View File

@@ -1,8 +1,8 @@
import { configContext, Platform } from "../ConfigContext";
import * as DataModels from "../Contracts/DataModels"; import * as DataModels from "../Contracts/DataModels";
import * as ViewModels from "../Contracts/ViewModels"; import * as ViewModels from "../Contracts/ViewModels";
import { getAuthorizationHeader } from "../Utils/AuthorizationUtils";
import { userContext } from "../UserContext"; import { userContext } from "../UserContext";
import { configContext, Platform } from "../ConfigContext"; import { getAuthorizationHeader } from "../Utils/AuthorizationUtils";
const notificationsPath = () => { const notificationsPath = () => {
switch (configContext.platform) { switch (configContext.platform) {
@@ -20,9 +20,7 @@ export const fetchPortalNotifications = async (): Promise<DataModels.Notificatio
return []; return [];
} }
const databaseAccount = userContext.databaseAccount; const { databaseAccount, resourceGroup, subscriptionId } = userContext;
const subscriptionId = userContext.subscriptionId;
const resourceGroup = userContext.resourceGroup;
const url = `${configContext.BACKEND_ENDPOINT}${notificationsPath()}?accountName=${ const url = `${configContext.BACKEND_ENDPOINT}${notificationsPath()}?accountName=${
databaseAccount.name databaseAccount.name
}&subscriptionId=${subscriptionId}&resourceGroup=${resourceGroup}`; }&subscriptionId=${subscriptionId}&resourceGroup=${resourceGroup}`;

View File

@@ -182,11 +182,8 @@ export class QueriesClient {
} }
public getResourceId(): string { public getResourceId(): string {
const databaseAccount = userContext.databaseAccount; const { databaseAccount, subscriptionId = "", resourceGroup = "" } = userContext;
const databaseAccountName = (databaseAccount && databaseAccount.name) || ""; const databaseAccountName = databaseAccount?.name || "";
const subscriptionId = userContext.subscriptionId || "";
const resourceGroup = userContext.resourceGroup || "";
return `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.DocumentDb/databaseAccounts/${databaseAccountName}`; return `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.DocumentDb/databaseAccounts/${databaseAccountName}`;
} }

View File

@@ -10,7 +10,7 @@ import {
Stack, Stack,
TextField, TextField,
TooltipHost, TooltipHost,
} from "office-ui-fabric-react"; } from "@fluentui/react";
import React, { FunctionComponent } from "react"; import React, { FunctionComponent } from "react";
import { CassandraType, TableType } from "../Explorer/Tables/Constants"; import { CassandraType, TableType } from "../Explorer/Tables/Constants";
import { userContext } from "../UserContext"; import { userContext } from "../UserContext";

View File

@@ -1,6 +1,6 @@
import { useId } from "@uifabric/react-hooks"; import { ITooltipHostStyles, TooltipHost } from "@fluentui/react";
import { useId } from "@fluentui/react-hooks";
import { ReactComponent as InfoBubble } from "images/info-bubble.svg"; import { ReactComponent as InfoBubble } from "images/info-bubble.svg";
import { ITooltipHostStyles, TooltipHost } from "office-ui-fabric-react/lib/Tooltip";
import * as React from "react"; import * as React from "react";
const calloutProps = { gapSpace: 0 }; const calloutProps = { gapSpace: 0 };

View File

@@ -1,5 +1,5 @@
import { Image, Stack, TextField } from "@fluentui/react";
import FolderIcon from "images/folder_16x16.svg"; import FolderIcon from "images/folder_16x16.svg";
import { Image, Stack, TextField } from "office-ui-fabric-react";
import React, { ChangeEvent, FunctionComponent, KeyboardEvent, useRef, useState } from "react"; import React, { ChangeEvent, FunctionComponent, KeyboardEvent, useRef, useState } from "react";
import * as Constants from "../Constants"; import * as Constants from "../Constants";
import { Tooltip } from "../Tooltip/Tooltip"; import { Tooltip } from "../Tooltip/Tooltip";

View File

@@ -62,8 +62,8 @@ export const createCollection = async (params: DataModels.CreateCollectionParams
}; };
const createCollectionWithARM = async (params: DataModels.CreateCollectionParams): Promise<DataModels.Collection> => { const createCollectionWithARM = async (params: DataModels.CreateCollectionParams): Promise<DataModels.Collection> => {
const defaultExperience = userContext.apiType; const { apiType } = userContext;
switch (defaultExperience) { switch (apiType) {
case "SQL": case "SQL":
return createSqlContainer(params); return createSqlContainer(params);
case "Mongo": case "Mongo":
@@ -75,7 +75,7 @@ const createCollectionWithARM = async (params: DataModels.CreateCollectionParams
case "Tables": case "Tables":
return createTable(params); return createTable(params);
default: default:
throw new Error(`Unsupported default experience type: ${defaultExperience}`); throw new Error(`Unsupported default experience type: ${apiType}`);
} }
}; };

View File

@@ -48,8 +48,9 @@ export async function createDatabase(params: DataModels.CreateDatabaseParams): P
} }
async function createDatabaseWithARM(params: DataModels.CreateDatabaseParams): Promise<DataModels.Database> { async function createDatabaseWithARM(params: DataModels.CreateDatabaseParams): Promise<DataModels.Database> {
const defaultExperience = userContext.apiType; const { apiType } = userContext;
switch (defaultExperience) {
switch (apiType) {
case "SQL": case "SQL":
return createSqlDatabase(params); return createSqlDatabase(params);
case "Mongo": case "Mongo":
@@ -59,7 +60,7 @@ async function createDatabaseWithARM(params: DataModels.CreateDatabaseParams): P
case "Gremlin": case "Gremlin":
return createGremlineDatabase(params); return createGremlineDatabase(params);
default: default:
throw new Error(`Unsupported default experience type: ${defaultExperience}`); throw new Error(`Unsupported default experience type: ${apiType}`);
} }
} }

View File

@@ -27,12 +27,10 @@ export async function deleteCollection(databaseId: string, collectionId: string)
} }
function deleteCollectionWithARM(databaseId: string, collectionId: string): Promise<void> { function deleteCollectionWithARM(databaseId: string, collectionId: string): Promise<void> {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
const defaultExperience = userContext.apiType;
switch (defaultExperience) { switch (apiType) {
case "SQL": case "SQL":
return deleteSqlContainer(subscriptionId, resourceGroup, accountName, databaseId, collectionId); return deleteSqlContainer(subscriptionId, resourceGroup, accountName, databaseId, collectionId);
case "Mongo": case "Mongo":
@@ -44,6 +42,6 @@ function deleteCollectionWithARM(databaseId: string, collectionId: string): Prom
case "Tables": case "Tables":
return deleteTable(subscriptionId, resourceGroup, accountName, collectionId); return deleteTable(subscriptionId, resourceGroup, accountName, collectionId);
default: default:
throw new Error(`Unsupported default experience type: ${defaultExperience}`); throw new Error(`Unsupported default experience type: ${apiType}`);
} }
} }

View File

@@ -30,12 +30,10 @@ export async function deleteDatabase(databaseId: string): Promise<void> {
} }
function deleteDatabaseWithARM(databaseId: string): Promise<void> { function deleteDatabaseWithARM(databaseId: string): Promise<void> {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
const defaultExperience = userContext.apiType;
switch (defaultExperience) { switch (apiType) {
case "SQL": case "SQL":
return deleteSqlDatabase(subscriptionId, resourceGroup, accountName, databaseId); return deleteSqlDatabase(subscriptionId, resourceGroup, accountName, databaseId);
case "Mongo": case "Mongo":
@@ -45,6 +43,6 @@ function deleteDatabaseWithARM(databaseId: string): Promise<void> {
case "Gremlin": case "Gremlin":
return deleteGremlinDatabase(subscriptionId, resourceGroup, accountName, databaseId); return deleteGremlinDatabase(subscriptionId, resourceGroup, accountName, databaseId);
default: default:
throw new Error(`Unsupported default experience type: ${defaultExperience}`); throw new Error(`Unsupported default experience type: ${apiType}`);
} }
} }

View File

@@ -1,8 +1,8 @@
import { AuthType } from "../../AuthType"; import { AuthType } from "../../AuthType";
import { armRequest } from "../../Utils/arm/request";
import { configContext } from "../../ConfigContext"; import { configContext } from "../../ConfigContext";
import { handleError } from "../ErrorHandlingUtils";
import { userContext } from "../../UserContext"; import { userContext } from "../../UserContext";
import { armRequest } from "../../Utils/arm/request";
import { handleError } from "../ErrorHandlingUtils";
interface TimeSeriesData { interface TimeSeriesData {
data: { data: {
@@ -45,9 +45,9 @@ export const getCollectionUsageSizeInKB = async (databaseName: string, container
return undefined; return undefined;
} }
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
const filter = `DatabaseName eq '${databaseName}' and CollectionName eq '${containerName}'`; const filter = `DatabaseName eq '${databaseName}' and CollectionName eq '${containerName}'`;
const metricNames = "DataUsage,IndexUsage"; const metricNames = "DataUsage,IndexUsage";
const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/providers/microsoft.insights/metrics`; const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/providers/microsoft.insights/metrics`;

View File

@@ -28,14 +28,12 @@ export const readCollectionOffer = async (params: ReadCollectionOfferParams): Pr
}; };
const readCollectionOfferWithARM = async (databaseId: string, collectionId: string): Promise<Offer> => { const readCollectionOfferWithARM = async (databaseId: string, collectionId: string): Promise<Offer> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
const defaultExperience = userContext.apiType;
let rpResponse; let rpResponse;
try { try {
switch (defaultExperience) { switch (apiType) {
case "SQL": case "SQL":
rpResponse = await getSqlContainerThroughput( rpResponse = await getSqlContainerThroughput(
subscriptionId, subscriptionId,
@@ -76,7 +74,7 @@ const readCollectionOfferWithARM = async (databaseId: string, collectionId: stri
rpResponse = await getTableThroughput(subscriptionId, resourceGroup, accountName, collectionId); rpResponse = await getTableThroughput(subscriptionId, resourceGroup, accountName, collectionId);
break; break;
default: default:
throw new Error(`Unsupported default experience type: ${defaultExperience}`); throw new Error(`Unsupported default experience type: ${apiType}`);
} }
} catch (error) { } catch (error) {
if (error.code !== "NotFound") { if (error.code !== "NotFound") {

View File

@@ -29,12 +29,11 @@ export async function readCollections(databaseId: string): Promise<DataModels.Co
async function readCollectionsWithARM(databaseId: string): Promise<DataModels.Collection[]> { async function readCollectionsWithARM(databaseId: string): Promise<DataModels.Collection[]> {
let rpResponse; 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": case "SQL":
rpResponse = await listSqlContainers(subscriptionId, resourceGroup, accountName, databaseId); rpResponse = await listSqlContainers(subscriptionId, resourceGroup, accountName, databaseId);
break; break;
@@ -51,7 +50,7 @@ async function readCollectionsWithARM(databaseId: string): Promise<DataModels.Co
rpResponse = await listTables(subscriptionId, resourceGroup, accountName); rpResponse = await listTables(subscriptionId, resourceGroup, accountName);
break; break;
default: default:
throw new Error(`Unsupported default experience type: ${defaultExperience}`); throw new Error(`Unsupported default experience type: ${apiType}`);
} }
return rpResponse?.value?.map((collection) => collection.properties?.resource as DataModels.Collection); return rpResponse?.value?.map((collection) => collection.properties?.resource as DataModels.Collection);

View File

@@ -27,14 +27,12 @@ export const readDatabaseOffer = async (params: ReadDatabaseOfferParams): Promis
}; };
const readDatabaseOfferWithARM = async (databaseId: string): Promise<Offer> => { const readDatabaseOfferWithARM = async (databaseId: string): Promise<Offer> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
const defaultExperience = userContext.apiType;
let rpResponse; let rpResponse;
try { try {
switch (defaultExperience) { switch (apiType) {
case "SQL": case "SQL":
rpResponse = await getSqlDatabaseThroughput(subscriptionId, resourceGroup, accountName, databaseId); rpResponse = await getSqlDatabaseThroughput(subscriptionId, resourceGroup, accountName, databaseId);
break; break;
@@ -48,7 +46,7 @@ const readDatabaseOfferWithARM = async (databaseId: string): Promise<Offer> => {
rpResponse = await getGremlinDatabaseThroughput(subscriptionId, resourceGroup, accountName, databaseId); rpResponse = await getGremlinDatabaseThroughput(subscriptionId, resourceGroup, accountName, databaseId);
break; break;
default: default:
throw new Error(`Unsupported default experience type: ${defaultExperience}`); throw new Error(`Unsupported default experience type: ${apiType}`);
} }
} catch (error) { } catch (error) {
if (error.code !== "NotFound") { if (error.code !== "NotFound") {

View File

@@ -29,12 +29,10 @@ export async function readDatabases(): Promise<DataModels.Database[]> {
async function readDatabasesWithARM(): Promise<DataModels.Database[]> { async function readDatabasesWithARM(): Promise<DataModels.Database[]> {
let rpResponse; let rpResponse;
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
const defaultExperience = userContext.apiType;
switch (defaultExperience) { switch (apiType) {
case "SQL": case "SQL":
rpResponse = await listSqlDatabases(subscriptionId, resourceGroup, accountName); rpResponse = await listSqlDatabases(subscriptionId, resourceGroup, accountName);
break; break;
@@ -48,7 +46,7 @@ async function readDatabasesWithARM(): Promise<DataModels.Database[]> {
rpResponse = await listGremlinDatabases(subscriptionId, resourceGroup, accountName); rpResponse = await listGremlinDatabases(subscriptionId, resourceGroup, accountName);
break; break;
default: 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); return rpResponse?.value?.map((database) => database.properties?.resource as DataModels.Database);

View File

@@ -1,9 +1,9 @@
import { AuthType } from "../../AuthType";
import { userContext } from "../../UserContext"; import { userContext } from "../../UserContext";
import { getMongoDBCollection } from "../../Utils/arm/generatedClients/2020-04-01/mongoDBResources"; import { getMongoDBCollection } from "../../Utils/arm/generatedClients/2020-04-01/mongoDBResources";
import { MongoDBCollectionResource } from "../../Utils/arm/generatedClients/2020-04-01/types"; import { MongoDBCollectionResource } from "../../Utils/arm/generatedClients/2020-04-01/types";
import { logConsoleProgress } from "../../Utils/NotificationConsoleUtils"; import { logConsoleProgress } from "../../Utils/NotificationConsoleUtils";
import { handleError } from "../ErrorHandlingUtils"; import { handleError } from "../ErrorHandlingUtils";
import { AuthType } from "../../AuthType";
export async function readMongoDBCollectionThroughRP( export async function readMongoDBCollectionThroughRP(
databaseId: string, databaseId: string,
@@ -13,9 +13,9 @@ export async function readMongoDBCollectionThroughRP(
return undefined; return undefined;
} }
let collection: MongoDBCollectionResource; let collection: MongoDBCollectionResource;
const subscriptionId = userContext.subscriptionId;
const resourceGroup = userContext.resourceGroup; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const accountName = userContext.databaseAccount.name; const accountName = databaseAccount.name;
const clearMessage = logConsoleProgress(`Reading container ${collectionId}`); const clearMessage = logConsoleProgress(`Reading container ${collectionId}`);
try { try {

View File

@@ -11,12 +11,13 @@ export async function readUserDefinedFunctions(
collectionId: string collectionId: string
): Promise<(UserDefinedFunctionDefinition & Resource)[]> { ): Promise<(UserDefinedFunctionDefinition & Resource)[]> {
const clearMessage = logConsoleProgress(`Querying user defined functions for container ${collectionId}`); const clearMessage = logConsoleProgress(`Querying user defined functions for container ${collectionId}`);
const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext;
try { try {
if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") {
const rpResponse = await listSqlUserDefinedFunctions( const rpResponse = await listSqlUserDefinedFunctions(
userContext.subscriptionId, subscriptionId,
userContext.resourceGroup, resourceGroup,
userContext.databaseAccount.name, databaseAccount.name,
databaseId, databaseId,
collectionId collectionId
); );

View File

@@ -63,12 +63,10 @@ async function updateCollectionWithARM(
collectionId: string, collectionId: string,
newCollection: Partial<Collection> newCollection: Partial<Collection>
): Promise<Collection> { ): Promise<Collection> {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, apiType, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
const defaultExperience = userContext.apiType;
switch (defaultExperience) { switch (apiType) {
case "SQL": case "SQL":
return updateSqlContainer(databaseId, collectionId, subscriptionId, resourceGroup, accountName, newCollection); return updateSqlContainer(databaseId, collectionId, subscriptionId, resourceGroup, accountName, newCollection);
case "Cassandra": case "Cassandra":
@@ -87,7 +85,7 @@ async function updateCollectionWithARM(
newCollection newCollection
); );
default: default:
throw new Error(`Unsupported default experience type: ${defaultExperience}`); throw new Error(`Unsupported default experience type: ${apiType}`);
} }
} }

View File

@@ -144,9 +144,8 @@ const updateDatabaseOfferWithARM = async (params: UpdateOfferParams): Promise<Of
}; };
const updateSqlContainerOffer = async (params: UpdateOfferParams): Promise<void> => { const updateSqlContainerOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateSqlContainerToAutoscale( await migrateSqlContainerToAutoscale(
@@ -178,9 +177,8 @@ const updateSqlContainerOffer = async (params: UpdateOfferParams): Promise<void>
}; };
const updateMongoCollectionOffer = async (params: UpdateOfferParams): Promise<void> => { const updateMongoCollectionOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateMongoDBCollectionToAutoscale( await migrateMongoDBCollectionToAutoscale(
@@ -212,9 +210,8 @@ const updateMongoCollectionOffer = async (params: UpdateOfferParams): Promise<vo
}; };
const updateCassandraTableOffer = async (params: UpdateOfferParams): Promise<void> => { const updateCassandraTableOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateCassandraTableToAutoscale( await migrateCassandraTableToAutoscale(
@@ -246,9 +243,8 @@ const updateCassandraTableOffer = async (params: UpdateOfferParams): Promise<voi
}; };
const updateGremlinGraphOffer = async (params: UpdateOfferParams): Promise<void> => { const updateGremlinGraphOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateGremlinGraphToAutoscale( await migrateGremlinGraphToAutoscale(
@@ -280,9 +276,8 @@ const updateGremlinGraphOffer = async (params: UpdateOfferParams): Promise<void>
}; };
const updateTableOffer = async (params: UpdateOfferParams): Promise<void> => { const updateTableOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateTableToAutoscale(subscriptionId, resourceGroup, accountName, params.collectionId); await migrateTableToAutoscale(subscriptionId, resourceGroup, accountName, params.collectionId);
@@ -295,9 +290,8 @@ const updateTableOffer = async (params: UpdateOfferParams): Promise<void> => {
}; };
const updateSqlDatabaseOffer = async (params: UpdateOfferParams): Promise<void> => { const updateSqlDatabaseOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateSqlDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId); await migrateSqlDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId);
@@ -310,9 +304,8 @@ const updateSqlDatabaseOffer = async (params: UpdateOfferParams): Promise<void>
}; };
const updateMongoDatabaseOffer = async (params: UpdateOfferParams): Promise<void> => { const updateMongoDatabaseOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateMongoDBDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId); await migrateMongoDBDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId);
@@ -325,9 +318,8 @@ const updateMongoDatabaseOffer = async (params: UpdateOfferParams): Promise<void
}; };
const updateCassandraKeyspaceOffer = async (params: UpdateOfferParams): Promise<void> => { const updateCassandraKeyspaceOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateCassandraKeyspaceToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId); await migrateCassandraKeyspaceToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId);
@@ -340,9 +332,8 @@ const updateCassandraKeyspaceOffer = async (params: UpdateOfferParams): Promise<
}; };
const updateGremlinDatabaseOffer = async (params: UpdateOfferParams): Promise<void> => { const updateGremlinDatabaseOffer = async (params: UpdateOfferParams): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, resourceGroup, databaseAccount } = userContext;
const resourceGroup = userContext.resourceGroup; const accountName = databaseAccount.name;
const accountName = userContext.databaseAccount.name;
if (params.migrateToAutoPilot) { if (params.migrateToAutoPilot) {
await migrateGremlinDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId); await migrateGremlinDatabaseToAutoscale(subscriptionId, resourceGroup, accountName, params.databaseId);

View File

@@ -20,11 +20,13 @@ export async function updateStoredProcedure(
): Promise<StoredProcedureDefinition & Resource> { ): Promise<StoredProcedureDefinition & Resource> {
const clearMessage = logConsoleProgress(`Updating stored procedure ${storedProcedure.id}`); const clearMessage = logConsoleProgress(`Updating stored procedure ${storedProcedure.id}`);
try { 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( const getResponse = await getSqlStoredProcedure(
userContext.subscriptionId, subscriptionId,
userContext.resourceGroup, resourceGroup,
userContext.databaseAccount.name, databaseAccount.name,
databaseId, databaseId,
collectionId, collectionId,
storedProcedure.id storedProcedure.id
@@ -38,9 +40,9 @@ export async function updateStoredProcedure(
}, },
}; };
const rpResponse = await createUpdateSqlStoredProcedure( const rpResponse = await createUpdateSqlStoredProcedure(
userContext.subscriptionId, subscriptionId,
userContext.resourceGroup, resourceGroup,
userContext.databaseAccount.name, databaseAccount.name,
databaseId, databaseId,
collectionId, collectionId,
storedProcedure.id, storedProcedure.id,

View File

@@ -16,12 +16,13 @@ export async function updateTrigger(
trigger: TriggerDefinition trigger: TriggerDefinition
): Promise<TriggerDefinition> { ): Promise<TriggerDefinition> {
const clearMessage = logConsoleProgress(`Updating trigger ${trigger.id}`); const clearMessage = logConsoleProgress(`Updating trigger ${trigger.id}`);
const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext;
try { try {
if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") {
const getResponse = await getSqlTrigger( const getResponse = await getSqlTrigger(
userContext.subscriptionId, subscriptionId,
userContext.resourceGroup, resourceGroup,
userContext.databaseAccount.name, databaseAccount.name,
databaseId, databaseId,
collectionId, collectionId,
trigger.id trigger.id
@@ -35,9 +36,9 @@ export async function updateTrigger(
}, },
}; };
const rpResponse = await createUpdateSqlTrigger( const rpResponse = await createUpdateSqlTrigger(
userContext.subscriptionId, subscriptionId,
userContext.resourceGroup, resourceGroup,
userContext.databaseAccount.name, databaseAccount.name,
databaseId, databaseId,
collectionId, collectionId,
trigger.id, trigger.id,

View File

@@ -19,12 +19,13 @@ export async function updateUserDefinedFunction(
userDefinedFunction: UserDefinedFunctionDefinition userDefinedFunction: UserDefinedFunctionDefinition
): Promise<UserDefinedFunctionDefinition & Resource> { ): Promise<UserDefinedFunctionDefinition & Resource> {
const clearMessage = logConsoleProgress(`Updating user defined function ${userDefinedFunction.id}`); const clearMessage = logConsoleProgress(`Updating user defined function ${userDefinedFunction.id}`);
const { authType, useSDKOperations, apiType, subscriptionId, resourceGroup, databaseAccount } = userContext;
try { try {
if (userContext.authType === AuthType.AAD && !userContext.useSDKOperations && userContext.apiType === "SQL") { if (authType === AuthType.AAD && !useSDKOperations && apiType === "SQL") {
const getResponse = await getSqlUserDefinedFunction( const getResponse = await getSqlUserDefinedFunction(
userContext.subscriptionId, subscriptionId,
userContext.resourceGroup, resourceGroup,
userContext.databaseAccount.name, databaseAccount.name,
databaseId, databaseId,
collectionId, collectionId,
userDefinedFunction.id userDefinedFunction.id
@@ -38,9 +39,9 @@ export async function updateUserDefinedFunction(
}, },
}; };
const rpResponse = await createUpdateSqlUserDefinedFunction( const rpResponse = await createUpdateSqlUserDefinedFunction(
userContext.subscriptionId, subscriptionId,
userContext.resourceGroup, resourceGroup,
userContext.databaseAccount.name, databaseAccount.name,
databaseId, databaseId,
collectionId, collectionId,
userDefinedFunction.id, userDefinedFunction.id,

View File

@@ -4,7 +4,6 @@ export interface DatabaseAccount {
location: string; location: string;
type: string; type: string;
kind: string; kind: string;
tags: any;
properties: DatabaseAccountExtendedProperties; properties: DatabaseAccountExtendedProperties;
} }

View File

@@ -1,9 +1,8 @@
import { DefaultButton, IButtonStyles, IContextualMenuItem, IContextualMenuProps } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { ArcadiaWorkspace, SparkPool } from "../../../Contracts/DataModels";
import { DefaultButton, IButtonStyles } from "office-ui-fabric-react/lib/Button";
import { IContextualMenuItem, IContextualMenuProps } from "office-ui-fabric-react/lib/ContextualMenu";
import * as Logger from "../../../Common/Logger";
import { getErrorMessage } from "../../../Common/ErrorHandlingUtils"; import { getErrorMessage } from "../../../Common/ErrorHandlingUtils";
import * as Logger from "../../../Common/Logger";
import { ArcadiaWorkspace, SparkPool } from "../../../Contracts/DataModels";
export interface ArcadiaMenuPickerProps { export interface ArcadiaMenuPickerProps {
selectText?: string; selectText?: string;

View File

@@ -1,4 +1,4 @@
import { Icon, Label, Stack } from "office-ui-fabric-react"; import { Icon, Label, Stack } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { accordionStackTokens } from "../Settings/SettingsRenderUtils"; import { accordionStackTokens } from "../Settings/SettingsRenderUtils";

View File

@@ -1,14 +1,20 @@
import { import {
ChoiceGroup, ChoiceGroup,
DefaultButton,
Dialog as FluentDialog,
DialogFooter,
DialogType,
FontIcon, FontIcon,
IButtonProps,
IChoiceGroupProps, IChoiceGroupProps,
IDialogProps,
IProgressIndicatorProps, IProgressIndicatorProps,
ITextFieldProps,
Link,
PrimaryButton,
ProgressIndicator, ProgressIndicator,
} from "office-ui-fabric-react"; TextField,
import { DefaultButton, IButtonProps, PrimaryButton } from "office-ui-fabric-react/lib/Button"; } from "@fluentui/react";
import { Dialog as FluentDialog, DialogFooter, DialogType, IDialogProps } from "office-ui-fabric-react/lib/Dialog";
import { Link } from "office-ui-fabric-react/lib/Link";
import { ITextFieldProps, TextField } from "office-ui-fabric-react/lib/TextField";
import React, { FunctionComponent } from "react"; import React, { FunctionComponent } from "react";
export interface TextFieldProps extends ITextFieldProps { export interface TextFieldProps extends ITextFieldProps {

View File

@@ -2,9 +2,9 @@
* React component for Switch Directory * React component for Switch Directory
*/ */
import _ from "underscore"; import { Dropdown, IDropdownOption, IDropdownProps } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { Dropdown, IDropdownOption, IDropdownProps } from "office-ui-fabric-react/lib/Dropdown"; import _ from "underscore";
import { Tenant } from "../../../Contracts/DataModels"; import { Tenant } from "../../../Contracts/DataModels";
export interface DefaultDirectoryDropdownProps { export interface DefaultDirectoryDropdownProps {

View File

@@ -1,11 +1,15 @@
import _ from "underscore"; import {
DefaultButton,
IButtonProps,
ITextFieldProps,
List,
ScrollablePane,
Sticky,
StickyPositionType,
TextField,
} from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import _ from "underscore";
import { DefaultButton, IButtonProps } from "office-ui-fabric-react/lib/Button";
import { List } from "office-ui-fabric-react/lib/List";
import { ScrollablePane } from "office-ui-fabric-react/lib/ScrollablePane";
import { Sticky, StickyPositionType } from "office-ui-fabric-react/lib/Sticky";
import { TextField, ITextFieldProps } from "office-ui-fabric-react/lib/TextField";
import { Tenant } from "../../../Contracts/DataModels"; import { Tenant } from "../../../Contracts/DataModels";
export interface DirectoryListProps { export interface DirectoryListProps {

View File

@@ -1,7 +1,7 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`test render renders with directories and default 1`] = ` exports[`test render renders with directories and default 1`] = `
<StyledWithResponsiveMode <Dropdown
className="defaultDirectoryDropdown" className="defaultDirectoryDropdown"
defaultSelectedKey="asdfghjklzxcvbnm9876543210" defaultSelectedKey="asdfghjklzxcvbnm9876543210"
label="Set your default directory" label="Set your default directory"
@@ -26,7 +26,7 @@ exports[`test render renders with directories and default 1`] = `
`; `;
exports[`test render renders with directories and last visit default 1`] = ` exports[`test render renders with directories and last visit default 1`] = `
<StyledWithResponsiveMode <Dropdown
className="defaultDirectoryDropdown" className="defaultDirectoryDropdown"
defaultSelectedKey="lastVisited" defaultSelectedKey="lastVisited"
label="Set your default directory" label="Set your default directory"
@@ -51,7 +51,7 @@ exports[`test render renders with directories and last visit default 1`] = `
`; `;
exports[`test render renders with directories but no default 1`] = ` exports[`test render renders with directories but no default 1`] = `
<StyledWithResponsiveMode <Dropdown
className="defaultDirectoryDropdown" className="defaultDirectoryDropdown"
defaultSelectedKey="lastVisited" defaultSelectedKey="lastVisited"
label="Set your default directory" label="Set your default directory"
@@ -76,7 +76,7 @@ exports[`test render renders with directories but no default 1`] = `
`; `;
exports[`test render renders with no directories 1`] = ` exports[`test render renders with no directories 1`] = `
<StyledWithResponsiveMode <Dropdown
className="defaultDirectoryDropdown" className="defaultDirectoryDropdown"
defaultSelectedKey="lastVisited" defaultSelectedKey="lastVisited"
label="Set your default directory" label="Set your default directory"

View File

@@ -350,11 +350,11 @@ exports[`test render renders with filters 1`] = `
} }
> >
<div <div
className="ms-ScrollablePane root-40" className="ms-ScrollablePane root-53"
data-is-scrollable="true" data-is-scrollable="true"
> >
<div <div
className="stickyAbove-42" className="stickyAbove-55"
style={ style={
Object { Object {
"height": 0, "height": 0,
@@ -365,7 +365,7 @@ exports[`test render renders with filters 1`] = `
} }
/> />
<div <div
className="ms-ScrollablePane--contentContainer contentContainer-41" className="ms-ScrollablePane--contentContainer contentContainer-54"
data-is-scrollable={true} data-is-scrollable={true}
> >
<Sticky <Sticky
@@ -408,7 +408,6 @@ exports[`test render renders with filters 1`] = `
> >
<TextFieldBase <TextFieldBase
ariaLabel="Directory filter text box" ariaLabel="Directory filter text box"
canRevealPassword={false}
className="directoryListFilterTextBox" className="directoryListFilterTextBox"
deferredValidationTime={200} deferredValidationTime={200}
onChange={[Function]} onChange={[Function]}
@@ -691,18 +690,18 @@ exports[`test render renders with filters 1`] = `
validateOnLoad={true} validateOnLoad={true}
> >
<div <div
className="ms-TextField directoryListFilterTextBox root-46" className="ms-TextField directoryListFilterTextBox root-59"
> >
<div <div
className="ms-TextField-wrapper" className="ms-TextField-wrapper"
> >
<div <div
className="ms-TextField-fieldGroup fieldGroup-47" className="ms-TextField-fieldGroup fieldGroup-60"
> >
<input <input
aria-invalid={false} aria-invalid={false}
aria-label="Directory filter text box" aria-label="Directory filter text box"
className="ms-TextField-field field-48" className="ms-TextField-field field-61"
id="TextField0" id="TextField0"
onBlur={[Function]} onBlur={[Function]}
onChange={[Function]} onChange={[Function]}
@@ -1266,7 +1265,6 @@ exports[`test render renders with filters 1`] = `
"borderColor": "#f3f2f1", "borderColor": "#f3f2f1",
"color": "#a19f9d", "color": "#a19f9d",
"cursor": "default", "cursor": "default",
"pointerEvents": "none",
"selectors": Object { "selectors": Object {
":focus": Object { ":focus": Object {
"outline": 0, "outline": 0,
@@ -1929,7 +1927,7 @@ exports[`test render renders with filters 1`] = `
> >
<button <button
aria-disabled={true} aria-disabled={true}
className="ms-Button ms-Button--default is-disabled directoryListButton root-57" className="ms-Button ms-Button--default is-disabled directoryListButton root-70"
data-is-focusable={false} data-is-focusable={false}
disabled={true} disabled={true}
onClick={[Function]} onClick={[Function]}
@@ -1941,7 +1939,7 @@ exports[`test render renders with filters 1`] = `
type="button" type="button"
> >
<span <span
className="ms-Button-flexContainer flexContainer-58" className="ms-Button-flexContainer flexContainer-71"
data-automationid="splitbuttonprimary" data-automationid="splitbuttonprimary"
> >
<div <div
@@ -1972,7 +1970,7 @@ exports[`test render renders with filters 1`] = `
</List> </List>
</div> </div>
<div <div
className="stickyBelow-43" className="stickyBelow-56"
style={ style={
Object { Object {
"bottom": "0px", "bottom": "0px",
@@ -1983,7 +1981,7 @@ exports[`test render renders with filters 1`] = `
} }
> >
<div <div
className="stickyBelowItems-44" className="stickyBelowItems-57"
/> />
</div> </div>
</div> </div>

View File

@@ -1,9 +1,14 @@
import {
Checkbox,
DefaultButton,
Dropdown,
IDropdownOption,
IDropdownStyles,
ITextFieldStyles,
Stack,
TextField,
} from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { Stack } from "office-ui-fabric-react/lib/Stack";
import { Dropdown, IDropdownOption, IDropdownStyles } from "office-ui-fabric-react/lib/Dropdown";
import { Checkbox } from "office-ui-fabric-react/lib/Checkbox";
import { TextField, ITextFieldStyles } from "office-ui-fabric-react/lib/TextField";
import { DefaultButton } from "office-ui-fabric-react";
import "./FeaturePanelComponent.less"; import "./FeaturePanelComponent.less";
export const FeaturePanelComponent: React.FunctionComponent = () => { export const FeaturePanelComponent: React.FunctionComponent = () => {

View File

@@ -1,6 +1,6 @@
import * as React from "react"; import * as React from "react";
import { FeaturePanelComponent } from "./FeaturePanelComponent"; import { FeaturePanelComponent } from "./FeaturePanelComponent";
import { getTheme, mergeStyleSets, FontWeights, Modal, IconButton, IIconProps } from "office-ui-fabric-react"; import { getTheme, mergeStyleSets, FontWeights, Modal, IconButton, IIconProps } from "@fluentui/react";
import "./FeaturePanelLauncher.less"; import "./FeaturePanelLauncher.less";
// Modal wrapper // Modal wrapper

View File

@@ -57,7 +57,7 @@ exports[`Feature panel renders all flags 1`] = `
} }
} }
> >
<StyledWithResponsiveMode <Dropdown
label="Base Url" label="Base Url"
onChange={[Function]} onChange={[Function]}
options={ options={
@@ -85,7 +85,7 @@ exports[`Feature panel renders all flags 1`] = `
} }
} }
/> />
<StyledWithResponsiveMode <Dropdown
label="Platform" label="Platform"
onChange={[Function]} onChange={[Function]}
options={ options={

View File

@@ -1,4 +1,4 @@
import { DefaultButton, IButtonProps, ITextFieldProps, TextField } from "office-ui-fabric-react"; import { DefaultButton, IButtonProps, ITextFieldProps, TextField } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import * as Constants from "../../../Common/Constants"; import * as Constants from "../../../Common/Constants";
import { Action } from "../../../Shared/Telemetry/TelemetryConstants"; import { Action } from "../../../Shared/Telemetry/TelemetryConstants";

View File

@@ -1,10 +1,4 @@
import { import { ChoiceGroup, IButtonProps, IChoiceGroupProps, PrimaryButton, IChoiceGroupOption } from "@fluentui/react";
ChoiceGroup,
IButtonProps,
IChoiceGroupProps,
PrimaryButton,
IChoiceGroupOption,
} from "office-ui-fabric-react";
import * as React from "react"; import * as React from "react";
import { ChildrenMargin } from "./GitHubStyleConstants"; import { ChildrenMargin } from "./GitHubStyleConstants";

View File

@@ -1,4 +1,4 @@
import { DefaultButton, IButtonProps, Link, PrimaryButton } from "office-ui-fabric-react"; import { DefaultButton, IButtonProps, Link, PrimaryButton } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { IGitHubBranch, IGitHubRepo } from "../../../GitHub/GitHubClient"; import { IGitHubBranch, IGitHubRepo } from "../../../GitHub/GitHubClient";
import { AddRepoComponent, AddRepoComponentProps } from "./AddRepoComponent"; import { AddRepoComponent, AddRepoComponentProps } from "./AddRepoComponent";

View File

@@ -4,7 +4,7 @@ import {
IDropdownStyleProps, IDropdownStyleProps,
IDropdownStyles, IDropdownStyles,
IStyleFunctionOrObject, IStyleFunctionOrObject,
} from "office-ui-fabric-react"; } from "@fluentui/react";
export const ButtonsFooterStyle: React.CSSProperties = { export const ButtonsFooterStyle: React.CSSProperties = {
paddingTop: 14, paddingTop: 14,

View File

@@ -16,7 +16,7 @@ import {
ResponsiveMode, ResponsiveMode,
SelectionMode, SelectionMode,
Text, Text,
} from "office-ui-fabric-react"; } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { IGitHubBranch, IGitHubPageInfo } from "../../../GitHub/GitHubClient"; import { IGitHubBranch, IGitHubPageInfo } from "../../../GitHub/GitHubClient";
import * as GitHubUtils from "../../../Utils/GitHubUtils"; import * as GitHubUtils from "../../../Utils/GitHubUtils";

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { Stack, Text, Separator, FontIcon, CommandButton, FontWeights, ITextProps } from "office-ui-fabric-react"; import { Stack, Text, Separator, FontIcon, CommandButton, FontWeights, ITextProps } from "@fluentui/react";
export class GalleryHeaderComponent extends React.Component { export class GalleryHeaderComponent extends React.Component {
private static readonly azureText = "Microsoft Azure"; private static readonly azureText = "Microsoft Azure";

View File

@@ -13,7 +13,6 @@ const createTestDatabaseAccount = (): DataModels.DatabaseAccount => {
gremlinEndpoint: null, gremlinEndpoint: null,
tableEndpoint: null, tableEndpoint: null,
}, },
tags: "testTags",
type: "testType", type: "testType",
}; };
}; };
@@ -30,7 +29,6 @@ const createTestMongo32DatabaseAccount = (): DataModels.DatabaseAccount => {
gremlinEndpoint: null, gremlinEndpoint: null,
tableEndpoint: null, tableEndpoint: null,
}, },
tags: "testTags",
type: "testType", type: "testType",
}; };
}; };
@@ -48,7 +46,6 @@ const createTestMongo36DatabaseAccount = (): DataModels.DatabaseAccount => {
tableEndpoint: null, tableEndpoint: null,
mongoEndpoint: "https://testMongoEndpoint.azure.com/", mongoEndpoint: "https://testMongoEndpoint.azure.com/",
}, },
tags: "testTags",
type: "testType", type: "testType",
}; };
}; };
@@ -65,7 +62,6 @@ const createTestCassandraDatabaseAccount = (): DataModels.DatabaseAccount => {
gremlinEndpoint: null, gremlinEndpoint: null,
tableEndpoint: null, tableEndpoint: null,
}, },
tags: "testTags",
type: "testType", type: "testType",
}; };
}; };

View File

@@ -1,5 +1,3 @@
import { Card } from "@uifabric/react-cards";
import CosmosDBLogo from "images/CosmosDB-logo.svg";
import { import {
BaseButton, BaseButton,
Button, Button,
@@ -9,14 +7,15 @@ import {
Image, Image,
ImageFit, ImageFit,
Link, Link,
LinkBase,
Persona, Persona,
Separator, Separator,
Spinner, Spinner,
SpinnerSize, SpinnerSize,
Text, Text,
TooltipHost, TooltipHost,
} from "office-ui-fabric-react"; } from "@fluentui/react";
import { Card } from "@uifabric/react-cards";
import CosmosDBLogo from "images/CosmosDB-logo.svg";
import React, { FunctionComponent, useState } from "react"; import React, { FunctionComponent, useState } from "react";
import { IGalleryItem } from "../../../../Juno/JunoClient"; import { IGalleryItem } from "../../../../Juno/JunoClient";
import * as FileSystemUtil from "../../../Notebook/FileSystemUtil"; import * as FileSystemUtil from "../../../Notebook/FileSystemUtil";
@@ -110,7 +109,7 @@ export const GalleryCardComponent: FunctionComponent<GalleryCardComponentProps>
const handlerOnClick = ( const handlerOnClick = (
event: event:
| React.MouseEvent<HTMLElement | HTMLAnchorElement | HTMLButtonElement | LinkBase, MouseEvent> | React.MouseEvent<HTMLElement | HTMLAnchorElement | HTMLButtonElement | MouseEvent>
| React.MouseEvent< | React.MouseEvent<
HTMLAnchorElement | HTMLButtonElement | HTMLDivElement | BaseButton | Button | HTMLSpanElement, HTMLAnchorElement | HTMLButtonElement | HTMLDivElement | BaseButton | Button | HTMLSpanElement,
MouseEvent MouseEvent

View File

@@ -31,7 +31,7 @@ exports[`GalleryCardComponent renders 1`] = `
/> />
</CardItem> </CardItem>
<CardItem> <CardItem>
<StyledImageBase <Image
alt="name cover image" alt="name cover image"
height={144} height={144}
imageFit={2} imageFit={2}

View File

@@ -0,0 +1,123 @@
import * as React from "react";
import { JunoClient } from "../../../Juno/JunoClient";
import { HttpStatusCodes, CodeOfConductEndpoints } from "../../../Common/Constants";
import { Stack, Text, Checkbox, PrimaryButton, Link } from "@fluentui/react";
import { getErrorMessage, getErrorStack, handleError } from "../../../Common/ErrorHandlingUtils";
import { trace, traceFailure, traceStart, traceSuccess } from "../../../Shared/Telemetry/TelemetryProcessor";
import { Action } from "../../../Shared/Telemetry/TelemetryConstants";
export interface CodeOfConductComponentProps {
junoClient: JunoClient;
onAcceptCodeOfConduct: (result: boolean) => void;
}
interface CodeOfConductComponentState {
readCodeOfConduct: boolean;
}
export class CodeOfConductComponent extends React.Component<CodeOfConductComponentProps, CodeOfConductComponentState> {
private viewCodeOfConductTraced: boolean;
private descriptionPara1: string;
private descriptionPara2: string;
private descriptionPara3: string;
private link1: { label: string; url: string };
constructor(props: CodeOfConductComponentProps) {
super(props);
this.state = {
readCodeOfConduct: false,
};
this.descriptionPara1 = "Azure Cosmos DB Notebook Gallery - Code of Conduct";
this.descriptionPara2 = "The notebook public gallery contains notebook samples shared by users of Azure Cosmos DB.";
this.descriptionPara3 = "In order to view and publish your samples to the gallery, you must accept the ";
this.link1 = { label: "code of conduct.", url: CodeOfConductEndpoints.codeOfConduct };
}
private async acceptCodeOfConduct(): Promise<void> {
const startKey = traceStart(Action.NotebooksGalleryAcceptCodeOfConduct);
try {
const response = await this.props.junoClient.acceptCodeOfConduct();
if (response.status !== HttpStatusCodes.OK && response.status !== HttpStatusCodes.NoContent) {
throw new Error(`Received HTTP ${response.status} when accepting code of conduct`);
}
traceSuccess(Action.NotebooksGalleryAcceptCodeOfConduct, {}, startKey);
this.props.onAcceptCodeOfConduct(response.data);
} catch (error) {
traceFailure(
Action.NotebooksGalleryAcceptCodeOfConduct,
{
error: getErrorMessage(error),
errorStack: getErrorStack(error),
},
startKey
);
handleError(error, "CodeOfConductComponent/acceptCodeOfConduct", "Failed to accept code of conduct");
}
}
private onChangeCheckbox = (): void => {
this.setState({ readCodeOfConduct: !this.state.readCodeOfConduct });
};
public render(): JSX.Element {
if (!this.viewCodeOfConductTraced) {
this.viewCodeOfConductTraced = true;
trace(Action.NotebooksGalleryViewCodeOfConduct);
}
return (
<Stack tokens={{ childrenGap: 20 }}>
<Stack.Item>
<Text style={{ fontWeight: 500, fontSize: "20px" }}>{this.descriptionPara1}</Text>
</Stack.Item>
<Stack.Item>
<Text>{this.descriptionPara2}</Text>
</Stack.Item>
<Stack.Item>
<Text>
{this.descriptionPara3}
<Link href={this.link1.url} target="_blank">
{this.link1.label}
</Link>
</Text>
</Stack.Item>
<Stack.Item>
<Checkbox
styles={{
label: {
margin: 0,
padding: "2 0 2 0",
},
text: {
fontSize: 12,
},
}}
label="I have read and accept the code of conduct."
onChange={this.onChangeCheckbox}
/>
</Stack.Item>
<Stack.Item>
<PrimaryButton
ariaLabel="Continue"
title="Continue"
onClick={async () => await this.acceptCodeOfConduct()}
tabIndex={0}
className="genericPaneSubmitBtn"
text="Continue"
disabled={!this.state.readCodeOfConduct}
/>
</Stack.Item>
</Stack>
);
}
}

View File

@@ -9,7 +9,7 @@ describe("CodeOfConductComponent", () => {
let codeOfConductProps: CodeOfConductComponentProps; let codeOfConductProps: CodeOfConductComponentProps;
beforeEach(() => { beforeEach(() => {
const junoClient = new JunoClient(undefined); const junoClient = new JunoClient();
junoClient.acceptCodeOfConduct = jest.fn().mockReturnValue({ junoClient.acceptCodeOfConduct = jest.fn().mockReturnValue({
status: HttpStatusCodes.OK, status: HttpStatusCodes.OK,
data: true, data: true,

View File

@@ -1,4 +1,4 @@
import { Checkbox, Link, PrimaryButton, Stack, Text } from "office-ui-fabric-react"; import { Checkbox, Link, PrimaryButton, Stack, Text } from "@fluentui/react";
import React, { FunctionComponent, useEffect, useState } from "react"; import React, { FunctionComponent, useEffect, useState } from "react";
import { CodeOfConductEndpoints, HttpStatusCodes } from "../../../../Common/Constants"; import { CodeOfConductEndpoints, HttpStatusCodes } from "../../../../Common/Constants";
import { getErrorMessage, getErrorStack, handleError } from "../../../../Common/ErrorHandlingUtils"; import { getErrorMessage, getErrorStack, handleError } from "../../../../Common/ErrorHandlingUtils";

View File

@@ -19,7 +19,7 @@ import {
SpinnerSize, SpinnerSize,
Stack, Stack,
Text, Text,
} from "office-ui-fabric-react"; } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { HttpStatusCodes } from "../../../Common/Constants"; import { HttpStatusCodes } from "../../../Common/Constants";
import { handleError } from "../../../Common/ErrorHandlingUtils"; import { handleError } from "../../../Common/ErrorHandlingUtils";

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { Icon, Label, Stack, HoverCard, HoverCardType, Link } from "office-ui-fabric-react"; import { Icon, Label, Stack, HoverCard, HoverCardType, Link } from "@fluentui/react";
import { CodeOfConductEndpoints } from "../../../../Common/Constants"; import { CodeOfConductEndpoints } from "../../../../Common/Constants";
import "./InfoComponent.less"; import "./InfoComponent.less";

View File

@@ -4,7 +4,7 @@ exports[`GalleryViewerComponent renders 1`] = `
<div <div
className="galleryContainer" className="galleryContainer"
> >
<StyledPivotBase <StyledPivot
onLinkClick={[Function]} onLinkClick={[Function]}
selectedKey="OfficialSamples" selectedKey="OfficialSamples"
> >
@@ -41,7 +41,7 @@ exports[`GalleryViewerComponent renders 1`] = `
<StackItem <StackItem
grow={true} grow={true}
> >
<StyledSearchBoxBase <StyledSearchBox
onChange={[Function]} onChange={[Function]}
placeholder="Search" placeholder="Search"
/> />
@@ -60,7 +60,7 @@ exports[`GalleryViewerComponent renders 1`] = `
} }
} }
> >
<StyledWithResponsiveMode <Dropdown
onChange={[Function]} onChange={[Function]}
options={ options={
Array [ Array [
@@ -127,7 +127,7 @@ exports[`GalleryViewerComponent renders 1`] = `
<StackItem <StackItem
grow={true} grow={true}
> >
<StyledSearchBoxBase <StyledSearchBox
onChange={[Function]} onChange={[Function]}
placeholder="Search" placeholder="Search"
/> />
@@ -146,7 +146,7 @@ exports[`GalleryViewerComponent renders 1`] = `
} }
} }
> >
<StyledWithResponsiveMode <Dropdown
onChange={[Function]} onChange={[Function]}
options={ options={
Array [ Array [
@@ -182,6 +182,6 @@ exports[`GalleryViewerComponent renders 1`] = `
</StackItem> </StackItem>
</Stack> </Stack>
</PivotItem> </PivotItem>
</StyledPivotBase> </StyledPivot>
</div> </div>
`; `;

View File

@@ -1,18 +1,8 @@
/** /**
* Wrapper around Notebook metadata * Wrapper around Notebook metadata
*/ */
import { FontWeights, Icon, IconButton, Link, Persona, PersonaSize, PrimaryButton, Stack, Text } from "@fluentui/react";
import CosmosDBLogo from "images/CosmosDB-logo.svg"; import CosmosDBLogo from "images/CosmosDB-logo.svg";
import {
FontWeights,
Icon,
IconButton,
Link,
Persona,
PersonaSize,
PrimaryButton,
Stack,
Text,
} from "office-ui-fabric-react";
import * as React from "react"; import * as React from "react";
import { IGalleryItem } from "../../../Juno/JunoClient"; import { IGalleryItem } from "../../../Juno/JunoClient";
import * as FileSystemUtil from "../../Notebook/FileSystemUtil"; import * as FileSystemUtil from "../../Notebook/FileSystemUtil";

View File

@@ -3,7 +3,7 @@
*/ */
import { Notebook } from "@nteract/commutable"; import { Notebook } from "@nteract/commutable";
import { createContentRef } from "@nteract/core"; import { createContentRef } from "@nteract/core";
import { IChoiceGroupProps, Icon, IProgressIndicatorProps, Link, ProgressIndicator } from "office-ui-fabric-react"; import { IChoiceGroupProps, Icon, IProgressIndicatorProps, Link, ProgressIndicator } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { contents } from "rx-jupyter"; import { contents } from "rx-jupyter";
import { IGalleryItem, JunoClient } from "../../../Juno/JunoClient"; import { IGalleryItem, JunoClient } from "../../../Juno/JunoClient";

View File

@@ -1,23 +1,25 @@
import SaveQueryBannerIcon from "images/save_query_banner.png";
import { IButtonProps, IconButton } from "office-ui-fabric-react/lib/Button";
import { ContextualMenu, IContextualMenuProps } from "office-ui-fabric-react/lib/ContextualMenu";
import { import {
ContextualMenu,
DetailsList, DetailsList,
DetailsListLayoutMode, DetailsListLayoutMode,
DetailsRow, DetailsRow,
FocusZone,
IButtonProps,
IColumn, IColumn,
IconButton,
IContextualMenuProps,
IDetailsListProps, IDetailsListProps,
IDetailsRowProps, IDetailsRowProps,
} from "office-ui-fabric-react/lib/DetailsList";
import { FocusZone } from "office-ui-fabric-react/lib/FocusZone";
import { ITextField, ITextFieldProps, TextField } from "office-ui-fabric-react/lib/TextField";
import {
IObjectWithKey, IObjectWithKey,
ISelectionZoneProps, ISelectionZoneProps,
ITextField,
ITextFieldProps,
Selection, Selection,
SelectionMode, SelectionMode,
SelectionZone, SelectionZone,
} from "office-ui-fabric-react/lib/utilities/selection/index"; TextField,
} from "@fluentui/react";
import SaveQueryBannerIcon from "images/save_query_banner.png";
import * as React from "react"; import * as React from "react";
import * as _ from "underscore"; import * as _ from "underscore";
import * as Constants from "../../../Common/Constants"; import * as Constants from "../../../Common/Constants";

View File

@@ -2,10 +2,10 @@
* Horizontal switch component * Horizontal switch component
*/ */
import { Icon } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import "./RadioSwitchComponent.less";
import { Icon } from "office-ui-fabric-react/lib/Icon";
import { NormalizedEventKey } from "../../../Common/Constants"; import { NormalizedEventKey } from "../../../Common/Constants";
import "./RadioSwitchComponent.less";
export interface Choice { export interface Choice {
key: string; key: string;

View File

@@ -154,19 +154,20 @@ describe("SettingsComponent", () => {
expect(settingsComponentInstance.hasConflictResolution()).toEqual(undefined); expect(settingsComponentInstance.hasConflictResolution()).toEqual(undefined);
const newContainer = new Explorer(); const newContainer = new Explorer();
newContainer.databaseAccount = ko.observable({ updateUserContext({
id: undefined, databaseAccount: {
name: undefined, id: undefined,
location: undefined, name: undefined,
type: undefined, location: undefined,
kind: undefined, type: undefined,
tags: undefined, kind: undefined,
properties: { properties: {
documentEndpoint: undefined, documentEndpoint: undefined,
tableEndpoint: undefined, tableEndpoint: undefined,
gremlinEndpoint: undefined, gremlinEndpoint: undefined,
cassandraEndpoint: undefined, cassandraEndpoint: undefined,
enableMultipleWriteLocations: true, enableMultipleWriteLocations: true,
},
}, },
}); });
const newCollection = { ...collection }; const newCollection = { ...collection };

View File

@@ -1,6 +1,6 @@
import { IPivotItemProps, IPivotProps, Pivot, PivotItem } from "@fluentui/react";
import DiscardIcon from "images/discard.svg"; import DiscardIcon from "images/discard.svg";
import SaveIcon from "images/save-cosmos.svg"; import SaveIcon from "images/save-cosmos.svg";
import { IPivotItemProps, IPivotProps, Pivot, PivotItem } from "office-ui-fabric-react";
import * as React from "react"; import * as React from "react";
import { AuthType } from "../../../AuthType"; import { AuthType } from "../../../AuthType";
import * as Constants from "../../../Common/Constants"; import * as Constants from "../../../Common/Constants";
@@ -233,11 +233,7 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
} }
public loadMongoIndexes = async (): Promise<void> => { public loadMongoIndexes = async (): Promise<void> => {
if ( if (userContext.apiType === "Mongo" && userContext?.databaseAccount) {
userContext.apiType === "Mongo" &&
this.container.isEnableMongoCapabilityPresent() &&
this.container.databaseAccount()
) {
this.mongoDBCollectionResource = await readMongoDBCollectionThroughRP( this.mongoDBCollectionResource = await readMongoDBCollectionThroughRP(
this.collection.databaseId, this.collection.databaseId,
this.collection.id() this.collection.id()
@@ -300,8 +296,7 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
this.container && userContext.apiType === "Cassandra" && hasDatabaseSharedThroughput(this.collection); this.container && userContext.apiType === "Cassandra" && hasDatabaseSharedThroughput(this.collection);
public hasConflictResolution = (): boolean => public hasConflictResolution = (): boolean =>
this.container?.databaseAccount && userContext?.databaseAccount?.properties?.enableMultipleWriteLocations &&
this.container.databaseAccount()?.properties?.enableMultipleWriteLocations &&
this.collection.conflictResolutionPolicy && this.collection.conflictResolutionPolicy &&
!!this.collection.conflictResolutionPolicy(); !!this.collection.conflictResolutionPolicy();
@@ -876,7 +871,7 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
mongoIndexingPolicyComponentProps: MongoIndexingPolicyComponentProps mongoIndexingPolicyComponentProps: MongoIndexingPolicyComponentProps
): JSX.Element => { ): JSX.Element => {
if (userContext.authType === AuthType.AAD) { if (userContext.authType === AuthType.AAD) {
if (this.container.isEnableMongoCapabilityPresent()) { if (userContext.apiType === "Mongo") {
return <MongoIndexingPolicyComponent {...mongoIndexingPolicyComponentProps} />; return <MongoIndexingPolicyComponent {...mongoIndexingPolicyComponentProps} />;
} }
return undefined; return undefined;

View File

@@ -1,6 +1,6 @@
import { shallow } from "enzyme"; import { shallow } from "enzyme";
import React from "react"; import React from "react";
import { IColumn, Text } from "office-ui-fabric-react"; import { IColumn, Text } from "@fluentui/react";
import { import {
getAutoPilotV3SpendElement, getAutoPilotV3SpendElement,
getEstimatedSpendingElement, getEstimatedSpendingElement,

View File

@@ -38,7 +38,7 @@ import {
IDetailsRowProps, IDetailsRowProps,
DetailsRow, DetailsRow,
IDetailsColumnStyles, IDetailsColumnStyles,
} from "office-ui-fabric-react"; } from "@fluentui/react";
import { isDirtyTypes, isDirty } from "./SettingsUtils"; import { isDirtyTypes, isDirty } from "./SettingsUtils";
export interface EstimatedSpendingDisplayProps { export interface EstimatedSpendingDisplayProps {

View File

@@ -9,7 +9,7 @@ import {
subComponentStackProps, subComponentStackProps,
getChoiceGroupStyles, getChoiceGroupStyles,
} from "../SettingsRenderUtils"; } from "../SettingsRenderUtils";
import { TextField, ITextFieldProps, Stack, IChoiceGroupOption, ChoiceGroup } from "office-ui-fabric-react"; import { TextField, ITextFieldProps, Stack, IChoiceGroupOption, ChoiceGroup } from "@fluentui/react";
import { ToolTipLabelComponent } from "./ToolTipLabelComponent"; import { ToolTipLabelComponent } from "./ToolTipLabelComponent";
import { isDirty } from "../SettingsUtils"; import { isDirty } from "../SettingsUtils";

View File

@@ -1,7 +1,8 @@
import { MessageBar, MessageBarType, Stack } from "office-ui-fabric-react"; import { MessageBar, MessageBarType, Stack } from "@fluentui/react";
import * as monaco from "monaco-editor";
import * as React from "react"; import * as React from "react";
import * as DataModels from "../../../../Contracts/DataModels"; import * as DataModels from "../../../../Contracts/DataModels";
import { loadMonaco, monaco } from "../../../LazyMonaco"; import { loadMonaco } from "../../../LazyMonaco";
import { indexingPolicynUnsavedWarningMessage, titleAndInputStackProps } from "../SettingsRenderUtils"; import { indexingPolicynUnsavedWarningMessage, titleAndInputStackProps } from "../SettingsRenderUtils";
import { isDirty, isIndexTransforming } from "../SettingsUtils"; import { isDirty, isIndexTransforming } from "../SettingsUtils";
import { IndexingPolicyRefreshComponent } from "./IndexingPolicyRefresh/IndexingPolicyRefreshComponent"; import { IndexingPolicyRefreshComponent } from "./IndexingPolicyRefresh/IndexingPolicyRefreshComponent";

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { MessageBar, MessageBarType } from "office-ui-fabric-react"; import { MessageBar, MessageBarType } from "@fluentui/react";
import { import {
mongoIndexTransformationRefreshingMessage, mongoIndexTransformationRefreshingMessage,
renderMongoIndexTransformationRefreshMessage, renderMongoIndexTransformationRefreshMessage,

View File

@@ -1,7 +1,7 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`IndexingPolicyRefreshComponent renders 1`] = ` exports[`IndexingPolicyRefreshComponent renders 1`] = `
<StyledMessageBarBase <StyledMessageBar
messageBarType={5} messageBarType={5}
> >
<Text <Text
@@ -20,5 +20,5 @@ exports[`IndexingPolicyRefreshComponent renders 1`] = `
Refresh to check the progress. Refresh to check the progress.
</StyledLinkBase> </StyledLinkBase>
</Text> </Text>
</StyledMessageBarBase> </StyledMessageBar>
`; `;

View File

@@ -8,7 +8,7 @@ import {
Dropdown, Dropdown,
IDropdownOption, IDropdownOption,
ITextField, ITextField,
} from "office-ui-fabric-react"; } from "@fluentui/react";
import { import {
addMongoIndexSubElementsTokens, addMongoIndexSubElementsTokens,
mongoErrorMessageStyles, mongoErrorMessageStyles,

View File

@@ -12,7 +12,7 @@ import {
Spinner, Spinner,
SpinnerSize, SpinnerSize,
Separator, Separator,
} from "office-ui-fabric-react"; } from "@fluentui/react";
import { import {
addMongoIndexStackProps, addMongoIndexStackProps,
customDetailsListStyles, customDetailsListStyles,

View File

@@ -30,7 +30,7 @@ exports[`AddMongoIndexComponent renders 1`] = `
} }
value="sample_key" value="sample_key"
/> />
<StyledWithResponsiveMode <Dropdown
ariaLabel="Index Type 1" ariaLabel="Index Type 1"
onChange={[Function]} onChange={[Function]}
options={ options={
@@ -67,7 +67,7 @@ exports[`AddMongoIndexComponent renders 1`] = `
onClick={[Function]} onClick={[Function]}
/> />
</Stack> </Stack>
<StyledMessageBarBase <StyledMessageBar
messageBarType={1} messageBarType={1}
styles={ styles={
Object { Object {
@@ -78,6 +78,6 @@ exports[`AddMongoIndexComponent renders 1`] = `
} }
> >
sample error sample error
</StyledMessageBarBase> </StyledMessageBar>
</Stack> </Stack>
`; `;

View File

@@ -1,14 +1,15 @@
import { shallow } from "enzyme"; import { shallow } from "enzyme";
import ko from "knockout";
import React from "react"; 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 Constants from "../../../../Common/Constants";
import * as DataModels from "../../../../Contracts/DataModels"; import * as DataModels from "../../../../Contracts/DataModels";
import { throughputUnit } from "../SettingsRenderUtils";
import * as SharedConstants from "../../../../Shared/Constants"; import * as SharedConstants from "../../../../Shared/Constants";
import ko from "knockout"; import { updateUserContext } from "../../../../UserContext";
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", () => { describe("ScaleComponent", () => {
const nonNationalCloudContainer = new Explorer(); const nonNationalCloudContainer = new Explorer();
@@ -80,25 +81,25 @@ describe("ScaleComponent", () => {
it("autoScale enabled", () => { it("autoScale enabled", () => {
const newContainer = new Explorer(); const newContainer = new Explorer();
updateUserContext({
newContainer.databaseAccount({ databaseAccount: {
id: undefined, id: undefined,
name: undefined, name: undefined,
location: undefined, location: undefined,
type: undefined, type: undefined,
kind: "documentdb", kind: "documentdb",
tags: undefined, properties: {
properties: { documentEndpoint: undefined,
documentEndpoint: undefined, tableEndpoint: undefined,
tableEndpoint: undefined, gremlinEndpoint: undefined,
gremlinEndpoint: undefined, cassandraEndpoint: undefined,
cassandraEndpoint: undefined, capabilities: [
capabilities: [ {
{ name: Constants.CapabilityNames.EnableAutoScale.toLowerCase(),
name: Constants.CapabilityNames.EnableAutoScale.toLowerCase(), description: undefined,
description: undefined, },
}, ],
], },
}, },
}); });
const props = { ...baseProps, container: newContainer }; const props = { ...baseProps, container: newContainer };

View File

@@ -1,4 +1,4 @@
import { Label, Link, MessageBar, MessageBarType, Stack, Text, TextField } from "office-ui-fabric-react"; import { Label, Link, MessageBar, MessageBarType, Stack, Text, TextField } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import * as Constants from "../../../../Common/Constants"; import * as Constants from "../../../../Common/Constants";
import { configContext, Platform } from "../../../../ConfigContext"; import { configContext, Platform } from "../../../../ConfigContext";
@@ -54,8 +54,7 @@ export class ScaleComponent extends React.Component<ScaleComponentProps> {
} }
public isAutoScaleEnabled = (): boolean => { public isAutoScaleEnabled = (): boolean => {
const accountCapabilities: DataModels.Capability[] = this.props.container?.databaseAccount()?.properties const accountCapabilities: DataModels.Capability[] = userContext?.databaseAccount?.properties?.capabilities;
?.capabilities;
const enableAutoScaleCapability = const enableAutoScaleCapability =
accountCapabilities && accountCapabilities &&
accountCapabilities.find((capability: DataModels.Capability) => { accountCapabilities.find((capability: DataModels.Capability) => {
@@ -170,7 +169,7 @@ export class ScaleComponent extends React.Component<ScaleComponentProps> {
private getThroughputInputComponent = (): JSX.Element => ( private getThroughputInputComponent = (): JSX.Element => (
<ThroughputInputAutoPilotV3Component <ThroughputInputAutoPilotV3Component
databaseAccount={this.props.container.databaseAccount()} databaseAccount={userContext?.databaseAccount}
databaseName={this.databaseId} databaseName={this.databaseId}
collectionName={this.collectionId} collectionName={this.collectionId}
throughput={this.props.throughput} throughput={this.props.throughput}
@@ -199,8 +198,7 @@ export class ScaleComponent extends React.Component<ScaleComponentProps> {
); );
private isFreeTierAccount(): boolean { private isFreeTierAccount(): boolean {
const databaseAccount = this.props.container?.databaseAccount(); return userContext?.databaseAccount?.properties?.enableFreeTier;
return databaseAccount?.properties?.enableFreeTier;
} }
private getFreeTierInfoMessage(): JSX.Element { private getFreeTierInfoMessage(): JSX.Element {

View File

@@ -1,13 +1,4 @@
import { import { ChoiceGroup, IChoiceGroupOption, Label, Link, MessageBar, Stack, Text, TextField } from "@fluentui/react";
ChoiceGroup,
IChoiceGroupOption,
Label,
Link,
MessageBar,
Stack,
Text,
TextField,
} from "office-ui-fabric-react";
import * as React from "react"; import * as React from "react";
import * as ViewModels from "../../../../Contracts/ViewModels"; import * as ViewModels from "../../../../Contracts/ViewModels";
import { userContext } from "../../../../UserContext"; import { userContext } from "../../../../UserContext";

View File

@@ -10,7 +10,7 @@ import {
Stack, Stack,
Text, Text,
TextField, TextField,
} from "office-ui-fabric-react"; } from "@fluentui/react";
import React from "react"; import React from "react";
import * as DataModels from "../../../../../Contracts/DataModels"; import * as DataModels from "../../../../../Contracts/DataModels";
import { SubscriptionType } from "../../../../../Contracts/SubscriptionType"; import { SubscriptionType } from "../../../../../Contracts/SubscriptionType";

View File

@@ -8,7 +8,7 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
} }
} }
> >
<StyledMessageBarBase <StyledMessageBar
messageBarIconProps={ messageBarIconProps={
Object { Object {
"className": "messageBarWarningIcon", "className": "messageBarWarningIcon",
@@ -27,7 +27,7 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
> >
Your bill will be affected as you update your throughput settings. Please review the updated cost estimate below before saving your changes Your bill will be affected as you update your throughput settings. Please review the updated cost estimate below before saving your changes
</Text> </Text>
</StyledMessageBarBase> </StyledMessageBar>
<Stack> <Stack>
<StyledLabelBase <StyledLabelBase
id="settingsV2RadioButtonLabelId" id="settingsV2RadioButtonLabelId"
@@ -49,7 +49,7 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
} }
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledMessageBarBase <StyledMessageBar
messageBarIconProps={ messageBarIconProps={
Object { Object {
"className": "messageBarInfoIcon", "className": "messageBarInfoIcon",
@@ -86,8 +86,8 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
Learn more Learn more
</a> </a>
</Text> </Text>
</StyledMessageBarBase> </StyledMessageBar>
<StyledChoiceGroupBase <StyledChoiceGroup
ariaLabelledBy="settingsV2RadioButtonLabelId" ariaLabelledBy="settingsV2RadioButtonLabelId"
onChange={[Function]} onChange={[Function]}
options={ options={
@@ -196,7 +196,7 @@ exports[`ThroughputInputAutoPilotV3Component spendAck checkbox visible 1`] = `
} }
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledChoiceGroupBase <StyledChoiceGroup
ariaLabelledBy="settingsV2RadioButtonLabelId" ariaLabelledBy="settingsV2RadioButtonLabelId"
onChange={[Function]} onChange={[Function]}
options={ options={
@@ -470,7 +470,7 @@ exports[`ThroughputInputAutoPilotV3Component throughput input visible 1`] = `
} }
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledChoiceGroupBase <StyledChoiceGroup
ariaLabelledBy="settingsV2RadioButtonLabelId" ariaLabelledBy="settingsV2RadioButtonLabelId"
onChange={[Function]} onChange={[Function]}
options={ options={

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { Stack, Text, IIconStyles, Icon, TooltipHost, DirectionalHint } from "office-ui-fabric-react"; import { Stack, Text, IIconStyles, Icon, TooltipHost, DirectionalHint } from "@fluentui/react";
import { toolTipLabelStackTokens } from "../SettingsRenderUtils"; import { toolTipLabelStackTokens } from "../SettingsRenderUtils";
export interface ToolTipLabelComponentProps { export interface ToolTipLabelComponentProps {

View File

@@ -8,7 +8,7 @@ exports[`ConflictResolutionComponent Path text field displayed 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
label="Mode" label="Mode"
onChange={[Function]} onChange={[Function]}
options={ options={
@@ -80,7 +80,7 @@ exports[`ConflictResolutionComponent Sproc text field displayed 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
label="Mode" label="Mode"
onChange={[Function]} onChange={[Function]}
options={ options={

View File

@@ -8,7 +8,7 @@ exports[`ScaleComponent renders with correct initial notification 1`] = `
} }
} }
> >
<StyledMessageBarBase <StyledMessageBar
messageBarType={5} messageBarType={5}
> >
<Text <Text
@@ -26,7 +26,7 @@ exports[`ScaleComponent renders with correct initial notification 1`] = `
Database: test, Container: test Database: test, Container: test
, Current autoscale throughput: 100 - 1000 RU/s, Target autoscale throughput: 600 - 6000 RU/s , Current autoscale throughput: 100 - 1000 RU/s, Target autoscale throughput: 600 - 6000 RU/s
</Text> </Text>
</StyledMessageBarBase> </StyledMessageBar>
<Stack <Stack
tokens={ tokens={
Object { Object {

View File

@@ -15,7 +15,7 @@ exports[`SubSettingsComponent analyticalTimeToLive hidden 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="timeToLive" id="timeToLive"
label="Time to Live" label="Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -85,7 +85,7 @@ exports[`SubSettingsComponent analyticalTimeToLive hidden 1`] = `
value="1000" value="1000"
/> />
</Stack> </Stack>
<StyledChoiceGroupBase <StyledChoiceGroup
id="geoSpatialConfig" id="geoSpatialConfig"
label="Geospatial Configuration" label="Geospatial Configuration"
onChange={[Function]} onChange={[Function]}
@@ -146,7 +146,7 @@ exports[`SubSettingsComponent analyticalTimeToLive hidden 1`] = `
} }
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledChoiceGroupBase <StyledChoiceGroup
aria-labelledby="settingsV2ChangeFeedLabelId" aria-labelledby="settingsV2ChangeFeedLabelId"
id="changeFeedPolicy" id="changeFeedPolicy"
onChange={[Function]} onChange={[Function]}
@@ -238,7 +238,7 @@ exports[`SubSettingsComponent analyticalTimeToLiveSeconds hidden 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="timeToLive" id="timeToLive"
label="Time to Live" label="Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -308,7 +308,7 @@ exports[`SubSettingsComponent analyticalTimeToLiveSeconds hidden 1`] = `
value="1000" value="1000"
/> />
</Stack> </Stack>
<StyledChoiceGroupBase <StyledChoiceGroup
id="geoSpatialConfig" id="geoSpatialConfig"
label="Geospatial Configuration" label="Geospatial Configuration"
onChange={[Function]} onChange={[Function]}
@@ -355,7 +355,7 @@ exports[`SubSettingsComponent analyticalTimeToLiveSeconds hidden 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="analyticalStorageTimeToLive" id="analyticalStorageTimeToLive"
label="Analytical Storage Time to Live" label="Analytical Storage Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -422,7 +422,7 @@ exports[`SubSettingsComponent analyticalTimeToLiveSeconds hidden 1`] = `
} }
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledChoiceGroupBase <StyledChoiceGroup
aria-labelledby="settingsV2ChangeFeedLabelId" aria-labelledby="settingsV2ChangeFeedLabelId"
id="changeFeedPolicy" id="changeFeedPolicy"
onChange={[Function]} onChange={[Function]}
@@ -514,7 +514,7 @@ exports[`SubSettingsComponent changeFeedPolicy hidden 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="timeToLive" id="timeToLive"
label="Time to Live" label="Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -584,7 +584,7 @@ exports[`SubSettingsComponent changeFeedPolicy hidden 1`] = `
value="1000" value="1000"
/> />
</Stack> </Stack>
<StyledChoiceGroupBase <StyledChoiceGroup
id="geoSpatialConfig" id="geoSpatialConfig"
label="Geospatial Configuration" label="Geospatial Configuration"
onChange={[Function]} onChange={[Function]}
@@ -631,7 +631,7 @@ exports[`SubSettingsComponent changeFeedPolicy hidden 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="analyticalStorageTimeToLive" id="analyticalStorageTimeToLive"
label="Analytical Storage Time to Live" label="Analytical Storage Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -753,7 +753,7 @@ exports[`SubSettingsComponent renders 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="timeToLive" id="timeToLive"
label="Time to Live" label="Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -823,7 +823,7 @@ exports[`SubSettingsComponent renders 1`] = `
value="1000" value="1000"
/> />
</Stack> </Stack>
<StyledChoiceGroupBase <StyledChoiceGroup
id="geoSpatialConfig" id="geoSpatialConfig"
label="Geospatial Configuration" label="Geospatial Configuration"
onChange={[Function]} onChange={[Function]}
@@ -870,7 +870,7 @@ exports[`SubSettingsComponent renders 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="analyticalStorageTimeToLive" id="analyticalStorageTimeToLive"
label="Analytical Storage Time to Live" label="Analytical Storage Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -962,7 +962,7 @@ exports[`SubSettingsComponent renders 1`] = `
} }
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledChoiceGroupBase <StyledChoiceGroup
aria-labelledby="settingsV2ChangeFeedLabelId" aria-labelledby="settingsV2ChangeFeedLabelId"
id="changeFeedPolicy" id="changeFeedPolicy"
onChange={[Function]} onChange={[Function]}
@@ -1054,7 +1054,7 @@ exports[`SubSettingsComponent timeToLiveSeconds hidden 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="timeToLive" id="timeToLive"
label="Time to Live" label="Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -1099,7 +1099,7 @@ exports[`SubSettingsComponent timeToLiveSeconds hidden 1`] = `
} }
/> />
</Stack> </Stack>
<StyledChoiceGroupBase <StyledChoiceGroup
id="geoSpatialConfig" id="geoSpatialConfig"
label="Geospatial Configuration" label="Geospatial Configuration"
onChange={[Function]} onChange={[Function]}
@@ -1146,7 +1146,7 @@ exports[`SubSettingsComponent timeToLiveSeconds hidden 1`] = `
} }
} }
> >
<StyledChoiceGroupBase <StyledChoiceGroup
id="analyticalStorageTimeToLive" id="analyticalStorageTimeToLive"
label="Analytical Storage Time to Live" label="Analytical Storage Time to Live"
onChange={[Function]} onChange={[Function]}
@@ -1238,7 +1238,7 @@ exports[`SubSettingsComponent timeToLiveSeconds hidden 1`] = `
} }
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledChoiceGroupBase <StyledChoiceGroup
aria-labelledby="settingsV2ChangeFeedLabelId" aria-labelledby="settingsV2ChangeFeedLabelId"
id="changeFeedPolicy" id="changeFeedPolicy"
onChange={[Function]} onChange={[Function]}

View File

@@ -7,7 +7,7 @@ exports[`SettingsComponent renders 1`] = `
<div <div
className="settingsV2TabsContainer" className="settingsV2TabsContainer"
> >
<StyledPivotBase <StyledPivot
onLinkClick={[Function]} onLinkClick={[Function]}
selectedKey="ScaleTab" selectedKey="ScaleTab"
> >
@@ -399,8 +399,6 @@ exports[`SettingsComponent renders 1`] = `
"userTableQuery": [Function], "userTableQuery": [Function],
"visible": [Function], "visible": [Function],
}, },
"clickHostedAccountSwitch": [Function],
"clickHostedDirectorySwitch": [Function],
"closeDialog": undefined, "closeDialog": undefined,
"closeSidePanel": undefined, "closeSidePanel": undefined,
"collapsedResourceTreeWidth": 36, "collapsedResourceTreeWidth": 36,
@@ -422,9 +420,7 @@ exports[`SettingsComponent renders 1`] = `
"parameters": [Function], "parameters": [Function],
"tabsButtons": Array [], "tabsButtons": Array [],
}, },
"databaseAccount": [Function],
"databases": [Function], "databases": [Function],
"defaultExperience": [Function],
"deleteCollectionText": [Function], "deleteCollectionText": [Function],
"deleteDatabaseText": [Function], "deleteDatabaseText": [Function],
"gitHubClient": GitHubClient { "gitHubClient": GitHubClient {
@@ -1217,7 +1213,6 @@ exports[`SettingsComponent renders 1`] = `
"hasStorageAnalyticsAfecFeature": [Function], "hasStorageAnalyticsAfecFeature": [Function],
"isAccountReady": [Function], "isAccountReady": [Function],
"isAutoscaleDefaultEnabled": [Function], "isAutoscaleDefaultEnabled": [Function],
"isEnableMongoCapabilityPresent": [Function],
"isFixedCollectionWithSharedThroughputSupported": [Function], "isFixedCollectionWithSharedThroughputSupported": [Function],
"isHostedDataExplorerEnabled": [Function], "isHostedDataExplorerEnabled": [Function],
"isLeftPaneExpanded": [Function], "isLeftPaneExpanded": [Function],
@@ -1226,7 +1221,6 @@ exports[`SettingsComponent renders 1`] = `
"isNotebooksEnabledForAccount": [Function], "isNotebooksEnabledForAccount": [Function],
"isPublishNotebookPaneEnabled": [Function], "isPublishNotebookPaneEnabled": [Function],
"isResourceTokenCollectionNodeSelected": [Function], "isResourceTokenCollectionNodeSelected": [Function],
"isRightPanelV2Enabled": [Function],
"isSchemaEnabled": [Function], "isSchemaEnabled": [Function],
"isServerlessEnabled": [Function], "isServerlessEnabled": [Function],
"isSparkEnabled": [Function], "isSparkEnabled": [Function],
@@ -1235,7 +1229,6 @@ exports[`SettingsComponent renders 1`] = `
"isTabsContentExpanded": [Function], "isTabsContentExpanded": [Function],
"junoClient": JunoClient { "junoClient": JunoClient {
"cachedPinnedRepos": [Function], "cachedPinnedRepos": [Function],
"databaseAccount": undefined,
}, },
"memoryUsageInfo": [Function], "memoryUsageInfo": [Function],
"notebookBasePath": [Function], "notebookBasePath": [Function],
@@ -1243,14 +1236,12 @@ exports[`SettingsComponent renders 1`] = `
"onGitHubClientError": [Function], "onGitHubClientError": [Function],
"onRefreshDatabasesKeyPress": [Function], "onRefreshDatabasesKeyPress": [Function],
"onRefreshResourcesClick": [Function], "onRefreshResourcesClick": [Function],
"onSwitchToConnectionString": [Function],
"openDialog": undefined, "openDialog": undefined,
"openSidePanel": undefined, "openSidePanel": undefined,
"provideFeedbackEmail": [Function], "provideFeedbackEmail": [Function],
"queriesClient": QueriesClient { "queriesClient": QueriesClient {
"container": [Circular], "container": [Circular],
}, },
"refreshDatabaseAccount": [Function],
"refreshNotebookList": [Function], "refreshNotebookList": [Function],
"refreshTreeTitle": [Function], "refreshTreeTitle": [Function],
"resourceTokenCollection": [Function], "resourceTokenCollection": [Function],
@@ -1274,7 +1265,6 @@ exports[`SettingsComponent renders 1`] = `
"setInProgressConsoleDataIdToBeDeleted": undefined, "setInProgressConsoleDataIdToBeDeleted": undefined,
"setIsNotificationConsoleExpanded": undefined, "setIsNotificationConsoleExpanded": undefined,
"setNotificationConsoleData": undefined, "setNotificationConsoleData": undefined,
"signInAad": [Function],
"sparkClusterConnectionInfo": [Function], "sparkClusterConnectionInfo": [Function],
"splitter": Splitter { "splitter": Splitter {
"bounds": Object { "bounds": Object {
@@ -1685,8 +1675,6 @@ exports[`SettingsComponent renders 1`] = `
"userTableQuery": [Function], "userTableQuery": [Function],
"visible": [Function], "visible": [Function],
}, },
"clickHostedAccountSwitch": [Function],
"clickHostedDirectorySwitch": [Function],
"closeDialog": undefined, "closeDialog": undefined,
"closeSidePanel": undefined, "closeSidePanel": undefined,
"collapsedResourceTreeWidth": 36, "collapsedResourceTreeWidth": 36,
@@ -1708,9 +1696,7 @@ exports[`SettingsComponent renders 1`] = `
"parameters": [Function], "parameters": [Function],
"tabsButtons": Array [], "tabsButtons": Array [],
}, },
"databaseAccount": [Function],
"databases": [Function], "databases": [Function],
"defaultExperience": [Function],
"deleteCollectionText": [Function], "deleteCollectionText": [Function],
"deleteDatabaseText": [Function], "deleteDatabaseText": [Function],
"gitHubClient": GitHubClient { "gitHubClient": GitHubClient {
@@ -2503,7 +2489,6 @@ exports[`SettingsComponent renders 1`] = `
"hasStorageAnalyticsAfecFeature": [Function], "hasStorageAnalyticsAfecFeature": [Function],
"isAccountReady": [Function], "isAccountReady": [Function],
"isAutoscaleDefaultEnabled": [Function], "isAutoscaleDefaultEnabled": [Function],
"isEnableMongoCapabilityPresent": [Function],
"isFixedCollectionWithSharedThroughputSupported": [Function], "isFixedCollectionWithSharedThroughputSupported": [Function],
"isHostedDataExplorerEnabled": [Function], "isHostedDataExplorerEnabled": [Function],
"isLeftPaneExpanded": [Function], "isLeftPaneExpanded": [Function],
@@ -2512,7 +2497,6 @@ exports[`SettingsComponent renders 1`] = `
"isNotebooksEnabledForAccount": [Function], "isNotebooksEnabledForAccount": [Function],
"isPublishNotebookPaneEnabled": [Function], "isPublishNotebookPaneEnabled": [Function],
"isResourceTokenCollectionNodeSelected": [Function], "isResourceTokenCollectionNodeSelected": [Function],
"isRightPanelV2Enabled": [Function],
"isSchemaEnabled": [Function], "isSchemaEnabled": [Function],
"isServerlessEnabled": [Function], "isServerlessEnabled": [Function],
"isSparkEnabled": [Function], "isSparkEnabled": [Function],
@@ -2521,7 +2505,6 @@ exports[`SettingsComponent renders 1`] = `
"isTabsContentExpanded": [Function], "isTabsContentExpanded": [Function],
"junoClient": JunoClient { "junoClient": JunoClient {
"cachedPinnedRepos": [Function], "cachedPinnedRepos": [Function],
"databaseAccount": undefined,
}, },
"memoryUsageInfo": [Function], "memoryUsageInfo": [Function],
"notebookBasePath": [Function], "notebookBasePath": [Function],
@@ -2529,14 +2512,12 @@ exports[`SettingsComponent renders 1`] = `
"onGitHubClientError": [Function], "onGitHubClientError": [Function],
"onRefreshDatabasesKeyPress": [Function], "onRefreshDatabasesKeyPress": [Function],
"onRefreshResourcesClick": [Function], "onRefreshResourcesClick": [Function],
"onSwitchToConnectionString": [Function],
"openDialog": undefined, "openDialog": undefined,
"openSidePanel": undefined, "openSidePanel": undefined,
"provideFeedbackEmail": [Function], "provideFeedbackEmail": [Function],
"queriesClient": QueriesClient { "queriesClient": QueriesClient {
"container": [Circular], "container": [Circular],
}, },
"refreshDatabaseAccount": [Function],
"refreshNotebookList": [Function], "refreshNotebookList": [Function],
"refreshTreeTitle": [Function], "refreshTreeTitle": [Function],
"resourceTokenCollection": [Function], "resourceTokenCollection": [Function],
@@ -2560,7 +2541,6 @@ exports[`SettingsComponent renders 1`] = `
"setInProgressConsoleDataIdToBeDeleted": undefined, "setInProgressConsoleDataIdToBeDeleted": undefined,
"setIsNotificationConsoleExpanded": undefined, "setIsNotificationConsoleExpanded": undefined,
"setNotificationConsoleData": undefined, "setNotificationConsoleData": undefined,
"signInAad": [Function],
"sparkClusterConnectionInfo": [Function], "sparkClusterConnectionInfo": [Function],
"splitter": Splitter { "splitter": Splitter {
"bounds": Object { "bounds": Object {
@@ -2984,8 +2964,6 @@ exports[`SettingsComponent renders 1`] = `
"userTableQuery": [Function], "userTableQuery": [Function],
"visible": [Function], "visible": [Function],
}, },
"clickHostedAccountSwitch": [Function],
"clickHostedDirectorySwitch": [Function],
"closeDialog": undefined, "closeDialog": undefined,
"closeSidePanel": undefined, "closeSidePanel": undefined,
"collapsedResourceTreeWidth": 36, "collapsedResourceTreeWidth": 36,
@@ -3007,9 +2985,7 @@ exports[`SettingsComponent renders 1`] = `
"parameters": [Function], "parameters": [Function],
"tabsButtons": Array [], "tabsButtons": Array [],
}, },
"databaseAccount": [Function],
"databases": [Function], "databases": [Function],
"defaultExperience": [Function],
"deleteCollectionText": [Function], "deleteCollectionText": [Function],
"deleteDatabaseText": [Function], "deleteDatabaseText": [Function],
"gitHubClient": GitHubClient { "gitHubClient": GitHubClient {
@@ -3802,7 +3778,6 @@ exports[`SettingsComponent renders 1`] = `
"hasStorageAnalyticsAfecFeature": [Function], "hasStorageAnalyticsAfecFeature": [Function],
"isAccountReady": [Function], "isAccountReady": [Function],
"isAutoscaleDefaultEnabled": [Function], "isAutoscaleDefaultEnabled": [Function],
"isEnableMongoCapabilityPresent": [Function],
"isFixedCollectionWithSharedThroughputSupported": [Function], "isFixedCollectionWithSharedThroughputSupported": [Function],
"isHostedDataExplorerEnabled": [Function], "isHostedDataExplorerEnabled": [Function],
"isLeftPaneExpanded": [Function], "isLeftPaneExpanded": [Function],
@@ -3811,7 +3786,6 @@ exports[`SettingsComponent renders 1`] = `
"isNotebooksEnabledForAccount": [Function], "isNotebooksEnabledForAccount": [Function],
"isPublishNotebookPaneEnabled": [Function], "isPublishNotebookPaneEnabled": [Function],
"isResourceTokenCollectionNodeSelected": [Function], "isResourceTokenCollectionNodeSelected": [Function],
"isRightPanelV2Enabled": [Function],
"isSchemaEnabled": [Function], "isSchemaEnabled": [Function],
"isServerlessEnabled": [Function], "isServerlessEnabled": [Function],
"isSparkEnabled": [Function], "isSparkEnabled": [Function],
@@ -3820,7 +3794,6 @@ exports[`SettingsComponent renders 1`] = `
"isTabsContentExpanded": [Function], "isTabsContentExpanded": [Function],
"junoClient": JunoClient { "junoClient": JunoClient {
"cachedPinnedRepos": [Function], "cachedPinnedRepos": [Function],
"databaseAccount": undefined,
}, },
"memoryUsageInfo": [Function], "memoryUsageInfo": [Function],
"notebookBasePath": [Function], "notebookBasePath": [Function],
@@ -3828,14 +3801,12 @@ exports[`SettingsComponent renders 1`] = `
"onGitHubClientError": [Function], "onGitHubClientError": [Function],
"onRefreshDatabasesKeyPress": [Function], "onRefreshDatabasesKeyPress": [Function],
"onRefreshResourcesClick": [Function], "onRefreshResourcesClick": [Function],
"onSwitchToConnectionString": [Function],
"openDialog": undefined, "openDialog": undefined,
"openSidePanel": undefined, "openSidePanel": undefined,
"provideFeedbackEmail": [Function], "provideFeedbackEmail": [Function],
"queriesClient": QueriesClient { "queriesClient": QueriesClient {
"container": [Circular], "container": [Circular],
}, },
"refreshDatabaseAccount": [Function],
"refreshNotebookList": [Function], "refreshNotebookList": [Function],
"refreshTreeTitle": [Function], "refreshTreeTitle": [Function],
"resourceTokenCollection": [Function], "resourceTokenCollection": [Function],
@@ -3859,7 +3830,6 @@ exports[`SettingsComponent renders 1`] = `
"setInProgressConsoleDataIdToBeDeleted": undefined, "setInProgressConsoleDataIdToBeDeleted": undefined,
"setIsNotificationConsoleExpanded": undefined, "setIsNotificationConsoleExpanded": undefined,
"setNotificationConsoleData": undefined, "setNotificationConsoleData": undefined,
"signInAad": [Function],
"sparkClusterConnectionInfo": [Function], "sparkClusterConnectionInfo": [Function],
"splitter": Splitter { "splitter": Splitter {
"bounds": Object { "bounds": Object {
@@ -4270,8 +4240,6 @@ exports[`SettingsComponent renders 1`] = `
"userTableQuery": [Function], "userTableQuery": [Function],
"visible": [Function], "visible": [Function],
}, },
"clickHostedAccountSwitch": [Function],
"clickHostedDirectorySwitch": [Function],
"closeDialog": undefined, "closeDialog": undefined,
"closeSidePanel": undefined, "closeSidePanel": undefined,
"collapsedResourceTreeWidth": 36, "collapsedResourceTreeWidth": 36,
@@ -4293,9 +4261,7 @@ exports[`SettingsComponent renders 1`] = `
"parameters": [Function], "parameters": [Function],
"tabsButtons": Array [], "tabsButtons": Array [],
}, },
"databaseAccount": [Function],
"databases": [Function], "databases": [Function],
"defaultExperience": [Function],
"deleteCollectionText": [Function], "deleteCollectionText": [Function],
"deleteDatabaseText": [Function], "deleteDatabaseText": [Function],
"gitHubClient": GitHubClient { "gitHubClient": GitHubClient {
@@ -5088,7 +5054,6 @@ exports[`SettingsComponent renders 1`] = `
"hasStorageAnalyticsAfecFeature": [Function], "hasStorageAnalyticsAfecFeature": [Function],
"isAccountReady": [Function], "isAccountReady": [Function],
"isAutoscaleDefaultEnabled": [Function], "isAutoscaleDefaultEnabled": [Function],
"isEnableMongoCapabilityPresent": [Function],
"isFixedCollectionWithSharedThroughputSupported": [Function], "isFixedCollectionWithSharedThroughputSupported": [Function],
"isHostedDataExplorerEnabled": [Function], "isHostedDataExplorerEnabled": [Function],
"isLeftPaneExpanded": [Function], "isLeftPaneExpanded": [Function],
@@ -5097,7 +5062,6 @@ exports[`SettingsComponent renders 1`] = `
"isNotebooksEnabledForAccount": [Function], "isNotebooksEnabledForAccount": [Function],
"isPublishNotebookPaneEnabled": [Function], "isPublishNotebookPaneEnabled": [Function],
"isResourceTokenCollectionNodeSelected": [Function], "isResourceTokenCollectionNodeSelected": [Function],
"isRightPanelV2Enabled": [Function],
"isSchemaEnabled": [Function], "isSchemaEnabled": [Function],
"isServerlessEnabled": [Function], "isServerlessEnabled": [Function],
"isSparkEnabled": [Function], "isSparkEnabled": [Function],
@@ -5106,7 +5070,6 @@ exports[`SettingsComponent renders 1`] = `
"isTabsContentExpanded": [Function], "isTabsContentExpanded": [Function],
"junoClient": JunoClient { "junoClient": JunoClient {
"cachedPinnedRepos": [Function], "cachedPinnedRepos": [Function],
"databaseAccount": undefined,
}, },
"memoryUsageInfo": [Function], "memoryUsageInfo": [Function],
"notebookBasePath": [Function], "notebookBasePath": [Function],
@@ -5114,14 +5077,12 @@ exports[`SettingsComponent renders 1`] = `
"onGitHubClientError": [Function], "onGitHubClientError": [Function],
"onRefreshDatabasesKeyPress": [Function], "onRefreshDatabasesKeyPress": [Function],
"onRefreshResourcesClick": [Function], "onRefreshResourcesClick": [Function],
"onSwitchToConnectionString": [Function],
"openDialog": undefined, "openDialog": undefined,
"openSidePanel": undefined, "openSidePanel": undefined,
"provideFeedbackEmail": [Function], "provideFeedbackEmail": [Function],
"queriesClient": QueriesClient { "queriesClient": QueriesClient {
"container": [Circular], "container": [Circular],
}, },
"refreshDatabaseAccount": [Function],
"refreshNotebookList": [Function], "refreshNotebookList": [Function],
"refreshTreeTitle": [Function], "refreshTreeTitle": [Function],
"resourceTokenCollection": [Function], "resourceTokenCollection": [Function],
@@ -5145,7 +5106,6 @@ exports[`SettingsComponent renders 1`] = `
"setInProgressConsoleDataIdToBeDeleted": undefined, "setInProgressConsoleDataIdToBeDeleted": undefined,
"setIsNotificationConsoleExpanded": undefined, "setIsNotificationConsoleExpanded": undefined,
"setNotificationConsoleData": undefined, "setNotificationConsoleData": undefined,
"signInAad": [Function],
"sparkClusterConnectionInfo": [Function], "sparkClusterConnectionInfo": [Function],
"splitter": Splitter { "splitter": Splitter {
"bounds": Object { "bounds": Object {
@@ -5218,7 +5178,7 @@ exports[`SettingsComponent renders 1`] = `
shouldDiscardIndexingPolicy={false} shouldDiscardIndexingPolicy={false}
/> />
</PivotItem> </PivotItem>
</StyledPivotBase> </StyledPivot>
</div> </div>
</div> </div>
`; `;

View File

@@ -338,7 +338,7 @@ exports[`SettingsUtils functions render 1`] = `
</StyledLinkBase> </StyledLinkBase>
are only used for sorting query results. If you need to add a compound index, you can create one using the Mongo shell. are only used for sorting query results. If you need to add a compound index, you can create one using the Mongo shell.
</Text> </Text>
<StyledMessageBarBase <StyledMessageBar
messageBarType={1} messageBarType={1}
> >
<Text> <Text>
@@ -350,7 +350,7 @@ exports[`SettingsUtils functions render 1`] = `
azure portal. azure portal.
</StyledLinkBase> </StyledLinkBase>
</Text> </Text>
</StyledMessageBarBase> </StyledMessageBar>
<Stack <Stack
horizontal={true} horizontal={true}
tokens={ tokens={

View File

@@ -1,12 +1,20 @@
import {
Dropdown,
IDropdownOption,
IStackTokens,
Label,
Link,
MessageBar,
MessageBarType,
Position,
Slider,
SpinButton,
Stack,
Text,
TextField,
Toggle,
} from "@fluentui/react";
import { TFunction } from "i18next"; import { TFunction } from "i18next";
import { Label, Link, MessageBar, MessageBarType, Toggle } from "office-ui-fabric-react";
import { Dropdown, IDropdownOption } from "office-ui-fabric-react/lib/Dropdown";
import { Slider } from "office-ui-fabric-react/lib/Slider";
import { SpinButton } from "office-ui-fabric-react/lib/SpinButton";
import { IStackTokens, Stack } from "office-ui-fabric-react/lib/Stack";
import { Text } from "office-ui-fabric-react/lib/Text";
import { TextField } from "office-ui-fabric-react/lib/TextField";
import { Position } from "office-ui-fabric-react/lib/utilities/positioning";
import * as React from "react"; import * as React from "react";
import { import {
ChoiceItem, ChoiceItem,

View File

@@ -77,22 +77,11 @@ exports[`SmartUiComponent disable all inputs 1`] = `
} }
} }
> >
<CustomizedSpinButton <StyledSpinButton
aria-labelledby="throughput-label" aria-labelledby="throughput-label"
ariaLabel="Throughput (input)" ariaLabel="Throughput (input)"
decrementButtonIcon={
Object {
"iconName": "ChevronDownSmall",
}
}
disabled={true} disabled={true}
id="throughput-spinner-input" id="throughput-spinner-input"
incrementButtonIcon={
Object {
"iconName": "ChevronUpSmall",
}
}
label=""
labelPosition={0} labelPosition={0}
max={500} max={500}
min={400} min={400}
@@ -169,12 +158,12 @@ exports[`SmartUiComponent disable all inputs 1`] = `
} }
> >
<StackItem> <StackItem>
<StyledMessageBarBase <StyledMessageBar
messageBarType={1} messageBarType={1}
> >
Error: Error:
label, truelabel and falselabel are required for boolean input 'throughput3' label, truelabel and falselabel are required for boolean input 'throughput3'
</StyledMessageBarBase> </StyledMessageBar>
</StackItem> </StackItem>
</Stack> </Stack>
</div> </div>
@@ -282,7 +271,7 @@ exports[`SmartUiComponent disable all inputs 1`] = `
label="Database" label="Database"
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledWithResponsiveMode <Dropdown
aria-labelledby="database-label" aria-labelledby="database-label"
disabled={true} disabled={true}
id="database-dropdown-input" id="database-dropdown-input"
@@ -402,22 +391,10 @@ exports[`SmartUiComponent should render and honor input's hidden, disabled state
} }
} }
> >
<CustomizedSpinButton <StyledSpinButton
aria-labelledby="throughput-label" aria-labelledby="throughput-label"
ariaLabel="Throughput (input)" ariaLabel="Throughput (input)"
decrementButtonIcon={
Object {
"iconName": "ChevronDownSmall",
}
}
disabled={false}
id="throughput-spinner-input" id="throughput-spinner-input"
incrementButtonIcon={
Object {
"iconName": "ChevronUpSmall",
}
}
label=""
labelPosition={0} labelPosition={0}
max={500} max={500}
min={400} min={400}
@@ -493,12 +470,12 @@ exports[`SmartUiComponent should render and honor input's hidden, disabled state
} }
> >
<StackItem> <StackItem>
<StyledMessageBarBase <StyledMessageBar
messageBarType={1} messageBarType={1}
> >
Error: Error:
label, truelabel and falselabel are required for boolean input 'throughput3' label, truelabel and falselabel are required for boolean input 'throughput3'
</StyledMessageBarBase> </StyledMessageBar>
</StackItem> </StackItem>
</Stack> </Stack>
</div> </div>
@@ -604,7 +581,7 @@ exports[`SmartUiComponent should render and honor input's hidden, disabled state
label="Database" label="Database"
/> />
</StyledLabelBase> </StyledLabelBase>
<StyledWithResponsiveMode <Dropdown
aria-labelledby="database-label" aria-labelledby="database-label"
id="database-dropdown-input" id="database-dropdown-input"
onChange={[Function]} onChange={[Function]}

View File

@@ -1,4 +1,4 @@
import { Checkbox, DirectionalHint, Icon, Link, Stack, Text, TextField, TooltipHost } from "office-ui-fabric-react"; import { Checkbox, DirectionalHint, Icon, Link, Stack, Text, TextField, TooltipHost } from "@fluentui/react";
import React from "react"; import React from "react";
import * as Constants from "../../../Common/Constants"; import * as Constants from "../../../Common/Constants";
import * as SharedConstants from "../../../Shared/Constants"; import * as SharedConstants from "../../../Shared/Constants";
@@ -216,7 +216,7 @@ export class ThroughputInput extends React.Component<ThroughputInputProps, Throu
} }
private getCostAcknowledgeText(): string { private getCostAcknowledgeText(): string {
const databaseAccount = userContext.databaseAccount; const { databaseAccount } = userContext;
if (!databaseAccount || !databaseAccount.properties) { if (!databaseAccount || !databaseAccount.properties) {
return ""; return "";
} }
@@ -259,8 +259,8 @@ interface CostEstimateTextProps {
const CostEstimateText: React.FunctionComponent<CostEstimateTextProps> = (props: CostEstimateTextProps) => { const CostEstimateText: React.FunctionComponent<CostEstimateTextProps> = (props: CostEstimateTextProps) => {
const { requestUnits, isAutoscale } = props; const { requestUnits, isAutoscale } = props;
const databaseAccount = userContext.databaseAccount; const { databaseAccount } = userContext;
if (!databaseAccount || !databaseAccount.properties) { if (!databaseAccount?.properties) {
return <></>; return <></>;
} }

View File

@@ -5,15 +5,16 @@
* - context menu * - context menu
*/ */
import {
DirectionalHint,
IButtonStyles,
IconButton,
IContextualMenuItemProps,
IContextualMenuProps,
} from "@fluentui/react";
import LoadingIndicator_3Squares from "images/LoadingIndicator_3Squares.gif"; import LoadingIndicator_3Squares from "images/LoadingIndicator_3Squares.gif";
import TriangleDownIcon from "images/Triangle-down.svg"; import TriangleDownIcon from "images/Triangle-down.svg";
import TriangleRightIcon from "images/Triangle-right.svg"; import TriangleRightIcon from "images/Triangle-right.svg";
import { IButtonStyles, IconButton } from "office-ui-fabric-react/lib/Button";
import {
DirectionalHint,
IContextualMenuItemProps,
IContextualMenuProps,
} from "office-ui-fabric-react/lib/ContextualMenu";
import * as React from "react"; import * as React from "react";
import AnimateHeight from "react-animate-height"; import AnimateHeight from "react-animate-height";
import * as Constants from "../../../Common/Constants"; import * as Constants from "../../../Common/Constants";

View File

@@ -79,7 +79,6 @@ describe("ContainerSampleGenerator", () => {
location: "foo", location: "foo",
type: "foo", type: "foo",
kind: "foo", kind: "foo",
tags: [],
properties: { properties: {
documentEndpoint: "bar", documentEndpoint: "bar",
gremlinEndpoint: "foo", gremlinEndpoint: "foo",

View File

@@ -80,7 +80,7 @@ export class ContainerSampleGenerator {
if (!queries || queries.length < 1) { if (!queries || queries.length < 1) {
return; return;
} }
const account = userContext.databaseAccount; const { databaseAccount: account } = userContext;
const databaseId = collection.databaseId; const databaseId = collection.databaseId;
const gremlinClient = new GremlinClient(); const gremlinClient = new GremlinClient();
gremlinClient.initialize({ gremlinClient.initialize({

View File

@@ -1,5 +1,5 @@
import * as ko from "knockout"; import * as ko from "knockout";
import { IChoiceGroupProps } from "office-ui-fabric-react"; import { IChoiceGroupProps } from "@fluentui/react";
import * as path from "path"; import * as path from "path";
import Q from "q"; import Q from "q";
import React from "react"; import React from "react";
@@ -12,7 +12,7 @@ import { readCollection } from "../Common/dataAccess/readCollection";
import { readDatabases } from "../Common/dataAccess/readDatabases"; import { readDatabases } from "../Common/dataAccess/readDatabases";
import { getErrorMessage, getErrorStack, handleError } from "../Common/ErrorHandlingUtils"; import { getErrorMessage, getErrorStack, handleError } from "../Common/ErrorHandlingUtils";
import * as Logger from "../Common/Logger"; import * as Logger from "../Common/Logger";
import { sendCachedDataMessage, sendMessage } from "../Common/MessageHandler"; import { sendCachedDataMessage } from "../Common/MessageHandler";
import { QueriesClient } from "../Common/QueriesClient"; import { QueriesClient } from "../Common/QueriesClient";
import { Splitter, SplitterBounds, SplitterDirection } from "../Common/Splitter"; import { Splitter, SplitterBounds, SplitterDirection } from "../Common/Splitter";
import { configContext, Platform } from "../ConfigContext"; import { configContext, Platform } from "../ConfigContext";
@@ -31,7 +31,7 @@ import { ExplorerSettings } from "../Shared/ExplorerSettings";
import { Action, ActionModifiers } from "../Shared/Telemetry/TelemetryConstants"; import { Action, ActionModifiers } from "../Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "../Shared/Telemetry/TelemetryProcessor"; import * as TelemetryProcessor from "../Shared/Telemetry/TelemetryProcessor";
import { ArcadiaResourceManager } from "../SparkClusterManager/ArcadiaResourceManager"; import { ArcadiaResourceManager } from "../SparkClusterManager/ArcadiaResourceManager";
import { userContext } from "../UserContext"; import { updateUserContext, userContext } from "../UserContext";
import { getCollectionName } from "../Utils/APITypeUtils"; import { getCollectionName } from "../Utils/APITypeUtils";
import { decryptJWTToken, getAuthorizationHeader } from "../Utils/AuthorizationUtils"; import { decryptJWTToken, getAuthorizationHeader } from "../Utils/AuthorizationUtils";
import { stringToBlob } from "../Utils/BlobUtils"; import { stringToBlob } from "../Utils/BlobUtils";
@@ -109,23 +109,8 @@ export default class Explorer {
public refreshTreeTitle: ko.Observable<string>; public refreshTreeTitle: ko.Observable<string>;
public collapsedResourceTreeWidth: number = ExplorerMetrics.CollapsedResourceTreeWidth; public collapsedResourceTreeWidth: number = ExplorerMetrics.CollapsedResourceTreeWidth;
/**
* @deprecated
* Use userContext.databaseAccount instead
* */
public databaseAccount: ko.Observable<DataModels.DatabaseAccount>;
public collectionCreationDefaults: ViewModels.CollectionCreationDefaults = SharedConstants.CollectionCreationDefaults; public collectionCreationDefaults: ViewModels.CollectionCreationDefaults = SharedConstants.CollectionCreationDefaults;
/**
* @deprecated
* Use userContext.apiType instead
* */
public defaultExperience: ko.Observable<string>;
public isFixedCollectionWithSharedThroughputSupported: ko.Computed<boolean>; public isFixedCollectionWithSharedThroughputSupported: ko.Computed<boolean>;
/**
* @deprecated
* Compare a string with userContext.apiType instead: userContext.apiType === "Mongo"
* */
public isEnableMongoCapabilityPresent: ko.Computed<boolean>;
public isServerlessEnabled: ko.Computed<boolean>; public isServerlessEnabled: ko.Computed<boolean>;
public isAccountReady: ko.Observable<boolean>; public isAccountReady: ko.Observable<boolean>;
public canSaveQueries: ko.Computed<boolean>; public canSaveQueries: ko.Computed<boolean>;
@@ -176,7 +161,6 @@ export default class Explorer {
// features // features
public isPublishNotebookPaneEnabled: ko.Observable<boolean>; public isPublishNotebookPaneEnabled: ko.Observable<boolean>;
public isHostedDataExplorerEnabled: ko.Computed<boolean>; public isHostedDataExplorerEnabled: ko.Computed<boolean>;
public isRightPanelV2Enabled: ko.Computed<boolean>;
public isMongoIndexingEnabled: ko.Observable<boolean>; public isMongoIndexingEnabled: ko.Observable<boolean>;
public canExceedMaximumValue: ko.Computed<boolean>; public canExceedMaximumValue: ko.Computed<boolean>;
public isAutoscaleDefaultEnabled: ko.Observable<boolean>; public isAutoscaleDefaultEnabled: ko.Observable<boolean>;
@@ -236,7 +220,6 @@ export default class Explorer {
this.deleteDatabaseText = ko.observable<string>("Delete Database"); this.deleteDatabaseText = ko.observable<string>("Delete Database");
this.refreshTreeTitle = ko.observable<string>("Refresh collections"); this.refreshTreeTitle = ko.observable<string>("Refresh collections");
this.databaseAccount = ko.observable<DataModels.DatabaseAccount>();
this.isAccountReady = ko.observable<boolean>(false); this.isAccountReady = ko.observable<boolean>(false);
this._isInitializingNotebooks = false; this._isInitializingNotebooks = false;
this.arcadiaToken = ko.observable<string>(); this.arcadiaToken = ko.observable<string>();
@@ -271,7 +254,7 @@ export default class Explorer {
async () => { async () => {
this.isNotebookEnabled( this.isNotebookEnabled(
userContext.authType !== AuthType.ResourceToken && userContext.authType !== AuthType.ResourceToken &&
((await this._containsDefaultNotebookWorkspace(this.databaseAccount())) || ((await this._containsDefaultNotebookWorkspace(userContext.databaseAccount)) ||
userContext.features.enableNotebooks) userContext.features.enableNotebooks)
); );
TelemetryProcessor.trace(Action.NotebookEnabled, ActionModifiers.Mark, { TelemetryProcessor.trace(Action.NotebookEnabled, ActionModifiers.Mark, {
@@ -280,7 +263,7 @@ export default class Explorer {
}); });
if (this.isNotebookEnabled()) { if (this.isNotebookEnabled()) {
await this.initNotebooks(this.databaseAccount()); await this.initNotebooks(userContext.databaseAccount);
const workspaces = await this._getArcadiaWorkspaces(); const workspaces = await this._getArcadiaWorkspaces();
this.arcadiaWorkspaces(workspaces); this.arcadiaWorkspaces(workspaces);
} else if (this.notebookToImport) { } else if (this.notebookToImport) {
@@ -376,60 +359,32 @@ export default class Explorer {
bounds: splitterBounds, bounds: splitterBounds,
direction: SplitterDirection.Vertical, direction: SplitterDirection.Vertical,
}); });
this.defaultExperience = ko.observable<string>();
// 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(() => { this.isFixedCollectionWithSharedThroughputSupported = ko.computed(() => {
if (userContext.features.enableFixedCollectionWithSharedThroughput) { if (userContext.features.enableFixedCollectionWithSharedThroughput) {
return true; return true;
} }
if (this.databaseAccount && !this.databaseAccount()) { if (!userContext.databaseAccount) {
return false; return false;
} }
return this.isEnableMongoCapabilityPresent(); return userContext.apiType === "Mongo";
}); });
this.isServerlessEnabled = ko.computed( this.isServerlessEnabled = ko.computed(
() => () =>
this.databaseAccount && userContext.databaseAccount?.properties?.capabilities?.find(
this.databaseAccount()?.properties?.capabilities?.find(
(item) => item.name === Constants.CapabilityNames.EnableServerless (item) => item.name === Constants.CapabilityNames.EnableServerless
) !== undefined ) !== undefined
); );
this.isEnableMongoCapabilityPresent = ko.computed(() => {
const capabilities = this.databaseAccount && this.databaseAccount()?.properties?.capabilities;
if (!capabilities) {
return false;
}
for (let i = 0; i < capabilities.length; i++) {
if (typeof capabilities[i] === "object" && capabilities[i].name === Constants.CapabilityNames.EnableMongo) {
return true;
}
}
return false;
});
this.isHostedDataExplorerEnabled = ko.computed<boolean>( this.isHostedDataExplorerEnabled = ko.computed<boolean>(
() => () =>
configContext.platform === Platform.Portal && configContext.platform === Platform.Portal &&
!this.isRunningOnNationalCloud() && !this.isRunningOnNationalCloud() &&
userContext.apiType !== "Gremlin" userContext.apiType !== "Gremlin"
); );
this.isRightPanelV2Enabled = ko.computed<boolean>(() => userContext.features.enableRightPanelV2);
this.selectedDatabaseId = ko.computed<string>(() => { this.selectedDatabaseId = ko.computed<string>(() => {
const selectedNode = this.selectedNode(); const selectedNode = this.selectedNode();
if (!selectedNode) { if (!selectedNode) {
@@ -688,11 +643,11 @@ export default class Explorer {
this.isSynapseLinkUpdating(true); this.isSynapseLinkUpdating(true);
this._closeSynapseLinkModalDialog(); this._closeSynapseLinkModalDialog();
const resourceProviderClient = new ResourceProviderClientFactory().getOrCreate(this.databaseAccount().id); const resourceProviderClient = new ResourceProviderClientFactory().getOrCreate(userContext.databaseAccount.id);
try { try {
const databaseAccount: DataModels.DatabaseAccount = await resourceProviderClient.patchAsync( const databaseAccount: DataModels.DatabaseAccount = await resourceProviderClient.patchAsync(
this.databaseAccount().id, userContext.databaseAccount.id,
"2019-12-12", "2019-12-12",
{ {
properties: { properties: {
@@ -703,7 +658,7 @@ export default class Explorer {
clearInProgressMessage(); clearInProgressMessage();
logConsoleInfo("Enabled Azure Synapse Link for this account"); logConsoleInfo("Enabled Azure Synapse Link for this account");
TelemetryProcessor.traceSuccess(Action.EnableAzureSynapseLink, {}, startTime); TelemetryProcessor.traceSuccess(Action.EnableAzureSynapseLink, {}, startTime);
this.databaseAccount(databaseAccount); updateUserContext({ databaseAccount });
} catch (error) { } catch (error) {
clearInProgressMessage(); clearInProgressMessage();
logConsoleError(`Enabling Azure Synapse Link for this account failed. ${getErrorMessage(error)}`); logConsoleError(`Enabling Azure Synapse Link for this account failed. ${getErrorMessage(error)}`);
@@ -752,10 +707,6 @@ export default class Explorer {
this.setIsNotificationConsoleExpanded(true); this.setIsNotificationConsoleExpanded(true);
} }
public collapseConsole(): void {
this.setIsNotificationConsoleExpanded(false);
}
public toggleLeftPaneExpanded() { public toggleLeftPaneExpanded() {
this.isLeftPaneExpanded(!this.isLeftPaneExpanded()); this.isLeftPaneExpanded(!this.isLeftPaneExpanded());
@@ -1026,14 +977,14 @@ export default class Explorer {
} }
private async ensureNotebookWorkspaceRunning() { private async ensureNotebookWorkspaceRunning() {
if (!this.databaseAccount()) { if (!userContext.databaseAccount) {
return; return;
} }
let clearMessage; let clearMessage;
try { try {
const notebookWorkspace = await this.notebookWorkspaceManager.getNotebookWorkspaceAsync( const notebookWorkspace = await this.notebookWorkspaceManager.getNotebookWorkspaceAsync(
this.databaseAccount().id, userContext.databaseAccount.id,
"default" "default"
); );
if ( if (
@@ -1043,7 +994,7 @@ export default class Explorer {
notebookWorkspace.properties.status.toLowerCase() === "stopped" notebookWorkspace.properties.status.toLowerCase() === "stopped"
) { ) {
clearMessage = NotificationConsoleUtils.logConsoleProgress("Initializing notebook workspace"); clearMessage = NotificationConsoleUtils.logConsoleProgress("Initializing notebook workspace");
await this.notebookWorkspaceManager.startNotebookWorkspaceAsync(this.databaseAccount().id, "default"); await this.notebookWorkspaceManager.startNotebookWorkspaceAsync(userContext.databaseAccount.id, "default");
} }
} catch (error) { } catch (error) {
handleError(error, "Explorer/ensureNotebookWorkspaceRunning", "Failed to initialize notebook workspace"); handleError(error, "Explorer/ensureNotebookWorkspaceRunning", "Failed to initialize notebook workspace");
@@ -1128,21 +1079,10 @@ export default class Explorer {
if (process.env.NODE_ENV === "development") { if (process.env.NODE_ENV === "development") {
sessionStorage.setItem("portalDataExplorerInitMessage", JSON.stringify(inputs)); sessionStorage.setItem("portalDataExplorerInitMessage", JSON.stringify(inputs));
} }
const databaseAccount = inputs.databaseAccount || null;
if (inputs.defaultCollectionThroughput) { if (inputs.defaultCollectionThroughput) {
this.collectionCreationDefaults = inputs.defaultCollectionThroughput; this.collectionCreationDefaults = inputs.defaultCollectionThroughput;
} }
this.databaseAccount(databaseAccount);
this.setFeatureFlagsFromFlights(inputs.flights); this.setFeatureFlagsFromFlights(inputs.flights);
TelemetryProcessor.traceSuccess(
Action.LoadDatabaseAccount,
{
dataExplorerArea: Constants.Areas.ResourceTree,
},
inputs.loadDatabaseAccountTimestamp
);
this.isAccountReady(true); this.isAccountReady(true);
} }
} }
@@ -1181,38 +1121,6 @@ export default class Explorer {
this.commandBarComponentAdapter.onUpdateTabsButtons(buttons); this.commandBarComponentAdapter.onUpdateTabsButtons(buttons);
} }
public signInAad = () => {
TelemetryProcessor.trace(Action.SignInAad, undefined, { area: "Explorer" });
sendMessage({
type: MessageTypes.AadSignIn,
});
};
public onSwitchToConnectionString = () => {
$("#connectWithAad").hide();
$("#connectWithConnectionString").show();
};
public clickHostedAccountSwitch = () => {
sendMessage({
type: MessageTypes.UpdateAccountSwitch,
click: true,
});
};
public clickHostedDirectorySwitch = () => {
sendMessage({
type: MessageTypes.UpdateDirectoryControl,
click: true,
});
};
public refreshDatabaseAccount = () => {
sendMessage({
type: MessageTypes.RefreshDatabaseAccount,
});
};
private refreshAndExpandNewDatabases(newDatabases: ViewModels.Database[]): Q.Promise<void> { private refreshAndExpandNewDatabases(newDatabases: ViewModels.Database[]): Q.Promise<void> {
// we reload collections for all databases so the resource tree reflects any collection-level changes // we reload collections for all databases so the resource tree reflects any collection-level changes
// i.e addition of stored procedures, etc. // i.e addition of stored procedures, etc.
@@ -1632,7 +1540,7 @@ export default class Explorer {
} }
private async _refreshNotebooksEnabledStateForAccount(): Promise<void> { private async _refreshNotebooksEnabledStateForAccount(): Promise<void> {
const authType = userContext.authType; const { databaseAccount, authType } = userContext;
if ( if (
authType === AuthType.EncryptedToken || authType === AuthType.EncryptedToken ||
authType === AuthType.ResourceToken || authType === AuthType.ResourceToken ||
@@ -1642,7 +1550,6 @@ export default class Explorer {
return; return;
} }
const databaseAccount = this.databaseAccount();
const firstWriteLocation = const firstWriteLocation =
databaseAccount?.properties?.writeLocations && databaseAccount?.properties?.writeLocations &&
databaseAccount?.properties?.writeLocations[0]?.locationName.toLowerCase(); databaseAccount?.properties?.writeLocations[0]?.locationName.toLowerCase();
@@ -1681,9 +1588,8 @@ export default class Explorer {
} }
public _refreshSparkEnabledStateForAccount = async (): Promise<void> => { public _refreshSparkEnabledStateForAccount = async (): Promise<void> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, authType } = userContext;
const armEndpoint = configContext.ARM_ENDPOINT; const armEndpoint = configContext.ARM_ENDPOINT;
const authType = userContext.authType;
if (!subscriptionId || !armEndpoint || authType === AuthType.EncryptedToken) { if (!subscriptionId || !armEndpoint || authType === AuthType.EncryptedToken) {
// explorer is not aware of the database account yet // explorer is not aware of the database account yet
this.isSparkEnabledForAccount(false); this.isSparkEnabledForAccount(false);
@@ -1710,9 +1616,8 @@ export default class Explorer {
}; };
public _isAfecFeatureRegistered = async (featureName: string): Promise<boolean> => { public _isAfecFeatureRegistered = async (featureName: string): Promise<boolean> => {
const subscriptionId = userContext.subscriptionId; const { subscriptionId, authType } = userContext;
const armEndpoint = configContext.ARM_ENDPOINT; const armEndpoint = configContext.ARM_ENDPOINT;
const authType = userContext.authType;
if (!featureName || !subscriptionId || !armEndpoint || authType === AuthType.EncryptedToken) { if (!featureName || !subscriptionId || !armEndpoint || authType === AuthType.EncryptedToken) {
// explorer is not aware of the database account yet // explorer is not aware of the database account yet
return false; return false;
@@ -2024,7 +1929,7 @@ export default class Explorer {
} }
public async handleOpenFileAction(path: string): Promise<void> { public async handleOpenFileAction(path: string): Promise<void> {
if (this.isAccountReady() && !(await this._containsDefaultNotebookWorkspace(this.databaseAccount()))) { if (this.isAccountReady() && !(await this._containsDefaultNotebookWorkspace(userContext.databaseAccount))) {
this.closeAllPanes(); this.closeAllPanes();
this._openSetupNotebooksPaneForQuickstart(); this._openSetupNotebooksPaneForQuickstart();
} }

View File

@@ -1,5 +1,5 @@
import { FocusZone } from "@fluentui/react";
import * as React from "react"; import * as React from "react";
import { FocusZone } from "office-ui-fabric-react/lib/FocusZone";
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement"; import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
export interface CaptionId { export interface CaptionId {

View File

@@ -1,6 +1,6 @@
import { Dropdown, IDropdownOption, Stack, TextField } from "@fluentui/react";
import AddIcon from "images/Add-property.svg"; import AddIcon from "images/Add-property.svg";
import DeleteIcon from "images/delete.svg"; import DeleteIcon from "images/delete.svg";
import { Dropdown, IDropdownOption, Stack, TextField } from "office-ui-fabric-react";
import React, { FunctionComponent, useRef, useState } from "react"; import React, { FunctionComponent, useRef, useState } from "react";
import { NormalizedEventKey } from "../../../Common/Constants"; import { NormalizedEventKey } from "../../../Common/Constants";
import { GremlinPropertyValueType, InputPropertyValueTypeString, NewVertexData } from "../../../Contracts/ViewModels"; import { GremlinPropertyValueType, InputPropertyValueTypeString, NewVertexData } from "../../../Contracts/ViewModels";

View File

@@ -3,12 +3,13 @@
* If the component signals a change through the callback passed in the properties, it must render the React component when appropriate * If the component signals a change through the callback passed in the properties, it must render the React component when appropriate
* and update any knockout observables passed from the parent. * and update any knockout observables passed from the parent.
*/ */
import { CommandBar, ICommandBarItemProps } from "@fluentui/react";
import * as ko from "knockout"; import * as ko from "knockout";
import { CommandBar, ICommandBarItemProps } from "office-ui-fabric-react/lib/CommandBar";
import * as React from "react"; import * as React from "react";
import { ReactAdapter } from "../../../Bindings/ReactBindingHandler"; import { ReactAdapter } from "../../../Bindings/ReactBindingHandler";
import { StyleConstants } from "../../../Common/Constants"; import { StyleConstants } from "../../../Common/Constants";
import * as ViewModels from "../../../Contracts/ViewModels"; import * as ViewModels from "../../../Contracts/ViewModels";
import { userContext } from "../../../UserContext";
import { CommandButtonComponentProps } from "../../Controls/CommandButton/CommandButtonComponent"; import { CommandButtonComponentProps } from "../../Controls/CommandButton/CommandButtonComponent";
import Explorer from "../../Explorer"; import Explorer from "../../Explorer";
import * as CommandBarComponentButtonFactory from "./CommandBarComponentButtonFactory"; import * as CommandBarComponentButtonFactory from "./CommandBarComponentButtonFactory";
@@ -39,7 +40,7 @@ export class CommandBarComponentAdapter implements ReactAdapter {
container.isResourceTokenCollectionNodeSelected, container.isResourceTokenCollectionNodeSelected,
container.isHostedDataExplorerEnabled, container.isHostedDataExplorerEnabled,
container.isSynapseLinkUpdating, container.isSynapseLinkUpdating,
container.databaseAccount, userContext?.databaseAccount,
this.isNotebookTabActive, this.isNotebookTabActive,
container.isServerlessEnabled, container.isServerlessEnabled,
]; ];

View File

@@ -239,21 +239,11 @@ function createOpenSynapseLinkDialogButton(container: Explorer): CommandButtonCo
return undefined; return undefined;
} }
if ( if (userContext?.databaseAccount?.properties?.enableAnalyticalStorage) {
container.databaseAccount &&
container.databaseAccount() &&
container.databaseAccount().properties &&
container.databaseAccount().properties.enableAnalyticalStorage
) {
return undefined; return undefined;
} }
const capabilities = const capabilities = userContext?.databaseAccount?.properties?.capabilities || [];
(container.databaseAccount &&
container.databaseAccount() &&
container.databaseAccount().properties &&
container.databaseAccount().properties.capabilities) ||
[];
if (capabilities.some((capability) => capability.name === Constants.CapabilityNames.EnableStorageAnalytics)) { if (capabilities.some((capability) => capability.name === Constants.CapabilityNames.EnableStorageAnalytics)) {
return undefined; return undefined;
} }

View File

@@ -1,6 +1,6 @@
import * as CommandBarUtil from "./CommandBarUtil"; import { ICommandBarItemProps } from "@fluentui/react";
import { ICommandBarItemProps } from "office-ui-fabric-react/lib/CommandBar";
import { CommandButtonComponentProps } from "../../Controls/CommandButton/CommandButtonComponent"; import { CommandButtonComponentProps } from "../../Controls/CommandButton/CommandButtonComponent";
import * as CommandBarUtil from "./CommandBarUtil";
describe("CommandBarUtil tests", () => { describe("CommandBarUtil tests", () => {
const createButton = (): CommandButtonComponentProps => { const createButton = (): CommandButtonComponentProps => {

View File

@@ -1,9 +1,13 @@
import {
Dropdown,
ICommandBarItemProps,
IComponentAsProps,
IconType,
IDropdownOption,
IDropdownStyles,
} from "@fluentui/react";
import ChevronDownIcon from "images/Chevron_down.svg"; import ChevronDownIcon from "images/Chevron_down.svg";
import { Observable } from "knockout"; import { Observable } from "knockout";
import { ICommandBarItemProps } from "office-ui-fabric-react/lib/CommandBar";
import { Dropdown, IDropdownOption, IDropdownStyles } from "office-ui-fabric-react/lib/Dropdown";
import { IconType } from "office-ui-fabric-react/lib/Icon";
import { IComponentAsProps } from "office-ui-fabric-react/lib/Utilities";
import * as React from "react"; import * as React from "react";
import _ from "underscore"; import _ from "underscore";
import { StyleConstants } from "../../../Common/Constants"; import { StyleConstants } from "../../../Common/Constants";

View File

@@ -1,9 +1,7 @@
import * as React from "react"; import { ProgressIndicator, Spinner, SpinnerSize, Stack } from "@fluentui/react";
import { Observable, Subscription } from "knockout"; import { Observable, Subscription } from "knockout";
import * as React from "react";
import { MemoryUsageInfo } from "../../../Contracts/DataModels"; import { MemoryUsageInfo } from "../../../Contracts/DataModels";
import { ProgressIndicator } from "office-ui-fabric-react/lib/ProgressIndicator";
import { Spinner, SpinnerSize } from "office-ui-fabric-react/lib/Spinner";
import { Stack } from "office-ui-fabric-react/lib/Stack";
interface MemoryTrackerProps { interface MemoryTrackerProps {
memoryUsageInfo: Observable<MemoryUsageInfo>; memoryUsageInfo: Observable<MemoryUsageInfo>;

View File

@@ -2,6 +2,7 @@
* React component for control bar * React component for control bar
*/ */
import { Dropdown, IDropdownOption } from "@fluentui/react";
import LoaderIcon from "images/circular_loader_black_16x16.gif"; import LoaderIcon from "images/circular_loader_black_16x16.gif";
import { ReactComponent as ClearIcon } from "images/Clear1.svg"; import { ReactComponent as ClearIcon } from "images/Clear1.svg";
import ErrorBlackIcon from "images/error_black.svg"; import ErrorBlackIcon from "images/error_black.svg";
@@ -11,7 +12,6 @@ import InfoIcon from "images/info_color.svg";
import LoadingIcon from "images/loading.svg"; import LoadingIcon from "images/loading.svg";
import ChevronDownIcon from "images/QueryBuilder/CollapseChevronDown_16x.png"; import ChevronDownIcon from "images/QueryBuilder/CollapseChevronDown_16x.png";
import ChevronUpIcon from "images/QueryBuilder/CollapseChevronUp_16x.png"; import ChevronUpIcon from "images/QueryBuilder/CollapseChevronUp_16x.png";
import { Dropdown, IDropdownOption } from "office-ui-fabric-react";
import * as React from "react"; import * as React from "react";
import AnimateHeight from "react-animate-height"; import AnimateHeight from "react-animate-height";
import { ClientDefaults, KeyCodes } from "../../../Common/Constants"; import { ClientDefaults, KeyCodes } from "../../../Common/Constants";

View File

@@ -111,7 +111,7 @@ exports[`NotificationConsoleComponent renders the console 1`] = `
<div <div
className="notificationConsoleControls" className="notificationConsoleControls"
> >
<StyledWithResponsiveMode <Dropdown
aria-label="All" aria-label="All"
aria-labelledby="consoleFilterLabel" aria-labelledby="consoleFilterLabel"
label="Filter:" label="Filter:"
@@ -274,7 +274,7 @@ exports[`NotificationConsoleComponent renders the console 2`] = `
<div <div
className="notificationConsoleControls" className="notificationConsoleControls"
> >
<StyledWithResponsiveMode <Dropdown
aria-label="All" aria-label="All"
aria-labelledby="consoleFilterLabel" aria-labelledby="consoleFilterLabel"
label="Filter:" label="Filter:"

Some files were not shown because too many files have changed in this diff Show More