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