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 (
);
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() && (

)}
{/* Content */}
{blog.content?.blocks?.map((block, index) => renderBlock(block, index))}
);
};
export default BlogDetail;