From 3766065d1cc2db32b9f1d09c6db44df61b8c778f Mon Sep 17 00:00:00 2001 From: Jared Scheib Date: Tue, 18 Jul 2017 12:02:07 -0700 Subject: [PATCH] Refactor RuleMessage templates into separate components, update to ES6 --- ui/src/kapacitor/components/CodeData.js | 34 +++++++++++ ui/src/kapacitor/components/RuleMessage.js | 56 +++---------------- .../components/RuleMessageTemplates.js | 50 +++++++++++++++++ 3 files changed, 91 insertions(+), 49 deletions(-) create mode 100644 ui/src/kapacitor/components/CodeData.js create mode 100644 ui/src/kapacitor/components/RuleMessageTemplates.js diff --git a/ui/src/kapacitor/components/CodeData.js b/ui/src/kapacitor/components/CodeData.js new file mode 100644 index 000000000..fe1935130 --- /dev/null +++ b/ui/src/kapacitor/components/CodeData.js @@ -0,0 +1,34 @@ +import React, {Component, PropTypes} from 'react' + +// needs to be React Component for click handler to work +class CodeData extends Component { + constructor(props) { + super(props) + } + + render() { + const {onClickTemplate, template} = this.props + + return ( + + {template.label} + + ) + } +} + +const {func, shape, string} = PropTypes + +CodeData.propTypes = { + onClickTemplate: func, + template: shape({ + label: string, + text: string, + }), +} + +export default CodeData diff --git a/ui/src/kapacitor/components/RuleMessage.js b/ui/src/kapacitor/components/RuleMessage.js index e207e1f59..5876d83c8 100644 --- a/ui/src/kapacitor/components/RuleMessage.js +++ b/ui/src/kapacitor/components/RuleMessage.js @@ -1,10 +1,10 @@ import React, {PropTypes} from 'react' import classnames from 'classnames' -import ReactTooltip from 'react-tooltip' import RuleMessageAlertConfig from 'src/kapacitor/components/RuleMessageAlertConfig' +import RuleMessageTemplates from 'src/kapacitor/components/RuleMessageTemplates' -import {RULE_MESSAGE_TEMPLATES as templates, DEFAULT_ALERTS} from '../constants' +import {RULE_MESSAGE_TEMPLATES, DEFAULT_ALERTS} from '../constants' const {arrayOf, func, shape, string} = PropTypes @@ -98,57 +98,15 @@ export const RuleMessage = React.createClass({ value={rule.message} spellCheck={false} /> -
-

Templates:

- {Object.keys(templates).map(t => { - return ( - - actions.updateMessage( - rule.id, - `${this.message.value} ${templates[t].label}` - )} - /> - ) - })} - -
+ ) }, }) -const CodeData = React.createClass({ - propTypes: { - onClickTemplate: func, - template: shape({ - label: string, - text: string, - }), - }, - - render() { - const {onClickTemplate, template} = this.props - const {label, text} = template - - return ( - - {label} - - ) - }, -}) - export default RuleMessage diff --git a/ui/src/kapacitor/components/RuleMessageTemplates.js b/ui/src/kapacitor/components/RuleMessageTemplates.js new file mode 100644 index 000000000..915e1fe20 --- /dev/null +++ b/ui/src/kapacitor/components/RuleMessageTemplates.js @@ -0,0 +1,50 @@ +import React, {Component, PropTypes} from 'react' +import ReactTooltip from 'react-tooltip' + +import CodeData from 'src/kapacitor/components/CodeData' + +// needs to be React Component for CodeData click handler to work +class RuleMessageTemplates extends Component { + constructor(props) { + super(props) + } + + render() { + const {templates, actions, rule} = this.props + + return ( +
+

Templates:

+ {Object.keys(templates).map(t => { + return ( + + actions.updateMessage( + rule.id, + `${rule.message} ${templates[t].label}` + )} + /> + ) + })} + +
+ ) + } +} + +const {shape} = PropTypes + +RuleMessageTemplates.propTypes = { + templates: shape().isRequired, + actions: shape().isRequired, + rule: shape().isRequired, +} + +export default RuleMessageTemplates