diff --git a/app/screens/home/search/search.test.tsx b/app/screens/home/search/search.test.tsx index f0f493ad3..f88a3adf4 100644 --- a/app/screens/home/search/search.test.tsx +++ b/app/screens/home/search/search.test.tsx @@ -223,6 +223,7 @@ describe('SearchScreen', () => { await waitFor(() => { const searchInput = getByTestId('navigation.header.search_bar.search.input'); expect(searchInput.props.value).toBe('#hashtag'); + expect(searchPosts).toHaveBeenCalled(); }); const searchInput = getByTestId('navigation.header.search_bar.search.input'); diff --git a/app/screens/home/search/search.tsx b/app/screens/home/search/search.tsx index bf89b9a34..ddb707323 100644 --- a/app/screens/home/search/search.tsx +++ b/app/screens/home/search/search.tsx @@ -371,12 +371,19 @@ const SearchScreen = ({teamId, teams, crossTeamSearchEnabled}: Props) => { }, [unlock, onSnapWithTimeout]); useEffect(() => { - if (searchTerm && searchTerm !== processedSearchTermRef.current) { - processedSearchTermRef.current = searchTerm; - clearInputs(); - setSearchValue(searchTerm); - handleSearch(searchTeamId, searchTerm); + if (!searchTerm || searchTerm === processedSearchTermRef.current) { + return undefined; } + + processedSearchTermRef.current = searchTerm; + clearInputs(); + setSearchValue(searchTerm); + + const raf = requestAnimationFrame(() => { + handleSearch(searchTeamId, searchTerm); + }); + + return () => cancelAnimationFrame(raf); }, [handleSearch, clearInputs, searchTeamId, searchTerm]); useDidUpdate(() => {