import { useFetchEvent, useTranslatedEvent } from '@/hooks' import { createFakeEvent } from '@/lib/event' import { toNote } from '@/lib/link' import { isValidPubkey } from '@/lib/pubkey' import { generateBech32IdFromATag, generateBech32IdFromETag } from '@/lib/tag' import { cn } from '@/lib/utils' import { useSecondaryPage } from '@/PageManager' import { Event } from 'nostr-tools' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import Content from '../Content' import ContentPreview from '../ContentPreview' import ExternalLink from '../ExternalLink' import UserAvatar from '../UserAvatar' export default function Highlight({ event, className }: { event: Event; className?: string }) { const translatedEvent = useTranslatedEvent(event.id) const comment = useMemo( () => (translatedEvent?.tags ?? event.tags).find((tag) => tag[0] === 'comment')?.[1], [event, translatedEvent] ) return (
{comment && }
{translatedEvent?.content ?? event.content}
) } function HighlightSource({ event }: { event: Event }) { const { t } = useTranslation() const { push } = useSecondaryPage() const sourceTag = useMemo(() => { let sourceTag: string[] | undefined for (const tag of event.tags) { if (tag[2] === 'source') { sourceTag = tag break } if (tag[0] === 'r') { sourceTag = tag continue } else if (tag[0] === 'a') { if (!sourceTag || sourceTag[0] !== 'r') { sourceTag = tag } continue } else if (tag[0] === 'e') { if (!sourceTag || sourceTag[0] === 'e') { sourceTag = tag } continue } } return sourceTag }, [event]) const { event: referenceEvent } = useFetchEvent( sourceTag ? sourceTag[0] === 'e' ? generateBech32IdFromETag(sourceTag) : sourceTag[0] === 'a' ? generateBech32IdFromATag(sourceTag) : undefined : undefined ) const referenceEventId = useMemo(() => { if (!sourceTag || sourceTag[0] === 'r') return if (sourceTag[0] === 'e') { return sourceTag[1] } if (sourceTag[0] === 'a') { return generateBech32IdFromATag(sourceTag) } }, [sourceTag]) const pubkey = useMemo(() => { if (referenceEvent) { return referenceEvent.pubkey } if (sourceTag && sourceTag[0] === 'a') { const [, pubkey] = sourceTag[1].split(':') if (isValidPubkey(pubkey)) { return pubkey } } }, [sourceTag, referenceEvent]) if (!sourceTag) { return null } if (sourceTag[0] === 'r') { return (
{t('From')}{' '}
) } return (
{t('From')}
{pubkey && } {referenceEventId && (
{ e.stopPropagation() push(toNote(referenceEvent ?? referenceEventId)) }} > {referenceEvent ? : referenceEventId}
)}
) }