import React, { useEffect, useState } from 'react' import { useParams } from 'react-router-dom' import { Header } from '../components/Header' import { Footer } from '../components/Footer' import { Posts } from '../clientsdk/sdk.gen' import { createClient } from '../clientsdk/client' import { customQuerySerializer } from '../clientsdk/querySerializer' import { TENANT_SLUG, TENANT_API_KEY, API_URL } from '../config' const client = createClient({ baseUrl: API_URL, querySerializer: customQuerySerializer, headers: { 'X-Tenant-Slug': TENANT_SLUG, 'X-API-Key': TENANT_API_KEY, }, }) export const PostDetail: React.FC = () => { const { slug } = useParams<{ slug: string }>() const [post, setPost] = useState(null) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) useEffect(() => { if (!slug) return const fetchPost = async () => { try { setLoading(true) setError(null) // Use listPosts with where filter since findPostById doesn't support slug lookup const response = await Posts.listPosts({ client, query: { where: { slug: { equals: slug, }, }, limit: 1, }, }) const docs = (response as any)?.data?.docs || [] setPost(docs[0] || null) } catch (err) { setError(err instanceof Error ? err.message : '加载失败') console.error('获取文章失败:', err) } finally { setLoading(false) } } fetchPost() }, [slug]) const getCategoryTitle = (p: any): string | undefined => { // categories is an array, get the first one return p?.categories?.[0]?.title } const formatDate = (dateString: string): string => { const date = new Date(dateString) return date.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric', }) } if (loading) { return (
) } if (error || !post) { return (

{error || '文章不存在'}

) } return (
{getCategoryTitle(post) && ( {getCategoryTitle(post)} )}

{post.title}

{formatDate(post.createdAt)}
{post.heroImage && ( {post.heroImage.alt )}
) }