@@ -2,7 +2,8 @@ import type {ListRenderItem} from '@shopify/flash-list';
2
2
import lodashDebounce from 'lodash/debounce' ;
3
3
import React , { useCallback } from 'react' ;
4
4
import type { ForwardedRef } from 'react' ;
5
- import { View } from 'react-native' ;
5
+ import { InteractionManager , View } from 'react-native' ;
6
+ import type { Emoji } from '@assets/emojis/types' ;
6
7
import EmojiPickerMenuItem from '@components/EmojiPicker/EmojiPickerMenuItem' ;
7
8
import Text from '@components/Text' ;
8
9
import TextInput from '@components/TextInput' ;
@@ -43,25 +44,28 @@ function EmojiPickerMenu({onEmojiSelected, activeEmoji}: EmojiPickerMenuProps, r
43
44
} = useEmojiPickerMenu ( ) ;
44
45
const StyleUtils = useStyleUtils ( ) ;
45
46
47
+ const updateEmojiList = ( emojiData : EmojiUtils . EmojiPickerList | Emoji [ ] , headerData : number [ ] = [ ] ) => {
48
+ setFilteredEmojis ( emojiData ) ;
49
+ setHeaderIndices ( headerData ) ;
50
+
51
+ InteractionManager . runAfterInteractions ( ( ) => {
52
+ requestAnimationFrame ( ( ) => {
53
+ emojiListRef . current ?. scrollToOffset ( { offset : 0 , animated : false } ) ;
54
+ } ) ;
55
+ } ) ;
56
+ } ;
57
+
46
58
/**
47
59
* Filter the entire list of emojis to only emojis that have the search term in their keywords
48
60
*/
49
61
const filterEmojis = lodashDebounce ( ( searchTerm : string ) => {
50
62
const [ normalizedSearchTerm , newFilteredEmojiList ] = suggestEmojis ( searchTerm ) ;
51
63
52
- if ( emojiListRef . current ) {
53
- emojiListRef . current . scrollToOffset ( { offset : 0 , animated : false } ) ;
54
- }
55
-
56
64
if ( normalizedSearchTerm === '' ) {
57
- setFilteredEmojis ( allEmojis ) ;
58
- setHeaderIndices ( headerRowIndices ) ;
59
-
60
- return ;
65
+ updateEmojiList ( allEmojis , headerRowIndices ) ;
66
+ } else {
67
+ updateEmojiList ( newFilteredEmojiList ?? [ ] , [ ] ) ;
61
68
}
62
-
63
- setFilteredEmojis ( newFilteredEmojiList ?? [ ] ) ;
64
- setHeaderIndices ( [ ] ) ;
65
69
} , 300 ) ;
66
70
67
71
const scrollToHeader = ( headerIndex : number ) => {
0 commit comments