From 6a70d89f3b3673166f18eed70b06844b50869b25 Mon Sep 17 00:00:00 2001 From: Alex Culliere Date: Tue, 2 Feb 2021 18:35:19 +0200 Subject: [PATCH] Update top-right settings icon to look behave consistently with cluster actions Signed-off-by: Alex Culliere --- .../components/layout/main-layout-header.tsx | 74 ++++++++++++++++--- 1 file changed, 64 insertions(+), 10 deletions(-) diff --git a/src/renderer/components/layout/main-layout-header.tsx b/src/renderer/components/layout/main-layout-header.tsx index 570c04a1f9..9f847993b1 100644 --- a/src/renderer/components/layout/main-layout-header.tsx +++ b/src/renderer/components/layout/main-layout-header.tsx @@ -1,8 +1,13 @@ import { observer } from "mobx-react"; import React from "react"; +import { remote } from "electron"; import { clusterSettingsURL } from "../+cluster-settings"; -import { broadcastMessage } from "../../../common/ipc"; +import { landingURL } from "../+landing-page"; +import { ConfirmDialog } from "../confirm-dialog"; +import { clusterStore } from "../../../common/cluster-store"; +import { clusterDisconnectHandler } from "../../../common/cluster-ipc"; +import { broadcastMessage, requestMain } from "../../../common/ipc"; import { Cluster } from "../../../main/cluster"; import { cssNames } from "../../utils"; import { Icon } from "../icon"; @@ -13,20 +18,69 @@ interface Props { } export const MainLayoutHeader = observer(({ cluster, className }: Props) => { + const showContextMenu = () => { + const { Menu, MenuItem } = remote; + const menu = new Menu(); + + menu.append(new MenuItem({ + label: "Settings", + click: () => { + broadcastMessage("renderer:navigate", clusterSettingsURL({ + params: { + clusterId: cluster.id + } + })); + } + })); + + if (cluster.online) { + menu.append(new MenuItem({ + label: "Disconnect", + click: async () => { + if (clusterStore.isActive(cluster.id)) { + broadcastMessage("renderer:navigate", landingURL()); + clusterStore.setActive(null); + } + await requestMain(clusterDisconnectHandler, cluster.id); + } + })); + + if (!cluster.isManaged) { + menu.append(new MenuItem({ + label: "Remove", + click: () => { + ConfirmDialog.open({ + okButtonProps: { + primary: false, + accent: true, + label: "Remove" + }, + ok: () => { + if (clusterStore.activeClusterId === cluster.id) { + broadcastMessage("renderer:navigate", landingURL()); + clusterStore.setActive(null); + } + clusterStore.removeById(cluster.id); + }, + message:

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

, + }); + } + })); + } + } + menu.popup({ + window: remote.getCurrentWindow() + }); + }; + return (
{cluster.name} { - broadcastMessage("renderer:navigate", clusterSettingsURL({ - params: { - clusterId: cluster.id - } - })); - }} + onClick={showContextMenu} />
);