From a1f96845c09cc90ede7f86d966cb78a08425d59c Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Fri, 16 Dec 2016 07:58:12 +1300 Subject: [PATCH] Dropdown close when clicked outside of; Default value first in options --- src/js/components/DropdownField.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/js/components/DropdownField.js b/src/js/components/DropdownField.js index 8db73064..7b7349ff 100755 --- a/src/js/components/DropdownField.js +++ b/src/js/components/DropdownField.js @@ -12,6 +12,22 @@ export default class DropdownField extends React.Component{ this.state = { expanded: false } + this.handleClick = this.handleClick.bind(this) + } + + componentDidMount(){ + window.addEventListener("click", this.handleClick, false) + } + + componentWillUnmount(){ + window.removeEventListener("click", this.handleClick, false) + } + + handleClick(e){ + // TODO: remove dependency on jQuery and explore the performance of this functionality + if( $(e.target).closest('.dropdown-field').data('key') != this.props.name.replace(' ','_').toLowerCase() && this.state.expanded ){ + this.setState({ expanded: false }) + } } handleChange(value){ @@ -29,8 +45,11 @@ export default class DropdownField extends React.Component{ var classname = 'dropdown-field' if( this.state.expanded ) classname += ' expanded' + var current_value = this.props.options[0].value + if( this.props.value ) current_value = this.props.value + return ( -
+
this.handleToggle() }>   { this.props.name } @@ -40,7 +59,7 @@ export default class DropdownField extends React.Component{ this.props.options.map( option => { return (
this.handleChange(option.value) }> - { option.value == this.props.value ? : null } + { option.value == current_value ? : null } { option.label }
)