import { writeText } from '@tauri-apps/plugin-clipboard-manager'; import Markdown from 'markdown-to-jsx'; import { nip19 } from 'nostr-tools'; import { EventPointer } from 'nostr-tools/lib/types/nip19'; import { useMemo, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { ArrowLeftIcon, CheckCircleIcon, ShareIcon } from '@shared/icons'; import { NoteReplyForm } from '@shared/notes'; import { ReplyList } from '@shared/notes/replies/list'; import { useEvent } from '@utils/hooks/useEvent'; export function ArticleNoteScreen() { const { id } = useParams(); const { status, data } = useEvent(id); const [isCopy, setIsCopy] = useState(false); const navigate = useNavigate(); const metadata = useMemo(() => { if (status === 'pending') return; const title = data.tags.find((tag) => tag[0] === 'title')?.[1]; const image = data.tags.find((tag) => tag[0] === 'image')?.[1]; const summary = data.tags.find((tag) => tag[0] === 'summary')?.[1]; let publishedAt: Date | string | number = data.tags.find( (tag) => tag[0] === 'published_at' )?.[1]; publishedAt = new Date(parseInt(publishedAt) * 1000).toLocaleDateString('en-US'); return { title, image, publishedAt, summary, }; }, [data]); const share = async () => { await writeText( 'https://njump.me/' + nip19.neventEncode({ id: data.id, author: data.pubkey } as EventPointer) ); // update state setIsCopy(true); // reset state after 2 sec setTimeout(() => setIsCopy(false), 2000); }; return (
{status === 'pending' ? (
Loading...
) : (
{metadata.image && ( {metadata.title} )}

{metadata.title}

Published: {metadata.publishedAt.toString()}
{data.content}
)}
); }