import { Badge } from '@/components/ui/badge' import { Separator } from '@/components/ui/separator' import { toHablaLongFormArticle } from '@/lib/link' import { tagNameEquals } from '@/lib/tag' import { cn } from '@/lib/utils' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { ExternalLink } from 'lucide-react' import { Event } from 'nostr-tools' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import Image from '../Image' import UserAvatar from '../UserAvatar' import Username from '../Username' import RepostDescription from './RepostDescription' export default function LongFormArticleCard({ event, className, embedded = false, reposter }: { event: Event className?: string embedded?: boolean reposter?: string }) { const { t } = useTranslation() const { isSmallScreen } = useScreenSize() const metadata = useMemo(() => { let title: string | undefined let summary: string | undefined let image: string | undefined let publishDateString: string | undefined const tags = new Set() event.tags.forEach(([tagName, tagValue]) => { if (tagName === 'title') { title = tagValue } else if (tagName === 'summary') { summary = tagValue } else if (tagName === 'image') { image = tagValue } else if (tagName === 'published_at') { try { const publishedAt = parseInt(tagValue) publishDateString = !isNaN(publishedAt) ? new Date(publishedAt * 1000).toLocaleString() : undefined } catch { // ignore } } else if (tagName === 't' && tagValue && tags.size < 6) { tags.add(tagValue.toLocaleLowerCase()) } }) if (!title) { title = event.tags.find(tagNameEquals('d'))?.[1] ?? 'no title' } return { title, summary, image, publishDateString, tags: Array.from(tags) } }, [event]) const userInfoComponent = (
{metadata.publishDateString && (
{metadata.publishDateString}
)}
) const titleComponent =
{metadata.title}
const tagsComponent = metadata.tags.length > 0 && (
{metadata.tags.map((tag) => ( {tag} ))}
) const summaryComponent = metadata.summary && (
{metadata.summary}
) const handleClick = (e: React.MouseEvent) => { e.stopPropagation() window.open(toHablaLongFormArticle(event), '_blank') } if (isSmallScreen) { return (
{userInfoComponent} {metadata.image && ( )}
{titleComponent} {tagsComponent} {summaryComponent}
{!embedded && }
) } return (
{userInfoComponent}
{titleComponent} {tagsComponent} {summaryComponent}
{metadata.image && ( )}
{!embedded && }
{t('Open in a', { a: 'Habla' })}
) }