Add kapacitor rule message to state

pull/10616/head
Andrew Watkins 2016-11-02 16:48:32 -07:00 committed by Will Piers
parent d2d0bb34f9
commit bae030cb93
5 changed files with 53 additions and 4 deletions

View File

@ -4,6 +4,7 @@ import {defaultRuleConfigs} from 'src/kapacitor/constants';
import {
chooseTrigger,
updateRuleValues,
updateMessage,
} from 'src/kapacitor/actions/view';
describe('Kapacitor.Reducers.rules', () => {
@ -50,4 +51,19 @@ describe('Kapacitor.Reducers.rules', () => {
expect(finalState[ruleID].trigger).to.equal('relative');
expect(finalState[ruleID].values).to.equal(newRelativeValues);
});
it('can update the message', () => {
const ruleID = 1;
const initialState = {
[ruleID]: {
id: ruleID,
queryID: 988,
message: '',
}
};
const message = 'im a kapacitor rule message';
const newState = reducer(initialState, updateMessage(ruleID, message));
expect(newState[ruleID].message).to.equal(message);
});
});

View File

@ -58,3 +58,13 @@ export function updateRuleValues(ruleID, trigger, values) {
},
};
}
export function updateMessage(ruleID, message) {
return {
type: 'UPDATE_RULE_MESSAGE',
payload: {
ruleID,
message,
},
};
}

View File

@ -79,7 +79,8 @@ const Threshold = React.createClass({
},
handleDropdownChange(item) {
this.props.onChange(Object.assign({}, this.props.rule.values, {[item.type]: item.text}));
const newValues = Object.assign({}, this.props.rule.values, {[item.type]: item.text});
this.props.onChange(newValues);
},
handleInputChange() {

View File

@ -21,6 +21,7 @@ export const KapacitorRulePage = React.createClass({
fetchRule: PropTypes.func.isRequired,
chooseTrigger: PropTypes.func.isRequired,
updateRuleValues: PropTypes.func.isRequired,
updateMessage: PropTypes.func.isRequired,
}).isRequired,
queryActions: PropTypes.shape({}).isRequired,
params: PropTypes.shape({
@ -37,6 +38,10 @@ export const KapacitorRulePage = React.createClass({
}
},
handleSave() {
console.log(this.props.rules); // eslint-disable-line no-console
},
render() {
const rule = this.props.rules[Object.keys(this.props.rules)[0]]; // this.props.params.taskID
const query = rule && this.props.queryConfigs[rule.queryID];
@ -52,6 +57,9 @@ export const KapacitorRulePage = React.createClass({
<div className="enterprise-header__left">
<h1>Kapacitor Rules</h1>
</div>
<div className="enterprise-header__right">
<button className="btn btn-primary btn-sm" onClick={this.handleSave}>Save</button>
</div>
</div>
</div>
<div className="container-fluid">
@ -67,7 +75,7 @@ export const KapacitorRulePage = React.createClass({
</div>
<div className="row">
<div className="col-md-12">
{this.renderMessageSection()}
{this.renderMessageSection(rule)}
</div>
</div>
<div className="row">
@ -99,11 +107,11 @@ export const KapacitorRulePage = React.createClass({
);
},
renderMessageSection() {
renderMessageSection(rule) {
return (
<div className="kapacitor-rule-section">
<h3>Message</h3>
<textarea />
<textarea ref={(r) => this.message = r} onChange={() => this.handleMessageChange(rule)} />
</div>
);
},
@ -120,6 +128,10 @@ export const KapacitorRulePage = React.createClass({
</div>
);
},
handleMessageChange(rule) {
this.props.kapacitorActions.updateMessage(rule.id, this.message.value);
},
});
function mapStateToProps(state) {

View File

@ -10,6 +10,7 @@ export default function rules(state = {}, action) {
queryID,
trigger: 'threshold',
values: defaultRuleConfigs.threshold,
message: '',
},
});
}
@ -41,6 +42,15 @@ export default function rules(state = {}, action) {
}),
});
}
case 'UPDATE_RULE_MESSAGE': {
const {ruleID, message} = action.payload;
return Object.assign({}, state, {
[ruleID]: Object.assign({}, state[ruleID], {
message,
}),
});
}
}
return state;
}