diff options
Diffstat (limited to 'src/view/screens/DiscoverFeeds.tsx')
-rw-r--r-- | src/view/screens/DiscoverFeeds.tsx | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/view/screens/DiscoverFeeds.tsx b/src/view/screens/DiscoverFeeds.tsx index b6a6744db..e7b685ebc 100644 --- a/src/view/screens/DiscoverFeeds.tsx +++ b/src/view/screens/DiscoverFeeds.tsx @@ -14,6 +14,8 @@ import {isDesktopWeb} from 'platform/detection' import {usePalette} from 'lib/hooks/usePalette' import {s} from 'lib/styles' import {CustomFeedModel} from 'state/models/feeds/custom-feed' +import {HeaderWithInput} from 'view/com/search/HeaderWithInput' +import debounce from 'lodash.debounce' type Props = NativeStackScreenProps<CommonNavigatorParams, 'DiscoverFeeds'> export const DiscoverFeedsScreen = withAuthRequired( @@ -22,6 +24,37 @@ export const DiscoverFeedsScreen = withAuthRequired( const pal = usePalette('default') const feeds = React.useMemo(() => new FeedsDiscoveryModel(store), [store]) + // search stuff + const [isInputFocused, setIsInputFocused] = React.useState<boolean>(false) + const [query, setQuery] = React.useState<string>('') + const debouncedSearchFeeds = React.useMemo( + () => debounce(() => feeds.search(query), 200), // debouce for 200 ms + [feeds, query], + ) + const onChangeQuery = React.useCallback( + (text: string) => { + setQuery(text) + if (text.length > 1) { + debouncedSearchFeeds() + } else { + feeds.refresh() + } + }, + [debouncedSearchFeeds, feeds], + ) + const onPressClearQuery = React.useCallback(() => { + setQuery('') + feeds.refresh() + }, [feeds]) + const onPressCancelSearch = React.useCallback(() => { + setIsInputFocused(false) + setQuery('') + feeds.refresh() + }, [feeds]) + const onSubmitQuery = React.useCallback(() => { + feeds.search(query) + }, [feeds, query]) + useFocusEffect( React.useCallback(() => { store.shell.setMinimalShellMode(false) @@ -68,6 +101,16 @@ export const DiscoverFeedsScreen = withAuthRequired( <CenteredView style={[styles.container, pal.view]}> <View style={[isDesktopWeb && styles.containerDesktop, pal.border]}> <ViewHeader title="Discover Feeds" showOnDesktop /> + <HeaderWithInput + isInputFocused={isInputFocused} + query={query} + setIsInputFocused={setIsInputFocused} + onChangeQuery={onChangeQuery} + onPressClearQuery={onPressClearQuery} + onPressCancelSearch={onPressCancelSearch} + onSubmitQuery={onSubmitQuery} + showMenu={false} + /> </View> <FlatList style={[!isDesktopWeb && s.flex1]} |