Refactor RuleMessage templates into separate components, update to ES6

pull/1724/head
Jared Scheib 2017-07-18 12:02:07 -07:00
parent a34ccb0189
commit 3766065d1c
3 changed files with 91 additions and 49 deletions

View File

@ -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 (
<code
className="rule-builder--message-template"
data-tip={template.text}
onClick={onClickTemplate}
>
{template.label}
</code>
)
}
}
const {func, shape, string} = PropTypes
CodeData.propTypes = {
onClickTemplate: func,
template: shape({
label: string,
text: string,
}),
}
export default CodeData

View File

@ -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,55 +98,13 @@ export const RuleMessage = React.createClass({
value={rule.message}
spellCheck={false}
/>
<div className="rule-section--row rule-section--row-last rule-section--border-top">
<p>Templates:</p>
{Object.keys(templates).map(t => {
return (
<CodeData
key={t}
template={templates[t]}
onClickTemplate={() =>
actions.updateMessage(
rule.id,
`${this.message.value} ${templates[t].label}`
)}
/>
)
})}
<ReactTooltip
effect="solid"
html={true}
offset={{top: -4}}
class="influx-tooltip kapacitor-tooltip"
<RuleMessageTemplates
templates={RULE_MESSAGE_TEMPLATES}
actions={actions}
rule={rule}
/>
</div>
</div>
</div>
)
},
})
const CodeData = React.createClass({
propTypes: {
onClickTemplate: func,
template: shape({
label: string,
text: string,
}),
},
render() {
const {onClickTemplate, template} = this.props
const {label, text} = template
return (
<code
className="rule-builder--message-template"
data-tip={text}
onClick={onClickTemplate}
>
{label}
</code>
)
},
})

View File

@ -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 (
<div className="rule-section--row rule-section--row-last rule-section--border-top">
<p>Templates:</p>
{Object.keys(templates).map(t => {
return (
<CodeData
key={t}
template={templates[t]}
onClickTemplate={() =>
actions.updateMessage(
rule.id,
`${rule.message} ${templates[t].label}`
)}
/>
)
})}
<ReactTooltip
effect="solid"
html={true}
offset={{top: -4}}
class="influx-tooltip kapacitor-tooltip"
/>
</div>
)
}
}
const {shape} = PropTypes
RuleMessageTemplates.propTypes = {
templates: shape().isRequired,
actions: shape().isRequired,
rule: shape().isRequired,
}
export default RuleMessageTemplates