blob: 9abcd684c476362e40d15de6bcda73770bdf9069 [file] [log] [blame]
import React from 'react';
import Diff from 'components/Diff';
import { instanceRangeToString } from 'utils/Task';
export default class ConfigDiff extends React.Component {
constructor(props) {
super(props);
this.state = {
leftGroupIdx: 0,
rightGroupIdx: 1
};
}
getPicker(key) {
const that = this;
const group = this.props.groups[this.state[key]];
if (this.props.groups.length === 2) {
return (<span>
Instances {instanceRangeToString(group.instances)}
</span>);
} else {
const otherOptions = this.props.groups
.map((g, i) => i)
.filter((i) => i !== that.state.leftGroupIdx && i !== that.state.rightGroupIdx);
return (<span>
Instances <select onChange={(e) => this.setState({[key]: parseInt(e.target.value, 10)})}>
<option key='current'>{instanceRangeToString(group.instances)}</option>
{otherOptions.map((i) => (<option key={i} value={i}>
{instanceRangeToString(this.props.groups[i].instances)}
</option>))}
</select>
</span>);
}
}
diffNavigation() {
if (this.props.groups.length < 2) {
return <div>No configuration.</div>;
} else {
return (<div className='diff-picker'>
Config Diff for <span className='diff-before'>
{this.getPicker('leftGroupIdx')}
</span> and <span className='diff-after'>
{this.getPicker('rightGroupIdx')}
</span>
</div>);
}
}
render() {
if (this.props.groups.length < 2) {
return <div />;
}
return (<div className='task-diff'>
{this.diffNavigation()}
<Diff
left={this.props.groups[this.state.leftGroupIdx].config}
right={this.props.groups[this.state.rightGroupIdx].config} />
</div>);
}
}