import { useEffect, useState } from "react"; import { useParams, Link } from "react-router-dom"; import Layout from "@/components/Layout"; import { Card, CardContent, CardHeader, CardTitle, CardDescription, } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { User, Calendar } from "lucide-react"; import FourOhFourPage from "./404"; export default function BlogPost() { const { slug } = useParams<{ slug: string }>(); const [post, setPost] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { let cancelled = false; (async () => { try { if (!slug) return; const res = await fetch(`/api/blog/${encodeURIComponent(slug)}`); const data = res.ok ? await res.json() : null; if (!cancelled) setPost(data); } catch (e) { console.warn("Blog post fetch failed:", e); } finally { if (!cancelled) setLoading(false); } })(); return () => { cancelled = true; }; }, [slug]); if (loading) return null; if (!post) return ; return (
{post.image && ( {post.title} )} {post.category && ( {post.category} )} {post.title} {post.excerpt && ( {post.excerpt} )}
{post.author && (
{post.author}
)} {post.date && (
{post.date}
)}
{post.body ? (
) : (

{post.excerpt}

)}
Back to Blog
); }