Skip to content

Commit 080f6a1

Browse files
authored
Unify some code in the native picker dialog implementation (#1368)
* Unify some code in the native picker dialog implementation * PR review fixes
1 parent a2119f8 commit 080f6a1

File tree

4 files changed

+39
-51
lines changed

4 files changed

+39
-51
lines changed

demo/src/screens/componentScreens/PickerScreen.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,14 +137,6 @@ export default class PickerScreen extends Component {
137137
// );
138138
// }}
139139
// topBarProps={{doneLabel: 'YES', cancelLabel: 'NO'}}
140-
wheelPickerProps={{
141-
style: {width: 200},
142-
color: Colors.green30,
143-
labelStyle: {fontSize: 32, fontFamily: 'sans-serif-condensed-light'},
144-
itemHeight: 55
145-
}}
146-
selectLabelStyle={{color: Colors.green30}}
147-
cancelLabelStyle={{color: Colors.green30}}
148140
>
149141
{_.map(options, option => (
150142
<Picker.Item key={option.value} value={option.value} label={option.label} disabled={option.disabled}/>
@@ -162,7 +154,13 @@ export default class PickerScreen extends Component {
162154
renderCustomModal={this.renderDialog}
163155
>
164156
{_.map(options, option => (
165-
<Picker.Item key={option.value} value={option} label={option.label} labelStyle={Typography.text65} disabled={option.disabled}/>
157+
<Picker.Item
158+
key={option.value}
159+
value={option}
160+
label={option.label}
161+
labelStyle={Typography.text65}
162+
disabled={option.disabled}
163+
/>
166164
))}
167165
</Picker>
168166

@@ -236,7 +234,9 @@ export default class PickerScreen extends Component {
236234
))}
237235
</Picker>
238236

239-
<Text text60 marginT-s5 marginB-s2>Migrated Picker</Text>
237+
<Text text60 marginT-s5 marginB-s2>
238+
Migrated Picker
239+
</Text>
240240

241241
<Picker
242242
migrate

src/components/picker/NativePicker.js

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import TextField from '../textField';
55
import PickerDialog from './PickerDialog';
66
import TouchableOpacity from '../touchableOpacity';
77
import {Colors} from '../../style';
8-
import {WheelPicker} from '../../nativeComponents';
8+
import {WheelPicker} from '../../incubator';
99

1010
class NativePicker extends BaseComponent {
1111
static displayName = 'IGNORE';
@@ -62,21 +62,40 @@ class NativePicker extends BaseComponent {
6262
this.setState({showDialog});
6363
};
6464

65+
renderPicker = () => {
66+
const {selectedValue} = this.state;
67+
const {children, renderNativePicker, pickerStyle, wheelPickerProps, testID} = this.props;
68+
if (_.isFunction(renderNativePicker)) {
69+
return renderNativePicker(this.props);
70+
}
71+
return (
72+
<WheelPicker
73+
style={pickerStyle}
74+
selectedValue={selectedValue}
75+
onChange={this.onValueChange}
76+
testID={`${testID}.wheelPicker`}
77+
{...wheelPickerProps}
78+
>
79+
{children}
80+
</WheelPicker>
81+
);
82+
};
83+
6584
renderPickerDialog = () => {
66-
const {selectedValue, showDialog} = this.state;
67-
85+
const {showDialog} = this.state;
86+
6887
return (
6988
<PickerDialog
7089
height={this.PICKER_HEIGHT + this.MENU_HEIGHT}
7190
{...this.getThemeProps()}
7291
visible={showDialog}
7392
panDirection={null}
7493
onDismiss={this.onCancel}
75-
onValueChange={this.onValueChange}
76-
selectedValue={selectedValue}
7794
onDone={this.onDone}
7895
onCancel={this.onCancel}
79-
/>
96+
>
97+
{this.renderPicker()}
98+
</PickerDialog>
8099
);
81100
};
82101

@@ -110,5 +129,6 @@ class NativePicker extends BaseComponent {
110129
}
111130
}
112131

113-
NativePicker.Item = WheelPicker.Item;
132+
// TODO: Doesn't seem to be needed
133+
// NativePicker.Item = WheelPicker.Item;
114134
export default NativePicker;

src/components/picker/PickerDialog.android.js

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,13 @@ import Dialog from '../dialog';
99
import View from '../view';
1010
import Text from '../text';
1111
import {Colors, BorderRadiuses} from '../../style';
12-
import {WheelPicker} from '../../incubator';
1312

1413
class PickerDialog extends BaseComponent {
1514
static displayName = 'IGNORE';
1615
static propTypes = {
17-
selectedValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
18-
onValueChange: PropTypes.func,
1916
onDone: PropTypes.func,
2017
onCancel: PropTypes.func,
2118
children: PropTypes.array,
22-
/**
23-
* Pass props for the WheelPicker (Android only)
24-
*/
25-
wheelPickerProps: PropTypes.shape(WheelPicker.propTypes),
2619
/**
2720
* select label style
2821
*/
@@ -68,17 +61,6 @@ class PickerDialog extends BaseComponent {
6861
);
6962
}
7063

71-
renderPicker() {
72-
const {children, onValueChange, selectedValue, renderNativePicker, wheelPickerProps, testID} = this.props;
73-
if (_.isFunction(renderNativePicker)) {
74-
return renderNativePicker(this.props);
75-
}
76-
return (
77-
<WheelPicker selectedValue={selectedValue} onChange={onValueChange} {...wheelPickerProps} testID={`${testID}.wheelPicker`}>
78-
{children}
79-
</WheelPicker>
80-
);
81-
}
8264

8365
render() {
8466
const dialogProps = extractComponentProps(Dialog, this.props);
@@ -89,7 +71,7 @@ class PickerDialog extends BaseComponent {
8971
<View style={styles.dialog}>
9072
{this.renderHeader()}
9173
<View flex center paddingH-24>
92-
{this.renderPicker()}
74+
{this.props.children}
9375
</View>
9476
{this.renderFooter()}
9577
</View>

src/components/picker/PickerDialog.ios.js

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@ import Dialog from '../dialog';
99
import View from '../view';
1010
import Text from '../text';
1111
import {Colors} from '../../style';
12-
import {WheelPicker} from '../../incubator';
1312

1413
class PickerDialog extends BaseComponent {
1514
static displayName = 'IGNORE';
1615
static propTypes = {
17-
selectedValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
18-
onValueChange: PropTypes.func,
1916
onDone: PropTypes.func,
2017
onCancel: PropTypes.func,
2118
topBarProps: PropTypes.object,
@@ -39,17 +36,6 @@ class PickerDialog extends BaseComponent {
3936
);
4037
}
4138

42-
renderPicker() {
43-
const {children, onValueChange, selectedValue, renderNativePicker, pickerStyle, testID} = this.props;
44-
if (_.isFunction(renderNativePicker)) {
45-
return renderNativePicker(this.props);
46-
}
47-
return (
48-
<WheelPicker style={pickerStyle} selectedValue={selectedValue} onChange={onValueChange} testID={`${testID}.wheelPicker`}>
49-
{children}
50-
</WheelPicker>
51-
);
52-
}
5339

5440
render() {
5541
const dialogProps = extractComponentProps(Dialog, this.props);
@@ -60,7 +46,7 @@ class PickerDialog extends BaseComponent {
6046
<View flex bg-white>
6147
{this.renderHeader()}
6248
<View centerV flex>
63-
{this.renderPicker()}
49+
{this.props.children}
6450
</View>
6551
<View useSafeArea/>
6652
</View>

0 commit comments

Comments
 (0)