import React from 'react' import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native' import { AppBskyEmbedRecord, AppBskyFeedPost, AppBskyEmbedImages, AppBskyEmbedRecordWithMedia, ModerationUI, } from '@atproto/api' import {AtUri} from '@atproto/api' import {PostMeta} from '../PostMeta' import {Link} from '../Link' import {Text} from '../text/Text' import {usePalette} from 'lib/hooks/usePalette' import {ComposerOptsQuote} from 'state/models/ui/shell' import {PostEmbeds} from '.' import {PostAlerts} from '../moderation/PostAlerts' import {makeProfileLink} from 'lib/routes/links' import {InfoCircleIcon} from 'lib/icons' export function MaybeQuoteEmbed({ embed, moderation, style, }: { embed: AppBskyEmbedRecord.View moderation: ModerationUI style?: StyleProp }) { const pal = usePalette('default') if ( AppBskyEmbedRecord.isViewRecord(embed.record) && AppBskyFeedPost.isRecord(embed.record.value) && AppBskyFeedPost.validateRecord(embed.record.value).success ) { return ( ) } else if (AppBskyEmbedRecord.isViewBlocked(embed.record)) { return ( Blocked ) } else if (AppBskyEmbedRecord.isViewNotFound(embed.record)) { return ( Deleted ) } return null } export function QuoteEmbed({ quote, moderation, style, }: { quote: ComposerOptsQuote moderation?: ModerationUI style?: StyleProp }) { const pal = usePalette('default') const itemUrip = new AtUri(quote.uri) const itemHref = makeProfileLink(quote.author, 'post', itemUrip.rkey) const itemTitle = `Post by ${quote.author.handle}` const isEmpty = React.useMemo( () => quote.text.trim().length === 0, [quote.text], ) const imagesEmbed = React.useMemo( () => quote.embeds?.find( embed => AppBskyEmbedImages.isView(embed) || AppBskyEmbedRecordWithMedia.isView(embed), ), [quote.embeds], ) return ( {moderation ? ( ) : null} {!isEmpty ? ( {quote.text} ) : null} {AppBskyEmbedImages.isView(imagesEmbed) && ( )} {AppBskyEmbedRecordWithMedia.isView(imagesEmbed) && ( )} ) } export default QuoteEmbed const styles = StyleSheet.create({ container: { borderRadius: 8, marginTop: 8, paddingVertical: 12, paddingHorizontal: 12, borderWidth: 1, }, quotePost: { flex: 1, paddingLeft: 13, paddingRight: 8, }, errorContainer: { flexDirection: 'row', alignItems: 'center', gap: 4, borderRadius: 8, marginTop: 8, paddingVertical: 14, paddingHorizontal: 14, borderWidth: 1, }, alert: { marginBottom: 6, }, })