diff --git a/src/app/notes/article.tsx b/src/app/notes/article.tsx index 77a73e34..1d79ab3c 100644 --- a/src/app/notes/article.tsx +++ b/src/app/notes/article.tsx @@ -12,11 +12,11 @@ import { User } from '@shared/user'; import { useEvent } from '@utils/hooks/useEvent'; export function ArticleNoteScreen() { + const { id } = useParams(); + const navigate = useNavigate(); const replyRef = useRef(null); - const { id } = useParams(); - const naddr = id.startsWith('naddr') ? (nip19.decode(id).data as AddressPointer) : null; const { status, data } = useEvent(id, naddr); diff --git a/src/shared/notes/kinds/article.tsx b/src/shared/notes/kinds/article.tsx index 4dc94cc5..4f62ea5e 100644 --- a/src/shared/notes/kinds/article.tsx +++ b/src/shared/notes/kinds/article.tsx @@ -2,8 +2,6 @@ import { NDKEvent } from '@nostr-dev-kit/ndk'; import { memo, useMemo } from 'react'; import { Link } from 'react-router-dom'; -import { Image } from '@shared/image'; - export function ArticleNote(props: { event?: NDKEvent }) { const metadata = useMemo(() => { const title = props.event.tags.find((tag) => tag[0] === 'title')?.[1]; @@ -28,28 +26,30 @@ export function ArticleNote(props: { event?: NDKEvent }) { }, [props.event.id]); return ( - -
- {metadata.image && ( - {metadata.title} - )} -
-
- {metadata.title} -
- {metadata.summary ? ( -

- {metadata.summary} -

- ) : null} - - {metadata.publishedAt.toString()} - -
+ + {metadata.image && ( + {metadata.title} + )} +
+
+ {metadata.title} +
+ {metadata.summary ? ( +

+ {metadata.summary} +

+ ) : null} + + {metadata.publishedAt.toString()} +
); diff --git a/src/shared/notes/kinds/articleDetail.tsx b/src/shared/notes/kinds/articleDetail.tsx index b6ba3e98..4fc5f6b6 100644 --- a/src/shared/notes/kinds/articleDetail.tsx +++ b/src/shared/notes/kinds/articleDetail.tsx @@ -1,31 +1,38 @@ import { NDKEvent } from '@nostr-dev-kit/ndk'; +import Markdown from 'markdown-to-jsx'; + +import { Boost, Hashtag, Invoice, MentionUser } from '@shared/notes'; export function ArticleDetailNote({ event }: { event: NDKEvent }) { - /*const metadata = useMemo(() => { - const title = event.tags.find((tag) => tag[0] === 'title')?.[1]; - const image = event.tags.find((tag) => tag[0] === 'image')?.[1]; - const summary = event.tags.find((tag) => tag[0] === 'summary')?.[1]; - - let publishedAt: Date | string | number = event.tags.find( - (tag) => tag[0] === 'published_at' - )?.[1]; - if (publishedAt) { - publishedAt = new Date(parseInt(publishedAt)).toLocaleDateString('en-US'); - } else { - publishedAt = new Date(event.created_at * 1000).toLocaleDateString('en-US'); - } - - return { - title, - image, - publishedAt, - summary, - }; - }, [event.id]);*/ - return ( -
+ str, + forceBlock: true, + enforceAtxHeadings: true, + }} + className="break-p prose prose-neutral max-w-none select-text whitespace-pre-line leading-normal dark:prose-invert prose-headings:mb-1 prose-headings:mt-3 prose-p:mb-0 prose-p:mt-0 prose-p:last:mb-1 prose-a:font-normal prose-a:text-blue-500 prose-blockquote:mb-1 prose-blockquote:mt-1 prose-blockquote:border-l-[2px] prose-blockquote:border-blue-500 prose-blockquote:pl-2 prose-pre:whitespace-pre-wrap prose-pre:bg-white/10 prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-ul:mt-1 prose-img:mb-2 prose-img:mt-3 prose-hr:mx-0 prose-hr:my-2 hover:prose-a:text-blue-500" + > {event.content} -
+ ); } diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx index 1c90e4c8..f8e8b211 100644 --- a/src/shared/notes/kinds/text.tsx +++ b/src/shared/notes/kinds/text.tsx @@ -42,6 +42,11 @@ export function TextNote(props: { content?: string; truncate?: boolean }) { Invoice: { component: Invoice, }, + a: { + props: { + target: '_blank', + }, + }, }, slugify: (str) => str, forceBlock: true,