@@ -45,13 +45,16 @@ export const useFocusAfterEmojiDismiss = (
4545
4646 inputRef . current ?. blur ( ) ;
4747
48- const handleDelayedFocus = ( ) => {
49- focusInput ( ) ;
50- setIsManuallyFocusingAfterEmojiDismiss ( false ) ;
51- focusTimeoutRef . current = null ;
52- } ;
48+ // Use requestAnimationFrame to ensure state updates have been applied
49+ requestAnimationFrame ( ( ) => {
50+ const handleDelayedFocus = ( ) => {
51+ focusInput ( ) ;
52+ setIsManuallyFocusingAfterEmojiDismiss ( false ) ;
53+ focusTimeoutRef . current = null ;
54+ } ;
5355
54- focusTimeoutRef . current = setTimeout ( handleDelayedFocus , 200 ) ;
56+ focusTimeoutRef . current = setTimeout ( handleDelayedFocus , 200 ) ;
57+ } ) ;
5558
5659 return ( ) => {
5760 if ( focusTimeoutRef . current ) {
@@ -80,6 +83,20 @@ export const useFocusAfterEmojiDismiss = (
8083
8184 setIsEmojiSearchFocused ( false ) ;
8285 setShowInputAccessoryView ( false ) ;
86+
87+ if ( focusTimeoutRef . current ) {
88+ clearTimeout ( focusTimeoutRef . current ) ;
89+ }
90+
91+ inputRef . current ?. blur ( ) ;
92+
93+ // Schedule focus after emoji picker closes
94+ focusTimeoutRef . current = setTimeout ( ( ) => {
95+ focusInput ( ) ;
96+ setIsManuallyFocusingAfterEmojiDismiss ( false ) ;
97+ isDismissingEmojiPicker . current = false ;
98+ focusTimeoutRef . current = null ;
99+ } , 200 ) ;
83100 } else {
84101 focusInput ( ) ;
85102 }
@@ -91,6 +108,7 @@ export const useFocusAfterEmojiDismiss = (
91108 keyboardTranslateY ,
92109 isTransitioningFromCustomView ,
93110 setIsEmojiSearchFocused ,
111+ inputRef ,
94112 focusInput ,
95113 ] ) ;
96114
0 commit comments