Move resource token collection to useDatabases zustand store (#916)
This commit is contained in:
parent
45d0b3f706
commit
98d7bb37d5
|
@ -48,7 +48,6 @@ exports[`SettingsComponent renders 1`] = `
|
||||||
"container": [Circular],
|
"container": [Circular],
|
||||||
},
|
},
|
||||||
"refreshNotebookList": [Function],
|
"refreshNotebookList": [Function],
|
||||||
"resourceTokenCollection": [Function],
|
|
||||||
"resourceTree": ResourceTreeAdapter {
|
"resourceTree": ResourceTreeAdapter {
|
||||||
"container": [Circular],
|
"container": [Circular],
|
||||||
"copyNotebook": [Function],
|
"copyNotebook": [Function],
|
||||||
|
@ -134,7 +133,6 @@ exports[`SettingsComponent renders 1`] = `
|
||||||
"container": [Circular],
|
"container": [Circular],
|
||||||
},
|
},
|
||||||
"refreshNotebookList": [Function],
|
"refreshNotebookList": [Function],
|
||||||
"resourceTokenCollection": [Function],
|
|
||||||
"resourceTree": ResourceTreeAdapter {
|
"resourceTree": ResourceTreeAdapter {
|
||||||
"container": [Circular],
|
"container": [Circular],
|
||||||
"copyNotebook": [Function],
|
"copyNotebook": [Function],
|
||||||
|
|
|
@ -87,7 +87,6 @@ export default class Explorer {
|
||||||
private resourceTree: ResourceTreeAdapter;
|
private resourceTree: ResourceTreeAdapter;
|
||||||
|
|
||||||
// Resource Token
|
// Resource Token
|
||||||
public resourceTokenCollection: ko.Observable<ViewModels.CollectionBase>;
|
|
||||||
public resourceTreeForResourceToken: ResourceTreeAdapterForResourceToken;
|
public resourceTreeForResourceToken: ResourceTreeAdapterForResourceToken;
|
||||||
|
|
||||||
// Tabs
|
// Tabs
|
||||||
|
@ -157,7 +156,6 @@ export default class Explorer {
|
||||||
this.memoryUsageInfo = ko.observable<DataModels.MemoryUsageInfo>();
|
this.memoryUsageInfo = ko.observable<DataModels.MemoryUsageInfo>();
|
||||||
|
|
||||||
this.queriesClient = new QueriesClient(this);
|
this.queriesClient = new QueriesClient(this);
|
||||||
this.resourceTokenCollection = ko.observable<ViewModels.CollectionBase>();
|
|
||||||
this.isSchemaEnabled = ko.computed<boolean>(() => userContext.features.enableSchema);
|
this.isSchemaEnabled = ko.computed<boolean>(() => userContext.features.enableSchema);
|
||||||
|
|
||||||
useSelectedNode.subscribe(() => {
|
useSelectedNode.subscribe(() => {
|
||||||
|
@ -340,8 +338,9 @@ export default class Explorer {
|
||||||
}
|
}
|
||||||
|
|
||||||
return readCollection(databaseId, collectionId).then((collection: DataModels.Collection) => {
|
return readCollection(databaseId, collectionId).then((collection: DataModels.Collection) => {
|
||||||
this.resourceTokenCollection(new ResourceTokenCollection(this, databaseId, collection));
|
const resourceTokenCollection = new ResourceTokenCollection(this, databaseId, collection);
|
||||||
useSelectedNode.getState().setSelectedNode(this.resourceTokenCollection());
|
useDatabases.setState({ resourceTokenCollection });
|
||||||
|
useSelectedNode.getState().setSelectedNode(resourceTokenCollection);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { GitHubOAuthService } from "../../../GitHub/GitHubOAuthService";
|
||||||
import { updateUserContext } from "../../../UserContext";
|
import { updateUserContext } from "../../../UserContext";
|
||||||
import Explorer from "../../Explorer";
|
import Explorer from "../../Explorer";
|
||||||
import NotebookManager from "../../Notebook/NotebookManager";
|
import NotebookManager from "../../Notebook/NotebookManager";
|
||||||
|
import { useDatabases } from "../../useDatabases";
|
||||||
import { useSelectedNode } from "../../useSelectedNode";
|
import { useSelectedNode } from "../../useSelectedNode";
|
||||||
import * as CommandBarComponentButtonFactory from "./CommandBarComponentButtonFactory";
|
import * as CommandBarComponentButtonFactory from "./CommandBarComponentButtonFactory";
|
||||||
|
|
||||||
|
@ -376,10 +377,11 @@ describe("CommandBarComponentButtonFactory tests", () => {
|
||||||
describe("Resource token", () => {
|
describe("Resource token", () => {
|
||||||
const mockCollection = { id: ko.observable("test") } as CollectionBase;
|
const mockCollection = { id: ko.observable("test") } as CollectionBase;
|
||||||
useSelectedNode.getState().setSelectedNode(mockCollection);
|
useSelectedNode.getState().setSelectedNode(mockCollection);
|
||||||
|
useDatabases.setState({ resourceTokenCollection: mockCollection });
|
||||||
const selectedNodeState = useSelectedNode.getState();
|
const selectedNodeState = useSelectedNode.getState();
|
||||||
|
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
mockExplorer = {} as Explorer;
|
mockExplorer = {} as Explorer;
|
||||||
mockExplorer.resourceTokenCollection = ko.observable(mockCollection);
|
|
||||||
|
|
||||||
updateUserContext({
|
updateUserContext({
|
||||||
authType: AuthType.ResourceToken,
|
authType: AuthType.ResourceToken,
|
||||||
|
|
|
@ -31,6 +31,7 @@ import Explorer from "../../Explorer";
|
||||||
import { OpenFullScreen } from "../../OpenFullScreen";
|
import { OpenFullScreen } from "../../OpenFullScreen";
|
||||||
import { LoadQueryPane } from "../../Panes/LoadQueryPane/LoadQueryPane";
|
import { LoadQueryPane } from "../../Panes/LoadQueryPane/LoadQueryPane";
|
||||||
import { SettingsPane } from "../../Panes/SettingsPane/SettingsPane";
|
import { SettingsPane } from "../../Panes/SettingsPane/SettingsPane";
|
||||||
|
import { useDatabases } from "../../useDatabases";
|
||||||
import { SelectedNodeState } from "../../useSelectedNode";
|
import { SelectedNodeState } from "../../useSelectedNode";
|
||||||
|
|
||||||
let counter = 0;
|
let counter = 0;
|
||||||
|
@ -554,12 +555,12 @@ function createStaticCommandBarButtonsForResourceToken(
|
||||||
const newSqlQueryBtn = createNewSQLQueryButton(selectedNodeState);
|
const newSqlQueryBtn = createNewSQLQueryButton(selectedNodeState);
|
||||||
const openQueryBtn = createOpenQueryButton(container);
|
const openQueryBtn = createOpenQueryButton(container);
|
||||||
|
|
||||||
|
const resourceTokenCollection: ViewModels.CollectionBase = useDatabases.getState().resourceTokenCollection;
|
||||||
const isResourceTokenCollectionNodeSelected: boolean =
|
const isResourceTokenCollectionNodeSelected: boolean =
|
||||||
container.resourceTokenCollection() &&
|
resourceTokenCollection?.id() === selectedNodeState.selectedNode?.id();
|
||||||
container.resourceTokenCollection().id() === selectedNodeState.selectedNode?.id();
|
|
||||||
newSqlQueryBtn.disabled = !isResourceTokenCollectionNodeSelected;
|
newSqlQueryBtn.disabled = !isResourceTokenCollectionNodeSelected;
|
||||||
newSqlQueryBtn.onCommandClick = () => {
|
newSqlQueryBtn.onCommandClick = () => {
|
||||||
const resourceTokenCollection: ViewModels.CollectionBase = container.resourceTokenCollection();
|
const resourceTokenCollection: ViewModels.CollectionBase = useDatabases.getState().resourceTokenCollection;
|
||||||
resourceTokenCollection && resourceTokenCollection.onNewQueryClick(resourceTokenCollection, undefined);
|
resourceTokenCollection && resourceTokenCollection.onNewQueryClick(resourceTokenCollection, undefined);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,6 @@ exports[`GitHub Repos Panel should render Default properly 1`] = `
|
||||||
"container": [Circular],
|
"container": [Circular],
|
||||||
},
|
},
|
||||||
"refreshNotebookList": [Function],
|
"refreshNotebookList": [Function],
|
||||||
"resourceTokenCollection": [Function],
|
|
||||||
"resourceTree": ResourceTreeAdapter {
|
"resourceTree": ResourceTreeAdapter {
|
||||||
"container": [Circular],
|
"container": [Circular],
|
||||||
"copyNotebook": [Function],
|
"copyNotebook": [Function],
|
||||||
|
|
|
@ -27,7 +27,6 @@ exports[`StringInput Pane should render Create new directory properly 1`] = `
|
||||||
"container": [Circular],
|
"container": [Circular],
|
||||||
},
|
},
|
||||||
"refreshNotebookList": [Function],
|
"refreshNotebookList": [Function],
|
||||||
"resourceTokenCollection": [Function],
|
|
||||||
"resourceTree": ResourceTreeAdapter {
|
"resourceTree": ResourceTreeAdapter {
|
||||||
"container": [Circular],
|
"container": [Circular],
|
||||||
"copyNotebook": [Function],
|
"copyNotebook": [Function],
|
||||||
|
|
|
@ -1,37 +1,27 @@
|
||||||
import { shallow } from "enzyme";
|
import { shallow } from "enzyme";
|
||||||
import * as ko from "knockout";
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
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 { TreeComponent, TreeComponentProps, TreeNode } from "../Controls/TreeComponent/TreeComponent";
|
import { TreeComponent, TreeComponentProps, TreeNode } from "../Controls/TreeComponent/TreeComponent";
|
||||||
import Explorer from "../Explorer";
|
import Explorer from "../Explorer";
|
||||||
|
import { useDatabases } from "../useDatabases";
|
||||||
import ResourceTokenCollection from "./ResourceTokenCollection";
|
import ResourceTokenCollection from "./ResourceTokenCollection";
|
||||||
import { ResourceTreeAdapterForResourceToken } from "./ResourceTreeAdapterForResourceToken";
|
import { ResourceTreeAdapterForResourceToken } from "./ResourceTreeAdapterForResourceToken";
|
||||||
|
|
||||||
const createMockContainer = (): Explorer => {
|
describe("Resource tree for resource token", () => {
|
||||||
let mockContainer = {} as Explorer;
|
const mockContainer = {} as Explorer;
|
||||||
mockContainer.resourceTokenCollection = createMockCollection(mockContainer);
|
const resourceTree = new ResourceTreeAdapterForResourceToken(mockContainer);
|
||||||
|
const mockCollection = {
|
||||||
return mockContainer;
|
_rid: "fakeRid",
|
||||||
};
|
_self: "fakeSelf",
|
||||||
|
id: "fakeId",
|
||||||
const createMockCollection = (container: Explorer): ko.Observable<ViewModels.CollectionBase> => {
|
} as DataModels.Collection;
|
||||||
let mockCollection = {} as DataModels.Collection;
|
|
||||||
mockCollection._rid = "fakeRid";
|
|
||||||
mockCollection._self = "fakeSelf";
|
|
||||||
mockCollection.id = "fakeId";
|
|
||||||
|
|
||||||
const mockResourceTokenCollection: ViewModels.CollectionBase = new ResourceTokenCollection(
|
const mockResourceTokenCollection: ViewModels.CollectionBase = new ResourceTokenCollection(
|
||||||
container,
|
mockContainer,
|
||||||
"fakeDatabaseId",
|
"fakeDatabaseId",
|
||||||
mockCollection
|
mockCollection
|
||||||
);
|
);
|
||||||
return ko.observable<ViewModels.CollectionBase>(mockResourceTokenCollection);
|
useDatabases.setState({ resourceTokenCollection: mockResourceTokenCollection });
|
||||||
};
|
|
||||||
|
|
||||||
describe("Resource tree for resource token", () => {
|
|
||||||
const mockContainer: Explorer = createMockContainer();
|
|
||||||
const resourceTree = new ResourceTreeAdapterForResourceToken(mockContainer);
|
|
||||||
|
|
||||||
it("should render", () => {
|
it("should render", () => {
|
||||||
const rootNode: TreeNode = resourceTree.buildCollectionNode();
|
const rootNode: TreeNode = resourceTree.buildCollectionNode();
|
||||||
|
|
|
@ -9,6 +9,7 @@ import Explorer from "../Explorer";
|
||||||
import { useCommandBar } from "../Menus/CommandBar/CommandBarComponentAdapter";
|
import { useCommandBar } from "../Menus/CommandBar/CommandBarComponentAdapter";
|
||||||
import { mostRecentActivity } from "../MostRecentActivity/MostRecentActivity";
|
import { mostRecentActivity } from "../MostRecentActivity/MostRecentActivity";
|
||||||
import { NotebookContentItem } from "../Notebook/NotebookContentItem";
|
import { NotebookContentItem } from "../Notebook/NotebookContentItem";
|
||||||
|
import { useDatabases } from "../useDatabases";
|
||||||
import { useSelectedNode } from "../useSelectedNode";
|
import { useSelectedNode } from "../useSelectedNode";
|
||||||
|
|
||||||
export class ResourceTreeAdapterForResourceToken implements ReactAdapter {
|
export class ResourceTreeAdapterForResourceToken implements ReactAdapter {
|
||||||
|
@ -18,7 +19,10 @@ export class ResourceTreeAdapterForResourceToken implements ReactAdapter {
|
||||||
public constructor(private container: Explorer) {
|
public constructor(private container: Explorer) {
|
||||||
this.parameters = ko.observable(Date.now());
|
this.parameters = ko.observable(Date.now());
|
||||||
|
|
||||||
this.container.resourceTokenCollection.subscribe(() => this.triggerRender());
|
useDatabases.subscribe(
|
||||||
|
() => this.triggerRender(),
|
||||||
|
(state) => state.resourceTokenCollection
|
||||||
|
);
|
||||||
useSelectedNode.subscribe(() => this.triggerRender());
|
useSelectedNode.subscribe(() => this.triggerRender());
|
||||||
this.container.tabsManager && this.container.tabsManager.activeTab.subscribe(() => this.triggerRender());
|
this.container.tabsManager && this.container.tabsManager.activeTab.subscribe(() => this.triggerRender());
|
||||||
|
|
||||||
|
@ -31,7 +35,7 @@ export class ResourceTreeAdapterForResourceToken implements ReactAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public buildCollectionNode(): TreeNode {
|
public buildCollectionNode(): TreeNode {
|
||||||
const collection: ViewModels.CollectionBase = this.container.resourceTokenCollection();
|
const collection: ViewModels.CollectionBase = useDatabases.getState().resourceTokenCollection;
|
||||||
if (!collection) {
|
if (!collection) {
|
||||||
return {
|
return {
|
||||||
label: undefined,
|
label: undefined,
|
||||||
|
|
|
@ -5,6 +5,7 @@ import * as ViewModels from "../Contracts/ViewModels";
|
||||||
|
|
||||||
interface DatabasesState {
|
interface DatabasesState {
|
||||||
databases: ViewModels.Database[];
|
databases: ViewModels.Database[];
|
||||||
|
resourceTokenCollection: ViewModels.CollectionBase;
|
||||||
updateDatabase: (database: ViewModels.Database) => void;
|
updateDatabase: (database: ViewModels.Database) => void;
|
||||||
addDatabases: (databases: ViewModels.Database[]) => void;
|
addDatabases: (databases: ViewModels.Database[]) => void;
|
||||||
deleteDatabase: (database: ViewModels.Database) => void;
|
deleteDatabase: (database: ViewModels.Database) => void;
|
||||||
|
@ -20,6 +21,7 @@ interface DatabasesState {
|
||||||
|
|
||||||
export const useDatabases: UseStore<DatabasesState> = create((set, get) => ({
|
export const useDatabases: UseStore<DatabasesState> = create((set, get) => ({
|
||||||
databases: [],
|
databases: [],
|
||||||
|
resourceTokenCollection: undefined,
|
||||||
updateDatabase: (updatedDatabase: ViewModels.Database) =>
|
updateDatabase: (updatedDatabase: ViewModels.Database) =>
|
||||||
set((state) => {
|
set((state) => {
|
||||||
const updatedDatabases = state.databases.map((database: ViewModels.Database) => {
|
const updatedDatabases = state.databases.map((database: ViewModels.Database) => {
|
||||||
|
|
Loading…
Reference in New Issue