diff --git a/static/models.js b/static/models.js index af3cf52fb..5fe973096 100644 --- a/static/models.js +++ b/static/models.js @@ -522,7 +522,7 @@ models.Node = BaseModel.extend({ ).join(', '); }, getStatus() { - if (!this.get('online')) return 'offline'; + if (!this.get('online') && this.get('status') !== 'removing') return 'offline'; return this.get('status'); }, getLabel(label) { diff --git a/static/styles/main.less b/static/styles/main.less index d99bd5ec2..7eb769a99 100644 --- a/static/styles/main.less +++ b/static/styles/main.less @@ -2278,7 +2278,7 @@ input[type=range] { background-color: @node-color-error + 5%; } } - &.offline { + &.offline, &.removing { background-color: @node-color-offline + 10%; border-color: @node-border-color-offline + 10%; .node-name, .node-status, .node-settings {opacity: .7;} @@ -2286,6 +2286,11 @@ input[type=range] { background-color: @node-color-offline + 20%; } } + &.removing { + .node-box { + cursor: default; + } + } &.selected { background-color: @node-color-selected; border-color: @node-border-color-selected; diff --git a/static/views/cluster_page_tabs/nodes_tab_screens/node_list_screen.js b/static/views/cluster_page_tabs/nodes_tab_screens/node_list_screen.js index 93a2a8920..5811a28e0 100644 --- a/static/views/cluster_page_tabs/nodes_tab_screens/node_list_screen.js +++ b/static/views/cluster_page_tabs/nodes_tab_screens/node_list_screen.js @@ -1775,10 +1775,11 @@ SelectAllMixin = { var { nodes, selectedNodeIds, maxNumberOfNodes, selectNodes, mode, locked, nodeActionsAvailable } = this.props; - var nodesToSelect = nodeActionsAvailable ? - nodes - : - _.filter(nodes, (node) => node.get('online')); + var nodesToSelect = _.filter(nodes, (node) => node.isSelectable()); + if (!nodeActionsAvailable) { + // exclude offline nodes from autoselection + nodesToSelect = _.filter(nodesToSelect, (node) => node.get('online')); + } var checked = mode === 'edit' || nodesToSelect.length && !_.some(nodesToSelect, (node) => !selectedNodeIds[node.id]); return ( @@ -2051,7 +2052,7 @@ NodeGroup = React.createClass({ )} key={node.id} node={node} - renderActionButtons={!!cluster} + renderActionButtons={!!cluster && node.isSelectable()} cluster={cluster || clusters.get(node.get('cluster'))} checked={selectedNodeIds[node.id]} locked={