Add separators and CONT QUERIES to query template dropdown

pull/1334/head
Andrew Watkins 2017-04-25 16:44:37 -07:00
parent 0fdb2cc8a2
commit f3bf34e28a
3 changed files with 88 additions and 51 deletions

View File

@ -11,10 +11,13 @@ export const INFLUXQL_FUNCTIONS = [
'stddev', 'stddev',
] ]
const SEPARATOR = 'SEPARATOR'
export const QUERY_TEMPLATES = [ export const QUERY_TEMPLATES = [
{text: 'Show Databases', query: 'SHOW DATABASES'}, {text: 'Show Databases', query: 'SHOW DATABASES'},
{text: 'Create Database', query: 'CREATE DATABASE "db_name"'}, {text: 'Create Database', query: 'CREATE DATABASE "db_name"'},
{text: 'Drop Database', query: 'DROP DATABASE "db_name"'}, {text: 'Drop Database', query: 'DROP DATABASE "db_name"'},
{text: `${SEPARATOR}`},
{text: 'Show Measurements', query: 'SHOW MEASUREMENTS ON "db_name"'}, {text: 'Show Measurements', query: 'SHOW MEASUREMENTS ON "db_name"'},
{ {
text: 'Show Tag Keys', text: 'Show Tag Keys',
@ -24,6 +27,7 @@ export const QUERY_TEMPLATES = [
text: 'Show Tag Values', text: 'Show Tag Values',
query: 'SHOW TAG VALUES ON "db_name" FROM "measurement_name" WITH KEY = "tag_key"', query: 'SHOW TAG VALUES ON "db_name" FROM "measurement_name" WITH KEY = "tag_key"',
}, },
{text: `${SEPARATOR}`},
{ {
text: 'Show Retention Policies', text: 'Show Retention Policies',
query: 'SHOW RETENTION POLICIES on "db_name"', query: 'SHOW RETENTION POLICIES on "db_name"',
@ -36,6 +40,11 @@ export const QUERY_TEMPLATES = [
text: 'Drop Retention Policy', text: 'Drop Retention Policy',
query: 'DROP RETENTION POLICY "rp_name" ON "db_name"', query: 'DROP RETENTION POLICY "rp_name" ON "db_name"',
}, },
{text: `${SEPARATOR}`},
{
text: 'Show Continuos Queries',
query: 'SHOW CONTINUOUS QUERIES',
},
{ {
text: 'Create Continuous Query', text: 'Create Continuous Query',
query: 'CREATE CONTINUOUS QUERY "cq_name" ON "db_name" BEGIN SELECT min("field") INTO "target_measurement" FROM "current_measurement" GROUP BY time(30m) END', query: 'CREATE CONTINUOUS QUERY "cq_name" ON "db_name" BEGIN SELECT min("field") INTO "target_measurement" FROM "current_measurement" GROUP BY time(30m) END',
@ -44,6 +53,7 @@ export const QUERY_TEMPLATES = [
text: 'Drop Continuous Query', text: 'Drop Continuous Query',
query: 'DROP CONTINUOUS QUERY "cq_name" ON "db_name"', query: 'DROP CONTINUOUS QUERY "cq_name" ON "db_name"',
}, },
{text: `${SEPARATOR}`},
{text: 'Show Users', query: 'SHOW USERS'}, {text: 'Show Users', query: 'SHOW USERS'},
{ {
text: 'Create User', text: 'Create User',
@ -54,6 +64,7 @@ export const QUERY_TEMPLATES = [
query: 'CREATE USER "username" WITH PASSWORD \'password\' WITH ALL PRIVILEGES', query: 'CREATE USER "username" WITH PASSWORD \'password\' WITH ALL PRIVILEGES',
}, },
{text: 'Drop User', query: 'DROP USER "username"'}, {text: 'Drop User', query: 'DROP USER "username"'},
{text: `${SEPARATOR}`},
{text: 'Show Stats', query: 'SHOW STATS'}, {text: 'Show Stats', query: 'SHOW STATS'},
{text: 'Show Diagnostics', query: 'SHOW DIAGNOSTICS'}, {text: 'Show Diagnostics', query: 'SHOW DIAGNOSTICS'},
] ]

View File

@ -46,70 +46,93 @@ class Dropdown extends Component {
} }
render() { render() {
const {items, selected, className, iconName, actions, addNew, buttonSize, buttonColor, menuWidth} = this.props const {
items,
selected,
className,
iconName,
actions,
addNew,
buttonSize,
buttonColor,
menuWidth,
} = this.props
const {isOpen} = this.state const {isOpen} = this.state
return ( return (
<div onClick={this.toggleMenu} className={classnames(`dropdown ${className}`, {open: isOpen})}> <div
onClick={this.toggleMenu}
className={classnames(`dropdown ${className}`, {open: isOpen})}
>
<div className={`btn dropdown-toggle ${buttonSize} ${buttonColor}`}> <div className={`btn dropdown-toggle ${buttonSize} ${buttonColor}`}>
{iconName ? <span className={classnames('icon', {[iconName]: true})}></span> : null} {iconName
? <span className={classnames('icon', {[iconName]: true})} />
: null}
<span className="dropdown-selected">{selected}</span> <span className="dropdown-selected">{selected}</span>
<span className="caret" /> <span className="caret" />
</div> </div>
{isOpen ? {isOpen
<ul className="dropdown-menu" style={{width: menuWidth}}> ? <ul className="dropdown-menu" style={{width: menuWidth}}>
{items.map((item, i) => { {items.map((item, i) => {
return ( if (item.text === 'SEPARATOR') {
<li className="dropdown-item" key={i}> return <li key={i} role="separator" className="divider" />
<a href="#" onClick={() => this.handleSelection(item)}> }
{item.text} return (
</a> <li className="dropdown-item" key={i}>
{actions.length > 0 ? <a href="#" onClick={() => this.handleSelection(item)}>
<div className="dropdown-item__actions"> {item.text}
{actions.map((action) => { </a>
return ( {actions.length > 0
<button key={action.text} className="dropdown-item__action" onClick={(e) => this.handleAction(e, action, item)}> ? <div className="dropdown-item__actions">
<span title={action.text} className={`icon ${action.icon}`}></span> {actions.map(action => {
</button> return (
) <button
})} key={action.text}
</div> className="dropdown-item__action"
: null} onClick={e =>
</li> this.handleAction(e, action, item)}
) >
})} <span
{ title={action.text}
addNew ? className={`icon ${action.icon}`}
<li> />
<Link to={addNew.url}> </button>
{addNew.text} )
</Link> })}
</li> : </div>
null : null}
} </li>
</ul> )
})}
{addNew
? <li>
<Link to={addNew.url}>
{addNew.text}
</Link>
</li>
: null}
</ul>
: null} : null}
</div> </div>
) )
} }
} }
const { const {arrayOf, shape, string, func} = PropTypes
arrayOf,
shape,
string,
func,
} = PropTypes
Dropdown.propTypes = { Dropdown.propTypes = {
actions: arrayOf(shape({ actions: arrayOf(
icon: string.isRequired, shape({
text: string.isRequired, icon: string.isRequired,
handler: func.isRequired, text: string.isRequired,
})), handler: func.isRequired,
items: arrayOf(shape({ })
text: string.isRequired, ),
})).isRequired, items: arrayOf(
shape({
text: string.isRequired,
})
).isRequired,
onChoose: func.isRequired, onChoose: func.isRequired,
addNew: shape({ addNew: shape({
url: string.isRequired, url: string.isRequired,

View File

@ -103,4 +103,7 @@
min-width: $query-editor--templates-menu-width; min-width: $query-editor--templates-menu-width;
max-width: $query-editor--templates-menu-width; max-width: $query-editor--templates-menu-width;
} }
.divider {
background: linear-gradient(to right, #00C9FF 0%, #22ADF6 100%);
}
} }