Port post embeds to new arch (#7408)

* 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>
This commit is contained in:
Eric Bailey
2025-06-13 12:05:41 -05:00
committed by GitHub
parent ba0f5a9bde
commit 45f0f7eefe
75 changed files with 812 additions and 799 deletions
+29 -8
View File
@@ -1,19 +1,20 @@
import React from 'react'
import {StyleProp, View, ViewStyle} from 'react-native'
import {type StyleProp, View, type ViewStyle} from 'react-native'
import {cleanError} from '#/lib/strings/errors'
import {
useResolveGifQuery,
useResolveLinkQuery,
} from '#/state/queries/resolve-link'
import {Gif} from '#/state/queries/tenor'
import {type Gif} from '#/state/queries/tenor'
import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
import {ExternalLinkEmbed} from '#/view/com/util/post-embeds/ExternalLinkEmbed'
import {atoms as a, useTheme} from '#/alf'
import {Loader} from '#/components/Loader'
import {ExternalEmbed} from '#/components/Post/Embed/ExternalEmbed'
import {ModeratedFeedEmbed} from '#/components/Post/Embed/FeedEmbed'
import {ModeratedListEmbed} from '#/components/Post/Embed/ListEmbed'
import {Embed as StarterPackEmbed} from '#/components/StarterPack/StarterPackCard'
import {Text} from '#/components/Typography'
import {MaybeFeedCard, MaybeListCard} from '../util/post-embeds'
export const ExternalEmbedGif = ({
onRemove,
@@ -44,7 +45,7 @@ export const ExternalEmbedGif = ({
<View style={[a.overflow_hidden, t.atoms.border_contrast_medium]}>
{linkInfo ? (
<View style={{pointerEvents: 'auto'}}>
<ExternalLinkEmbed link={linkInfo} hideAlt />
<ExternalEmbed link={linkInfo} hideAlt />
</View>
) : error ? (
<Container style={[a.align_start, a.p_md, a.gap_xs]}>
@@ -80,7 +81,7 @@ export const ExternalEmbedLink = ({
if (data) {
if (data.type === 'external') {
return (
<ExternalLinkEmbed
<ExternalEmbed
link={{
title: data.title || uri,
uri,
@@ -91,9 +92,29 @@ export const ExternalEmbedLink = ({
/>
)
} else if (data.kind === 'feed') {
return <MaybeFeedCard view={data.view} />
return (
<ModeratedFeedEmbed
embed={{
type: 'feed',
view: {
$type: 'app.bsky.feed.defs#generatorView',
...data.view,
},
}}
/>
)
} else if (data.kind === 'list') {
return <MaybeListCard view={data.view} />
return (
<ModeratedListEmbed
embed={{
type: 'list',
view: {
$type: 'app.bsky.graph.defs#listView',
...data.view,
},
}}
/>
)
} else if (data.kind === 'starter-pack') {
return <StarterPackEmbed starterPack={data.view} />
}