Bluesky app fork with some witchin' additions 馃挮
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at cope-settings-sync 35 lines 1.1 kB view raw
1import {useEffect, useState} from 'react' 2import {RichText as RichTextAPI} from '@atproto/api' 3 4import {detectFacets} from '#/lib/strings/detect-facets' 5import {useAgent} from '#/state/session' 6 7export function useRichText(text: string): [RichTextAPI, boolean] { 8 const [prevText, setPrevText] = useState(text) 9 const [rawRT, setRawRT] = useState(() => new RichTextAPI({text})) 10 const [resolvedRT, setResolvedRT] = useState<RichTextAPI | null>(null) 11 const agent = useAgent() 12 if (text !== prevText) { 13 setPrevText(text) 14 setRawRT(new RichTextAPI({text})) 15 setResolvedRT(null) 16 // This will queue an immediate re-render 17 } 18 useEffect(() => { 19 let ignore = false 20 async function resolveRTFacets() { 21 // new each time 22 const resolvedRT = new RichTextAPI({text}) 23 await detectFacets(agent, resolvedRT) 24 if (!ignore) { 25 setResolvedRT(resolvedRT) 26 } 27 } 28 resolveRTFacets() 29 return () => { 30 ignore = true 31 } 32 }, [text, agent]) 33 const isResolving = resolvedRT === null 34 return [resolvedRT ?? rawRT, isResolving] 35}