1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/+workspaces/workspace-menu.tsx
Steve Richards 8adf683056 Refactored to use observable field
Signed-off-by: Steve Richards <srichards@mirantis.com>
2020-10-13 16:58:44 +01:00

60 lines
1.9 KiB
TypeScript

import "./workspace-menu.scss"
import React from "react";
import { observer } from "mobx-react";
import { Link } from "react-router-dom";
import { workspacesURL } from "./workspaces.route";
import { Trans } from "@lingui/macro";
import { Menu, MenuItem, MenuProps } from "../menu";
import { Icon } from "../icon";
import { observable } from "mobx";
import { workspaceStore, WorkspaceId } from "../../../common/workspace-store";
import { cssNames } from "../../utils";
import { clusterStore } from "../../../common/cluster-store";
interface Props extends Partial<MenuProps> {
}
@observer
export class WorkspaceMenu extends React.Component<Props> {
@observable menuVisible = false;
activateWorkspace = (id: WorkspaceId) => {
if (clusterStore.activeClusterId) {
workspaceStore.setLastActiveClusterId(workspaceStore.currentWorkspaceId, clusterStore.activeClusterId);
}
workspaceStore.setActive(id);
}
render() {
const { className, ...menuProps } = this.props;
const { workspacesList, currentWorkspace } = workspaceStore;
return (
<Menu
{...menuProps}
usePortal
className={cssNames("WorkspaceMenu", className)}
isOpen={this.menuVisible}
open={() => this.menuVisible = true}
close={() => this.menuVisible = false}
>
<Link className="workspaces-title" to={workspacesURL()}>
<Trans>Workspaces</Trans>
</Link>
{workspacesList.map(({ id: workspaceId, name, description }) => {
return (
<MenuItem
key={workspaceId}
title={description}
active={workspaceId === currentWorkspace.id}
onClick={() => this.activateWorkspace(workspaceId)}
>
<Icon small material="layers"/>
<span className="workspace">{name}</span>
</MenuItem>
)
})}
</Menu>
)
}
}