Use FunctionSelector instead of MultiSelectDropdown

Solves the issue of excess space at the end of the list for invisible
dropdown menus. Also a little more space efficient
pull/10616/head
Alex P 2017-05-02 15:54:09 -07:00
parent 26c26d9e67
commit f7ed5c0609
1 changed files with 60 additions and 21 deletions

View File

@ -2,7 +2,7 @@ import React, {PropTypes} from 'react'
import classNames from 'classnames' import classNames from 'classnames'
import _ from 'lodash' import _ from 'lodash'
import MultiSelectDropdown from 'src/shared/components/MultiSelectDropdown' import FunctionSelector from 'src/shared/components/FunctionSelector'
import Dropdown from 'src/shared/components/Dropdown' import Dropdown from 'src/shared/components/Dropdown'
import {INFLUXQL_FUNCTIONS} from '../constants' import {INFLUXQL_FUNCTIONS} from '../constants'
@ -20,6 +20,19 @@ const FieldListItem = React.createClass({
isKapacitorRule: bool.isRequired, isKapacitorRule: bool.isRequired,
}, },
getInitialState() {
return {
isOpen: false,
}
},
toggleFunctionsMenu(e) {
if (e) {
e.stopPropagation()
}
this.setState({isOpen: !this.state.isOpen})
},
handleToggleField() { handleToggleField() {
this.props.onToggleField(this.props.fieldFunc) this.props.onToggleField(this.props.fieldFunc)
}, },
@ -29,6 +42,7 @@ const FieldListItem = React.createClass({
field: this.props.fieldFunc.field, field: this.props.fieldFunc.field,
funcs: this.props.isKapacitorRule ? [selectedFuncs.text] : selectedFuncs, funcs: this.props.isKapacitorRule ? [selectedFuncs.text] : selectedFuncs,
}) })
this.setState({isOpen: false})
}, },
render() { render() {
@ -38,29 +52,54 @@ const FieldListItem = React.createClass({
return {text} return {text}
}) })
if (isKapacitorRule) {
return (
<div
className={classNames('query-builder--list-item', {active: isSelected})}
key={fieldFunc}
onClick={_.wrap(fieldFunc, this.handleToggleField)}
>
<span>
<div className="query-builder--checkbox" />
{fieldText}
</span>
{isSelected
? <Dropdown
items={items}
onChoose={this.handleApplyFunctions}
selected={
fieldFunc.funcs.length ? fieldFunc.funcs[0] : 'Function'
}
/>
: null
}
</div>
)
}
return ( return (
<div <div key={fieldFunc}>
className={classNames('query-builder--list-item', {active: isSelected})} <div
key={fieldFunc} className={classNames('query-builder--list-item', {active: isSelected})}
onClick={_.wrap(fieldFunc, this.handleToggleField)} onClick={_.wrap(fieldFunc, this.handleToggleField)}
> >
<span> <span>
<div className="query-builder--checkbox" /> <div className="query-builder--checkbox" />
{fieldText} {fieldText}
</span> </span>
{isKapacitorRule {isSelected
? <Dropdown ? <div className="btn btn-xs btn-info" onClick={this.toggleFunctionsMenu}>
items={items} Functions
onChoose={this.handleApplyFunctions} </div>
selected={ : null
fieldFunc.funcs.length ? fieldFunc.funcs[0] : 'Function' }
} </div>
/> {this.state.isOpen
: <MultiSelectDropdown ? <FunctionSelector
items={INFLUXQL_FUNCTIONS}
onApply={this.handleApplyFunctions} onApply={this.handleApplyFunctions}
selectedItems={fieldFunc.funcs || []} selectedItems={fieldFunc.funcs || []}
/>} />
: null}
</div> </div>
) )
}, },