diff --git a/src/components/UniversalContent/SimpleContent.tsx b/src/components/UniversalContent/SimpleContent.tsx index 8fdc8ca..5d81ea8 100644 --- a/src/components/UniversalContent/SimpleContent.tsx +++ b/src/components/UniversalContent/SimpleContent.tsx @@ -1,11 +1,13 @@ import { useMemo } from 'react' import { cleanUrl } from '@/lib/url' +import { getImetaInfosFromEvent } from '@/lib/event' import { Event } from 'nostr-tools' import Markdown from 'react-markdown' import remarkGfm from 'remark-gfm' import { remarkNostr } from '../Note/LongFormArticle/remarkNostr' import NostrNode from '../Note/LongFormArticle/NostrNode' import { cn } from '@/lib/utils' +import ImageWithLightbox from '../ImageWithLightbox' interface SimpleContentProps { event?: Event @@ -18,6 +20,8 @@ export default function SimpleContent({ content, className }: SimpleContentProps) { + const imetaInfos = useMemo(() => event ? getImetaInfosFromEvent(event) : [], [event]) + const processedContent = useMemo(() => { const rawContent = content || event?.content || '' @@ -36,6 +40,50 @@ export default function SimpleContent({ return cleaned }, [content, event?.content]) + // Process content to handle images and markdown + const { markdownContent, mediaElements } = useMemo(() => { + const lines = processedContent.split('\n') + const elements: JSX.Element[] = [] + let markdownLines: string[] = [] + let key = 0 + + lines.forEach((line) => { + // Check if line contains an image URL + const imageMatch = line.match(/(https?:\/\/[^\s]+\.(jpg|jpeg|png|gif|webp|heic|svg))/i) + + if (imageMatch) { + const imageUrl = imageMatch[1] + const imageInfo = imetaInfos.find((info) => info.url === imageUrl) + const imageData = imageInfo || { url: imageUrl, pubkey: event?.pubkey } + + elements.push( +