From f49d73dd00462528bd2ff73fd51746756c12fe9d Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Mon, 22 Apr 2024 22:18:39 +0100 Subject: [GIFs] Reset scroll on query change (#3642) * scroll list to top on query change * dismiss keyboard on swipe list * don't need an effect --- src/components/dialogs/GifSelect.tsx | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/components/dialogs/GifSelect.tsx') diff --git a/src/components/dialogs/GifSelect.tsx b/src/components/dialogs/GifSelect.tsx index ad4fbeade..a8fe016d1 100644 --- a/src/components/dialogs/GifSelect.tsx +++ b/src/components/dialogs/GifSelect.tsx @@ -1,6 +1,7 @@ import React, {useCallback, useMemo, useRef, useState} from 'react' -import {TextInput, View} from 'react-native' +import {Keyboard, TextInput, View} from 'react-native' import {Image} from 'expo-image' +import {BottomSheetFlatListMethods} from '@discord/bottom-sheet' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' @@ -82,7 +83,8 @@ function GifList({ const {_} = useLingui() const t = useTheme() const {gtMobile} = useBreakpoints() - const ref = useRef(null) + const textInputRef = useRef(null) + const listRef = useRef(null) const [undeferredSearch, setSearch] = useState('') const search = useThrottledValue(undeferredSearch, 500) @@ -133,7 +135,7 @@ function GifList({ const onGoBack = useCallback(() => { if (isSearching) { // clear the input and reset the state - ref.current?.clear() + textInputRef.current?.clear() setSearch('') } else { control.close() @@ -180,10 +182,13 @@ function GifList({ { + setSearch(text) + listRef.current?.scrollToOffset({offset: 0, animated: false}) + }} returnKeyType="search" clearButtonMode="while-editing" - inputRef={ref} + inputRef={textInputRef} maxLength={50} onKeyPress={({nativeEvent}) => { if (nativeEvent.key === 'Escape') { @@ -200,6 +205,7 @@ function GifList({ <> {gtMobile && } item.id} // @ts-expect-error web only style={isWeb && {minHeight: '100vh'}} + onScrollBeginDrag={() => Keyboard.dismiss()} ListFooterComponent={ hasData ? (