diff options
Diffstat (limited to 'src/components/Post/Embed')
-rw-r--r-- | src/components/Post/Embed/FeedEmbed.tsx | 43 | ||||
-rw-r--r-- | src/components/Post/Embed/ListEmbed.tsx | 17 | ||||
-rw-r--r-- | src/components/Post/Embed/index.tsx | 106 |
3 files changed, 82 insertions, 84 deletions
diff --git a/src/components/Post/Embed/FeedEmbed.tsx b/src/components/Post/Embed/FeedEmbed.tsx index fad4cd4d8..47d59e346 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 {useMemo} from 'react' 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 * as FeedCard from '#/components/FeedCard' import {ContentHider} from '#/components/moderation/ContentHider' import {type EmbedType} from '#/types/bsky/post' import {type CommonProps} from './types' @@ -14,13 +13,22 @@ export function FeedEmbed({ }: CommonProps & { embed: EmbedType<'feed'> }) { - const pal = usePalette('default') + const t = useTheme() return ( - <FeedSourceCard - feedUri={embed.view.uri} - style={[pal.view, pal.border, styles.customFeedOuter]} - showLikes - /> + <FeedCard.Link + view={embed.view} + style={[a.border, t.atoms.border_contrast_medium, a.p_md, a.rounded_sm]}> + <FeedCard.Outer> + <FeedCard.Header> + <FeedCard.Avatar src={embed.view.avatar} /> + <FeedCard.TitleAndByline + title={embed.view.displayName} + creator={embed.view.creator} + /> + </FeedCard.Header> + <FeedCard.Likes count={embed.view.likeCount || 0} /> + </FeedCard.Outer> + </FeedCard.Link> ) } @@ -30,23 +38,16 @@ export function ModeratedFeedEmbed({ embed: EmbedType<'feed'> }) { const moderationOpts = useModerationOpts() - const moderation = React.useMemo(() => { + const moderation = useMemo(() => { return moderationOpts ? moderateFeedGenerator(embed.view, moderationOpts) : undefined }, [embed.view, moderationOpts]) return ( - <ContentHider modui={moderation?.ui('contentList')}> + <ContentHider + modui={moderation?.ui('contentList')} + childContainerStyle={[a.pt_xs]}> <FeedEmbed embed={embed} /> </ContentHider> ) } - -const styles = StyleSheet.create({ - customFeedOuter: { - borderWidth: StyleSheet.hairlineWidth, - borderRadius: 8, - paddingHorizontal: 12, - paddingVertical: 12, - }, -}) diff --git a/src/components/Post/Embed/ListEmbed.tsx b/src/components/Post/Embed/ListEmbed.tsx index 82685d271..c1450bdcf 100644 --- a/src/components/Post/Embed/ListEmbed.tsx +++ b/src/components/Post/Embed/ListEmbed.tsx @@ -1,5 +1,4 @@ -import React from 'react' -import {View} from 'react-native' +import {useMemo} from 'react' import {moderateUserList} from '@atproto/api' import {useModerationOpts} from '#/state/preferences/moderation-opts' @@ -16,10 +15,10 @@ export function ListEmbed({ }) { const t = useTheme() return ( - <View - style={[a.border, t.atoms.border_contrast_medium, a.p_md, a.rounded_sm]}> - <ListCard.Default view={embed.view} /> - </View> + <ListCard.Default + view={embed.view} + style={[a.border, t.atoms.border_contrast_medium, a.p_md, a.rounded_sm]} + /> ) } @@ -29,13 +28,15 @@ export function ModeratedListEmbed({ embed: EmbedType<'list'> }) { const moderationOpts = useModerationOpts() - const moderation = React.useMemo(() => { + const moderation = useMemo(() => { return moderationOpts ? moderateUserList(embed.view, moderationOpts) : undefined }, [embed.view, moderationOpts]) return ( - <ContentHider modui={moderation?.ui('contentList')}> + <ContentHider + modui={moderation?.ui('contentList')} + childContainerStyle={[a.pt_xs]}> <ListEmbed embed={embed} /> </ContentHider> ) diff --git a/src/components/Post/Embed/index.tsx b/src/components/Post/Embed/index.tsx index ace85dc98..9c5444b27 100644 --- a/src/components/Post/Embed/index.tsx +++ b/src/components/Post/Embed/index.tsx @@ -268,64 +268,60 @@ export function QuoteEmbed({ const [hover, setHover] = React.useState(false) return ( <View - onPointerEnter={() => { - setHover(true) - }} - onPointerLeave={() => { - setHover(false) - }}> + style={[a.mt_sm]} + onPointerEnter={() => setHover(true)} + onPointerLeave={() => setHover(false)}> <ContentHider modui={moderation?.ui('contentList')} - style={[ - a.rounded_md, - a.p_md, - a.mt_sm, - a.border, - t.atoms.border_contrast_low, - style, - ]} + style={[a.rounded_md, a.border, t.atoms.border_contrast_low, style]} + activeStyle={[a.p_md, a.pt_sm]} childContainerStyle={[a.pt_sm]}> - <SubtleWebHover hover={hover} /> - <Link - hoverStyle={{borderColor: pal.colors.borderLinkHover}} - href={itemHref} - title={itemTitle} - onBeforePress={onBeforePress}> - <View pointerEvents="none"> - <PostMeta - author={quote.author} - moderation={moderation} - showAvatar - postHref={itemHref} - timestamp={quote.indexedAt} - /> - </View> - {moderation ? ( - <PostAlerts - modui={moderation.ui('contentView')} - style={[a.py_xs]} - /> - ) : null} - {richText ? ( - <RichText - value={richText} - style={a.text_md} - numberOfLines={20} - disableLinks - /> - ) : null} - {quote.embed && ( - <Embed - embed={quote.embed} - moderation={moderation} - isWithinQuote={parentIsWithinQuote ?? true} - // already within quote? override nested - allowNestedQuotes={ - parentIsWithinQuote ? false : parentAllowNestedQuotes - } - /> - )} - </Link> + {({active}) => ( + <> + {!active && <SubtleWebHover hover={hover} style={[a.rounded_md]} />} + <Link + style={[!active && a.p_md]} + hoverStyle={{borderColor: pal.colors.borderLinkHover}} + href={itemHref} + title={itemTitle} + onBeforePress={onBeforePress}> + <View pointerEvents="none"> + <PostMeta + author={quote.author} + moderation={moderation} + showAvatar + postHref={itemHref} + timestamp={quote.indexedAt} + /> + </View> + {moderation ? ( + <PostAlerts + modui={moderation.ui('contentView')} + style={[a.py_xs]} + /> + ) : null} + {richText ? ( + <RichText + value={richText} + style={a.text_md} + numberOfLines={20} + disableLinks + /> + ) : null} + {quote.embed && ( + <Embed + embed={quote.embed} + moderation={moderation} + isWithinQuote={parentIsWithinQuote ?? true} + // already within quote? override nested + allowNestedQuotes={ + parentIsWithinQuote ? false : parentAllowNestedQuotes + } + /> + )} + </Link> + </> + )} </ContentHider> </View> ) |