about summary refs log tree commit diff
path: root/src/view/screens/Search/Search.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/screens/Search/Search.tsx')
-rw-r--r--src/view/screens/Search/Search.tsx58
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 ? (