mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-05-02 06:24:31 +01:00
* Update contracts for new all resource messages * Add timestamp to token message signature * Reconstruct resource tree with databases and collections parsed from token dictionary keys * Create FabricDatabase and FabricCollection to turn off interaction * Remove unnecessary FabricCollection derived class * Handle resource tokens * Bug fix * Fix linting issues * Fix update document * Fix partitition keys * Remove special case for FabricDatabase tree node * Modify readCollections to follow normal flow with Fabric * Move fabric databases refresh to data access and remove special case in Explorer * Revert Explorer.tsx changes * Disable database context menu and delete container context menu * Remove create database/container button for Fabric * Fix format * Renew token logic * Parallelize read collections calls to speed up * Disable readDatabaseOffer, because it is too slow for now * Reduce TOKEN_VALIDITY_MS a bit to make sure renewal happens before expiration. Receving new tokens new refreshes databases * Add container element for Main app in HTML * Do not handle "openTab" message anymore * Fix style of main div * Simplify conditional load of the fabric .css * Fix format * Fix tsc can't find dynamic less import --------- Co-authored-by: Armando Trejo Oliver <artrejo@microsoft.com>
91 lines
3.6 KiB
TypeScript
91 lines
3.6 KiB
TypeScript
import { TreeNode2 } from "Explorer/Controls/TreeComponent2/TreeNode2Component";
|
|
import TabsBase from "Explorer/Tabs/TabsBase";
|
|
import { buildCollectionNode } from "Explorer/Tree2/containerTreeNodeUtil";
|
|
import { useDatabases } from "Explorer/useDatabases";
|
|
import { useTabs } from "hooks/useTabs";
|
|
import CosmosDBIcon from "../../../images/Azure-Cosmos-DB.svg";
|
|
import * as ViewModels from "../../Contracts/ViewModels";
|
|
import Explorer from "../Explorer";
|
|
import { useCommandBar } from "../Menus/CommandBar/CommandBarComponentAdapter";
|
|
import { useSelectedNode } from "../useSelectedNode";
|
|
import { Platform, configContext } from "./../../ConfigContext";
|
|
|
|
export const useDatabaseTreeNodes = (container: Explorer, isNotebookEnabled: boolean): TreeNode2[] => {
|
|
const databases = useDatabases((state) => state.databases);
|
|
const { refreshActiveTab } = useTabs();
|
|
|
|
const databaseTreeNodes: TreeNode2[] = databases.map((database: ViewModels.Database) => {
|
|
const databaseNode: TreeNode2 = {
|
|
label: database.id(),
|
|
iconSrc: CosmosDBIcon,
|
|
className: "databaseHeader",
|
|
children: [],
|
|
isSelected: () => useSelectedNode.getState().isDataNodeSelected(database.id()),
|
|
contextMenu: undefined, // TODO Disable this for now as the actions don't work. ResourceTreeContextMenuButtonFactory.createDatabaseContextMenu(container, database.id()),
|
|
onExpanded: async () => {
|
|
useSelectedNode.getState().setSelectedNode(database);
|
|
if (!databaseNode.children || databaseNode.children?.length === 0) {
|
|
databaseNode.isLoading = true;
|
|
}
|
|
await database.expandDatabase();
|
|
databaseNode.isLoading = false;
|
|
useCommandBar.getState().setContextButtons([]);
|
|
refreshActiveTab((tab: TabsBase) => tab.collection?.databaseId === database.id());
|
|
useDatabases.getState().updateDatabase(database);
|
|
},
|
|
onContextMenuOpen: () => useSelectedNode.getState().setSelectedNode(database),
|
|
isExpanded: database.isDatabaseExpanded(),
|
|
onCollapsed: () => {
|
|
database.collapseDatabase();
|
|
// useCommandBar.getState().setContextButtons([]);
|
|
useDatabases.getState().updateDatabase(database);
|
|
},
|
|
};
|
|
|
|
if (database.isDatabaseShared() && configContext.platform !== Platform.Fabric) {
|
|
databaseNode.children.push({
|
|
id: database.isSampleDB ? "sampleScaleSettings" : "",
|
|
label: "Scale",
|
|
isSelected: () =>
|
|
useSelectedNode
|
|
.getState()
|
|
.isDataNodeSelected(database.id(), undefined, [ViewModels.CollectionTabKind.DatabaseSettingsV2]),
|
|
onClick: database.onSettingsClick.bind(database),
|
|
});
|
|
}
|
|
|
|
// Find collections
|
|
database
|
|
.collections()
|
|
.forEach((collection: ViewModels.Collection) =>
|
|
databaseNode.children.push(
|
|
buildCollectionNode(database, collection, isNotebookEnabled, container, refreshActiveTab),
|
|
),
|
|
);
|
|
|
|
if (database.collectionsContinuationToken) {
|
|
const loadMoreNode: TreeNode2 = {
|
|
label: "load more",
|
|
className: "loadMoreHeader",
|
|
onClick: async () => {
|
|
await database.loadCollections();
|
|
useDatabases.getState().updateDatabase(database);
|
|
},
|
|
};
|
|
databaseNode.children.push(loadMoreNode);
|
|
}
|
|
|
|
database.collections.subscribe((collections: ViewModels.Collection[]) => {
|
|
collections.forEach((collection: ViewModels.Collection) =>
|
|
databaseNode.children.push(
|
|
buildCollectionNode(database, collection, isNotebookEnabled, container, refreshActiveTab),
|
|
),
|
|
);
|
|
});
|
|
|
|
return databaseNode;
|
|
});
|
|
|
|
return databaseTreeNodes;
|
|
};
|