UNPKG

2.41 kBJavaScriptView Raw
1'use strict';
2
3import React from 'react';
4import PropTypes from 'prop-types'
5import {
6 View,
7 ColorPropType,
8 requireNativeComponent,
9} from 'react-native';
10
11const defaultItemStyle = { color: 'white', fontSize: 26 };
12
13const WheelCurvedPickerNativeInterface = {
14 name: 'WheelCurvedPicker',
15 propTypes: {
16 ...View.propTypes,
17 data:PropTypes.array,
18 textColor: ColorPropType,
19 textSize: PropTypes.number,
20 itemStyle: PropTypes.object,
21 itemSpace: PropTypes.number,
22 onValueChange: PropTypes.func,
23 selectedValue: PropTypes.any,
24 selectedIndex: PropTypes.number,
25 }
26}
27
28const WheelCurvedPickerNative = requireNativeComponent('WheelCurvedPicker', WheelCurvedPickerNativeInterface);
29
30class WheelCurvedPicker extends React.Component {
31
32 propTypes: {
33 ...View.propTypes,
34
35 data: PropTypes.array,
36
37 textColor: ColorPropType,
38
39 textSize: PropTypes.number,
40
41 itemStyle: PropTypes.object,
42
43 itemSpace: PropTypes.number,
44
45 onValueChange: PropTypes.func,
46
47 selectedValue: PropTypes.any,
48
49 selectedIndex: PropTypes.number,
50 }
51
52 constructor(props){
53 super(props)
54 this.state = this._stateFromProps(props)
55 }
56
57 static defaultProps = {
58 itemStyle : {color:"white", fontSize:26},
59 itemSpace: 20
60 }
61
62 componentWillReceiveProps (props) {
63 this.setState(this._stateFromProps(props));
64 }
65
66 _stateFromProps (props) {
67 var selectedIndex = 0;
68 var items = [];
69 React.Children.forEach(props.children, function (child, index) {
70 if (child.props.value === props.selectedValue) {
71 selectedIndex = index;
72 }
73 items.push({value: child.props.value, label: child.props.label});
74 });
75
76 var textSize = props.itemStyle.fontSize
77 var textColor = props.itemStyle.color
78
79 return {selectedIndex, items, textSize, textColor};
80 }
81
82 _onValueChange = (e) => {
83 if (this.props.onValueChange) {
84 this.props.onValueChange(e.nativeEvent.data);
85 }
86 }
87
88 render() {
89 return <WheelCurvedPickerNative
90 {...this.props}
91 onValueChange={this._onValueChange}
92 data={this.state.items}
93 textColor={this.state.textColor}
94 textSize={this.state.textSize}
95 selectedIndex={parseInt(this.state.selectedIndex)} />;
96 }
97}
98
99class Item extends React.Component {
100 propTypes: {
101 value: React.PropTypes.any, // string or integer basically
102 label: React.PropTypes.string,
103 }
104
105 render () {
106 // These items don't get rendered directly.
107 return null;
108 }
109}
110
111WheelCurvedPicker.Item = Item;
112
113module.exports = WheelCurvedPicker;
114
\No newline at end of file