From 93260a60eac6ce6200ec164fb967529db35ff071 Mon Sep 17 00:00:00 2001 From: Huu Le <20178761+huult@users.noreply.github.com> Date: Sat, 28 Dec 2024 14:19:52 +0700 Subject: [PATCH] tests branch --- src/hooks/useResetComposerFocus.ts | 5 +++-- src/libs/InputFocusResetHandler/index.ios.ts | 18 ++++++++++++++++++ src/libs/InputFocusResetHandler/index.ts | 15 +++++++++++++++ src/libs/InputFocusResetHandler/types.ts | 8 ++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/libs/InputFocusResetHandler/index.ios.ts create mode 100644 src/libs/InputFocusResetHandler/index.ts create mode 100644 src/libs/InputFocusResetHandler/types.ts diff --git a/src/hooks/useResetComposerFocus.ts b/src/hooks/useResetComposerFocus.ts index 25fc578b6706..accd4f8ad577 100644 --- a/src/hooks/useResetComposerFocus.ts +++ b/src/hooks/useResetComposerFocus.ts @@ -2,6 +2,7 @@ import {useIsFocused} from '@react-navigation/native'; import type {MutableRefObject} from 'react'; import {useEffect, useRef} from 'react'; import type {TextInput} from 'react-native'; +import inputFocusResetHandler from '@libs/InputFocusResetHandler'; export default function useResetComposerFocus(inputRef: MutableRefObject) { const isFocused = useIsFocused(); @@ -11,8 +12,8 @@ export default function useResetComposerFocus(inputRef: MutableRefObject { + if (!inputRef.current || !shouldResetFocusRef.current) { + return; + } + + InteractionManager.runAfterInteractions(() => { + inputRef?.current?.focus(); + const resetFocusRef = shouldResetFocusRef; + resetFocusRef.current = false; + }); + }, +}; + +export default inputFocusResetHandler; diff --git a/src/libs/InputFocusResetHandler/index.ts b/src/libs/InputFocusResetHandler/index.ts new file mode 100644 index 000000000000..9eed0cbd58a7 --- /dev/null +++ b/src/libs/InputFocusResetHandler/index.ts @@ -0,0 +1,15 @@ +import type InputFocusResetHandler from './types'; + +const inputFocusResetHandler: InputFocusResetHandler = { + handleInputFocusReset: (inputRef, shouldResetFocusRef) => { + if (!inputRef.current || !shouldResetFocusRef.current) { + return; + } + + inputRef?.current?.focus(); + const resetFocusRef = shouldResetFocusRef; + resetFocusRef.current = false; + }, +}; + +export default inputFocusResetHandler; diff --git a/src/libs/InputFocusResetHandler/types.ts b/src/libs/InputFocusResetHandler/types.ts new file mode 100644 index 000000000000..263f2d86e860 --- /dev/null +++ b/src/libs/InputFocusResetHandler/types.ts @@ -0,0 +1,8 @@ +import type {MutableRefObject} from 'react'; +import type {TextInput} from 'react-native'; + +type InputFocusResetHandler = { + handleInputFocusReset: (inputRef: MutableRefObject, shouldResetFocusRef: React.MutableRefObject) => void; +}; + +export default InputFocusResetHandler;