1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

display close button on deleted kube details page (#2428)

This commit is contained in:
Sebastian Malton 2021-04-16 17:37:02 -04:00 committed by GitHub
parent 0de3bb13ca
commit 61b00b4c12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 27 deletions

View File

@ -15,8 +15,14 @@ export interface KubeObjectListLayoutProps extends ItemListLayoutProps {
dependentStores?: KubeObjectStore[]; dependentStores?: KubeObjectStore[];
} }
const defaultProps: Partial<KubeObjectListLayoutProps> = {
onDetails: (item: KubeObject) => showDetails(item.selfLink),
};
@observer @observer
export class KubeObjectListLayout extends React.Component<KubeObjectListLayoutProps> { export class KubeObjectListLayout extends React.Component<KubeObjectListLayoutProps> {
static defaultProps = defaultProps as object;
@computed get selectedItem() { @computed get selectedItem() {
return this.props.store.getByPath(kubeSelectedUrlParam.get()); return this.props.store.getByPath(kubeSelectedUrlParam.get());
} }
@ -33,14 +39,6 @@ export class KubeObjectListLayout extends React.Component<KubeObjectListLayoutPr
]); ]);
} }
onDetails = (item: KubeObject) => {
if (this.props.onDetails) {
this.props.onDetails(item);
} else {
showDetails(item.selfLink);
}
};
render() { render() {
const { className, store, items = store.contextItems, ...layoutProps } = this.props; const { className, store, items = store.contextItems, ...layoutProps } = this.props;
@ -52,10 +50,7 @@ export class KubeObjectListLayout extends React.Component<KubeObjectListLayoutPr
items={items} items={items}
preloadStores={false} // loading handled in kubeWatchApi.subscribeStores() preloadStores={false} // loading handled in kubeWatchApi.subscribeStores()
detailsItem={this.selectedItem} detailsItem={this.selectedItem}
onDetails={this.onDetails} renderItemMenu={(item: KubeObject) => <KubeObjectMenu object={item} />} // safe because we are dealing with KubeObjects here
renderItemMenu={(item) => {
return <KubeObjectMenu object={item}/>;
}}
/> />
); );
} }

View File

@ -7,13 +7,13 @@ import { hideDetails } from "./kube-object-details";
import { apiManager } from "../../api/api-manager"; import { apiManager } from "../../api/api-manager";
import { kubeObjectMenuRegistry } from "../../../extensions/registries/kube-object-menu-registry"; import { kubeObjectMenuRegistry } from "../../../extensions/registries/kube-object-menu-registry";
export interface KubeObjectMenuProps<T extends KubeObject = any> extends MenuActionsProps { export interface KubeObjectMenuProps<T> extends MenuActionsProps {
object: T; object: T | null | undefined;
editable?: boolean; editable?: boolean;
removable?: boolean; removable?: boolean;
} }
export class KubeObjectMenu extends React.Component<KubeObjectMenuProps> { export class KubeObjectMenu<T extends KubeObject> extends React.Component<KubeObjectMenuProps<T>> {
get store() { get store() {
const { object } = this.props; const { object } = this.props;
@ -52,23 +52,35 @@ export class KubeObjectMenu extends React.Component<KubeObjectMenuProps> {
@autobind() @autobind()
renderRemoveMessage() { renderRemoveMessage() {
const { object } = this.props; const { object } = this.props;
const resourceKind = object.kind;
const resourceName = object.getName(); if (!object) {
return null;
}
return ( return (
<p>Remove {resourceKind} <b>{resourceName}</b>?</p> <p>Remove {object.kind} <b>{object.getName()}</b>?</p>
); );
} }
getMenuItems(object: T): React.ReactChild[] {
if (!object) {
return [];
}
return kubeObjectMenuRegistry
.getItemsForKind(object.kind, object.apiVersion)
.map(({components: { MenuItem }}, index) => (
<MenuItem
object={object}
key={`menu-item-${index}`}
toolbar={toolbar}
/>
));
}
render() { render() {
const { remove, update, renderRemoveMessage, isEditable, isRemovable } = this; const { remove, update, renderRemoveMessage, isEditable, isRemovable } = this;
const { className, object, editable, removable, toolbar, ...menuProps } = this.props; const { className, object, editable, removable, ...menuProps } = this.props;
if (!object) return null;
const menuItems = kubeObjectMenuRegistry.getItemsForKind(object.kind, object.apiVersion).map((item, index) => {
return <item.components.MenuItem object={object} key={`menu-item-${index}`} toolbar={toolbar} />;
});
return ( return (
<MenuActions <MenuActions
@ -76,10 +88,9 @@ export class KubeObjectMenu extends React.Component<KubeObjectMenuProps> {
updateAction={isEditable ? update : undefined} updateAction={isEditable ? update : undefined}
removeAction={isRemovable ? remove : undefined} removeAction={isRemovable ? remove : undefined}
removeConfirmationMessage={renderRemoveMessage} removeConfirmationMessage={renderRemoveMessage}
toolbar={toolbar}
{...menuProps} {...menuProps}
> >
{menuItems} {this.getMenuItems(object)}
</MenuActions> </MenuActions>
); );
} }