mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-04-22 17:44:58 +01:00
Enable original azure resource tree for Fabric native and turn on Settings page
This commit is contained in:
parent
a3bfc89318
commit
cbda2a3325
@ -1,3 +1,4 @@
|
|||||||
|
import { isFabric } from "Platform/Fabric/FabricUtil";
|
||||||
import { AuthType } from "../../AuthType";
|
import { AuthType } from "../../AuthType";
|
||||||
import { Offer, ReadCollectionOfferParams } from "../../Contracts/DataModels";
|
import { Offer, ReadCollectionOfferParams } from "../../Contracts/DataModels";
|
||||||
import { userContext } from "../../UserContext";
|
import { userContext } from "../../UserContext";
|
||||||
@ -13,6 +14,11 @@ import { readOfferWithSDK } from "./readOfferWithSDK";
|
|||||||
export const readCollectionOffer = async (params: ReadCollectionOfferParams): Promise<Offer> => {
|
export const readCollectionOffer = async (params: ReadCollectionOfferParams): Promise<Offer> => {
|
||||||
const clearMessage = logConsoleProgress(`Querying offer for collection ${params.collectionId}`);
|
const clearMessage = logConsoleProgress(`Querying offer for collection ${params.collectionId}`);
|
||||||
|
|
||||||
|
if (isFabric()) {
|
||||||
|
// Not exposing offers in Fabric
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (
|
if (
|
||||||
userContext.authType === AuthType.AAD &&
|
userContext.authType === AuthType.AAD &&
|
||||||
|
@ -12,6 +12,7 @@ import {
|
|||||||
ThroughputBucketsComponentProps,
|
ThroughputBucketsComponentProps,
|
||||||
} from "Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent";
|
} from "Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent";
|
||||||
import { useDatabases } from "Explorer/useDatabases";
|
import { useDatabases } from "Explorer/useDatabases";
|
||||||
|
import { isFabricNative } from "Platform/Fabric/FabricUtil";
|
||||||
import { isFullTextSearchEnabled, isVectorSearchEnabled } from "Utils/CapabilityUtils";
|
import { isFullTextSearchEnabled, isVectorSearchEnabled } from "Utils/CapabilityUtils";
|
||||||
import { isRunningOnPublicCloud } from "Utils/CloudUtils";
|
import { isRunningOnPublicCloud } from "Utils/CloudUtils";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
@ -1270,6 +1271,7 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
|
|||||||
database: useDatabases.getState().findDatabaseWithId(this.collection.databaseId),
|
database: useDatabases.getState().findDatabaseWithId(this.collection.databaseId),
|
||||||
collection: this.collection,
|
collection: this.collection,
|
||||||
explorer: this.props.settingsTab.getContainer(),
|
explorer: this.props.settingsTab.getContainer(),
|
||||||
|
isReadOnly: isFabricNative(),
|
||||||
};
|
};
|
||||||
|
|
||||||
const tabs: SettingsV2TabInfo[] = [];
|
const tabs: SettingsV2TabInfo[] = [];
|
||||||
|
@ -29,16 +29,26 @@ export interface PartitionKeyComponentProps {
|
|||||||
database: ViewModels.Database;
|
database: ViewModels.Database;
|
||||||
collection: ViewModels.Collection;
|
collection: ViewModels.Collection;
|
||||||
explorer: Explorer;
|
explorer: Explorer;
|
||||||
|
isReadOnly?: boolean; // true: cannot change partition key
|
||||||
}
|
}
|
||||||
|
|
||||||
export const PartitionKeyComponent: React.FC<PartitionKeyComponentProps> = ({ database, collection, explorer }) => {
|
export const PartitionKeyComponent: React.FC<PartitionKeyComponentProps> = ({
|
||||||
|
database,
|
||||||
|
collection,
|
||||||
|
explorer,
|
||||||
|
isReadOnly,
|
||||||
|
}) => {
|
||||||
const { dataTransferJobs } = useDataTransferJobs();
|
const { dataTransferJobs } = useDataTransferJobs();
|
||||||
const [portalDataTransferJob, setPortalDataTransferJob] = React.useState<DataTransferJobGetResults>(null);
|
const [portalDataTransferJob, setPortalDataTransferJob] = React.useState<DataTransferJobGetResults>(null);
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
|
if (isReadOnly) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const loadDataTransferJobs = refreshDataTransferOperations;
|
const loadDataTransferJobs = refreshDataTransferOperations;
|
||||||
loadDataTransferJobs();
|
loadDataTransferJobs();
|
||||||
}, []);
|
}, [isReadOnly]);
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
const currentJob = findPortalDataTransferJob();
|
const currentJob = findPortalDataTransferJob();
|
||||||
@ -163,56 +173,61 @@ export const PartitionKeyComponent: React.FC<PartitionKeyComponentProps> = ({ da
|
|||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
<MessageBar messageBarType={MessageBarType.warning}>
|
|
||||||
To safeguard the integrity of the data being copied to the new container, ensure that no updates are made to the
|
{!isReadOnly && (
|
||||||
source container for the entire duration of the partition key change process.
|
<>
|
||||||
<Link
|
<MessageBar messageBarType={MessageBarType.warning}>
|
||||||
href="https://learn.microsoft.com/azure/cosmos-db/container-copy#how-does-container-copy-work"
|
To safeguard the integrity of the data being copied to the new container, ensure that no updates are made to
|
||||||
target="_blank"
|
the source container for the entire duration of the partition key change process.
|
||||||
underline
|
<Link
|
||||||
>
|
href="https://learn.microsoft.com/azure/cosmos-db/container-copy#how-does-container-copy-work"
|
||||||
Learn more
|
target="_blank"
|
||||||
</Link>
|
underline
|
||||||
</MessageBar>
|
>
|
||||||
<Text>
|
Learn more
|
||||||
To change the partition key, a new destination container must be created or an existing destination container
|
</Link>
|
||||||
selected. Data will then be copied to the destination container.
|
</MessageBar>
|
||||||
</Text>
|
<Text>
|
||||||
{configContext.platform !== Platform.Emulator && (
|
To change the partition key, a new destination container must be created or an existing destination
|
||||||
<PrimaryButton
|
container selected. Data will then be copied to the destination container.
|
||||||
styles={{ root: { width: "fit-content" } }}
|
</Text>
|
||||||
text="Change"
|
{configContext.platform !== Platform.Emulator && (
|
||||||
onClick={startPartitionkeyChangeWorkflow}
|
<PrimaryButton
|
||||||
disabled={isCurrentJobInProgress(portalDataTransferJob)}
|
styles={{ root: { width: "fit-content" } }}
|
||||||
/>
|
text="Change"
|
||||||
)}
|
onClick={startPartitionkeyChangeWorkflow}
|
||||||
{portalDataTransferJob && (
|
disabled={isCurrentJobInProgress(portalDataTransferJob)}
|
||||||
<Stack>
|
/>
|
||||||
<Text styles={textHeadingStyle}>{partitionKeyName} change job</Text>
|
)}
|
||||||
<Stack
|
{portalDataTransferJob && (
|
||||||
horizontal
|
<Stack>
|
||||||
tokens={{ childrenGap: 20 }}
|
<Text styles={textHeadingStyle}>{partitionKeyName} change job</Text>
|
||||||
styles={{
|
<Stack
|
||||||
root: {
|
horizontal
|
||||||
alignItems: "center",
|
tokens={{ childrenGap: 20 }}
|
||||||
},
|
styles={{
|
||||||
}}
|
root: {
|
||||||
>
|
alignItems: "center",
|
||||||
<ProgressIndicator
|
},
|
||||||
label={portalDataTransferJob?.properties?.jobName}
|
}}
|
||||||
description={getProgressDescription()}
|
>
|
||||||
percentComplete={getPercentageComplete()}
|
<ProgressIndicator
|
||||||
styles={{
|
label={portalDataTransferJob?.properties?.jobName}
|
||||||
root: {
|
description={getProgressDescription()}
|
||||||
width: "85%",
|
percentComplete={getPercentageComplete()}
|
||||||
},
|
styles={{
|
||||||
}}
|
root: {
|
||||||
></ProgressIndicator>
|
width: "85%",
|
||||||
{isCurrentJobInProgress(portalDataTransferJob) && (
|
},
|
||||||
<DefaultButton text="Cancel" onClick={() => cancelRunningDataTransferJob(portalDataTransferJob)} />
|
}}
|
||||||
)}
|
></ProgressIndicator>
|
||||||
</Stack>
|
{isCurrentJobInProgress(portalDataTransferJob) && (
|
||||||
</Stack>
|
<DefaultButton text="Cancel" onClick={() => cancelRunningDataTransferJob(portalDataTransferJob)} />
|
||||||
|
)}
|
||||||
|
</Stack>
|
||||||
|
</Stack>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
|
@ -6,7 +6,7 @@ import StoredProcedure from "Explorer/Tree/StoredProcedure";
|
|||||||
import Trigger from "Explorer/Tree/Trigger";
|
import Trigger from "Explorer/Tree/Trigger";
|
||||||
import UserDefinedFunction from "Explorer/Tree/UserDefinedFunction";
|
import UserDefinedFunction from "Explorer/Tree/UserDefinedFunction";
|
||||||
import { useDatabases } from "Explorer/useDatabases";
|
import { useDatabases } from "Explorer/useDatabases";
|
||||||
import { isFabricMirrored } from "Platform/Fabric/FabricUtil";
|
import { isFabric, isFabricMirrored, isFabricNative } from "Platform/Fabric/FabricUtil";
|
||||||
import { getItemName } from "Utils/APITypeUtils";
|
import { getItemName } from "Utils/APITypeUtils";
|
||||||
import { isServerlessAccount } from "Utils/CapabilityUtils";
|
import { isServerlessAccount } from "Utils/CapabilityUtils";
|
||||||
import { useTabs } from "hooks/useTabs";
|
import { useTabs } from "hooks/useTabs";
|
||||||
@ -23,7 +23,7 @@ import { useNotebook } from "../Notebook/useNotebook";
|
|||||||
import { useSelectedNode } from "../useSelectedNode";
|
import { useSelectedNode } from "../useSelectedNode";
|
||||||
|
|
||||||
export const shouldShowScriptNodes = (): boolean => {
|
export const shouldShowScriptNodes = (): boolean => {
|
||||||
return !isFabricMirrored() && (userContext.apiType === "SQL" || userContext.apiType === "Gremlin");
|
return !isFabric() && (userContext.apiType === "SQL" || userContext.apiType === "Gremlin");
|
||||||
};
|
};
|
||||||
|
|
||||||
const TreeDatabaseIcon = <DatabaseRegular fontSize={16} />;
|
const TreeDatabaseIcon = <DatabaseRegular fontSize={16} />;
|
||||||
@ -219,7 +219,7 @@ export const buildCollectionNode = (
|
|||||||
): TreeNode => {
|
): TreeNode => {
|
||||||
let children: TreeNode[];
|
let children: TreeNode[];
|
||||||
// Flat Tree for Fabric
|
// Flat Tree for Fabric
|
||||||
if (configContext.platform !== Platform.Fabric) {
|
if (!isFabricMirrored()) {
|
||||||
children = buildCollectionNodeChildren(database, collection, isNotebookEnabled, container, refreshActiveTab);
|
children = buildCollectionNodeChildren(database, collection, isNotebookEnabled, container, refreshActiveTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,7 +317,7 @@ const buildCollectionNodeChildren = (
|
|||||||
|
|
||||||
children.push({
|
children.push({
|
||||||
id,
|
id,
|
||||||
label: database.isDatabaseShared() || isServerlessAccount() ? "Settings" : "Scale & Settings",
|
label: database.isDatabaseShared() || isServerlessAccount() || isFabricNative() ? "Settings" : "Scale & Settings",
|
||||||
onClick: collection.onSettingsClick.bind(collection),
|
onClick: collection.onSettingsClick.bind(collection),
|
||||||
isSelected: () =>
|
isSelected: () =>
|
||||||
useSelectedNode
|
useSelectedNode
|
||||||
|
Loading…
x
Reference in New Issue
Block a user