From fb7b1b47ae255dea333d367511afbedc8ae51ebc Mon Sep 17 00:00:00 2001 From: Jim Ehrismann Date: Fri, 15 Jan 2021 18:33:56 -0500 Subject: [PATCH] add cluster item list to workspace landing page Signed-off-by: Jim Ehrismann --- .../+landing-page/workspace-cluster.store.ts | 35 ++++++++++++ .../+landing-page/workspace-overview.tsx | 57 +++++++++---------- 2 files changed, 62 insertions(+), 30 deletions(-) create mode 100644 src/renderer/components/+landing-page/workspace-cluster.store.ts diff --git a/src/renderer/components/+landing-page/workspace-cluster.store.ts b/src/renderer/components/+landing-page/workspace-cluster.store.ts new file mode 100644 index 0000000000..e9370a7069 --- /dev/null +++ b/src/renderer/components/+landing-page/workspace-cluster.store.ts @@ -0,0 +1,35 @@ +import { WorkspaceId } from "../../../common/workspace-store"; +import { Cluster } from "../../../main/cluster"; +import { clusterStore } from "../../../common/cluster-store"; +import { ItemStore } from "../../item.store"; + +export class ClusterItem { + cluster: Cluster; + + getName() { + return this.cluster.name; + } + + getId() { + return this.cluster.id + } +} + +/** an ItemStore of the clusters belonging to a given workspace */ +export class WorkspaceClusterStore extends ItemStore { + + workspaceId: WorkspaceId; + + constructor(workspaceId: WorkspaceId) { + super(); + this.workspaceId = workspaceId; + } + + loadAll() { + return this.loadItems(() => clusterStore.getByWorkspaceId(this.workspaceId).map(cluster => { + let clusterItem = new ClusterItem(); + clusterItem.cluster = cluster; + return clusterItem; + })); + } +} \ No newline at end of file diff --git a/src/renderer/components/+landing-page/workspace-overview.tsx b/src/renderer/components/+landing-page/workspace-overview.tsx index 8e6e9a7ecb..8e3935c9d8 100644 --- a/src/renderer/components/+landing-page/workspace-overview.tsx +++ b/src/renderer/components/+landing-page/workspace-overview.tsx @@ -4,54 +4,51 @@ import { clusterStore } from "../../../common/cluster-store"; import { Cluster } from "../../../main/cluster"; import { observable, autorun } from "mobx"; import { observer } from "mobx-react"; -import { Drawer, DrawerItem, DrawerTitle } from "../drawer"; +import { WizardLayout } from "../layout/wizard-layout"; +import { TabLayout } from "../layout/tab-layout"; +import { ItemListLayout, ItemListLayoutProps } from "../item-object-list/item-list-layout"; import { autobind, stopPropagation } from "../../utils"; import { MarkdownViewer } from "../markdown-viewer"; import { Spinner } from "../spinner"; import { Button } from "../button"; import { Select, SelectOption } from "../select"; import { Badge } from "../badge"; +import { ClusterItem, WorkspaceClusterStore } from "./workspace-cluster.store"; interface Props { workspace: Workspace; } +enum sortBy { + name = "name", +} + @observer export class WorkspaceOverview extends Component { - renderClusters() { - const { workspace } = this.props; - const clusters = clusterStore.getByWorkspaceId(workspace.id); - return
- {clusters.map(cluster =>
{cluster.contextName}
)} -
- } - render() { const { workspace } = this.props; + const workspaceClusterStore = new WorkspaceClusterStore(workspace.id); return ( - - - {workspace.description} - - - {workspace.id} - - - {workspace.ownerRef} - - - {workspace.enabled} - - - {this.renderClusters()} - + + cluster.getName(), + }} + searchFilters={[]} + renderTableHeader={[ + { title: "Name", className: "name flex-grow", sortBy: sortBy.name }, + { title: "Id", className: "id" }, + ]} + renderTableContents={(item: ClusterItem) => [ + item.getName(), + item.getId(), + ]} + /> + ); } }