diff options
Diffstat (limited to 'src/view/screens/Search.web.tsx')
-rw-r--r-- | src/view/screens/Search.web.tsx | 59 |
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> ) |