-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
index.ios.js
54 lines (50 loc) · 1.5 KB
/
index.ios.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* External dependencies
*/
import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
import { FlatList } from 'react-native';
export const KeyboardAwareFlatList = ( {
extraScrollHeight,
shouldPreventAutomaticScroll,
innerRef,
...listProps
} ) => (
<KeyboardAwareScrollView
style={ { flex: 1 } }
keyboardDismissMode="none"
enableResetScrollToCoords={ false }
keyboardShouldPersistTaps="handled"
extraScrollHeight={ extraScrollHeight }
extraHeight={ 0 }
innerRef={ ( ref ) => {
this.scrollViewRef = ref;
innerRef( ref );
} }
onKeyboardWillHide={ () => {
this.keyboardWillShowIndicator = false;
} }
onKeyboardDidHide={ () => {
setTimeout( () => {
if ( ! this.keyboardWillShowIndicator &&
this.latestContentOffsetY !== undefined &&
! shouldPreventAutomaticScroll() ) {
// Reset the content position if keyboard is still closed
this.scrollViewRef.props.scrollToPosition( 0, this.latestContentOffsetY, true );
}
}, 50 );
} }
onKeyboardWillShow={ () => {
this.keyboardWillShowIndicator = true;
} }
onScroll={ ( event ) => {
this.latestContentOffsetY = event.nativeEvent.contentOffset.y;
} } >
<FlatList { ...listProps } />
</KeyboardAwareScrollView>
);
KeyboardAwareFlatList.handleCaretVerticalPositionChange = ( scrollView, targetId, caretY, previousCaretY ) => {
if ( previousCaretY ) { //if this is not the first tap
scrollView.props.refreshScrollForField( targetId );
}
};
export default KeyboardAwareFlatList;