From 23a22f561a758fdfc6cf57531acfd3d50348f99b Mon Sep 17 00:00:00 2001 From: Jon Tzeng Date: Tue, 13 Jan 2026 10:41:41 -0800 Subject: [PATCH 1/2] Cleanup `SearchFooter` - Fix misleading reinvented prop names - Remove styled components --- src/components/scenes/CoinRankingScene.tsx | 4 +- src/components/scenes/GiftCardMarketScene.tsx | 4 +- src/components/scenes/Staking/EarnScene.tsx | 4 +- .../scenes/TransactionListScene.tsx | 4 +- src/components/scenes/WalletDetailsScene.tsx | 4 +- src/components/scenes/WalletListScene.tsx | 4 +- src/components/themed/SearchFooter.tsx | 53 ++++++++----------- 7 files changed, 34 insertions(+), 43 deletions(-) diff --git a/src/components/scenes/CoinRankingScene.tsx b/src/components/scenes/CoinRankingScene.tsx index 7ff03d39020..d310c326ec0 100644 --- a/src/components/scenes/CoinRankingScene.tsx +++ b/src/components/scenes/CoinRankingScene.tsx @@ -310,8 +310,8 @@ const CoinRankingComponent: React.FC = props => { isSearching={isSearching} searchText={searchText} sceneWrapperInfo={sceneWrapperInfo} - onStartSearching={handleStartSearching} - onDoneSearching={handleDoneSearching} + onFocus={handleStartSearching} + onCancel={handleDoneSearching} onChangeText={handleChangeText} onLayoutHeight={handleFooterLayoutHeight} /> diff --git a/src/components/scenes/GiftCardMarketScene.tsx b/src/components/scenes/GiftCardMarketScene.tsx index 0a2e803bef4..55547d94d2e 100644 --- a/src/components/scenes/GiftCardMarketScene.tsx +++ b/src/components/scenes/GiftCardMarketScene.tsx @@ -430,8 +430,8 @@ export const GiftCardMarketScene: React.FC = props => { isSearching={isSearching} searchText={searchText} sceneWrapperInfo={sceneWrapperInfo} - onStartSearching={handleStartSearching} - onDoneSearching={handleDoneSearching} + onFocus={handleStartSearching} + onCancel={handleDoneSearching} onChangeText={handleChangeText} onLayoutHeight={handleFooterLayoutHeight} /> diff --git a/src/components/scenes/Staking/EarnScene.tsx b/src/components/scenes/Staking/EarnScene.tsx index 4a4c2e9f39d..4082a2d7720 100644 --- a/src/components/scenes/Staking/EarnScene.tsx +++ b/src/components/scenes/Staking/EarnScene.tsx @@ -456,8 +456,8 @@ export const EarnScene = (props: Props) => { isSearching={isSearching} searchText={searchText} sceneWrapperInfo={sceneWrapperInfo} - onStartSearching={handleStartSearching} - onDoneSearching={handleDoneSearching} + onFocus={handleStartSearching} + onCancel={handleDoneSearching} onChangeText={handleChangeText} onLayoutHeight={handleFooterLayoutHeight} /> diff --git a/src/components/scenes/TransactionListScene.tsx b/src/components/scenes/TransactionListScene.tsx index 35b3c3e02fd..4b3d9143702 100644 --- a/src/components/scenes/TransactionListScene.tsx +++ b/src/components/scenes/TransactionListScene.tsx @@ -257,8 +257,8 @@ const TransactionListComponent: React.FC = props => { searchText={searchText} noBackground sceneWrapperInfo={sceneWrapperInfo} - onStartSearching={handleStartSearching} - onDoneSearching={handleDoneSearching} + onFocus={handleStartSearching} + onCancel={handleDoneSearching} onChangeText={handleChangeText} onLayoutHeight={handleFooterLayoutHeight} /> diff --git a/src/components/scenes/WalletDetailsScene.tsx b/src/components/scenes/WalletDetailsScene.tsx index a7dd90ab8c0..273867ddc02 100644 --- a/src/components/scenes/WalletDetailsScene.tsx +++ b/src/components/scenes/WalletDetailsScene.tsx @@ -325,8 +325,8 @@ const WalletDetailsComponent: React.FC = (props: Props) => { searchText={searchText} noBackground sceneWrapperInfo={sceneWrapperInfo} - onStartSearching={handleStartSearching} - onDoneSearching={handleDoneSearching} + onFocus={handleStartSearching} + onCancel={handleDoneSearching} onChangeText={handleChangeText} onLayoutHeight={handleFooterLayoutHeight} /> diff --git a/src/components/scenes/WalletListScene.tsx b/src/components/scenes/WalletListScene.tsx index 47d2b00601a..1ba9fb175b5 100644 --- a/src/components/scenes/WalletListScene.tsx +++ b/src/components/scenes/WalletListScene.tsx @@ -227,8 +227,8 @@ export const WalletListScene: React.FC = props => { searchText={searchText} noBackground sceneWrapperInfo={sceneWrapperInfo} - onStartSearching={handleStartSearching} - onDoneSearching={handleDoneSearching} + onFocus={handleStartSearching} + onCancel={handleDoneSearching} onChangeText={handleChangeText} onLayoutHeight={handleFooterLayoutHeight} /> diff --git a/src/components/themed/SearchFooter.tsx b/src/components/themed/SearchFooter.tsx index 6197a44e8d1..fa6e378b89e 100644 --- a/src/components/themed/SearchFooter.tsx +++ b/src/components/themed/SearchFooter.tsx @@ -4,7 +4,6 @@ import { useHandler } from '../../hooks/useHandler' import { useSceneFooterState } from '../../state/SceneFooterState' import type { SceneWrapperInfo } from '../common/SceneWrapper' import { SearchIconAnimated } from '../icons/ThemedIcons' -import { Space } from '../layout/Space' import { SceneFooterWrapper } from './SceneFooterWrapper' import { SimpleTextInput, type SimpleTextInputRef } from './SimpleTextInput' @@ -21,12 +20,12 @@ interface SearchFooterProps { sceneWrapperInfo?: SceneWrapperInfo onChangeText: (value: string) => void - onDoneSearching: () => void + onCancel: () => void onLayoutHeight: (height: number) => void - onStartSearching: () => void + onFocus: () => void } -export const SearchFooter = (props: SearchFooterProps) => { +export const SearchFooter: React.FC = props => { const { name, placeholder, @@ -36,9 +35,9 @@ export const SearchFooter = (props: SearchFooterProps) => { sceneWrapperInfo, onChangeText, - onDoneSearching, + onCancel, onLayoutHeight, - onStartSearching + onFocus } = props const textInputRef = React.useRef(null) @@ -51,18 +50,10 @@ export const SearchFooter = (props: SearchFooterProps) => { // Handlers // - const handleSearchChangeText = useHandler((text: string) => { + const handleChangeText = useHandler((text: string) => { onChangeText(text) }) - const handleSearchDone = useHandler(() => { - onDoneSearching() - }) - - const handleSearchFocus = useHandler(() => { - onStartSearching() - }) - const handleFooterLayoutHeight = useHandler((height: number) => { setFooterHeight(height) onLayoutHeight(height) @@ -74,10 +65,10 @@ export const SearchFooter = (props: SearchFooterProps) => { useEffect(() => { if (setKeepOpen != null) setKeepOpen(isSearching) - if (isSearching && textInputRef.current) { + if (isSearching && textInputRef.current != null) { textInputRef.current.focus() } - if (!isSearching && textInputRef.current) { + if (!isSearching && textInputRef.current != null) { textInputRef.current.blur() } }, [isSearching, setKeepOpen]) @@ -93,20 +84,20 @@ export const SearchFooter = (props: SearchFooterProps) => { sceneWrapperInfo={sceneWrapperInfo} onLayoutHeight={handleFooterLayoutHeight} > - - - + ) } From 93ec43c31784e3fe561e7aa8820aee2360335a76 Mon Sep 17 00:00:00 2001 From: Jon Tzeng Date: Tue, 13 Jan 2026 10:42:58 -0800 Subject: [PATCH 2/2] Fix search behavior - Dismiss keyboard when search is submitted - Disable auto-correct for search input --- CHANGELOG.md | 2 ++ src/components/themed/SearchFooter.tsx | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3eb93373b77..60b8fe502f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ - changed: Optimize login performance. - changed: Update Monero LWS server name to "Edge LWS" - fixed: ramps: Various Infinite UI/UX issues +- fixed: Search keyboard not dismissing when submitting search +- fixed: Auto-correct not disabled for search input ## 4.41.1 (2025-12-29) diff --git a/src/components/themed/SearchFooter.tsx b/src/components/themed/SearchFooter.tsx index fa6e378b89e..bf3a8c9603e 100644 --- a/src/components/themed/SearchFooter.tsx +++ b/src/components/themed/SearchFooter.tsx @@ -1,4 +1,5 @@ import React, { useEffect } from 'react' +import { Keyboard } from 'react-native' import { useHandler } from '../../hooks/useHandler' import { useSceneFooterState } from '../../state/SceneFooterState' @@ -59,6 +60,10 @@ export const SearchFooter: React.FC = props => { onLayoutHeight(height) }) + const handleSubmitEditing = useHandler(() => { + Keyboard.dismiss() + }) + // // Effects // @@ -92,11 +97,13 @@ export const SearchFooter: React.FC = props => { active={isSearching} onCancel={onCancel} onFocus={onFocus} + onSubmitEditing={handleSubmitEditing} ref={textInputRef} iconComponent={SearchIconAnimated} scale={footerHeight == null ? undefined : footerOpenRatio} horizontalRem={1} verticalRem={0.5} + autoCorrect={false} /> )