refactor: 💨

This commit is contained in:
codytseng 2025-07-07 22:34:59 +08:00
parent c729c20771
commit 8c5cc1041b
46 changed files with 1008 additions and 879 deletions

View file

@ -0,0 +1,74 @@
import { Badge } from '@/components/ui/badge'
import { getLongFormArticleMetadata } from '@/lib/event'
import { useScreenSize } from '@/providers/ScreenSizeProvider'
import { Event } from 'nostr-tools'
import { useMemo } from 'react'
import ClientSelect from '../ClientSelect'
import Image from '../Image'
export default function LongFormArticle({
event,
className
}: {
event: Event
className?: string
}) {
const { isSmallScreen } = useScreenSize()
const metadata = useMemo(() => getLongFormArticleMetadata(event), [event])
const titleComponent = <div className="text-xl font-semibold line-clamp-2">{metadata.title}</div>
const tagsComponent = metadata.tags.length > 0 && (
<div className="flex gap-1 flex-wrap">
{metadata.tags.map((tag) => (
<Badge key={tag} variant="secondary">
{tag}
</Badge>
))}
</div>
)
const summaryComponent = metadata.summary && (
<div className="text-sm text-muted-foreground line-clamp-4">{metadata.summary}</div>
)
if (isSmallScreen) {
return (
<div className={className}>
{metadata.image && (
<Image
image={{ url: metadata.image }}
className="w-full aspect-video object-cover rounded-lg"
hideIfError
/>
)}
<div className="space-y-1">
{titleComponent}
{summaryComponent}
{tagsComponent}
<ClientSelect variant="secondary" className="w-full mt-2" event={event} />
</div>
</div>
)
}
return (
<div className={className}>
<div className="flex gap-4">
{metadata.image && (
<Image
image={{ url: metadata.image }}
className="rounded-lg aspect-[4/3] xl:aspect-video object-cover bg-foreground h-44"
hideIfError
/>
)}
<div className="flex-1 w-0 space-y-1">
{titleComponent}
{summaryComponent}
{tagsComponent}
</div>
</div>
<ClientSelect variant="secondary" className="w-full mt-2" event={event} />
</div>
)
}