diff --git a/ui/src/app/applications/components/application-details/application-details.scss b/ui/src/app/applications/components/application-details/application-details.scss index 217143844a..70d5a43a38 100644 --- a/ui/src/app/applications/components/application-details/application-details.scss +++ b/ui/src/app/applications/components/application-details/application-details.scss @@ -105,4 +105,12 @@ line-height: normal; white-space: pre; } -} \ No newline at end of file + &__action-menu { + text-transform: capitalize; + + &.disabled { + cursor: default !important; + color: $argo-color-gray-3 !important; + } + } +} diff --git a/ui/src/app/applications/components/application-details/application-details.tsx b/ui/src/app/applications/components/application-details/application-details.tsx index 42150b13cf..f6120ef76f 100644 --- a/ui/src/app/applications/components/application-details/application-details.tsx +++ b/ui/src/app/applications/components/application-details/application-details.tsx @@ -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, {page: number}> { public static contextTypes = { @@ -481,7 +483,7 @@ export class ApplicationDetails extends React.Component; + let menuItems: Observable; 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 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 (
    {items.map((item, i) => ( -
  • { +
  • { 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 && } {item.title}
  • ))}
diff --git a/ui/src/app/shared/models.ts b/ui/src/app/shared/models.ts index ea44f73562..3127bf9acc 100644 --- a/ui/src/app/shared/models.ts +++ b/ui/src/app/shared/models.ts @@ -585,6 +585,7 @@ export interface ResourceActionParam { export interface ResourceAction { name: string; params: ResourceActionParam[]; + available: boolean; } export interface SyncWindowsState {