|
1 | 1 | import React from 'react'; |
2 | 2 | import RNPickerSelect from 'react-native-picker-select'; |
| 3 | +import _ from 'underscore'; |
3 | 4 |
|
4 | 5 | import styles from '../../../styles/styles'; |
5 | 6 | import * as basePickerPropTypes from './basePickerPropTypes'; |
6 | 7 | import basePickerStyles from './basePickerStyles'; |
7 | 8 |
|
8 | | -const BasePicker = props => ( |
9 | | - <RNPickerSelect |
10 | | - onValueChange={props.onChange} |
11 | | - items={props.items} |
12 | | - style={props.size === 'normal' ? basePickerStyles(props.disabled, props.hasError, props.focused) : styles.pickerSmall} |
13 | | - useNativeAndroidPickerStyle={false} |
14 | | - placeholder={props.placeholder} |
15 | | - value={props.value} |
16 | | - Icon={() => props.icon(props.size)} |
17 | | - disabled={props.disabled} |
18 | | - fixAndroidTouchableBug |
19 | | - onOpen={props.onOpen} |
20 | | - onClose={props.onClose} |
21 | | - pickerProps={{ |
22 | | - onFocus: props.onOpen, |
23 | | - onBlur: props.onClose, |
24 | | - }} |
25 | | - /> |
26 | | -); |
| 9 | +class BasePicker extends React.Component { |
| 10 | + constructor(props) { |
| 11 | + super(props); |
27 | 12 |
|
| 13 | + this.state = { |
| 14 | + selectValue: this.props.value || this.props.defaultValue || '', |
| 15 | + }; |
| 16 | + } |
| 17 | + |
| 18 | + handleChange = (value) => { |
| 19 | + this.props.onChange(value); |
| 20 | + this.setState({selectValue: value}); |
| 21 | + } |
| 22 | + |
| 23 | + render() { |
| 24 | + const hasError = !_.isEmpty(this.props.errorText); |
| 25 | + return ( |
| 26 | + <RNPickerSelect |
| 27 | + onValueChange={this.handleChange} |
| 28 | + items={this.props.items} |
| 29 | + style={this.props.size === 'normal' ? basePickerStyles(this.props.disabled, hasError, this.props.focused) : styles.pickerSmall} |
| 30 | + useNativeAndroidPickerStyle={false} |
| 31 | + placeholder={this.props.placeholder} |
| 32 | + value={this.state.selectValue} |
| 33 | + Icon={() => this.props.icon(this.props.size)} |
| 34 | + disabled={this.props.disabled} |
| 35 | + fixAndroidTouchableBug |
| 36 | + onOpen={this.props.onOpen} |
| 37 | + onClose={this.props.onClose} |
| 38 | + pickerProps={{ |
| 39 | + onFocus: this.props.onOpen, |
| 40 | + onBlur: this.props.onBlur, |
| 41 | + ref: this.props.innerRef, |
| 42 | + }} |
| 43 | + /> |
| 44 | + ); |
| 45 | + } |
| 46 | +} |
28 | 47 |
|
29 | 48 | BasePicker.propTypes = basePickerPropTypes.propTypes; |
30 | 49 | BasePicker.defaultProps = basePickerPropTypes.defaultProps; |
|
0 commit comments