import React, {useEffect, useState} from "react"; import {useParams, useNavigate} from "react-router-dom"; import {Button} from "@/components/ui/button"; import {getBlogByIdApi} from "@/api/blog"; /* ---------------- LIST RENDERER ---------------- */ const renderList = (items, style) => { // ✅ Checklist if (style === "checklist") { return (
{items.map((item, i) => (
))}
); } // ✅ Ordered / Unordered const ListTag = style === "ordered" ? "ol" : "ul"; return ( {items .filter((item) => item.content) .map((item, i) => (
  • {item.items?.length > 0 && renderList(item.items, style)}
  • ))}
    ); }; /* ---------------- BLOCK RENDERER ---------------- */ const renderBlock = (block, index) => { switch (block.type) { case "paragraph": return (

    ); case "header": return (

    ); case "image": return ( {block.data.caption ); case "list": return (
    {renderList(block.data.items, block.data.style)}
    ); case "quote": return (
    {block.data.text}
    ); case "code": return (
    					{block.data.code}
    				
    ); case "table": return (
    {block.data.content.map((row, i) => ( {row.map((cell, j) => ( ))}
    ))}
    ); case "delimiter": return
    ; default: return null; } }; /* ---------------- MAIN COMPONENT ---------------- */ const BlogDetail = () => { const {id} = useParams(); const navigate = useNavigate(); const [blog, setBlog] = useState(null); const fetchBlog = async () => { try { const res = await getBlogByIdApi(Number(id)); console.log({res}); setBlog(res); } catch (err) { console.error("Error fetching blog", err); } }; useEffect(() => { fetchBlog(); }, [id]); if (!blog) { return

    Loading...

    ; } return (
    {/* Back Button */} {/* Title */}

    {blog.title}

    {/* Meta */}

    {blog.writer} • {new Date(blog.createdAt).toLocaleDateString()}

    {/* Image (only if exists) */} {blog.image?.trim() && ( blog )} {/* Content */}
    {blog.content?.blocks?.map((block, index) => renderBlock(block, index))}
    ); }; export default BlogDetail;