Issue #2110 - Disable menu item for non available resource actions on App Details page (#2450)

This commit is contained in:
Alexander Matyushentsev 2019-10-09 09:22:02 -07:00 committed by GitHub
parent f6545cd56a
commit c2dce9c981
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 5 deletions

View file

@ -105,4 +105,12 @@
line-height: normal;
white-space: pre;
}
}
&__action-menu {
text-transform: capitalize;
&.disabled {
cursor: default !important;
color: $argo-color-gray-3 !important;
}
}
}

View file

@ -40,6 +40,8 @@ const jsonMergePatch = require('json-merge-patch');
require('./application-details.scss');
type ActionMenuItem = MenuItem & { disabled?: boolean };
export class ApplicationDetails extends React.Component<RouteComponentProps<{ name: string; }>, {page: number}> {
public static contextTypes = {
@ -481,7 +483,7 @@ export class ApplicationDetails extends React.Component<RouteComponentProps<{ na
}
private renderResourceMenu(resource: ResourceTreeNode, application: appModels.Application): React.ReactNode {
let menuItems: Observable<MenuItem[]>;
let menuItems: Observable<ActionMenuItem[]>;
if (AppUtils.isAppNode(resource) && resource.name === application.metadata.name) {
menuItems = Observable.from([this.getApplicationActionMenu(application)]);
} else {
@ -520,6 +522,7 @@ export class ApplicationDetails extends React.Component<RouteComponentProps<{ na
const resourceActions = services.applications.getResourceActions(application.metadata.name, resource)
.then((actions) => items.concat(actions.map((action) => ({
title: action.name,
disabled: !action.available,
action: async () => {
try {
const confirmed = await this.appContext.apis.popup.confirm(
@ -544,10 +547,12 @@ export class ApplicationDetails extends React.Component<RouteComponentProps<{ na
{(items) => (
<ul>
{items.map((item, i) => (
<li style={{ textTransform: 'capitalize' }} key={i} onClick={(e) => {
<li className={classNames('application-details__action-menu', { disabled: item.disabled })} key={i} onClick={(e) => {
e.stopPropagation();
item.action();
document.body.click(); // hack, trigger body click to make sure that dropdown
if (!item.disabled) {
item.action();
document.body.click(); // hack, trigger body click to make sure that dropdown closed
}
}}>{item.iconClassName && <i className={item.iconClassName}/>} {item.title}</li>
))}
</ul>

View file

@ -585,6 +585,7 @@ export interface ResourceActionParam {
export interface ResourceAction {
name: string;
params: ResourceActionParam[];
available: boolean;
}
export interface SyncWindowsState {