Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
at main 53 lines 1.5 kB view raw
1import {useMemo} from 'react' 2import {moderateFeedGenerator} from '@atproto/api' 3 4import {useModerationOpts} from '#/state/preferences/moderation-opts' 5import {atoms as a, useTheme} from '#/alf' 6import * as FeedCard from '#/components/FeedCard' 7import {ContentHider} from '#/components/moderation/ContentHider' 8import {type EmbedType} from '#/types/bsky/post' 9import {type CommonProps} from './types' 10 11export function FeedEmbed({ 12 embed, 13}: CommonProps & { 14 embed: EmbedType<'feed'> 15}) { 16 const t = useTheme() 17 return ( 18 <FeedCard.Link 19 view={embed.view} 20 style={[a.border, t.atoms.border_contrast_low, a.p_sm, a.rounded_md]}> 21 <FeedCard.Outer> 22 <FeedCard.Header> 23 <FeedCard.Avatar src={embed.view.avatar} size={48} /> 24 <FeedCard.TitleAndByline 25 title={embed.view.displayName} 26 creator={embed.view.creator} 27 uri={embed.view.uri} 28 /> 29 </FeedCard.Header> 30 </FeedCard.Outer> 31 </FeedCard.Link> 32 ) 33} 34 35export function ModeratedFeedEmbed({ 36 embed, 37}: CommonProps & { 38 embed: EmbedType<'feed'> 39}) { 40 const moderationOpts = useModerationOpts() 41 const moderation = useMemo(() => { 42 return moderationOpts 43 ? moderateFeedGenerator(embed.view, moderationOpts) 44 : undefined 45 }, [embed.view, moderationOpts]) 46 return ( 47 <ContentHider 48 modui={moderation?.ui('contentList')} 49 childContainerStyle={[a.pt_xs]}> 50 <FeedEmbed embed={embed} /> 51 </ContentHider> 52 ) 53}