about summary refs log tree commit diff
path: root/src/view/screens/Search.web.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/screens/Search.web.tsx')
-rw-r--r--src/view/screens/Search.web.tsx59
1 files changed, 26 insertions, 33 deletions
diff --git a/src/view/screens/Search.web.tsx b/src/view/screens/Search.web.tsx
index 29b884493..cb094d952 100644
--- a/src/view/screens/Search.web.tsx
+++ b/src/view/screens/Search.web.tsx
@@ -1,8 +1,11 @@
 import React from 'react'
 import {StyleSheet, View} from 'react-native'
-import {useFocusEffect} from '@react-navigation/native'
+import {SearchUIModel} from 'state/models/ui/search'
+import {FoafsModel} from 'state/models/discovery/foafs'
 import {withAuthRequired} from 'view/com/auth/withAuthRequired'
-import {ScrollView} from '../com/util/Views'
+import {ScrollView} from 'view/com/util/Views'
+import {Suggestions} from 'view/com/search/Suggestions'
+import {SearchResults} from 'view/com/search/SearchResults'
 import {observer} from 'mobx-react-lite'
 import {
   NativeStackScreenProps,
@@ -10,51 +13,41 @@ import {
 } from 'lib/routes/types'
 import {useStores} from 'state/index'
 import {s} from 'lib/styles'
-import {WhoToFollow} from '../com/discover/WhoToFollow'
-import {SuggestedPosts} from '../com/discover/SuggestedPosts'
 import {usePalette} from 'lib/hooks/usePalette'
-import {useOnMainScroll} from 'lib/hooks/useOnMainScroll'
-
-const FIVE_MIN = 5 * 60 * 1e3
 
 type Props = NativeStackScreenProps<SearchTabNavigatorParams, 'Search'>
 export const SearchScreen = withAuthRequired(
-  observer(({}: Props) => {
+  observer(({route}: Props) => {
     const pal = usePalette('default')
     const store = useStores()
-    const scrollElRef = React.useRef<ScrollView>(null)
-    const onMainScroll = useOnMainScroll(store)
-    const [lastRenderTime, setRenderTime] = React.useState<number>(Date.now()) // used to trigger reloads
-
-    const onSoftReset = () => {
-      scrollElRef.current?.scrollTo({x: 0, y: 0})
-    }
-
-    useFocusEffect(
-      React.useCallback(() => {
-        const softResetSub = store.onScreenSoftReset(onSoftReset)
+    const foafs = React.useMemo<FoafsModel>(
+      () => new FoafsModel(store),
+      [store],
+    )
+    const searchUIModel = React.useMemo<SearchUIModel | undefined>(
+      () => (route.params.q ? new SearchUIModel(store) : undefined),
+      [route.params.q, store],
+    )
 
-        const now = Date.now()
-        if (now - lastRenderTime > FIVE_MIN) {
-          setRenderTime(Date.now()) // trigger reload of suggestions
-        }
-        store.shell.setMinimalShellMode(false)
+    React.useEffect(() => {
+      if (route.params.q && searchUIModel) {
+        searchUIModel.fetch(route.params.q)
+      }
+      if (!foafs.hasData) {
+        foafs.fetch()
+      }
+    }, [foafs, searchUIModel, route.params.q])
 
-        return () => {
-          softResetSub.remove()
-        }
-      }, [store, lastRenderTime, setRenderTime]),
-    )
+    if (searchUIModel) {
+      return <SearchResults model={searchUIModel} />
+    }
 
     return (
       <ScrollView
-        ref={scrollElRef}
         testID="searchScrollView"
         style={[pal.view, styles.container]}
-        onScroll={onMainScroll}
         scrollEventThrottle={100}>
-        <WhoToFollow key={`wtf-${lastRenderTime}`} />
-        <SuggestedPosts key={`sp-${lastRenderTime}`} />
+        <Suggestions foafs={foafs} />
         <View style={s.footerSpacer} />
       </ScrollView>
     )