From c71d91dfceb1cdbb64601f31e6bf6409c1113c20 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Thu, 29 Jan 2026 15:56:38 -0600 Subject: [PATCH] Allow saving quote post drafts --- src/view/com/composer/drafts/state/api.ts | 30 +++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/view/com/composer/drafts/state/api.ts b/src/view/com/composer/drafts/state/api.ts index 1b49002cbb..01fbeaf2d5 100644 --- a/src/view/com/composer/drafts/state/api.ts +++ b/src/view/com/composer/drafts/state/api.ts @@ -1,13 +1,15 @@ /** * Type converters for Draft API - convert between ComposerState and server Draft types. */ -import {type AppBskyDraftDefs, RichText} from '@atproto/api' +import {type AppBskyDraftDefs, AtUri, RichText} from '@atproto/api' import {nanoid} from 'nanoid/non-secure' +import {resolveLink} from '#/lib/api/resolve' import {getImageDim} from '#/lib/media/manip' import {mimeToExt} from '#/lib/media/video/util' import {type ComposerImage} from '#/state/gallery' import {type Gif} from '#/state/queries/tenor' +import {createPublicAgent} from '#/state/session/agent' import { type ComposerState, type EmbedDraft, @@ -140,15 +142,21 @@ async function postDraftToServerPost( // Add quote record embed if (post.embed.quote) { - draftPost.embedRecords = [ - { - $type: 'app.bsky.draft.defs#draftEmbedRecord', - record: { - uri: post.embed.quote.uri, - cid: '', // We don't have the CID at draft time + const resolved = await resolveLink( + createPublicAgent(), + post.embed.quote.uri, + ) + if (resolved && resolved.type === 'record') { + draftPost.embedRecords = [ + { + $type: 'app.bsky.draft.defs#draftEmbedRecord', + record: { + uri: resolved.record.uri, + cid: resolved.record.cid, + }, }, - }, - ] + ] + } } // Add external link embed (only if no media, otherwise it's ignored) @@ -536,7 +544,9 @@ export async function draftToComposerPosts( // Restore quote embed if (post.embedRecords && post.embedRecords.length > 0) { const record = post.embedRecords[0] - embed.quote = {type: 'link', uri: record.record.uri} + const urip = new AtUri(record.record.uri) + const url = `https://bsky.app/profile/${urip.host}/post/${urip.rkey}` + embed.quote = {type: 'link', uri: url} } // Restore link embed (only if not a GIF)