From 8eb3cebb362cc438e368a9fbb78e2f85403ffeed Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 31 May 2024 18:41:06 +0300 Subject: [🐴] send record via link in text (Record DMs - base PR) (#4227) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * send record via link in text * re-trim text after removing link --- src/lib/strings/rich-text-manip.ts | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'src/lib/strings') diff --git a/src/lib/strings/rich-text-manip.ts b/src/lib/strings/rich-text-manip.ts index 508e0772e..2e84656f2 100644 --- a/src/lib/strings/rich-text-manip.ts +++ b/src/lib/strings/rich-text-manip.ts @@ -1,4 +1,4 @@ -import {RichText, UnicodeString} from '@atproto/api' +import {AppBskyRichtextFacet, RichText, UnicodeString} from '@atproto/api' import {toShortUrl} from './url-helpers' @@ -10,9 +10,7 @@ export function shortenLinks(rt: RichText): RichText { // enumerate the link facets if (rt.facets) { for (const facet of rt.facets) { - const isLink = !!facet.features.find( - f => f.$type === 'app.bsky.richtext.facet#link', - ) + const isLink = !!facet.features.find(AppBskyRichtextFacet.isLink) if (!isLink) { continue } @@ -33,3 +31,21 @@ export function shortenLinks(rt: RichText): RichText { } return rt } + +// filter out any mention facets that didn't map to a user +export function stripInvalidMentions(rt: RichText): RichText { + if (!rt.facets?.length) { + return rt + } + rt = rt.clone() + if (rt.facets) { + rt.facets = rt.facets?.filter(facet => { + const mention = facet.features.find(AppBskyRichtextFacet.isMention) + if (mention && !mention.did) { + return false + } + return true + }) + } + return rt +} -- cgit 1.4.1