-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
index.ios.js
81 lines (77 loc) · 1.96 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
* External dependencies
*/
import React from 'react';
import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
import { FlatList } from 'react-native';
import { isEqual } from 'lodash';
/**
* WordPress dependencies
*/
const List = React.memo( FlatList, isEqual );
export const KeyboardAwareFlatList = ( {
extraScrollHeight,
shouldPreventAutomaticScroll,
innerRef,
autoScroll,
scrollViewStyle,
inputAccessoryViewHeight,
...listProps
} ) => (
<KeyboardAwareScrollView
style={ [ { flex: 1 }, scrollViewStyle ] }
keyboardDismissMode="none"
enableResetScrollToCoords={ false }
keyboardShouldPersistTaps="handled"
extraScrollHeight={ extraScrollHeight }
extraHeight={ 0 }
inputAccessoryViewHeight={ inputAccessoryViewHeight }
enableAutomaticScroll={ autoScroll === undefined ? false : autoScroll }
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
if ( this.scrollViewRef ) {
this.scrollViewRef.props.scrollToPosition(
0,
this.latestContentOffsetY,
true
);
}
}
}, 50 );
} }
onKeyboardWillShow={ () => {
this.keyboardWillShowIndicator = true;
} }
scrollEnabled={ listProps.scrollEnabled }
onScroll={ ( event ) => {
this.latestContentOffsetY = event.nativeEvent.contentOffset.y;
} }
>
<List { ...listProps } />
</KeyboardAwareScrollView>
);
KeyboardAwareFlatList.handleCaretVerticalPositionChange = (
scrollView,
targetId,
caretY,
previousCaretY
) => {
if ( previousCaretY ) {
//if this is not the first tap
scrollView.props.refreshScrollForField( targetId );
}
};
export default KeyboardAwareFlatList;