From 9e5996b9cb5fa7cedd264ad3f5c6317409d0db1e Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Thu, 8 Apr 2021 09:02:54 +0300 Subject: [PATCH] allow to prompt on entity menu click Signed-off-by: Jari Kolehmainen --- .../catalog-entities/kubernetes-cluster.ts | 5 ++++- src/common/catalog-entity.ts | 3 +++ src/renderer/api/catalog-entity.ts | 2 +- src/renderer/components/+catalog/catalog.tsx | 22 +++++++++++++++++-- .../components/hotbar/hotbar-icon.tsx | 22 +++++++++++++++++-- 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/common/catalog-entities/kubernetes-cluster.ts b/src/common/catalog-entities/kubernetes-cluster.ts index 5bede8172c..f3f4c6b56b 100644 --- a/src/common/catalog-entities/kubernetes-cluster.ts +++ b/src/common/catalog-entities/kubernetes-cluster.ts @@ -54,7 +54,10 @@ export class KubernetesCluster implements CatalogEntity { { icon: "delete", title: "Delete", - onClick: async () => clusterStore.removeById(this.metadata.uid) + onClick: async () => clusterStore.removeById(this.metadata.uid), + confirm: { + message: `Remove Kubernetes Cluster "${this.metadata.name} from Lens?` + } }, ]; diff --git a/src/common/catalog-entity.ts b/src/common/catalog-entity.ts index 72ed703c51..318311339b 100644 --- a/src/common/catalog-entity.ts +++ b/src/common/catalog-entity.ts @@ -45,6 +45,9 @@ export type CatalogEntityContextMenu = { icon: string; title: string; onClick: () => Promise; + confirm?: { + message: string; + } }; export interface CatalogEntityContextMenuContext { diff --git a/src/renderer/api/catalog-entity.ts b/src/renderer/api/catalog-entity.ts index a4e75753c2..a8006be0f7 100644 --- a/src/renderer/api/catalog-entity.ts +++ b/src/renderer/api/catalog-entity.ts @@ -2,7 +2,7 @@ import { navigate } from "../navigation"; import { commandRegistry } from "../../extensions/registries"; import { CatalogEntity } from "../../common/catalog-entity"; -export { CatalogEntity, CatalogEntityData, CatalogEntityActionContext, CatalogEntityContextMenuContext } from "../../common/catalog-entity"; +export { CatalogEntity, CatalogEntityData, CatalogEntityActionContext, CatalogEntityContextMenu, CatalogEntityContextMenuContext } from "../../common/catalog-entity"; export const catalogEntityRunContext = { navigate: (url: string) => navigate(url), diff --git a/src/renderer/components/+catalog/catalog.tsx b/src/renderer/components/+catalog/catalog.tsx index 9ec5480c91..6f6ce7f164 100644 --- a/src/renderer/components/+catalog/catalog.tsx +++ b/src/renderer/components/+catalog/catalog.tsx @@ -9,12 +9,13 @@ import { kebabCase } from "lodash"; import { PageLayout } from "../layout/page-layout"; import { MenuItem, MenuActions } from "../menu"; import { Icon } from "../icon"; -import { CatalogEntityContextMenuContext, catalogEntityRunContext } from "../../api/catalog-entity"; +import { CatalogEntityContextMenu, CatalogEntityContextMenuContext, catalogEntityRunContext } from "../../api/catalog-entity"; import { Badge } from "../badge"; import { hotbarStore } from "../../../common/hotbar-store"; import { addClusterURL } from "../+add-cluster"; import { autobind } from "../../utils"; import { Notifications } from "../notifications"; +import { ConfirmDialog } from "../confirm-dialog"; enum sortBy { name = "name", @@ -71,6 +72,23 @@ export class Catalog extends React.Component { item.onRun(catalogEntityRunContext); } + onMenuItemClick(menuItem: CatalogEntityContextMenu) { + if (menuItem.confirm) { + ConfirmDialog.open({ + okButtonProps: { + primary: false, + accent: true, + }, + ok: () => { + menuItem.onClick(); + }, + message: menuItem.confirm.message + }); + } else { + menuItem.onClick(); + } + } + @autobind() renderItemMenu(item: CatalogEntityItem) { const onOpen = async () => { @@ -87,7 +105,7 @@ export class Catalog extends React.Component { { this.contextMenu.menuItems.map((menuItem, index) => { return ( - menuItem.onClick()}> + this.onMenuItemClick(menuItem)}> {menuItem.title} ); diff --git a/src/renderer/components/hotbar/hotbar-icon.tsx b/src/renderer/components/hotbar/hotbar-icon.tsx index c8634ce10c..6bb2d2ae56 100644 --- a/src/renderer/components/hotbar/hotbar-icon.tsx +++ b/src/renderer/components/hotbar/hotbar-icon.tsx @@ -5,12 +5,13 @@ import { observer } from "mobx-react"; import { cssNames, IClassName } from "../../utils"; import { Tooltip } from "../tooltip"; import { Avatar } from "@material-ui/core"; -import { CatalogEntity, CatalogEntityContextMenuContext } from "../../../common/catalog-entity"; +import { CatalogEntity, CatalogEntityContextMenu, CatalogEntityContextMenuContext } from "../../../common/catalog-entity"; import { Menu, MenuItem } from "../menu"; import { Icon } from "../icon"; import { observable } from "mobx"; import { navigate } from "../../navigation"; import { hotbarStore } from "../../../common/hotbar-store"; +import { ConfirmDialog } from "../confirm-dialog"; interface Props extends DOMAttributes { entity: CatalogEntity; @@ -66,6 +67,23 @@ export class HotbarIcon extends React.Component { hotbar.items = hotbar.items.filter((i) => i.entity.uid !== item.metadata.uid); } + onMenuItemClick(menuItem: CatalogEntityContextMenu) { + if (menuItem.confirm) { + ConfirmDialog.open({ + okButtonProps: { + primary: false, + accent: true, + }, + ok: () => { + menuItem.onClick(); + }, + message: menuItem.confirm.message + }); + } else { + menuItem.onClick(); + } + } + render() { const { entity, errorClass, isActive, @@ -99,7 +117,7 @@ export class HotbarIcon extends React.Component { { this.contextMenu && this.contextMenu.menuItems.map((menuItem) => { return ( - menuItem.onClick()}> + this.onMenuItemClick(menuItem) }> {menuItem.title} );