import React from 'react'; import { Link, useParams } from 'react-router-dom'; import { ArrowLeftIcon, ChevronLeftIcon, ClockIcon } from 'lucide-react'; import { renderToHTMLString } from '@tiptap/static-renderer'; import { Reveal } from '../components/Reveal'; import { ButtonLink } from '../components/Button'; import { ArticleCard } from '../components/ArticleCard'; import { Newsletter } from '../components/home/Newsletter'; import { useSite } from '../api'; import { ARTICLE_EXTENSIONS } from '../components/admin/ArticleEditor'; import type { Article } from '../data/site'; /** بدنه مقاله را به HTML تبدیل میکند — سند TipTap جدید یا پاراگرافهای قدیمی */ function renderBody(article: Article): { html: string | null; legacy: string[] } { const body = article.body as unknown; if (Array.isArray(body)) return { html: null, legacy: body }; if (body && typeof body === 'object' && (body as { type?: string }).type === 'doc') { try { return { html: renderToHTMLString({ extensions: ARTICLE_EXTENSIONS, content: body as never }), legacy: [], }; } catch { return { html: null, legacy: [] }; } } return { html: null, legacy: [] }; } export function ArticleDetail() { const { slug } = useParams<{slug: string;}>(); const { articles } = useSite(); const article = articles.find((a) => a.slug === slug); if (!article) { return ( این مقاله پیدا نشد فهرست کامل مقالات وبلاگ را ببینید. بازگشت به وبلاگ ); } const { html, legacy } = renderBody(article); const related = articles.filter((a) => a.slug !== article.slug).slice(0, 3); return ( <> صفحه اصلی وبلاگ {article.category} {article.title} {article.date} {article.read} {article.excerpt} {html ? ( ) : ( legacy.map((paragraph, i) => {paragraph} ) )} مقالات مرتبط {related.map((item, i) => )} >); }
فهرست کامل مقالات وبلاگ را ببینید.
{article.excerpt}
{paragraph}