diff --git a/src/view/com/feeds/FeedSourceCard.tsx b/src/view/com/feeds/FeedSourceCard.tsx
index 55e02da3ef..bf27d29a9d 100644
--- a/src/view/com/feeds/FeedSourceCard.tsx
+++ b/src/view/com/feeds/FeedSourceCard.tsx
@@ -1,4 +1,3 @@
-import React from 'react'
import {
Linking,
Pressable,
@@ -13,33 +12,23 @@ import {
type AppBskyGraphDefs,
AtUri,
} from '@atproto/api'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {msg, Plural, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+import {Plural, Trans} from '@lingui/macro'
import {useNavigationDeduped} from '#/lib/hooks/useNavigationDeduped'
import {usePalette} from '#/lib/hooks/usePalette'
import {sanitizeHandle} from '#/lib/strings/handles'
import {s} from '#/lib/styles'
-import {logger} from '#/logger'
import {
type FeedSourceInfo,
hydrateFeedGenerator,
hydrateList,
useFeedSourceInfoQuery,
} from '#/state/queries/feed'
-import {
- useAddSavedFeedsMutation,
- usePreferencesQuery,
- useRemoveFeedMutation,
-} from '#/state/queries/preferences'
import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder'
import {Text} from '#/view/com/util/text/Text'
-import * as Toast from '#/view/com/util/Toast'
import {UserAvatar} from '#/view/com/util/UserAvatar'
import {atoms as a, useTheme} from '#/alf'
import {shouldClickOpenNewTab} from '#/components/Link'
-import * as Prompt from '#/components/Prompt'
import {RichText} from '#/components/RichText'
type FeedSourceCardProps = {
@@ -68,7 +57,7 @@ export function FeedSourceCard({
} else {
feed = hydrateList(feedData)
}
- return
+ return
} else {
return
}
@@ -82,93 +71,36 @@ export function FeedSourceCardWithoutData({
uri: feedUri,
})
- return
+ return
}
export function FeedSourceCardLoaded({
- feedUri,
feed,
style,
- showSaveBtn = false,
showDescription = false,
showLikes = false,
- pinOnSave = false,
showMinimalPlaceholder,
hideTopBorder,
}: {
- feedUri: string
feed?: FeedSourceInfo
style?: StyleProp
- showSaveBtn?: boolean
showDescription?: boolean
showLikes?: boolean
- pinOnSave?: boolean
showMinimalPlaceholder?: boolean
hideTopBorder?: boolean
}) {
- const {data: preferences} = usePreferencesQuery()
const t = useTheme()
const pal = usePalette('default')
- const {_} = useLingui()
- const removePromptControl = Prompt.usePromptControl()
+
const navigation = useNavigationDeduped()
- const {isPending: isAddSavedFeedPending, mutateAsync: addSavedFeeds} =
- useAddSavedFeedsMutation()
- const {isPending: isRemovePending, mutateAsync: removeFeed} =
- useRemoveFeedMutation()
-
- const savedFeedConfig = preferences?.savedFeeds?.find(
- f => f.value === feedUri,
- )
- const isSaved = Boolean(savedFeedConfig)
-
- const onSave = React.useCallback(async () => {
- if (!feed || isSaved) return
-
- try {
- await addSavedFeeds([
- {
- type: 'feed',
- value: feed.uri,
- pinned: pinOnSave,
- },
- ])
- Toast.show(_(msg`Added to my feeds`))
- } catch (e) {
- Toast.show(_(msg`There was an issue contacting your server`), 'xmark')
- logger.error('Failed to save feed', {message: e})
- }
- }, [_, feed, pinOnSave, addSavedFeeds, isSaved])
-
- const onUnsave = React.useCallback(async () => {
- if (!savedFeedConfig) return
-
- try {
- await removeFeed(savedFeedConfig)
- // await item.unsave()
- Toast.show(_(msg`Removed from my feeds`))
- } catch (e) {
- Toast.show(_(msg`There was an issue contacting your server`), 'xmark')
- logger.error('Failed to unsave feed', {message: e})
- }
- }, [_, removeFeed, savedFeedConfig])
-
- const onToggleSaved = React.useCallback(async () => {
- if (isSaved) {
- removePromptControl.open()
- } else {
- await onSave()
- }
- }, [isSaved, removePromptControl, onSave])
-
/*
* LOAD STATE
*
* This state also captures the scenario where a feed can't load for whatever
* reason.
*/
- if (!feed || !preferences)
+ if (!feed)
return (
{showMinimalPlaceholder ? (
) : (
-
- )}
-
- {showSaveBtn && (
-
-
-
+
)}
)
return (
- <>
- {
- const shouldOpenInNewTab = shouldClickOpenNewTab(e)
- if (feed.type === 'feed') {
- if (shouldOpenInNewTab) {
- Linking.openURL(
- `/profile/${feed.creatorDid}/feed/${new AtUri(feed.uri).rkey}`,
- )
- } else {
- navigation.push('ProfileFeed', {
- name: feed.creatorDid,
- rkey: new AtUri(feed.uri).rkey,
- })
- }
- } else if (feed.type === 'list') {
- if (shouldOpenInNewTab) {
- Linking.openURL(
- `/profile/${feed.creatorDid}/lists/${new AtUri(feed.uri).rkey}`,
- )
- } else {
- navigation.push('ProfileList', {
- name: feed.creatorDid,
- rkey: new AtUri(feed.uri).rkey,
- })
- }
+ {
+ const shouldOpenInNewTab = shouldClickOpenNewTab(e)
+ if (feed.type === 'feed') {
+ if (shouldOpenInNewTab) {
+ Linking.openURL(
+ `/profile/${feed.creatorDid}/feed/${new AtUri(feed.uri).rkey}`,
+ )
+ } else {
+ navigation.push('ProfileFeed', {
+ name: feed.creatorDid,
+ rkey: new AtUri(feed.uri).rkey,
+ })
}
- }}
- key={feed.uri}>
-
-
-
-
-
-
- {feed.displayName}
-
-
- {feed.type === 'feed' ? (
- Feed by {sanitizeHandle(feed.creatorHandle, '@')}
- ) : (
- List by {sanitizeHandle(feed.creatorHandle, '@')}
- )}
-
-
-
- {showSaveBtn && (
-
-
- {isSaved ? (
-
- ) : (
-
- )}
-
-
- )}
+ } else if (feed.type === 'list') {
+ if (shouldOpenInNewTab) {
+ Linking.openURL(
+ `/profile/${feed.creatorDid}/lists/${new AtUri(feed.uri).rkey}`,
+ )
+ } else {
+ navigation.push('ProfileList', {
+ name: feed.creatorDid,
+ rkey: new AtUri(feed.uri).rkey,
+ })
+ }
+ }
+ }}
+ key={feed.uri}>
+
+
+
-
- {showDescription && feed.description ? (
-
- ) : null}
-
- {showLikes && feed.type === 'feed' ? (
-
-
- Liked by{' '}
-
-
+
+
+ {feed.displayName}
- ) : null}
-
+
+ {feed.type === 'feed' ? (
+ Feed by {sanitizeHandle(feed.creatorHandle, '@')}
+ ) : (
+ List by {sanitizeHandle(feed.creatorHandle, '@')}
+ )}
+
+
+
-
- >
+ {showDescription && feed.description ? (
+
+ ) : null}
+
+ {showLikes && feed.type === 'feed' ? (
+
+
+ Liked by{' '}
+
+
+
+ ) : null}
+
)
}
-
-const styles = StyleSheet.create({
- btn: {
- paddingVertical: 6,
- },
-})