react-native-best-wheel-datepicker
Version:
React native cross platform iOS-style picker and datepicker.
75 lines (63 loc) • 1.9 kB
JavaScript
import React, { Component } from 'react';
import { ColorPropType, StyleSheet, View, ViewPropTypes as RNViewPropTypes, Text, TextPropTypes } from 'react-native';
import PropTypes from 'prop-types';
import WheelCurvedPicker from './WheelCurvedPicker';
const ViewPropTypes = RNViewPropTypes || View.propTypes;
const PickerItem = WheelCurvedPicker.Item;
const styles = StyleSheet.create({
picker: {
backgroundColor: '#d3d3d3',
height: 220,
},
});
export default class Picker extends Component {
static propTypes = {
textColor: ColorPropType,
textSize: PropTypes.number,
itemSpace: PropTypes.number,
onValueChange: PropTypes.func.isRequired,
pickerData: PropTypes.array.isRequired,
style: ViewPropTypes.style,
selectedValue: PropTypes.any,
};
static defaultProps = {
textColor: '#333',
textSize: 26,
itemSpace: 20,
style: null,
};
state = {
selectedValue: this.props.selectedValue,
};
handleChange = (selectedValue) => {
this.setState({ selectedValue });
this.props.onValueChange(selectedValue);
};
UNSAFE_componentWillReceiveProps({ selectedValue }) {
this.setState({ selectedValue });
}
render() {
const { pickerData, style, textSize, textColor, ...props } = this.props;
return (
<WheelCurvedPicker
{...props}
style={[styles.picker, style]}
selectedValue={this.state.selectedValue}
onValueChange={this.handleChange}
textSize={textSize}
textColor={textColor}
>
{pickerData.map((data, index) => (
<PickerItem
key={index}
value={typeof data.value !== 'undefined' ? data.value : data}
label={typeof data.label !== 'undefined' ? data.label : data.toString()}
/>
))}
</WheelCurvedPicker>
);
}
getValue() {
return this.state.selectedValue;
}
}