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 { import {
chooseTrigger, chooseTrigger,
updateRuleValues, updateRuleValues,
updateMessage,
} from 'src/kapacitor/actions/view'; } from 'src/kapacitor/actions/view';
describe('Kapacitor.Reducers.rules', () => { describe('Kapacitor.Reducers.rules', () => {
@ -50,4 +51,19 @@ describe('Kapacitor.Reducers.rules', () => {
expect(finalState[ruleID].trigger).to.equal('relative'); expect(finalState[ruleID].trigger).to.equal('relative');
expect(finalState[ruleID].values).to.equal(newRelativeValues); 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) { 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() { handleInputChange() {

View File

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

View File

@ -10,6 +10,7 @@ export default function rules(state = {}, action) {
queryID, queryID,
trigger: 'threshold', trigger: 'threshold',
values: defaultRuleConfigs.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; return state;
} }