import { useSecondaryPage } from '@/PageManager' import { ExtendedKind, SUPPORTED_KINDS } from '@/constants' import { getParentBech32Id, getUsingClient, isNsfwEvent } from '@/lib/event' import { 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 Content from '../Content' import { FormattedTimestamp } from '../FormattedTimestamp' import Nip05 from '../Nip05' import NoteOptions from '../NoteOptions' import ParentNotePreview from '../ParentNotePreview' import TranslateButton from '../TranslateButton' import UserAvatar from '../UserAvatar' import Username from '../Username' import CommunityDefinition from './CommunityDefinition' import GroupMetadata from './GroupMetadata' import Highlight from './Highlight' import IValue from './IValue' 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 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 = useMemo( () => (hideParentNotePreview ? undefined : getParentBech32Id(event)), [event, hideParentNotePreview] ) const usingClient = useMemo(() => getUsingClient(event), [event]) const { defaultShowNsfw } = useContentPolicy() const [showNsfw, setShowNsfw] = useState(false) const { mutePubkeys } = useMuteList() const [showMuted, setShowMuted] = useState(false) let content: React.ReactNode if (!SUPPORTED_KINDS.includes(event.kind)) { content = } else if (mutePubkeys.includes(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) { content = } else { content = } return (
{usingClient && ( using {usingClient} )}
{size === 'normal' && ( )}
{parentEventId && ( { e.stopPropagation() push(toNote(parentEventId)) }} /> )} {content}
) }