import type { ChatBskyConvoDefs } from '@atcute/bluesky';
import { targetToShareUrl } from '#/lib/routes/app-links';
import { toShortUrl } from '#/lib/utils/url';
import { m } from '#/paraglide/messages';
/**
* computes the preview text for a message quoted in a reply.
*
* @param message the message being quoted
* @returns the preview text and whether it is subtle (a placeholder rather than real message content)
*/
export function getReplyPreviewText(message: ChatBskyConvoDefs.MessageView): {
subtle: boolean;
text: string;
} {
const text = message.text;
if (text.trim()) {
return { subtle: false, text };
}
if (message.embed?.$type === 'chat.bsky.embed.joinLink#view') {
const { joinLinkPreview } = message.embed;
switch (joinLinkPreview.$type) {
case 'chat.bsky.group.defs#joinLinkPreviewView': {
return {
subtle: true,
text: targetToShareUrl({ name: 'GroupChatJoin', code: joinLinkPreview.code }),
};
}
case 'chat.bsky.group.defs#disabledJoinLinkPreviewView': {
return { subtle: true, text: m['common.chat.inviteLinkDisabled']() };
}
case 'chat.bsky.group.defs#invalidJoinLinkPreviewView': {
return { subtle: true, text: m['common.chat.inviteLinkInvalid']() };
}
default: {
return { subtle: true, text: m['common.chat.inviteLink']() };
}
}
}
if (message.embed?.$type === 'app.bsky.embed.record#view') {
const { record } = message.embed;
if (record.$type === 'app.bsky.embed.record#viewRecord') {
const inner = record.embeds?.[0];
if (inner?.$type === 'app.bsky.embed.external#view') {
return { subtle: true, text: toShortUrl(inner.external.uri) };
}
return { subtle: true, text: m['common.embed.quotedPost']() };
}
}
return { subtle: true, text: m['common.altText.noText']() };
}