From 61b00b4c12c1b6f4d19eda2cc413bf2861bca56b Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 16 Apr 2021 17:37:02 -0400 Subject: [PATCH] display close button on deleted kube details page (#2428) --- .../kube-object/kube-object-list-layout.tsx | 19 ++++----- .../kube-object/kube-object-menu.tsx | 41 ++++++++++++------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/renderer/components/kube-object/kube-object-list-layout.tsx b/src/renderer/components/kube-object/kube-object-list-layout.tsx index 0ecb602c16..ddae968dc9 100644 --- a/src/renderer/components/kube-object/kube-object-list-layout.tsx +++ b/src/renderer/components/kube-object/kube-object-list-layout.tsx @@ -15,8 +15,14 @@ export interface KubeObjectListLayoutProps extends ItemListLayoutProps { dependentStores?: KubeObjectStore[]; } +const defaultProps: Partial = { + onDetails: (item: KubeObject) => showDetails(item.selfLink), +}; + @observer export class KubeObjectListLayout extends React.Component { + static defaultProps = defaultProps as object; + @computed get selectedItem() { return this.props.store.getByPath(kubeSelectedUrlParam.get()); } @@ -33,14 +39,6 @@ export class KubeObjectListLayout extends React.Component { - if (this.props.onDetails) { - this.props.onDetails(item); - } else { - showDetails(item.selfLink); - } - }; - render() { const { className, store, items = store.contextItems, ...layoutProps } = this.props; @@ -52,10 +50,7 @@ export class KubeObjectListLayout extends React.Component { - return ; - }} + renderItemMenu={(item: KubeObject) => } // safe because we are dealing with KubeObjects here /> ); } diff --git a/src/renderer/components/kube-object/kube-object-menu.tsx b/src/renderer/components/kube-object/kube-object-menu.tsx index 036f0679db..470e98dac4 100644 --- a/src/renderer/components/kube-object/kube-object-menu.tsx +++ b/src/renderer/components/kube-object/kube-object-menu.tsx @@ -7,13 +7,13 @@ import { hideDetails } from "./kube-object-details"; import { apiManager } from "../../api/api-manager"; import { kubeObjectMenuRegistry } from "../../../extensions/registries/kube-object-menu-registry"; -export interface KubeObjectMenuProps extends MenuActionsProps { - object: T; +export interface KubeObjectMenuProps extends MenuActionsProps { + object: T | null | undefined; editable?: boolean; removable?: boolean; } -export class KubeObjectMenu extends React.Component { +export class KubeObjectMenu extends React.Component> { get store() { const { object } = this.props; @@ -52,23 +52,35 @@ export class KubeObjectMenu extends React.Component { @autobind() renderRemoveMessage() { const { object } = this.props; - const resourceKind = object.kind; - const resourceName = object.getName(); + + if (!object) { + return null; + } return ( -

Remove {resourceKind} {resourceName}?

+

Remove {object.kind} {object.getName()}?

); } + getMenuItems(object: T): React.ReactChild[] { + if (!object) { + return []; + } + + return kubeObjectMenuRegistry + .getItemsForKind(object.kind, object.apiVersion) + .map(({components: { MenuItem }}, index) => ( + + )); + } + render() { const { remove, update, renderRemoveMessage, isEditable, isRemovable } = this; - const { className, object, editable, removable, toolbar, ...menuProps } = this.props; - - if (!object) return null; - - const menuItems = kubeObjectMenuRegistry.getItemsForKind(object.kind, object.apiVersion).map((item, index) => { - return ; - }); + const { className, object, editable, removable, ...menuProps } = this.props; return ( { updateAction={isEditable ? update : undefined} removeAction={isRemovable ? remove : undefined} removeConfirmationMessage={renderRemoveMessage} - toolbar={toolbar} {...menuProps} > - {menuItems} + {this.getMenuItems(object)} ); }