From 796e0d136f7f03397505c34e5d4783571e085c3f Mon Sep 17 00:00:00 2001 From: Andrew Watkins Date: Fri, 11 May 2018 15:15:27 -0700 Subject: [PATCH] Convert function selector --- .../data_explorer/components/QueryEditor.tsx | 2 +- ...nctionSelector.js => FunctionSelector.tsx} | 110 +++++++++--------- 2 files changed, 58 insertions(+), 54 deletions(-) rename ui/src/shared/components/{FunctionSelector.js => FunctionSelector.tsx} (72%) diff --git a/ui/src/data_explorer/components/QueryEditor.tsx b/ui/src/data_explorer/components/QueryEditor.tsx index 08af3ca365..7e0b5815e6 100644 --- a/ui/src/data_explorer/components/QueryEditor.tsx +++ b/ui/src/data_explorer/components/QueryEditor.tsx @@ -61,7 +61,7 @@ class QueryEditor extends PureComponent { void + selectedItems: string[] + singleSelect: boolean +} + +interface State { + localSelectedItems: string[] +} + @ErrorHandling -class FunctionSelector extends Component { +class FunctionSelector extends PureComponent { constructor(props) { super(props) @@ -15,60 +24,20 @@ class FunctionSelector extends Component { } } - componentWillUpdate(nextProps) { + public componentWillUpdate(nextProps) { if (!_.isEqual(this.props.selectedItems, nextProps.selectedItems)) { this.setState({localSelectedItems: nextProps.selectedItems}) } } - onSelect = (item, e) => { - e.stopPropagation() - - const {localSelectedItems} = this.state - - let nextItems - if (this.isSelected(item)) { - nextItems = localSelectedItems.filter(i => i !== item) - } else { - nextItems = [...localSelectedItems, item] - } - - this.setState({localSelectedItems: nextItems}) - } - - onSingleSelect = item => { - if (item === this.state.localSelectedItems[0]) { - this.props.onApply([]) - this.setState({localSelectedItems: []}) - } else { - this.props.onApply([item]) - this.setState({localSelectedItems: [item]}) - } - } - - isSelected = item => { - return !!this.state.localSelectedItems.find(text => text === item) - } - - handleApplyFunctions = e => { - e.stopPropagation() - - this.props.onApply(this.state.localSelectedItems) - } - - render() { - const {localSelectedItems} = this.state + public render() { const {singleSelect} = this.props return (
- {singleSelect ? null : ( + {!singleSelect && (
- - {localSelectedItems.length > 0 - ? `${localSelectedItems.length} Selected` - : 'Select functions below'} - + {this.headerText}
) } -} -const {arrayOf, bool, func, string} = PropTypes + private get headerText(): string { + const numItems = this.state.localSelectedItems.length + if (!numItems) { + return 'Select functions below' + } -FunctionSelector.propTypes = { - onApply: func.isRequired, - selectedItems: arrayOf(string.isRequired).isRequired, - singleSelect: bool, + return `${numItems} Selected` + } + + private onSelect = (item: string, e: MouseEvent): void => { + e.stopPropagation() + + const {localSelectedItems} = this.state + + let nextItems + if (this.isSelected(item)) { + nextItems = localSelectedItems.filter(i => i !== item) + } else { + nextItems = [...localSelectedItems, item] + } + + this.setState({localSelectedItems: nextItems}) + } + + private onSingleSelect = (item: string): void => { + if (item === this.state.localSelectedItems[0]) { + this.props.onApply([]) + this.setState({localSelectedItems: []}) + } else { + this.props.onApply([item]) + this.setState({localSelectedItems: [item]}) + } + } + + private isSelected = (item: string): boolean => { + return !!this.state.localSelectedItems.find(text => text === item) + } + + private handleApplyFunctions = (e: MouseEvent): void => { + e.stopPropagation() + this.props.onApply(this.state.localSelectedItems) + } } export default FunctionSelector