import { useSecondaryPage } from '@/PageManager' import { ExtendedKind, SUPPORTED_KINDS } from '@/constants' import { getParentStuff, isNsfwEvent } from '@/lib/event' import { toExternalContent, toNote } from '@/lib/link' import { useContentPolicy } from '@/providers/ContentPolicyProvider' import { useMuteList } from '@/providers/MuteListProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { Event, kinds } from 'nostr-tools' import { useMemo, useState } from 'react' import AudioPlayer from '../AudioPlayer' import ClientTag from '../ClientTag' import Content from '../Content' import FollowingBadge from '../FollowingBadge' import { FormattedTimestamp } from '../FormattedTimestamp' import Nip05 from '../Nip05' import NoteOptions from '../NoteOptions' import ParentNotePreview from '../ParentNotePreview' import TranslateButton from '../TranslateButton' import TrustScoreBadge from '../TrustScoreBadge' import UserAvatar from '../UserAvatar' import Username from '../Username' import CommunityDefinition from './CommunityDefinition' import EmojiPack from './EmojiPack' import GroupMetadata from './GroupMetadata' import Highlight from './Highlight' import LiveEvent from './LiveEvent' import LongFormArticle from './LongFormArticle' import LongFormArticlePreview from './LongFormArticlePreview' import MutedNote from './MutedNote' import NsfwNote from './NsfwNote' import PictureNote from './PictureNote' import Poll from './Poll' import RelayReview from './RelayReview' import UnknownNote from './UnknownNote' import VideoNote from './VideoNote' export default function Note({ event, originalNoteId, size = 'normal', className, hideParentNotePreview = false, showFull = false }: { event: Event originalNoteId?: string size?: 'normal' | 'small' className?: string hideParentNotePreview?: boolean showFull?: boolean }) { const { push } = useSecondaryPage() const { isSmallScreen } = useScreenSize() const { parentEventId, parentExternalContent } = useMemo(() => { return getParentStuff(event) }, [event]) const { defaultShowNsfw } = useContentPolicy() const [showNsfw, setShowNsfw] = useState(false) const { mutePubkeySet } = useMuteList() const [showMuted, setShowMuted] = useState(false) let content: React.ReactNode if ( ![ ...SUPPORTED_KINDS, kinds.CommunityDefinition, kinds.LiveEvent, ExtendedKind.GROUP_METADATA ].includes(event.kind) ) { content = } else if (mutePubkeySet.has(event.pubkey) && !showMuted) { content = setShowMuted(true)} /> } else if (!defaultShowNsfw && isNsfwEvent(event) && !showNsfw) { content = setShowNsfw(true)} /> } else if (event.kind === kinds.Highlights) { content = } else if (event.kind === kinds.LongFormArticle) { content = showFull ? ( ) : ( ) } else if (event.kind === kinds.LiveEvent) { content = } else if (event.kind === ExtendedKind.GROUP_METADATA) { content = } else if (event.kind === kinds.CommunityDefinition) { content = } else if (event.kind === ExtendedKind.POLL) { content = ( <> > ) } else if (event.kind === ExtendedKind.VOICE || event.kind === ExtendedKind.VOICE_COMMENT) { content = } else if (event.kind === ExtendedKind.PICTURE) { content = } else if ( event.kind === ExtendedKind.VIDEO || event.kind === ExtendedKind.SHORT_VIDEO || event.kind === ExtendedKind.ADDRESSABLE_NORMAL_VIDEO || event.kind === ExtendedKind.ADDRESSABLE_SHORT_VIDEO ) { content = } else if (event.kind === ExtendedKind.RELAY_REVIEW) { content = } else if (event.kind === kinds.Emojisets) { content = } else { content = } return ( {size === 'normal' && ( )} {!hideParentNotePreview && ( { e.stopPropagation() if (parentExternalContent) { push(toExternalContent(parentExternalContent)) } else if (parentEventId) { push(toNote(parentEventId)) } }} /> )} {content} ) }