import {type StyleProp, View, type ViewStyle} from 'react-native' import { type $Typed, AppBskyFeedDefs, type AppBskyGraphDefs, AtUri, } from '@atproto/api' import {msg, Plural, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {sanitizeHandle} from '#/lib/strings/handles' import { type FeedSourceInfo, hydrateFeedGenerator, hydrateList, useFeedSourceInfoQuery, } from '#/state/queries/feed' import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder' import {UserAvatar} from '#/view/com/util/UserAvatar' import {atoms as a, useTheme} from '#/alf' import {Link} from '#/components/Link' import {RichText} from '#/components/RichText' import {Text} from '#/components/Typography' import {MissingFeed} from './MissingFeed' type FeedSourceCardProps = { feedUri: string feedData?: | $Typed | $Typed style?: StyleProp showSaveBtn?: boolean showDescription?: boolean showLikes?: boolean pinOnSave?: boolean showMinimalPlaceholder?: boolean hideTopBorder?: boolean link?: boolean } export function FeedSourceCard({ feedUri, feedData, ...props }: FeedSourceCardProps) { if (feedData) { let feed: FeedSourceInfo if (AppBskyFeedDefs.isGeneratorView(feedData)) { feed = hydrateFeedGenerator(feedData) } else { feed = hydrateList(feedData) } return } else { return } } export function FeedSourceCardWithoutData({ feedUri, ...props }: Omit) { const {data: feed, error} = useFeedSourceInfoQuery({ uri: feedUri, }) return ( ) } export function FeedSourceCardLoaded({ feedUri, feed, style, showDescription = false, showLikes = false, showMinimalPlaceholder, hideTopBorder, link = true, error, }: { feedUri: string feed?: FeedSourceInfo style?: StyleProp showDescription?: boolean showLikes?: boolean showMinimalPlaceholder?: boolean hideTopBorder?: boolean link?: boolean error?: unknown }) { const t = useTheme() const {_} = useLingui() /* * LOAD STATE * * This state also captures the scenario where a feed can't load for whatever * reason. */ if (!feed) { if (error) { return ( ) } return ( ) } const inner = ( <> {feed.displayName} {feed.type === 'feed' ? ( Feed by {sanitizeHandle(feed.creatorHandle, '@')} ) : ( List by {sanitizeHandle(feed.creatorHandle, '@')} )} {showDescription && feed.description ? ( ) : null} {showLikes && feed.type === 'feed' ? ( Liked by{' '} ) : null} ) if (link) { return ( {inner} ) } else { return ( {inner} ) } }