Refactor group by time dropdown
parent
566c9974d2
commit
00d3f446fc
|
@ -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>
|
||||||
|
|
|
@ -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 || []}
|
||||||
|
|
|
@ -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>
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
Loading…
Reference in New Issue