mirror of
https://github.com/Unleash/unleash.git
synced 2025-08-23 13:46:45 +02:00
When user chooses to use a custom strategy
she should get an input field for each strategy parameter. closes #53
This commit is contained in:
parent
e81b88ad7d
commit
0a0515e139
@ -43,8 +43,8 @@ var TabView = React.createClass({
|
|||||||
</ul>
|
</ul>
|
||||||
<div className="tab-content">
|
<div className="tab-content">
|
||||||
<div className="active">
|
<div className="active">
|
||||||
<div className="mod shadow mrn prn">
|
<div className="mod shadow mrn pan">
|
||||||
<div className="inner">
|
<div className="inner pan">
|
||||||
<div className="bd">
|
<div className="bd">
|
||||||
{this.state.activeTab.content}
|
{this.state.activeTab.content}
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,7 +4,11 @@ var strategyStore = require('../../stores/StrategyStore');
|
|||||||
|
|
||||||
var FeatureForm = React.createClass({
|
var FeatureForm = React.createClass({
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
return {strategyOptions: []};
|
return {
|
||||||
|
strategyOptions: [],
|
||||||
|
requiredParams: [],
|
||||||
|
currentStrategy: this.props.feature ? this.props.feature.strategy : "default"
|
||||||
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillMount: function() {
|
componentWillMount: function() {
|
||||||
@ -12,8 +16,40 @@ var FeatureForm = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
handleStrategyResponse: function(response) {
|
handleStrategyResponse: function(response) {
|
||||||
var strategyNames = response.strategies.map(function(s) { return s.name; });
|
this.setState({strategyOptions: response.strategies});
|
||||||
this.setState({strategyOptions: strategyNames});
|
if(this.props.feature) {
|
||||||
|
this.setSelectedStrategy(this.props.feature.strategy);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
onStrategyChange: function(e) {
|
||||||
|
this.setSelectedStrategy(e.target.value);
|
||||||
|
this.setState({currentStrategy: e.target.value});
|
||||||
|
},
|
||||||
|
|
||||||
|
getParameterValue: function(name) {
|
||||||
|
if(this.props.feature && this.props.feature.parameters) {
|
||||||
|
return this.props.feature.parameters[name];
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
setSelectedStrategy: function(name) {
|
||||||
|
var selected = this.state.strategyOptions.filter(function(strategy) {
|
||||||
|
return strategy.name === name;
|
||||||
|
});
|
||||||
|
|
||||||
|
var requiredParams = [];
|
||||||
|
var key;
|
||||||
|
|
||||||
|
if(selected[0] && selected[0].parametersTemplate) {
|
||||||
|
for(key in selected[0].parametersTemplate) {
|
||||||
|
requiredParams.push({name: key, value: this.getParameterValue(key)});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.setState({requiredParams: requiredParams});
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
@ -49,8 +85,8 @@ var FeatureForm = React.createClass({
|
|||||||
|
|
||||||
<div className="formelement">
|
<div className="formelement">
|
||||||
<label htmlFor="strategy">Strategy</label>
|
<label htmlFor="strategy">Strategy</label>
|
||||||
<div class="input select">
|
<div className="input select">
|
||||||
<select id="strategy" ref="strategy" defaultValue={feature.strategy}>
|
<select id="strategy" ref="strategy" value={this.state.currentStrategy} onChange={this.onStrategyChange}>
|
||||||
{this.renderStrategyOptions()}
|
{this.renderStrategyOptions()}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -66,6 +102,9 @@ var FeatureForm = React.createClass({
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{this.renderStrategyProperties()}
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<div className="actions">
|
<div className="actions">
|
||||||
@ -78,14 +117,24 @@ var FeatureForm = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
renderStrategyOptions: function() {
|
renderStrategyOptions: function() {
|
||||||
var currentStrategy = this.props.feature ? this.props.feature.strategy : "default";
|
return this.state.strategyOptions.map(function(strategy) {
|
||||||
|
|
||||||
return this.state.strategyOptions.map(function(name) {
|
|
||||||
return (
|
return (
|
||||||
<option key={name} value={name} selected={name === currentStrategy}>
|
<option key={strategy.name} value={strategy.name}>
|
||||||
{name}
|
{strategy.name}
|
||||||
</option>
|
</option>
|
||||||
);
|
);
|
||||||
|
}.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
|
renderStrategyProperties: function() {
|
||||||
|
return this.state.requiredParams.map(function(param) {
|
||||||
|
return <TextInput
|
||||||
|
id={"param-" + param.name}
|
||||||
|
key={"param-" + param.name}
|
||||||
|
name={param.name}
|
||||||
|
label={param.name}
|
||||||
|
ref={param.name}
|
||||||
|
value={param.value} />
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -95,8 +144,9 @@ var FeatureForm = React.createClass({
|
|||||||
var feature = {
|
var feature = {
|
||||||
name: this.refs.name.getValue(),
|
name: this.refs.name.getValue(),
|
||||||
description: this.refs.description.getValue(),
|
description: this.refs.description.getValue(),
|
||||||
strategy: this.refs.strategy.getDOMNode().value,
|
strategy: this.state.currentStrategy,
|
||||||
enabled: this.refs.enabled.getDOMNode().checked
|
enabled: this.refs.enabled.getDOMNode().checked,
|
||||||
|
parameters: this.getParameters()
|
||||||
};
|
};
|
||||||
|
|
||||||
this.props.onSubmit(feature);
|
this.props.onSubmit(feature);
|
||||||
@ -105,6 +155,14 @@ var FeatureForm = React.createClass({
|
|||||||
cancelFeature: function(e) {
|
cancelFeature: function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
this.props.onCancel();
|
this.props.onCancel();
|
||||||
|
},
|
||||||
|
|
||||||
|
getParameters: function() {
|
||||||
|
var parameters = {};
|
||||||
|
this.state.requiredParams.forEach(function(param) {
|
||||||
|
parameters[param.name] = this.refs[param.name].getValue();
|
||||||
|
}.bind(this));
|
||||||
|
return parameters;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ var FeatureList = React.createClass({
|
|||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='r-margin'>
|
<div className=''>
|
||||||
<table className='outerborder'>
|
<table className='outerborder man'>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th></th>
|
<th></th>
|
||||||
|
@ -113,8 +113,6 @@ var FeatureTogglesComponent = React.createClass({
|
|||||||
|
|
||||||
{this.state.createView ? this.renderCreateView() : this.renderCreateButton()}
|
{this.state.createView ? this.renderCreateView() : this.renderCreateButton()}
|
||||||
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<FeatureList
|
<FeatureList
|
||||||
features={this.state.features}
|
features={this.state.features}
|
||||||
onFeatureChanged={this.updateFeature}
|
onFeatureChanged={this.updateFeature}
|
||||||
|
@ -11,7 +11,7 @@ var LogEntryList = React.createClass({
|
|||||||
return <LogEntry event={event} key={event.name} />;
|
return <LogEntry event={event} key={event.name} />;
|
||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
<div className='r-margin'>
|
<div className='r-pam'>
|
||||||
<table className='condensed outerborder zebra-striped'>
|
<table className='condensed outerborder zebra-striped'>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
Loading…
Reference in New Issue
Block a user