Refactor group by time dropdown

pull/10616/head
Alex P 2017-05-22 19:30:12 -07:00
parent 566c9974d2
commit 00d3f446fc
4 changed files with 37 additions and 79 deletions

View File

@ -1,7 +1,8 @@
import React, {PropTypes} from 'react' import React, {PropTypes} from 'react'
import FieldListItem from 'src/data_explorer/components/FieldListItem' import FieldListItem from 'src/data_explorer/components/FieldListItem'
import GroupByTimeDropdown from 'src/data_explorer/components/GroupByTimeDropdown' import GroupByTimeDropdown
from 'src/data_explorer/components/GroupByTimeDropdown'
import FancyScrollbar from 'shared/components/FancyScrollbar' import FancyScrollbar from 'shared/components/FancyScrollbar'
import {showFieldKeys} from 'shared/apis/metaQuery' import {showFieldKeys} from 'shared/apis/metaQuery'
@ -77,7 +78,7 @@ const FieldList = React.createClass({
}, },
render() { render() {
const {query} = this.props const {query, isKapacitorRule} = this.props
const hasAggregates = query.fields.some(f => f.funcs && f.funcs.length) const hasAggregates = query.fields.some(f => f.funcs && f.funcs.length)
const hasGroupByTime = query.groupBy.time const hasGroupByTime = query.groupBy.time
@ -90,6 +91,7 @@ const FieldList = React.createClass({
isOpen={!hasGroupByTime} isOpen={!hasGroupByTime}
selected={query.groupBy.time} selected={query.groupBy.time}
onChooseGroupByTime={this.handleGroupByTime} onChooseGroupByTime={this.handleGroupByTime}
isInRuleBuilder={isKapacitorRule}
/> />
: null} : null}
</div> </div>

View File

@ -56,7 +56,9 @@ const FieldListItem = React.createClass({
if (isKapacitorRule) { if (isKapacitorRule) {
return ( return (
<div <div
className={classnames('query-builder--list-item', {active: isSelected})} className={classnames('query-builder--list-item', {
active: isSelected,
})}
key={fieldFunc} key={fieldFunc}
onClick={_.wrap(fieldFunc, this.handleToggleField)} onClick={_.wrap(fieldFunc, this.handleToggleField)}
> >
@ -66,14 +68,15 @@ const FieldListItem = React.createClass({
</span> </span>
{isSelected {isSelected
? <Dropdown ? <Dropdown
className="dropdown-110"
menuClass="dropdown-malachite"
items={items} items={items}
onChoose={this.handleApplyFunctions} onChoose={this.handleApplyFunctions}
selected={ selected={
fieldFunc.funcs.length ? fieldFunc.funcs[0] : 'Function' fieldFunc.funcs.length ? fieldFunc.funcs[0] : 'Function'
} }
/> />
: null : null}
}
</div> </div>
) )
} }
@ -81,7 +84,9 @@ const FieldListItem = React.createClass({
return ( return (
<div key={fieldFunc}> <div key={fieldFunc}>
<div <div
className={classnames('query-builder--list-item', {active: isSelected})} className={classnames('query-builder--list-item', {
active: isSelected,
})}
onClick={_.wrap(fieldFunc, this.handleToggleField)} onClick={_.wrap(fieldFunc, this.handleToggleField)}
> >
<span> <span>
@ -89,13 +94,17 @@ const FieldListItem = React.createClass({
{fieldText} {fieldText}
</span> </span>
{isSelected {isSelected
? <div className={classnames('btn btn-xs btn-info', {'function-selector--toggled': isOpen})} onClick={this.toggleFunctionsMenu}> ? <div
className={classnames('btn btn-xs btn-info', {
'function-selector--toggled': isOpen,
})}
onClick={this.toggleFunctionsMenu}
>
Functions Functions
</div> </div>
: null : null}
}
</div> </div>
{(isSelected && isOpen) {isSelected && isOpen
? <FunctionSelector ? <FunctionSelector
onApply={this.handleApplyFunctions} onApply={this.handleApplyFunctions}
selectedItems={fieldFunc.funcs || []} selectedItems={fieldFunc.funcs || []}

View File

@ -1,49 +1,33 @@
import React, {PropTypes} from 'react' import React, {PropTypes} from 'react'
import classnames from 'classnames'
import groupByTimeOptions from 'hson!../data/groupByTimes.hson' import groupByTimeOptions from 'hson!../data/groupByTimes.hson'
const {bool, string, func} = PropTypes import Dropdown from 'shared/components/Dropdown'
const {bool, func, string} = PropTypes
const GroupByTimeDropdown = React.createClass({ const GroupByTimeDropdown = React.createClass({
propTypes: { propTypes: {
isOpen: bool,
selected: string, selected: string,
onChooseGroupByTime: func.isRequired, onChooseGroupByTime: func.isRequired,
isInRuleBuilder: bool,
}, },
render() { render() {
const {isOpen, selected, onChooseGroupByTime} = this.props const {selected, onChooseGroupByTime, isInRuleBuilder} = this.props
return ( return (
<div <Dropdown
className={classnames('dropdown group-by-time-dropdown', { className="dropdown-130"
open: isOpen, menuClass={isInRuleBuilder ? 'dropdown-malachite' : null}
})} buttonColor={isInRuleBuilder ? 'btn-default' : 'btn-info'}
> items={groupByTimeOptions.map(groupBy => ({
<div ...groupBy,
className="btn btn-sm btn-info dropdown-toggle" text: groupBy.menuOption,
data-toggle="dropdown" }))}
> onChoose={onChooseGroupByTime}
<span>Group by {selected || 'time'}</span> selected={selected ? `Group by ${selected}` : 'Group by Time'}
<span className="caret" /> />
</div>
<ul className="dropdown-menu">
{groupByTimeOptions.map(groupBy => {
return (
<li
className="dropdown-item"
key={groupBy.menuOption}
onClick={() => onChooseGroupByTime(groupBy)}
>
<a href="#">
{groupBy.menuOption}
</a>
</li>
)
})}
</ul>
</div>
) )
}, },
}) })

View File

@ -220,40 +220,3 @@ $dropdown-menu-max-height: 270px;
} }
} }
/*
Group By Time Dropdown
----------------------------------------------
*/
.group-by-time-dropdown {
.dropdown-toggle {
width: 120px;
height: 28px !important;
line-height: 28px !important;
font-size: 12px;
text-transform: none;
border-radius: $radius;
display: block;
}
.dropdown-menu > li.dropdown-item > a {display: block;}
}
.data-explorer .group-by-time-dropdown .dropdown-toggle {
font-weight: 600;
background-color: $g2-kevlar;
line-height: 24px !important;
border: 2px solid $g6-smoke;
transition:
border-color 0.25s ease,
color 0.25s ease,
box-shadow 0.25s ease;
color: $g10-wolf;
&:hover {
border-color: $g7-graphite;
color: $g18-cloud;
}
}
.data-explorer .group-by-time-dropdown.open .dropdown-toggle {
background-color: $g2-kevlar !important;
border-color: $c-pool !important;
box-shadow: 0 0 6px 0px $c-pool !important
}