mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* basic workspace overview Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * css tweaks for landing page as a PageLayout Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * address review comments Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * more review comment addressing, added overview to workspace command palette Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * added back the landing page startup hint Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * refactoring as per review comments Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * added original landing page back only for default workspace with no clusters Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * Workspace overview layout tweaks (#2302) * tweaks workspace overview layout Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * cluster settings on top Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * header logo for add cluster page Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * tweak landing page Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * combine left menu icons Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * always show bottom status bar Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * tweak Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * integration test fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * change cluster menu Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * first attempt to fix integration test Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * lint Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * get selectors right for integration test Signed-off-by: Jim Ehrismann <jehrismann@miranits.com> Co-authored-by: Jim Ehrismann <jehrismann@mirantis.com> Co-authored-by: Jim Ehrismann <jehrismann@miranits.com> * address review comments, and rebased to master Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> Co-authored-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> Co-authored-by: Jim Ehrismann <jehrismann@miranits.com>
76 lines
2.6 KiB
TypeScript
76 lines
2.6 KiB
TypeScript
import "./workspace-overview.scss";
|
|
|
|
import React, { Component } from "react";
|
|
import { Workspace } from "../../../common/workspace-store";
|
|
import { observer } from "mobx-react";
|
|
import { ItemListLayout } from "../item-object-list/item-list-layout";
|
|
import { ClusterItem, WorkspaceClusterStore } from "./workspace-cluster.store";
|
|
import { navigate } from "../../navigation";
|
|
import { clusterViewURL } from "../cluster-manager/cluster-view.route";
|
|
import { WorkspaceClusterMenu } from "./workspace-cluster-menu";
|
|
import { kebabCase } from "lodash";
|
|
import { addClusterURL } from "../+add-cluster";
|
|
|
|
interface Props {
|
|
workspace: Workspace;
|
|
}
|
|
|
|
enum sortBy {
|
|
name = "name",
|
|
distribution = "distribution",
|
|
version = "version",
|
|
online = "online"
|
|
}
|
|
|
|
@observer
|
|
export class WorkspaceOverview extends Component<Props> {
|
|
|
|
showCluster = ({ clusterId }: ClusterItem) => {
|
|
navigate(clusterViewURL({ params: { clusterId } }));
|
|
};
|
|
|
|
render() {
|
|
const { workspace } = this.props;
|
|
const workspaceClusterStore = new WorkspaceClusterStore(workspace.id);
|
|
|
|
workspaceClusterStore.loadAll();
|
|
|
|
return (
|
|
<ItemListLayout
|
|
renderHeaderTitle={<div>Clusters</div>}
|
|
isClusterScoped
|
|
isSearchable={false}
|
|
isSelectable={false}
|
|
className="WorkspaceOverview"
|
|
store={workspaceClusterStore}
|
|
sortingCallbacks={{
|
|
[sortBy.name]: (item: ClusterItem) => item.name,
|
|
[sortBy.distribution]: (item: ClusterItem) => item.distribution,
|
|
[sortBy.version]: (item: ClusterItem) => item.version,
|
|
[sortBy.online]: (item: ClusterItem) => item.connectionStatus,
|
|
}}
|
|
renderTableHeader={[
|
|
{ title: "Name", className: "name", sortBy: sortBy.name },
|
|
{ title: "Distribution", className: "distribution", sortBy: sortBy.distribution },
|
|
{ title: "Version", className: "version", sortBy: sortBy.version },
|
|
{ title: "Status", className: "status", sortBy: sortBy.online },
|
|
]}
|
|
renderTableContents={(item: ClusterItem) => [
|
|
item.name,
|
|
item.distribution,
|
|
item.version,
|
|
{ title: item.connectionStatus, className: kebabCase(item.connectionStatus) }
|
|
]}
|
|
onDetails={this.showCluster}
|
|
addRemoveButtons={{
|
|
addTooltip: "Add Cluster",
|
|
onAdd: () => navigate(addClusterURL()),
|
|
}}
|
|
renderItemMenu={(clusterItem: ClusterItem) => (
|
|
<WorkspaceClusterMenu clusterItem={clusterItem} workspace={workspace} workspaceClusterStore={workspaceClusterStore}/>
|
|
)}
|
|
/>
|
|
);
|
|
}
|
|
}
|