diff --git a/src/components/Post/Embed/LazyQuoteEmbed.tsx b/src/components/Post/Embed/LazyQuoteEmbed.tsx
new file mode 100644
index 0000000000..fdc1c63091
--- /dev/null
+++ b/src/components/Post/Embed/LazyQuoteEmbed.tsx
@@ -0,0 +1,37 @@
+import {useMemo} from 'react'
+import {View} from 'react-native'
+
+import {createEmbedViewRecordFromPost} from '#/state/queries/postgate/util'
+import {useResolveLinkQuery} from '#/state/queries/resolve-link'
+import {atoms as a, useTheme} from '#/alf'
+import {QuoteEmbed} from '#/components/Post/Embed'
+
+export function LazyQuoteEmbed({uri}: {uri: string}) {
+ const t = useTheme()
+ const {data} = useResolveLinkQuery(uri)
+
+ const view = useMemo(() => {
+ if (!data || data.type !== 'record' || data.kind !== 'post') return
+ return createEmbedViewRecordFromPost(data.view)
+ }, [data])
+
+ return view ? (
+
+ ) : (
+
+ )
+}
diff --git a/src/state/queries/postgate/util.ts b/src/state/queries/postgate/util.ts
index c1955cc74f..0952a1ad09 100644
--- a/src/state/queries/postgate/util.ts
+++ b/src/state/queries/postgate/util.ts
@@ -1,9 +1,9 @@
import {
- $Typed,
+ type $Typed,
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
- AppBskyFeedDefs,
- AppBskyFeedPostgate,
+ type AppBskyFeedDefs,
+ type AppBskyFeedPostgate,
AtUri,
} from '@atproto/api'
@@ -113,6 +113,7 @@ export function createEmbedViewRecordFromPost(
likeCount: post.likeCount,
quoteCount: post.quoteCount,
indexedAt: post.indexedAt,
+ embeds: post.embed ? [post.embed] : [],
}
}
diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx
index f5b29664ab..da40235280 100644
--- a/src/view/com/composer/Composer.tsx
+++ b/src/view/com/composer/Composer.tsx
@@ -71,7 +71,7 @@ import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
import {mimeToExt} from '#/lib/media/video/util'
import {logEvent} from '#/lib/statsig/statsig'
import {cleanError} from '#/lib/strings/errors'
-import {colors, s} from '#/lib/styles'
+import {colors} from '#/lib/styles'
import {logger} from '#/logger'
import {isAndroid, isIOS, isNative, isWeb} from '#/platform/detection'
import {useDialogStateControlContext} from '#/state/dialogs'
@@ -96,6 +96,7 @@ import {
ExternalEmbedGif,
ExternalEmbedLink,
} from '#/view/com/composer/ExternalEmbed'
+import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
import {GifAltTextDialog} from '#/view/com/composer/GifAltText'
import {LabelsBtn} from '#/view/com/composer/labels/LabelsBtn'
import {Gallery} from '#/view/com/composer/photos/Gallery'
@@ -115,7 +116,6 @@ import {SelectVideoBtn} from '#/view/com/composer/videos/SelectVideoBtn'
import {SubtitleDialogBtn} from '#/view/com/composer/videos/SubtitleDialog'
import {VideoPreview} from '#/view/com/composer/videos/VideoPreview'
import {VideoTranscodeProgress} from '#/view/com/composer/videos/VideoTranscodeProgress'
-import {LazyQuoteEmbed, QuoteX} from '#/view/com/util/post-embeds/QuoteEmbed'
import {Text} from '#/view/com/util/text/Text'
import * as Toast from '#/view/com/util/Toast'
import {UserAvatar} from '#/view/com/util/UserAvatar'
@@ -124,6 +124,7 @@ import {Button, ButtonIcon, ButtonText} from '#/components/Button'
import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
import {EmojiArc_Stroke2_Corner0_Rounded as EmojiSmile} from '#/components/icons/Emoji'
import {TimesLarge_Stroke2_Corner0_Rounded as X} from '#/components/icons/Times'
+import {LazyQuoteEmbed} from '#/components/Post/Embed/LazyQuoteEmbed'
import * as Prompt from '#/components/Prompt'
import {Text as NewText} from '#/components/Typography'
import {BottomSheetPortalProvider} from '../../../../modules/bottom-sheet'
@@ -1146,13 +1147,17 @@ function ComposerEmbeds({
)}
{embed.quote?.uri ? (
-
-
+
+
{canRemoveQuote && (
- dispatch({type: 'embed_remove_quote'})} />
+ dispatch({type: 'embed_remove_quote'})}
+ style={{top: 16}}
+ />
)}
diff --git a/src/view/com/composer/ExternalEmbedRemoveBtn.tsx b/src/view/com/composer/ExternalEmbedRemoveBtn.tsx
index 92102f8478..1e363d0184 100644
--- a/src/view/com/composer/ExternalEmbedRemoveBtn.tsx
+++ b/src/view/com/composer/ExternalEmbedRemoveBtn.tsx
@@ -2,22 +2,27 @@ import {View} from 'react-native'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {atoms as a} from '#/alf'
+import {atoms as a, useTheme, type ViewStyleProp} from '#/alf'
import {Button, ButtonIcon} from '#/components/Button'
import {TimesLarge_Stroke2_Corner0_Rounded as X} from '#/components/icons/Times'
-export function ExternalEmbedRemoveBtn({onRemove}: {onRemove: () => void}) {
+export function ExternalEmbedRemoveBtn({
+ onRemove,
+ style,
+}: {onRemove: () => void} & ViewStyleProp) {
+ const t = useTheme()
const {_} = useLingui()
return (
-
+