'use client' import * as React from 'react' import { Share2, ExternalLink, X } from 'lucide-react' import { useRouter } from 'next/navigation' import { Button } from '@open-mercato/ui/primitives/button' import { IconButton } from '@open-mercato/ui/primitives/icon-button' import { cn } from '@open-mercato/shared/lib/utils' import { formatRelativeTime } from '@open-mercato/shared/lib/time' import { useT } from '@open-mercato/shared/lib/i18n/context' import type { NotificationRendererProps } from '@open-mercato/shared/modules/notifications/types' export function ConversationSharedRenderer({ notification, onAction, onDismiss, actions = [], }: NotificationRendererProps) { const t = useT() const router = useRouter() const [executing, setExecuting] = React.useState(false) const isUnread = notification.status === 'unread' const viewAction = actions.find((a) => a.id === 'view') ?? actions[0] ?? null const handleView = async () => { setExecuting(true) try { if (viewAction) { await onAction(viewAction.id) } if (notification.linkHref) router.push(notification.linkHref) } finally { setExecuting(false) } } const timeAgo = formatRelativeTime(notification.createdAt, { translate: t }) ?? '' return (
{ if (executing) return if (e.key === 'Enter' || e.key === ' ') { e.preventDefault() handleView() } }} role="button" tabIndex={0} >

{notification.title}

{timeAgo ? {timeAgo} : null}
{ e.stopPropagation() onDismiss() }} aria-label={t('notifications.actions.dismiss', 'Dismiss')} >
) } export default ConversationSharedRenderer