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