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