diff --git a/src/components/Post/Embed/FeedEmbed.tsx b/src/components/Post/Embed/FeedEmbed.tsx index fad4cd4d8b..f8fc169d4b 100644 --- a/src/components/Post/Embed/FeedEmbed.tsx +++ b/src/components/Post/Embed/FeedEmbed.tsx @@ -1,10 +1,9 @@ import React from 'react' -import {StyleSheet} from 'react-native' import {moderateFeedGenerator} from '@atproto/api' -import {usePalette} from '#/lib/hooks/usePalette' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {FeedSourceCard} from '#/view/com/feeds/FeedSourceCard' +import {atoms as a, useTheme} from '#/alf' import {ContentHider} from '#/components/moderation/ContentHider' import {type EmbedType} from '#/types/bsky/post' import {type CommonProps} from './types' @@ -14,11 +13,18 @@ export function FeedEmbed({ }: CommonProps & { embed: EmbedType<'feed'> }) { - const pal = usePalette('default') + const t = useTheme() return ( ) @@ -41,12 +47,3 @@ export function ModeratedFeedEmbed({ ) } - -const styles = StyleSheet.create({ - customFeedOuter: { - borderWidth: StyleSheet.hairlineWidth, - borderRadius: 8, - paddingHorizontal: 12, - paddingVertical: 12, - }, -}) diff --git a/src/view/com/feeds/FeedSourceCard.tsx b/src/view/com/feeds/FeedSourceCard.tsx index 3a658755a8..2f58afaabf 100644 --- a/src/view/com/feeds/FeedSourceCard.tsx +++ b/src/view/com/feeds/FeedSourceCard.tsx @@ -2,12 +2,17 @@ import React from 'react' import { Linking, Pressable, - StyleProp, + type StyleProp, StyleSheet, View, - ViewStyle, + type ViewStyle, } from 'react-native' -import {AtUri} from '@atproto/api' +import { + type $Typed, + AppBskyFeedDefs, + 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' @@ -17,34 +22,31 @@ import {usePalette} from '#/lib/hooks/usePalette' import {sanitizeHandle} from '#/lib/strings/handles' import {s} from '#/lib/styles' import {logger} from '#/logger' -import {FeedSourceInfo, useFeedSourceInfoQuery} from '#/state/queries/feed' +import { + type FeedSourceInfo, + hydrateFeedGenerator, + hydrateList, + useFeedSourceInfoQuery, +} from '#/state/queries/feed' import { useAddSavedFeedsMutation, usePreferencesQuery, - UsePreferencesQueryResponse, 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 {useTheme} from '#/alf' -import {atoms as a} from '#/alf' +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' -import {Text} from '../util/text/Text' -import {UserAvatar} from '../util/UserAvatar' -export function FeedSourceCard({ - feedUri, - style, - showSaveBtn = false, - showDescription = false, - showLikes = false, - pinOnSave = false, - showMinimalPlaceholder, - hideTopBorder, -}: { +type FeedSourceCardProps = { feedUri: string + feedData?: + | $Typed + | $Typed style?: StyleProp showSaveBtn?: boolean showDescription?: boolean @@ -52,30 +54,40 @@ export function FeedSourceCard({ pinOnSave?: boolean showMinimalPlaceholder?: boolean hideTopBorder?: boolean -}) { - const {data: preferences} = usePreferencesQuery() - const {data: feed} = useFeedSourceInfoQuery({uri: feedUri}) +} - return ( - - ) +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} = useFeedSourceInfoQuery({ + uri: feedUri, + }) + + return } export function FeedSourceCardLoaded({ feedUri, feed, - preferences, style, showSaveBtn = false, showDescription = false, @@ -86,7 +98,6 @@ export function FeedSourceCardLoaded({ }: { feedUri: string feed?: FeedSourceInfo - preferences?: UsePreferencesQueryResponse style?: StyleProp showSaveBtn?: boolean showDescription?: boolean @@ -95,6 +106,7 @@ export function FeedSourceCardLoaded({ showMinimalPlaceholder?: boolean hideTopBorder?: boolean }) { + const {data: preferences} = usePreferencesQuery() const t = useTheme() const pal = usePalette('default') const {_} = useLingui() @@ -248,7 +260,7 @@ export function FeedSourceCardLoaded({ {feed.displayName} - + {feed.type === 'feed' ? ( Feed by {sanitizeHandle(feed.creatorHandle, '@')} ) : (