11import { useSelector } from '@legendapp/state/react' ;
2+ import { useKeyboard } from '@react-native-community/hooks' ;
23import { useTranslation } from '@ronas-it/react-native-common-modules/i18n' ;
34import dayjs from 'dayjs' ;
45import { delay } from 'lodash-es' ;
5- import React , { ReactElement , useEffect , useState } from 'react' ;
6+ import React , { Fragment , ReactElement , useEffect , useState } from 'react' ;
67import { useForm } from 'react-hook-form' ;
78import { InteractionManager } from 'react-native' ;
89import { EditMessageInput } from '@open-webui-react-native/mobile/chat/features/edit-message-input' ;
@@ -11,8 +12,9 @@ import { useEditMessage } from '@open-webui-react-native/mobile/chat/features/us
1112import { useSendMessage } from '@open-webui-react-native/mobile/chat/features/use-send-message' ;
1213import { useAttachedFiles } from '@open-webui-react-native/mobile/shared/features/use-attached-files' ;
1314import { cn } from '@open-webui-react-native/mobile/shared/ui/styles' ;
14- import { AppKeyboardControllerView , AppSpinner , View } from '@open-webui-react-native/mobile/shared/ui/ui-kit' ;
15+ import { AppSpinner , View } from '@open-webui-react-native/mobile/shared/ui/ui-kit' ;
1516import { FormValues } from '@open-webui-react-native/mobile/shared/utils/form' ;
17+ import { useBottomInset } from '@open-webui-react-native/mobile/shared/utils/use-bottom-inset' ;
1618import { chatApi , ChatGenerationOption , chatQueriesKeys } from '@open-webui-react-native/shared/data-access/api' ;
1719import { Role } from '@open-webui-react-native/shared/data-access/common' ;
1820import { useSubscribeToQueryCache } from '@open-webui-react-native/shared/data-access/query-client' ;
@@ -32,6 +34,8 @@ interface ChatProps {
3234
3335export function Chat ( { chatId, selectedModelId, isNewChat, resetToChatsList } : ChatProps ) : ReactElement {
3436 const translate = useTranslation ( 'CHAT.CHAT' ) ;
37+ const bottomInset = useBottomInset ( ) ;
38+ const { keyboardShown } = useKeyboard ( ) ;
3539
3640 const [ isInputFocusing , setIsInputFocusing ] = useState ( false ) ; //NOTE: Needs to avoid ChatBottomButton jumping when auto-scrolling after focus
3741
@@ -126,7 +130,7 @@ export function Chat({ chatId, selectedModelId, isNewChat, resetToChatsList }: C
126130 } , [ isNewChat , isSuccess , chatId ] ) ;
127131
128132 return (
129- < AppKeyboardControllerView >
133+ < Fragment >
130134 { shouldHideContent && (
131135 < View className = 'absolute w-full h-full z-50 bg-background-primary items-center justify-center' >
132136 < AppSpinner />
@@ -148,7 +152,9 @@ export function Chat({ chatId, selectedModelId, isNewChat, resetToChatsList }: C
148152 />
149153 </ React . Suspense >
150154 ) }
151- < View className = { cn ( 'pb-safe android:pb-16 pt-8 px-16' , shouldHideContent && 'opacity-0' ) } >
155+ < View
156+ style = { ! keyboardShown && { paddingBottom : bottomInset } }
157+ className = { cn ( 'pt-8 px-16' , shouldHideContent && 'opacity-0' ) } >
152158 { editingMessageId ? (
153159 < EditMessageInput
154160 control = { editMessageControl }
@@ -179,6 +185,6 @@ export function Chat({ chatId, selectedModelId, isNewChat, resetToChatsList }: C
179185 />
180186 ) }
181187 </ View >
182- </ AppKeyboardControllerView >
188+ </ Fragment >
183189 ) ;
184190}
0 commit comments