Skip to content

Commit

Permalink
Remove dangerous derived state from RichText (#3007)
Browse files Browse the repository at this point in the history
* Remove facet resolution from RichText

* Remove derived state
  • Loading branch information
gaearon authored Feb 28, 2024
1 parent 603f3c0 commit 2d14d0e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 23 deletions.
25 changes: 4 additions & 21 deletions src/components/RichText.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import {atoms as a, TextStyleProp, flatten, useTheme, web, native} from '#/alf'
import {InlineLink} from '#/components/Link'
import {Text, TextProps} from '#/components/Typography'
import {toShortUrl} from 'lib/strings/url-helpers'
import {getAgent} from '#/state/session'
import {TagMenu, useTagMenuControl} from '#/components/TagMenu'
import {isNative} from '#/platform/detection'
import {useInteractionState} from '#/components/hooks/useInteractionState'
Expand All @@ -20,7 +19,6 @@ export function RichText({
style,
numberOfLines,
disableLinks,
resolveFacets = false,
selectable,
enableTags = false,
authorHandle,
Expand All @@ -30,31 +28,16 @@ export function RichText({
testID?: string
numberOfLines?: number
disableLinks?: boolean
resolveFacets?: boolean
enableTags?: boolean
authorHandle?: string
}) {
const detected = React.useRef(false)
const [richText, setRichText] = React.useState<RichTextAPI>(() =>
value instanceof RichTextAPI ? value : new RichTextAPI({text: value}),
const richText = React.useMemo(
() =>
value instanceof RichTextAPI ? value : new RichTextAPI({text: value}),
[value],
)
const styles = [a.leading_snug, flatten(style)]

React.useEffect(() => {
if (!resolveFacets) return

async function detectFacets() {
const rt = new RichTextAPI({text: richText.text})
await rt.detectFacets(getAgent())
setRichText(rt)
}

if (!detected.current) {
detected.current = true
detectFacets()
}
}, [richText, setRichText, resolveFacets])

const {text, facets} = richText

if (!facets?.length) {
Expand Down
6 changes: 4 additions & 2 deletions src/view/screens/Storybook/Typography.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ export function Typography() {
<Text style={[a.text_2xs]}>atoms.text_2xs</Text>

<RichText
resolveFacets
// TODO: This only supports already resolved facets.
// Resolving them on read is bad anyway.
value={`This is rich text. It can have mentions like @bsky.app or links like https://bsky.social`}
/>
<RichText
selectable
resolveFacets
// TODO: This only supports already resolved facets.
// Resolving them on read is bad anyway.
value={`This is rich text. It can have mentions like @bsky.app or links like https://bsky.social`}
style={[a.text_xl]}
/>
Expand Down

0 comments on commit 2d14d0e

Please sign in to comment.