2020-05-25 21:30:55 -05:00
|
|
|
import * as ko from "knockout";
|
|
|
|
import * as MostRecentActivity from "../MostRecentActivity/MostRecentActivity";
|
|
|
|
import * as React from "react";
|
|
|
|
import * as ViewModels from "../../Contracts/ViewModels";
|
|
|
|
import { CosmosClient } from "../../Common/CosmosClient";
|
|
|
|
import { NotebookContentItem } from "../Notebook/NotebookContentItem";
|
|
|
|
import { ReactAdapter } from "../../Bindings/ReactBindingHandler";
|
|
|
|
import { TreeComponent, TreeNode } from "../Controls/TreeComponent/TreeComponent";
|
|
|
|
import CollectionIcon from "../../../images/tree-collection.svg";
|
2020-07-20 12:59:40 -05:00
|
|
|
import Explorer from "../Explorer";
|
2020-05-25 21:30:55 -05:00
|
|
|
|
|
|
|
export class ResourceTreeAdapterForResourceToken implements ReactAdapter {
|
|
|
|
public parameters: ko.Observable<number>;
|
|
|
|
public myNotebooksContentRoot: NotebookContentItem;
|
|
|
|
|
2020-07-20 12:59:40 -05:00
|
|
|
public constructor(private container: Explorer) {
|
2020-05-25 21:30:55 -05:00
|
|
|
this.parameters = ko.observable(Date.now());
|
|
|
|
|
2020-07-27 16:05:25 -05:00
|
|
|
this.container.resourceTokenCollection.subscribe(() => this.triggerRender());
|
2020-05-25 21:30:55 -05:00
|
|
|
this.container.selectedNode.subscribe((newValue: any) => this.triggerRender());
|
2020-07-27 16:05:25 -05:00
|
|
|
this.container.tabsManager && this.container.tabsManager.activeTab.subscribe(() => this.triggerRender());
|
2020-05-25 21:30:55 -05:00
|
|
|
|
|
|
|
this.triggerRender();
|
|
|
|
}
|
|
|
|
|
|
|
|
public renderComponent(): JSX.Element {
|
|
|
|
const dataRootNode = this.buildCollectionNode();
|
|
|
|
return <TreeComponent className="dataResourceTree" rootNode={dataRootNode} />;
|
|
|
|
}
|
|
|
|
|
|
|
|
public buildCollectionNode(): TreeNode {
|
|
|
|
const collection: ViewModels.CollectionBase = this.container.resourceTokenCollection();
|
|
|
|
if (!collection) {
|
|
|
|
return {
|
|
|
|
label: undefined,
|
|
|
|
isExpanded: true,
|
|
|
|
children: []
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
const children: TreeNode[] = [];
|
|
|
|
children.push({
|
|
|
|
label: "Items",
|
|
|
|
onClick: () => {
|
|
|
|
collection.onDocumentDBDocumentsClick();
|
|
|
|
// push to most recent
|
|
|
|
this.container.mostRecentActivity.addItem(CosmosClient.databaseAccount().id, {
|
|
|
|
type: MostRecentActivity.Type.OpenCollection,
|
|
|
|
title: collection.id(),
|
|
|
|
description: "Data",
|
|
|
|
data: collection.rid
|
|
|
|
});
|
|
|
|
},
|
|
|
|
isSelected: () => this.isDataNodeSelected(collection.rid, "Collection", ViewModels.CollectionTabKind.Documents)
|
|
|
|
});
|
|
|
|
|
|
|
|
const collectionNode: TreeNode = {
|
|
|
|
label: collection.id(),
|
|
|
|
iconSrc: CollectionIcon,
|
|
|
|
isExpanded: true,
|
|
|
|
children,
|
|
|
|
className: "collectionHeader",
|
|
|
|
onClick: () => {
|
|
|
|
// Rewritten version of expandCollapseCollection
|
|
|
|
this.container.selectedNode(collection);
|
|
|
|
this.container.onUpdateTabsButtons([]);
|
2020-07-27 16:05:25 -05:00
|
|
|
this.container.tabsManager.refreshActiveTab(tab => tab.collection && tab.collection.rid === collection.rid);
|
2020-05-25 21:30:55 -05:00
|
|
|
},
|
|
|
|
isSelected: () => this.isDataNodeSelected(collection.rid, "Collection", undefined)
|
|
|
|
};
|
|
|
|
|
|
|
|
return {
|
|
|
|
label: undefined,
|
|
|
|
isExpanded: true,
|
|
|
|
children: [collectionNode]
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
private isDataNodeSelected(rid: string, nodeKind: string, subnodeKind: ViewModels.CollectionTabKind): boolean {
|
|
|
|
if (!this.container.selectedNode || !this.container.selectedNode()) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
const selectedNode = this.container.selectedNode();
|
|
|
|
|
|
|
|
if (subnodeKind) {
|
|
|
|
return selectedNode.rid === rid && selectedNode.nodeKind === nodeKind;
|
|
|
|
} else {
|
2020-07-09 13:53:37 -07:00
|
|
|
const activeTab = this.container.tabsManager.activeTab();
|
2020-05-25 21:30:55 -05:00
|
|
|
let selectedSubnodeKind;
|
|
|
|
if (nodeKind === "Database" && (selectedNode as ViewModels.Database).selectedSubnodeKind) {
|
|
|
|
selectedSubnodeKind = (selectedNode as ViewModels.Database).selectedSubnodeKind();
|
|
|
|
} else if (nodeKind === "Collection" && (selectedNode as ViewModels.Collection).selectedSubnodeKind) {
|
|
|
|
selectedSubnodeKind = (selectedNode as ViewModels.Collection).selectedSubnodeKind();
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
activeTab &&
|
|
|
|
activeTab.tabKind === subnodeKind &&
|
|
|
|
selectedNode.rid === rid &&
|
|
|
|
selectedSubnodeKind !== undefined &&
|
|
|
|
selectedSubnodeKind === subnodeKind
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public triggerRender() {
|
|
|
|
window.requestAnimationFrame(() => this.parameters(Date.now()));
|
|
|
|
}
|
|
|
|
}
|