From a4e0631323210e728535788c8db655fc8e88e573 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 23 Apr 2024 16:28:56 -0500 Subject: [PATCH] Handle no feeds on Feeds screen --- src/screens/Feeds/NoSavedFeeds.tsx | 45 ++++++++++++++++++++++++++++++ src/view/screens/Feeds.tsx | 25 ++++++++++------- 2 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 src/screens/Feeds/NoSavedFeeds.tsx diff --git a/src/screens/Feeds/NoSavedFeeds.tsx b/src/screens/Feeds/NoSavedFeeds.tsx new file mode 100644 index 0000000000..2dbc6b5d99 --- /dev/null +++ b/src/screens/Feeds/NoSavedFeeds.tsx @@ -0,0 +1,45 @@ +import React from 'react' +import {View} from 'react-native' +import {msg, Trans} from '@lingui/macro' +import {useLingui} from '@lingui/react' + +import {RECOMMENDED_SAVED_FEEDS} from '#/lib/constants' +import {useSetSaveFeedsMutation} from '#/state/queries/preferences' +import {atoms as a, useTheme} from '#/alf' +import {Button, ButtonIcon, ButtonText} from '#/components/Button' +import {PlusLarge_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus' +import {Text} from '#/components/Typography' + +export function NoSavedFeeds() { + const t = useTheme() + const {_} = useLingui() + const {isPending, mutateAsync: setSavedFeeds} = useSetSaveFeedsMutation() + + const addRecommendedFeeds = React.useCallback(async () => { + await setSavedFeeds(RECOMMENDED_SAVED_FEEDS) + }, [setSavedFeeds]) + + return ( + + + + Looks like you haven't saved any feeds! Use our recommendations or + browse more below. + + + + + + ) +} diff --git a/src/view/screens/Feeds.tsx b/src/view/screens/Feeds.tsx index 820753f17f..a1e5c0229a 100644 --- a/src/view/screens/Feeds.tsx +++ b/src/view/screens/Feeds.tsx @@ -45,6 +45,7 @@ import { import {Text} from 'view/com/util/text/Text' import {UserAvatar} from 'view/com/util/UserAvatar' import {ViewHeader} from 'view/com/util/ViewHeader' +import {NoSavedFeeds} from '#/screens/Feeds/NoSavedFeeds' import {atoms as a, useTheme} from '#/alf' import {IconCircle} from '#/components/IconCircle' import {FilterTimeline_Stroke2_Corner0_Rounded as FilterTimeline} from '#/components/icons/FilterTimeline' @@ -232,7 +233,7 @@ export function FeedsScreen(_props: Props) { error: cleanError(preferencesError.toString()), }) } else { - if (isPreferencesLoading || !preferences?.savedFeeds?.length) { + if (isPreferencesLoading || !preferences?.savedFeeds) { slices.push({ key: 'savedFeedsLoading', type: 'savedFeedsLoading', @@ -264,6 +265,11 @@ export function FeedsScreen(_props: Props) { savedFeedConfig: feed, })), ) + } else { + slices.push({ + key: 'savedFeedNoResults', + type: 'savedFeedNoResults', + }) } } } @@ -476,19 +482,19 @@ export function FeedsScreen(_props: Props) { )} - {preferences?.savedFeeds?.length !== 0 && } + ) } else if (item.type === 'savedFeedNoResults') { return ( - - You don't have any saved feeds! - + style={[ + pal.border, + { + borderBottomWidth: 1, + }, + ]}> + ) } else if (item.type === 'savedFeed') { @@ -545,7 +551,6 @@ export function FeedsScreen(_props: Props) { pal.icon, pal.textLight, _, - preferences?.savedFeeds?.length, query, onChangeQuery, onPressCancelSearch,