Skip to content

Commit 814615e

Browse files
authored
Merge pull request #18 from maxkordiyak/remove-modal
Don't lose input focus when typing
2 parents 5f3780a + 4c56006 commit 814615e

File tree

4 files changed

+42
-39
lines changed

4 files changed

+42
-39
lines changed

components/Autocomplete/index.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ class Autocomplete extends Component {
6969
} else {
7070
this.setState({items: [NO_DATA], loading: false});
7171
}
72-
if (this.dropdown) {
73-
this.dropdown.onPress(this.container);
72+
if (this.dropdown.current) {
73+
this.dropdown.current.onPress(this.container);
7474
}
7575
} catch (error) {
7676
throw new Error(error);
@@ -83,8 +83,8 @@ class Autocomplete extends Component {
8383
} else {
8484
this.setState({items: [NO_DATA], loading: false});
8585
}
86-
if (this.dropdown) {
87-
this.dropdown.onPress(this.container);
86+
if (this.dropdown.current) {
87+
this.dropdown.current.onPress(this.container);
8888
}
8989
} catch (error) {
9090
throw new Error(error);
@@ -110,8 +110,8 @@ class Autocomplete extends Component {
110110
});
111111
}
112112

113-
if (this.dropdown) {
114-
this.dropdown.onPress(this.container);
113+
if (this.dropdown.current) {
114+
this.dropdown.current.onPress(this.container);
115115
}
116116
}
117117
}
@@ -144,6 +144,9 @@ class Autocomplete extends Component {
144144
handleBlur() {
145145
clearTimeout(this.timer);
146146
this.setState({loading: false});
147+
if (this.dropdown.current) {
148+
this.dropdown.current.close();
149+
}
147150
}
148151

149152
render() {
@@ -195,9 +198,7 @@ class Autocomplete extends Component {
195198
</View>
196199
{items && items.length > 0 && (
197200
<Dropdown
198-
ref={ref => {
199-
this.dropdown = ref;
200-
}}
201+
ref={this.dropdown}
201202
dropdownPosition={0}
202203
data={data ? filteredItems : items}
203204
listHeader={listHeader}

components/Dropdown/Dropdown.styles.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ export default StyleSheet.create({
3434
picker: {
3535
backgroundColor: "rgba(255, 255, 255, 1.0)",
3636
borderRadius: 2,
37-
position: "absolute",
3837
...Platform.select({
3938
ios: {
4039
shadowRadius: 2,

components/Dropdown/index.js

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import React, {PureComponent} from "react";
22
import {
33
View,
44
Animated,
5-
Modal,
6-
TouchableOpacity,
75
Dimensions,
86
Platform,
97
FlatList,
@@ -161,6 +159,20 @@ export default class Dropdown extends PureComponent {
161159
});
162160
}
163161

162+
close() {
163+
const {onBlur, onDropdownClose} = this.props;
164+
165+
if (typeof onBlur === "function") {
166+
onBlur();
167+
}
168+
if (typeof onDropdownClose === "function") {
169+
onDropdownClose();
170+
}
171+
if (this.mounted) {
172+
this.setState({modal: false});
173+
}
174+
}
175+
164176
onClose(val) {
165177
const {onBlur, onDropdownClose} = this.props;
166178
const {value} = this.state;
@@ -474,7 +486,6 @@ export default class Dropdown extends PureComponent {
474486
const pickerStyle = {
475487
width,
476488
height,
477-
top,
478489
left,
479490
transform: [{translateY}],
480491
};
@@ -483,32 +494,22 @@ export default class Dropdown extends PureComponent {
483494

484495
return (
485496
<View onLayout={this.onLayout} style={containerStyle}>
486-
<Modal
487-
visible={modal}
488-
transparent
489-
onRequestClose={this.blur}
490-
supportedOrientations={supportedOrientations}
491-
>
492-
<TouchableOpacity
493-
onPress={this.blur}
494-
style={[styles.overlay, overlayStyleOverrides]}
495-
>
496-
<View style={[styles.picker, pickerStyle, pickerStyleOverrides]}>
497-
<FlatList
498-
keyboardShouldPersistTaps="always"
499-
ref={this.updateScrollRef}
500-
data={itemData}
501-
style={[styles.scroll, scrollStyle]}
502-
renderItem={this.renderItem}
503-
keyExtractor={this.keyExtractor}
504-
scrollEnabled={visibleItemCount <= itemCount}
505-
ItemSeparatorComponent={this.renderSeparator}
506-
ListFooterComponent={this.renderFooter}
507-
ListHeaderComponent={this.renderHeader}
508-
/>
509-
</View>
510-
</TouchableOpacity>
511-
</Modal>
497+
{modal && (
498+
<View style={[styles.picker, pickerStyle, pickerStyleOverrides]}>
499+
<FlatList
500+
keyboardShouldPersistTaps="always"
501+
ref={this.updateScrollRef}
502+
data={itemData}
503+
style={[styles.scroll, scrollStyle]}
504+
renderItem={this.renderItem}
505+
keyExtractor={this.keyExtractor}
506+
scrollEnabled={visibleItemCount <= itemCount}
507+
ItemSeparatorComponent={this.renderSeparator}
508+
ListFooterComponent={this.renderFooter}
509+
ListHeaderComponent={this.renderHeader}
510+
/>
511+
</View>
512+
)}
512513
</View>
513514
);
514515
}

components/DropdownItem/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import PropTypes from "prop-types";
22
import React, {PureComponent} from "react";
3+
import {Keyboard} from 'react-native';
34
import {Button} from "react-native-material-buttons";
45
import styles from "./DropdownItem.styles";
56
import {theme} from "../../constants/Theme";
@@ -31,6 +32,7 @@ export default class DropdownItem extends PureComponent {
3132

3233
if (typeof onPress === "function") {
3334
onPress(index);
35+
Keyboard.dismiss();
3436
}
3537
}
3638

0 commit comments

Comments
 (0)