import type { Cluster } from "../../../main/cluster"; import "./clusters-menu.scss" import { remote } from "electron" import React from "react"; import { observer } from "mobx-react"; import { _i18n } from "../../i18n"; import { t, Trans } from "@lingui/macro"; import { userStore } from "../../../common/user-store"; import { ClusterId, clusterStore } from "../../../common/cluster-store"; import { workspaceStore } from "../../../common/workspace-store"; import { ClusterIcon } from "../cluster-icon"; import { Icon } from "../icon"; import { cssNames, IClassName, autobind } from "../../utils"; import { Badge } from "../badge"; import { navigate } from "../../navigation"; import { addClusterURL } from "../+add-cluster"; import { clusterSettingsURL } from "../+cluster-settings"; import { landingURL } from "../+landing-page"; import { Tooltip } from "../tooltip"; import { ConfirmDialog } from "../confirm-dialog"; import { clusterIpc } from "../../../common/cluster-ipc"; import { clusterViewURL } from "./cluster-view.route"; import { DragDropContext, Droppable, Draggable, DropResult, DroppableProvided, DraggableProvided } from "react-beautiful-dnd"; import { pageRegistry } from "../../../extensions/page-registry"; interface Props { className?: IClassName; } @observer export class ClustersMenu extends React.Component { showCluster = (clusterId: ClusterId) => { clusterStore.setActive(clusterId); navigate(clusterViewURL({ params: { clusterId } })); } addCluster = () => { navigate(addClusterURL()); clusterStore.setActive(null); } showContextMenu = (cluster: Cluster) => { const { Menu, MenuItem } = remote const menu = new Menu(); menu.append(new MenuItem({ label: _i18n._(t`Settings`), click: () => { clusterStore.setActive(cluster.id); navigate(clusterSettingsURL({ params: { clusterId: cluster.id } })) } })); if (cluster.online) { menu.append(new MenuItem({ label: _i18n._(t`Disconnect`), click: async () => { if (clusterStore.isActive(cluster.id)) { navigate(landingURL()); clusterStore.setActive(null); } await clusterIpc.disconnect.invokeFromRenderer(cluster.id); } })) } menu.append(new MenuItem({ label: _i18n._(t`Remove`), click: () => { ConfirmDialog.open({ okButtonProps: { primary: false, accent: true, label: _i18n._(t`Remove`), }, ok: () => { if (clusterStore.activeClusterId === cluster.id) { navigate(landingURL()); } clusterStore.removeById(cluster.id); }, message:

Are you sure want to remove cluster {cluster.contextName}?

, }) } })); menu.popup({ window: remote.getCurrentWindow() }) } @autobind() swapClusterIconOrder(result: DropResult) { if (result.reason === "DROP") { const { currentWorkspaceId } = workspaceStore; const { source: { index: from }, destination: { index: to }, } = result clusterStore.swapIconOrders(currentWorkspaceId, from, to) } } render() { const { className } = this.props; const { newContexts } = userStore; const clusters = clusterStore.getByWorkspaceId(workspaceStore.currentWorkspaceId); return (
{(provided: DroppableProvided) => (
{clusters.map((cluster, index) => { const isActive = cluster.id === clusterStore.activeClusterId; return ( {(provided: DraggableProvided) => (
this.showCluster(cluster.id)} onContextMenu={() => this.showContextMenu(cluster)} />
)}
)} )} {provided.placeholder}
)}
Add Cluster {newContexts.size > 0 && ( new} /> )}
{pageRegistry.globalPages.map(({ path, components: { MenuIcon } }) => { return navigate(path)}/> })}
); } }