Fix node controls so they behave independently across nodes

If one node was busy performing an action, any other nodes controls
would also be in a 'blocked and waiting' state.
This commit is contained in:
Simon Howe
2016-01-05 19:17:10 +01:00
parent 6850e840bd
commit 5b390994b8
7 changed files with 46 additions and 43 deletions
+2 -4
View File
@@ -18,8 +18,7 @@ const ESC_KEY_CODE = 27;
function getStateFromStores() {
return {
activeTopologyOptions: AppStore.getActiveTopologyOptions(),
controlError: AppStore.getControlError(),
controlPending: AppStore.isControlPending(),
controlStatus: AppStore.getControlStatus(),
controlPipe: AppStore.getControlPipe(),
currentTopology: AppStore.getCurrentTopology(),
currentTopologyId: AppStore.getCurrentTopologyId(),
@@ -80,9 +79,8 @@ export default class App extends React.Component {
return (
<div className="app">
{showingDetails && <Details nodes={this.state.nodes}
controlError={this.state.controlError}
controlPending={this.state.controlPending}
nodeId={this.state.selectedNodeId}
controlStatus={this.state.controlStatus[this.state.selectedNodeId]}
details={this.state.nodeDetails} />}
{showingTerminal && <EmbeddedTerminal
@@ -86,6 +86,7 @@ export default class NodeDetails extends React.Component {
renderDetails() {
const details = this.props.details;
const nodeColor = getNodeColorDark(details.rank, details.label_major);
const {error, pending} = (this.props.controlStatus || {});
const styles = {
controls: {
'backgroundColor': brightenColor(nodeColor)
@@ -109,8 +110,10 @@ export default class NodeDetails extends React.Component {
</div>
{details.controls && details.controls.length > 0 && <div className="node-details-controls-wrapper" style={styles.controls}>
<NodeDetailsControls controls={details.controls}
pending={this.props.controlPending} error={this.props.controlError} />
<NodeDetailsControls nodeId={this.props.nodeId}
controls={details.controls}
pending={pending}
error={error} />
</div>}
<div className="node-details-content">
@@ -20,6 +20,6 @@ export default class NodeDetailsControlButton extends React.Component {
handleClick(ev) {
ev.preventDefault();
doControl(this.props.control.probeId, this.props.control.nodeId, this.props.control.id);
doControl(this.props.nodeId, this.props.control);
}
}
@@ -16,7 +16,7 @@ export default class NodeDetailsControls extends React.Component {
<span className="node-details-controls-buttons">
{this.props.controls && this.props.controls.map(control => {
return (
<NodeDetailsControlButton control={control}
<NodeDetailsControlButton nodeId={this.props.nodeId} control={control}
pending={this.props.pending} key={control.id} />
);
})}