45f0f7eefe
* Direct port of embeds to new arch (cherry picked from commit cc3fa1f6cea396dd9222486c633a508bfee1ecd6) * Re-org * Split out ListEmbed and FeedEmbed * Split out ImageEmbed * DRY up a bit * Port over ExternalLinkEmbed * Port over Player and Gif embeds * Migrate ComposerReplyTo * Replace other usages of old post-embeds * Migrate view contexts * Copy pasta VideoEmbed * Copy pasta GifEmbed * Swap in new file location * Clean up * Fix up native * Add back in correct moderation on List and Feed embeds * Format * Prettier * delete old video utils * move bandwidth-estimate.ts * Remove log * Add LazyQuoteEmbed for composer use * Clean up unused things * Remove remaining items * Prettier * Fix imports * Handle nested quotes same as prod * Add back silenced error handling * Fix lint --------- Co-authored-by: Samuel Newman <mozzius@protonmail.com>
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
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 {ContentHider} from '#/components/moderation/ContentHider'
|
|
import {type EmbedType} from '#/types/bsky/post'
|
|
import {type CommonProps} from './types'
|
|
|
|
export function FeedEmbed({
|
|
embed,
|
|
}: CommonProps & {
|
|
embed: EmbedType<'feed'>
|
|
}) {
|
|
const pal = usePalette('default')
|
|
return (
|
|
<FeedSourceCard
|
|
feedUri={embed.view.uri}
|
|
style={[pal.view, pal.border, styles.customFeedOuter]}
|
|
showLikes
|
|
/>
|
|
)
|
|
}
|
|
|
|
export function ModeratedFeedEmbed({
|
|
embed,
|
|
}: CommonProps & {
|
|
embed: EmbedType<'feed'>
|
|
}) {
|
|
const moderationOpts = useModerationOpts()
|
|
const moderation = React.useMemo(() => {
|
|
return moderationOpts
|
|
? moderateFeedGenerator(embed.view, moderationOpts)
|
|
: undefined
|
|
}, [embed.view, moderationOpts])
|
|
return (
|
|
<ContentHider modui={moderation?.ui('contentList')}>
|
|
<FeedEmbed embed={embed} />
|
|
</ContentHider>
|
|
)
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
customFeedOuter: {
|
|
borderWidth: StyleSheet.hairlineWidth,
|
|
borderRadius: 8,
|
|
paddingHorizontal: 12,
|
|
paddingVertical: 12,
|
|
},
|
|
})
|