diff options
Diffstat (limited to 'src/view/screens/Search/Search.tsx')
-rw-r--r-- | src/view/screens/Search/Search.tsx | 58 |
1 files changed, 47 insertions, 11 deletions
diff --git a/src/view/screens/Search/Search.tsx b/src/view/screens/Search/Search.tsx index 0f24252ce..3b06992fc 100644 --- a/src/view/screens/Search/Search.tsx +++ b/src/view/screens/Search/Search.tsx @@ -195,9 +195,11 @@ type SearchResultSlice = function SearchScreenPostResults({ query, sort, + active, }: { query: string sort?: 'top' | 'latest' + active: boolean }) { const {_} = useLingui() const {currentAccount} = useSession() @@ -216,7 +218,7 @@ function SearchScreenPostResults({ fetchNextPage, isFetchingNextPage, hasNextPage, - } = useSearchPostsQuery({query: augmentedQuery, sort}) + } = useSearchPostsQuery({query: augmentedQuery, sort, enabled: active}) const onPullToRefresh = React.useCallback(async () => { setIsPTR(true) @@ -297,9 +299,19 @@ function SearchScreenPostResults({ ) } -function SearchScreenUserResults({query}: {query: string}) { +function SearchScreenUserResults({ + query, + active, +}: { + query: string + active: boolean +}) { const {_} = useLingui() - const {data: results, isFetched} = useActorSearch(query) + + const {data: results, isFetched} = useActorSearch({ + query, + enabled: active, + }) return isFetched && results ? ( <> @@ -335,6 +347,7 @@ export function SearchScreenInner({ const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled() const {hasSession} = useSession() const {isDesktop} = useWebMediaQueries() + const [activeTab, setActiveTab] = React.useState(0) const {_} = useLingui() const isNewSearch = useGate('new_search') @@ -343,6 +356,7 @@ export function SearchScreenInner({ (index: number) => { setMinimalShellMode(false) setDrawerSwipeDisabled(index > 0) + setActiveTab(index) }, [setDrawerSwipeDisabled, setMinimalShellMode], ) @@ -354,22 +368,38 @@ export function SearchScreenInner({ return [ { title: _(msg`Top`), - component: <SearchScreenPostResults query={query} sort="top" />, + component: ( + <SearchScreenPostResults + query={query} + sort="top" + active={activeTab === 0} + /> + ), }, { title: _(msg`Latest`), - component: <SearchScreenPostResults query={query} sort="latest" />, + component: ( + <SearchScreenPostResults + query={query} + sort="latest" + active={activeTab === 1} + /> + ), }, { title: _(msg`People`), - component: <SearchScreenUserResults query={query} />, + component: ( + <SearchScreenUserResults query={query} active={activeTab === 2} /> + ), }, ] } else { return [ { title: _(msg`People`), - component: <SearchScreenUserResults query={query} />, + component: ( + <SearchScreenUserResults query={query} active={activeTab === 0} /> + ), }, ] } @@ -378,23 +408,29 @@ export function SearchScreenInner({ return [ { title: _(msg`Posts`), - component: <SearchScreenPostResults query={query} />, + component: ( + <SearchScreenPostResults query={query} active={activeTab === 0} /> + ), }, { title: _(msg`Users`), - component: <SearchScreenUserResults query={query} />, + component: ( + <SearchScreenUserResults query={query} active={activeTab === 1} /> + ), }, ] } else { return [ { title: _(msg`Users`), - component: <SearchScreenUserResults query={query} />, + component: ( + <SearchScreenUserResults query={query} active={activeTab === 0} /> + ), }, ] } } - }, [hasSession, isNewSearch, _, query]) + }, [hasSession, isNewSearch, _, query, activeTab]) if (hasSession) { return query ? ( |