From 9a59525b7313380507173984fd94fc92cb8c8709 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Mon, 11 Dec 2023 16:48:22 -0600 Subject: [PATCH] Revise FeedSourceCard load state to allow deletion for failures (#2172) * Revise FeedSourceCard load state to allow deletion for failures * Translate * Remove test error feed * Fix missing uri param --------- Co-authored-by: Paul Frazee --- src/locale/locales/en/messages.po | 21 +++--- src/locale/locales/hi/messages.po | 21 +++--- src/view/com/feeds/FeedSourceCard.tsx | 91 ++++++++++++++++++++---- src/view/com/feeds/ProfileFeedgens.tsx | 1 + src/view/com/util/LoadingPlaceholder.tsx | 4 +- src/view/screens/SavedFeeds.tsx | 10 +-- 6 files changed, 107 insertions(+), 41 deletions(-) diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 38c3118b73..1b9c0012ad 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -744,7 +744,7 @@ msgid "Edit list details" msgstr "" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:85 +#: src/view/screens/SavedFeeds.tsx:84 msgid "Edit My Feeds" msgstr "" @@ -858,7 +858,7 @@ msgstr "" msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." msgstr "" -#: src/view/screens/SavedFeeds.tsx:156 +#: src/view/screens/SavedFeeds.tsx:164 msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." msgstr "" @@ -1536,7 +1536,7 @@ msgstr "" msgid "Pictures meant for adults." msgstr "" -#: src/view/screens/SavedFeeds.tsx:89 +#: src/view/screens/SavedFeeds.tsx:88 msgid "Pinned Feeds" msgstr "" @@ -1676,7 +1676,7 @@ msgstr "" msgid "Remove" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:108 +#: src/view/com/feeds/FeedSourceCard.tsx:106 msgid "Remove {0} from my feeds?" msgstr "" @@ -1688,7 +1688,8 @@ msgstr "" msgid "Remove feed" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:107 +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 #: src/view/screens/ProfileFeed.tsx:280 msgid "Remove from my feeds" msgstr "" @@ -1701,6 +1702,10 @@ msgstr "" msgid "Remove image preview" msgstr "" +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:131 msgid "Remove this feed from your saved feeds?" msgstr "" @@ -1840,7 +1845,7 @@ msgstr "" msgid "Save image crop" msgstr "" -#: src/view/screens/SavedFeeds.tsx:122 +#: src/view/screens/SavedFeeds.tsx:130 msgid "Saved Feeds" msgstr "" @@ -2427,7 +2432,7 @@ msgstr "" msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer." msgstr "" -#: src/view/screens/SavedFeeds.tsx:102 +#: src/view/screens/SavedFeeds.tsx:110 msgid "You don't have any pinned feeds." msgstr "" @@ -2435,7 +2440,7 @@ msgstr "" msgid "You don't have any saved feeds!" msgstr "" -#: src/view/screens/SavedFeeds.tsx:135 +#: src/view/screens/SavedFeeds.tsx:143 msgid "You don't have any saved feeds." msgstr "" diff --git a/src/locale/locales/hi/messages.po b/src/locale/locales/hi/messages.po index 5502335881..71308c5450 100644 --- a/src/locale/locales/hi/messages.po +++ b/src/locale/locales/hi/messages.po @@ -740,7 +740,7 @@ msgid "Edit list details" msgstr "सूची विवरण संपादित करें" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:85 +#: src/view/screens/SavedFeeds.tsx:84 msgid "Edit My Feeds" msgstr "मेरी फ़ीड संपादित करें" @@ -854,7 +854,7 @@ msgstr "सभी फ़ीड" msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." msgstr "सामग्री को व्यवस्थित करने के लिए उपयोगकर्ताओं द्वारा फ़ीड बनाए जाते हैं। कुछ फ़ीड चुनें जो आपको दिलचस्प लगें।" -#: src/view/screens/SavedFeeds.tsx:156 +#: src/view/screens/SavedFeeds.tsx:164 msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." msgstr "फ़ीड कस्टम एल्गोरिदम हैं जिन्हें उपयोगकर्ता थोड़ी कोडिंग विशेषज्ञता के साथ बनाते हैं। <0/> अधिक जानकारी के लिए." @@ -1528,7 +1528,7 @@ msgstr "पासवर्ड अद्यतन!" msgid "Pictures meant for adults." msgstr "चित्र वयस्कों के लिए थे।।" -#: src/view/screens/SavedFeeds.tsx:89 +#: src/view/screens/SavedFeeds.tsx:88 msgid "Pinned Feeds" msgstr "पिन किया गया फ़ीड" @@ -1668,7 +1668,7 @@ msgstr "अनुशंसित लोग" msgid "Remove" msgstr "निकालें" -#: src/view/com/feeds/FeedSourceCard.tsx:108 +#: src/view/com/feeds/FeedSourceCard.tsx:106 msgid "Remove {0} from my feeds?" msgstr "मेरे फ़ीड से {0} हटाएं?" @@ -1680,7 +1680,8 @@ msgstr "खाता हटाएं" msgid "Remove feed" msgstr "फ़ीड हटाएँ" -#: src/view/com/feeds/FeedSourceCard.tsx:107 +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 #: src/view/screens/ProfileFeed.tsx:280 msgid "Remove from my feeds" msgstr "मेरे फ़ीड से हटाएँ" @@ -1693,6 +1694,10 @@ msgstr "छवि निकालें" msgid "Remove image preview" msgstr "छवि पूर्वावलोकन निकालें" +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:131 msgid "Remove this feed from your saved feeds?" msgstr "इस फ़ीड को सहेजे गए फ़ीड से हटा दें?" @@ -1832,7 +1837,7 @@ msgstr "बदलाव सेव करो" msgid "Save image crop" msgstr "फोटो बदलाव सेव करो" -#: src/view/screens/SavedFeeds.tsx:122 +#: src/view/screens/SavedFeeds.tsx:130 msgid "Saved Feeds" msgstr "सहेजे गए फ़ीड" @@ -2419,7 +2424,7 @@ msgstr "अब आप अपने नए पासवर्ड के साथ msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer." msgstr "आपके पास अभी तक कोई आमंत्रण कोड नहीं है! जब आप कुछ अधिक समय के लिए Bluesky पर रहेंगे तो हम आपको कुछ भेजेंगे।" -#: src/view/screens/SavedFeeds.tsx:102 +#: src/view/screens/SavedFeeds.tsx:110 msgid "You don't have any pinned feeds." msgstr "आपके पास कोई पिन किया हुआ फ़ीड नहीं है." @@ -2427,7 +2432,7 @@ msgstr "आपके पास कोई पिन किया हुआ फ़ msgid "You don't have any saved feeds!" msgstr "" -#: src/view/screens/SavedFeeds.tsx:135 +#: src/view/screens/SavedFeeds.tsx:143 msgid "You don't have any saved feeds." msgstr "आपके पास कोई सहेजी गई फ़ीड नहीं है." diff --git a/src/view/com/feeds/FeedSourceCard.tsx b/src/view/com/feeds/FeedSourceCard.tsx index 460816fc1d..99e2b474f6 100644 --- a/src/view/com/feeds/FeedSourceCard.tsx +++ b/src/view/com/feeds/FeedSourceCard.tsx @@ -32,30 +32,23 @@ export function FeedSourceCard({ showSaveBtn = false, showDescription = false, showLikes = false, - LoadingComponent, pinOnSave = false, + showMinimalPlaceholder, }: { feedUri: string style?: StyleProp showSaveBtn?: boolean showDescription?: boolean showLikes?: boolean - LoadingComponent?: JSX.Element pinOnSave?: boolean + showMinimalPlaceholder?: boolean }) { const {data: preferences} = usePreferencesQuery() const {data: feed} = useFeedSourceInfoQuery({uri: feedUri}) - if (!feed || !preferences) { - return LoadingComponent ? ( - LoadingComponent - ) : ( - - ) - } - return ( ) } export function FeedSourceCardLoaded({ + feedUri, feed, preferences, style, @@ -75,14 +70,17 @@ export function FeedSourceCardLoaded({ showDescription = false, showLikes = false, pinOnSave = false, + showMinimalPlaceholder, }: { - feed: FeedSourceInfo - preferences: UsePreferencesQueryResponse + feedUri: string + feed?: FeedSourceInfo + preferences?: UsePreferencesQueryResponse style?: StyleProp showSaveBtn?: boolean showDescription?: boolean showLikes?: boolean pinOnSave?: boolean + showMinimalPlaceholder?: boolean }) { const pal = usePalette('default') const {_} = useLingui() @@ -95,7 +93,7 @@ export function FeedSourceCardLoaded({ useRemoveFeedMutation() const {isPending: isPinPending, mutateAsync: pinFeed} = usePinFeedMutation() - const isSaved = Boolean(preferences?.feeds?.saved?.includes(feed.uri)) + const isSaved = Boolean(preferences?.feeds?.saved?.includes(feed?.uri || '')) const onToggleSaved = React.useCallback(async () => { // Only feeds can be un/saved, lists are handled elsewhere @@ -105,7 +103,7 @@ export function FeedSourceCardLoaded({ openModal({ name: 'confirm', title: _(msg`Remove from my feeds`), - message: _(msg`Remove ${feed.displayName} from my feeds?`), + message: _(msg`Remove ${feed?.displayName} from my feeds?`), onPressConfirm: async () => { try { await removeFeed({uri: feed.uri}) @@ -132,7 +130,70 @@ export function FeedSourceCardLoaded({ } }, [isSaved, openModal, feed, removeFeed, saveFeed, _, pinOnSave, pinFeed]) - if (!feed || !preferences) return null + /* + * LOAD STATE + * + * This state also captures the scenario where a feed can't load for whatever + * reason. + */ + if (!feed || !preferences) + return ( + + {showMinimalPlaceholder ? ( + + ) : ( + + )} + + {showSaveBtn && ( + { + openModal({ + name: 'confirm', + title: _(msg`Remove from my feeds`), + message: _(msg`Remove this feed from my feeds?`), + onPressConfirm: async () => { + try { + await removeFeed({uri: feedUri}) + // await item.unsave() + Toast.show('Removed from my feeds') + } catch (e) { + Toast.show('There was an issue contacting your server') + logger.error('Failed to unsave feed', {error: e}) + } + }, + }) + }} + hitSlop={15} + style={styles.btn}> + + + )} + + ) return ( - + {showLowerPlaceholder && ( - + Pinned Feeds + {preferences?.feeds ? ( !currentFeeds.pinned.length ? ( - } + showMinimalPlaceholder />