index.tsx raw

   1  import { useMemo } from 'react'
   2  import ExternalLink from '../ExternalLink'
   3  import Post from './Post'
   4  
   5  export default function XEmbeddedPost({
   6    url,
   7    className,
   8    embedded = true
   9  }: {
  10    url: string
  11    className?: string
  12    mustLoad?: boolean // kept for API compatibility, now ignored
  13    embedded?: boolean
  14  }) {
  15    const { tweetId } = useMemo(() => parseXUrl(url), [url])
  16  
  17    if (!tweetId) {
  18      return <ExternalLink url={url} />
  19    }
  20  
  21    return <Post tweetId={tweetId} url={url} className={className} embedded={embedded} />
  22  }
  23  
  24  function parseXUrl(url: string): { tweetId: string | null } {
  25    const pattern = /(?:twitter\.com|x\.com)\/(?:#!\/)?(?:\w+)\/status(?:es)?\/(\d+)/i
  26    const match = url.match(pattern)
  27    return {
  28      tweetId: match ? match[1] : null
  29    }
  30  }
  31