[SDK] Adopt @bsky.app/sdk and migrate RichText (#11369)

This commit is contained in:
Samuel Newman
2026-08-13 22:26:18 +03:00
committed by GitHub
parent d991118215
commit f6a22c4f05
47 changed files with 231 additions and 124 deletions
@@ -1,13 +1,14 @@
import {useCallback, useEffect, useMemo, useState} from 'react'
import {View} from 'react-native'
import {type AppBskyGraphDefs, RichText as RichTextAPI} from '@atproto/api'
import {type AppBskyGraphDefs} from '@atproto/api'
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
import {Plural, Trans} from '@lingui/react/macro'
import {cleanError} from '#/lib/strings/errors'
import {isOverMaxGraphemeCount} from '#/lib/strings/helpers'
import {richTextToString} from '#/lib/strings/rich-text-helpers'
import {asSdkFacets, richTextToString} from '#/lib/strings/rich-text-helpers'
import {shortenLinks, stripInvalidMentions} from '#/lib/strings/rich-text-manip'
import {logger} from '#/logger'
import {type ImageMeta} from '#/state/gallery'
@@ -15,7 +16,7 @@ import {
useListCreateMutation,
useListMetadataMutation,
} from '#/state/queries/list'
import {useAgent} from '#/state/session'
import {useAppviewClient} from '#/state/session'
import {ErrorMessage} from '#/view/com/util/error/ErrorMessage'
import {EditableUserAvatar} from '#/view/com/util/UserAvatar'
import {atoms as a, useTheme, web} from '#/alf'
@@ -133,7 +134,11 @@ function DialogInner({
const {_} = useLingui()
const t = useTheme()
const agent = useAgent()
/*
* Facet/mention resolution is an appview job - it resolves handles through
* the appview, and the public fallback keeps it working when logged out.
*/
const appviewClient = useAppviewClient()
const control = Dialog.useDialogContext()
const {
mutateAsync: createListMutation,
@@ -163,7 +168,10 @@ function DialogInner({
// We want to be working with a blank state here, so let's get the
// serialized version and turn it back into a RichText
const serialized = richTextToString(new RichTextAPI({text, facets}), false)
const serialized = richTextToString(
new RichTextAPI({text, facets: asSdkFacets(facets)}),
false,
)
const richText = new RichTextAPI({text: serialized})
richText.detectFacetsWithoutResolution()
@@ -224,7 +232,7 @@ function DialogInner({
{cleanNewlines: true},
)
await richText.detectFacets(agent)
await richText.detectFacets(appviewClient)
richText = shortenLinks(richText)
richText = stripInvalidMentions(richText)
@@ -272,7 +280,7 @@ function DialogInner({
setImageError,
activePurpose,
isCurateList,
agent,
appviewClient,
_,
])