import { For } from 'solid-js'; import * as Kind from 'nostr-tools/kinds'; // eslint-disable-next-line import/no-cycle import EventDisplayById from '@/components/event/EventDisplayById'; // import ParameterizedReplaceableEventDisplayById from '@/components/event/ParameterizedReplaceableEventDisplayById'; import ImageDisplay from '@/components/event/textNote/ImageDisplay'; import MentionedEventDisplay from '@/components/event/textNote/MentionedEventDisplay'; import MentionedUserDisplay from '@/components/event/textNote/MentionedUserDisplay'; import PreviewedLink from '@/components/event/textNote/PreviewedLink'; import VideoDisplay from '@/components/event/textNote/VideoDisplay'; import EventLink from '@/components/EventLink'; import { createRelaysColumn, createSearchColumn } from '@/core/column'; import useConfig from '@/core/useConfig'; import { useRequestCommand } from '@/hooks/useCommandBus'; import { ParsedTextNoteResolvedNode, type ParsedTextNoteResolved } from '@/nostr/parseTextNote'; import { isImageUrl, isVideoUrl, isWebSocketUrl } from '@/utils/url'; export type TextNoteContentDisplayProps = { parsed: ParsedTextNoteResolved; embedding: boolean; initialHidden?: boolean; }; const TextNoteContentDisplay = (props: TextNoteContentDisplayProps) => { const { config, saveColumn } = useConfig(); const request = useRequestCommand(); const addHashTagColumn = (query: string) => { saveColumn(createSearchColumn({ query })); request({ command: 'moveToLastColumn' }).catch((err) => console.error(err)); }; const addRelayColumn = (url: string) => { saveColumn(createRelaysColumn({ name: url, relayUrls: [url] })); request({ command: 'moveToLastColumn' }).catch((err) => console.error(err)); }; return ( {(item: ParsedTextNoteResolvedNode) => { if (item.type === 'PlainText') { return {item.content}; } if (item.type === 'URL') { const initialHidden = () => !config().showMedia || !props.embedding || (props.initialHidden ?? false); if (isImageUrl(item.content)) { return ; } if (isVideoUrl(item.content)) { return ; } if (isWebSocketUrl(item.content)) { return ( ); } return ; } if (item.type === 'TagReferenceResolved') { if (item.reference == null) { return {item.content}; } if (item.reference.type === 'MentionedUser') { return ; } if (item.reference.type === 'MentionedEvent') { if (props.embedding) { return ; } return ; } } if (item.type === 'Bech32Entity') { if (item.data.type === 'note' && props.embedding) { return (
); } if (item.data.type === 'nevent' && props.embedding) { return (
); } if (item.data.type === 'npub') { return ; } if (item.data.type === 'nprofile') { return ; } if (item.data.type === 'nrelay') { const url: string = item.data.data; return ( ); } return {item.content}; } if (item.type === 'HashTag') { return ( ); } if (item.type === 'CustomEmojiResolved') { if (item.url == null) return {item.content}; // const { imageRef, canvas } = useImageAnimation({ initialPlaying: false }); return ( {item.content} ); } console.error('Not all ParsedTextNoteNodes are covered', item); return null; }}
); }; export default TextNoteContentDisplay;