Skip to content

Commit 30bf735

Browse files
authored
Picker - add support for layout modifiers (margin, paddings) (#928)
* Picker - add support for layout modifiers (margin, paddings) * fix for React's PureComponent * using 'asBaseComponent' modifiers prop * removing android/gradlew.bat * removing unused import * pr comments * fix lint
1 parent f4a9fc9 commit 30bf735

File tree

2 files changed

+49
-37
lines changed

2 files changed

+49
-37
lines changed

demo/src/screens/componentScreens/PickerScreen.js

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export default class PickerScreen extends Component {
5959

6060
renderDialog = modalProps => {
6161
const {visible, children, toggleModal, onDone} = modalProps;
62-
62+
6363
return (
6464
<Dialog
6565
migrate
@@ -105,19 +105,18 @@ export default class PickerScreen extends Component {
105105
))}
106106
</Picker>
107107

108-
<View marginT-20>
109-
<Picker
110-
placeholder="Favorite Languages"
111-
value={this.state.languages}
112-
onChange={items => this.setState({languages: items})}
113-
mode={Picker.modes.MULTI}
114-
rightIconSource={dropdown}
115-
>
116-
{_.map(options, option => (
117-
<Picker.Item key={option.value} value={option} disabled={option.disabled}/>
118-
))}
119-
</Picker>
120-
</View>
108+
<Picker
109+
marginT-20
110+
placeholder="Favorite Languages"
111+
value={this.state.languages}
112+
onChange={items => this.setState({languages: items})}
113+
mode={Picker.modes.MULTI}
114+
rightIconSource={dropdown}
115+
>
116+
{_.map(options, option => (
117+
<Picker.Item key={option.value} value={option} disabled={option.disabled}/>
118+
))}
119+
</Picker>
121120

122121
<Picker
123122
title="Native Picker"
@@ -156,21 +155,20 @@ export default class PickerScreen extends Component {
156155
))}
157156
</Picker>
158157

159-
<View marginT-20>
160-
<Picker
161-
title="Custom modal"
162-
placeholder="Pick multiple Languages"
163-
value={this.state.customModalValues}
164-
onChange={items => this.setState({customModalValues: items})}
165-
mode={Picker.modes.MULTI}
166-
rightIconSource={dropdown}
167-
renderCustomModal={this.renderDialog}
168-
>
169-
{_.map(options, option => (
170-
<Picker.Item key={option.value} value={option} label={option.label} disabled={option.disabled}/>
171-
))}
172-
</Picker>
173-
</View>
158+
<Picker
159+
marginT-20
160+
title="Custom modal"
161+
placeholder="Pick multiple Languages"
162+
value={this.state.customModalValues}
163+
onChange={items => this.setState({customModalValues: items})}
164+
mode={Picker.modes.MULTI}
165+
rightIconSource={dropdown}
166+
renderCustomModal={this.renderDialog}
167+
>
168+
{_.map(options, option => (
169+
<Picker.Item key={option.value} value={option} label={option.label} disabled={option.disabled}/>
170+
))}
171+
</Picker>
174172

175173
<Text marginT-20 marginB-10 text70 dark60>
176174
Custom Picker:

src/components/picker/index.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ class Picker extends PureComponent {
180180

181181
getAccessibilityInfo() {
182182
const {placeholder} = this.props;
183-
183+
184184
return {
185185
accessibilityLabel: this.getLabelValueText() ? `${placeholder}. selected. ${this.getLabelValueText()}` : `Select ${placeholder}`,
186186
accessibilityHint: this.getLabelValueText()
@@ -203,7 +203,7 @@ class Picker extends PureComponent {
203203
getLabelValueText = () => {
204204
const {value: propsValue} = this.props;
205205
const {value: stateValue} = this.props;
206-
206+
207207
if (this.shouldNotChangePickerLabelWhileSelecting()) {
208208
return this.getLabel(propsValue);
209209
}
@@ -236,7 +236,7 @@ class Picker extends PureComponent {
236236
// otherwise, extract from picker items
237237
const {items} = this.state;
238238
const selectedItem = _.find(items, {value});
239-
239+
240240
return _.get(selectedItem, 'label');
241241
}
242242

@@ -254,7 +254,7 @@ class Picker extends PureComponent {
254254
const {getItemValue} = this.props;
255255
const {value} = this.state;
256256
const newValue = _.xorBy(value, [item], getItemValue || 'value');
257-
257+
258258
this.setState({value: newValue});
259259
};
260260

@@ -294,7 +294,7 @@ class Picker extends PureComponent {
294294
if (!showSearch || _.isEmpty(searchValue) || _.includes(_.lowerCase(childLabel), _.lowerCase(searchValue))) {
295295
const selectedValue = PickerPresenter.getItemValue({value, getItemValue});
296296
const isSelected = PickerPresenter.isItemSelected(childValue, selectedValue);
297-
297+
298298
return React.cloneElement(child, {
299299
isSelected,
300300
onPress: mode === Picker.modes.MULTI ? this.toggleItemSelection : this.onDoneSelecting,
@@ -364,15 +364,22 @@ class Picker extends PureComponent {
364364
};
365365

366366
render() {
367-
const {useNativePicker, renderPicker, customPickerProps, testID} = this.props;
367+
const {
368+
useNativePicker,
369+
renderPicker,
370+
customPickerProps,
371+
containerStyle,
372+
testID,
373+
modifiers
374+
} = this.props;
368375

369376
if (useNativePicker) {
370377
return <NativePicker {...this.props}/>;
371378
}
372379

373380
if (_.isFunction(renderPicker)) {
374381
const {value} = this.state;
375-
382+
376383
return (
377384
<View left>
378385
<Button {...customPickerProps} link onPress={this.handlePickerOnPress} testID={testID}>
@@ -385,10 +392,17 @@ class Picker extends PureComponent {
385392

386393
const textInputProps = TextField.extractOwnProps(this.props);
387394
const label = this.getLabelValueText();
388-
395+
const {paddings, margins, positionStyle} = modifiers;
396+
389397
return (
390398
<TextField
391399
{...textInputProps}
400+
containerStyle={[
401+
paddings,
402+
margins,
403+
positionStyle,
404+
containerStyle
405+
]}
392406
{...this.getAccessibilityInfo()}
393407
importantForAccessibility={'no-hide-descendants'}
394408
value={label}

0 commit comments

Comments
 (0)