From 96c5db3e69cbe5cd89f5b9af5251e3db30d142bb Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Thu, 2 May 2024 21:05:11 +0100 Subject: [PATCH] create keyboardverticaloffset hook (#3823) --- .../Messages/Conversation/MessagesList.tsx | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/screens/Messages/Conversation/MessagesList.tsx b/src/screens/Messages/Conversation/MessagesList.tsx index 55e1e43c..1a6145da 100644 --- a/src/screens/Messages/Conversation/MessagesList.tsx +++ b/src/screens/Messages/Conversation/MessagesList.tsx @@ -1,8 +1,10 @@ -import React, {useCallback, useRef} from 'react' +import React, {useCallback, useEffect, useRef} from 'react' import { + Dimensions, FlatList, NativeScrollEvent, NativeSyntheticEvent, + Platform, View, } from 'react-native' import {KeyboardAvoidingView} from 'react-native-keyboard-controller' @@ -11,7 +13,6 @@ import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useFocusEffect} from '@react-navigation/native' -import {isIOS} from '#/platform/detection' import {useChat} from '#/state/messages' import {ConvoItem, ConvoStatus} from '#/state/messages/convo' import {useSetMinimalShellMode} from '#/state/shell' @@ -125,11 +126,12 @@ export function MessagesList() { ) const {bottom: bottomInset} = useSafeAreaInsets() + const keyboardVerticalOffset = useKeyboardVerticalOffset() return ( ) } + +function useKeyboardVerticalOffset() { + const {top: topInset} = useSafeAreaInsets() + const [screenWindowDifference, setScreenWindowDifference] = React.useState( + () => Dimensions.get('screen').height - Dimensions.get('window').height, + ) + + useEffect(() => { + const subscription = Dimensions.addEventListener( + 'change', + ({screen, window}) => { + setScreenWindowDifference(screen.height - window.height) + }, + ) + return () => subscription.remove() + }, []) + + return Platform.select({ + ios: topInset, + android: screenWindowDifference, + default: 0, + }) +}