import { useFetchEvent } from '@/hooks' import { parsePaytoTagType } from '@/lib/payto' import { getPaymentNotificationInfo, getSuperchatReferenceFetchId } from '@/lib/superchat' import { toNote, toProfile } from '@/lib/link' import { cn } from '@/lib/utils' import { Event } from 'nostr-tools' import { useMemo, type MouseEvent } from 'react' import { useTranslation } from 'react-i18next' import { useSmartNoteNavigationOptional, useSecondaryPageOptional } from '@/PageManager' import Username from '../Username' import UserAvatar from '../UserAvatar' import SuperchatPaymentMethodLabel from './SuperchatPaymentMethodLabel' import TurnIntoSuperchatButton from '../TurnIntoSuperchatButton' export default function Superchat({ event, className, omitSenderHeading, variant = 'default' }: { event: Event className?: string omitSenderHeading?: boolean variant?: 'default' | 'compact' }) { const { t } = useTranslation() const info = useMemo(() => getPaymentNotificationInfo(event), [event]) const paytoType = useMemo( () => (info?.payto ? parsePaytoTagType(info.payto) : 'unknown'), [info?.payto] ) const { navigateToNote } = useSmartNoteNavigationOptional() const secondaryPage = useSecondaryPageOptional() const push = secondaryPage?.push ?? ((url: string) => { window.location.href = url }) const referencedFetchId = useMemo( () => (info ? getSuperchatReferenceFetchId(info) : undefined), [info] ) const { event: targetEvent } = useFetchEvent(referencedFetchId) if (!info) { return (
[{t('Invalid superchat')}]
) } const { senderPubkey, recipientPubkey, comment } = info const hasThreadTarget = Boolean(targetEvent || referencedFetchId) const hasTarget = hasThreadTarget || Boolean(recipientPubkey) const openTarget = (e: MouseEvent) => { e.stopPropagation() if (targetEvent) { navigateToNote(toNote(targetEvent), targetEvent) } else if (referencedFetchId) { navigateToNote(toNote(referencedFetchId)) } else if (recipientPubkey) { push(toProfile(recipientPubkey)) } } if (variant === 'compact') { const hasMetaLine = (recipientPubkey && recipientPubkey !== senderPubkey) || hasTarget return (
{t('Superchat')}
{hasMetaLine ? (
{recipientPubkey && recipientPubkey !== senderPubkey ? ( {t('to')}{' '} ) : null} {hasTarget ? ( ) : null}
) : null} {comment ? (

{comment}

) : null}
) } return (
{hasTarget ? ( ) : null}
{!omitSenderHeading && (
{t('Superchat')} {recipientPubkey && recipientPubkey !== senderPubkey && ( {t('to')} )}
)} {comment ? (

{comment}

) : null}
) }