import { useState, useEffect } from 'react'; import type { FeedDetail as FeedDetailType } from '@/api/types'; import { getFeedDetail } from '@/api/endpoints'; import { Badge } from '@/components/ui/Badge'; import { Spinner } from '@/components/ui/Spinner'; import { Button } from '@/components/ui/Button'; import { CommentTree } from './CommentTree'; import { formatNumber, formatTime } from '@/lib/formatters'; interface Props { feedId: string; xsecToken: string; onClose: () => void; onUserClick?: (userId: string, xsecToken: string) => void; } export function FeedDetail({ feedId, xsecToken, onClose, onUserClick }: Props) { const [detail, setDetail] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [currentImage, setCurrentImage] = useState(0); useEffect(() => { setLoading(true); setError(null); void getFeedDetail(feedId, xsecToken) .then((res) => { if (res.success && res.data) { setDetail(res.data); } else { setError(res.error?.message || 'Failed to load detail'); } }) .catch((err) => setError(err instanceof Error ? err.message : 'Error')) .finally(() => setLoading(false)); }, [feedId, xsecToken]); return (

Feed Detail

{loading && (
)} {error && (
{error}
)} {detail && (
{/* Images */} {detail.images.length > 0 && (
{detail.images.length > 1 && (
{detail.images.map((img, i) => ( ))}
)}
)} {/* Video */} {detail.videoUrl && (
Video Note

{detail.videoUrl}

)} {/* Title & Content */}

{detail.title}

{detail.description}

{/* Tags */} {detail.tags.length > 0 && (
{detail.tags.map((tag) => ( #{tag} ))}
)} {/* Stats */}
{[ { label: 'Likes', value: detail.likeCount }, { label: 'Collects', value: detail.collectCount }, { label: 'Comments', value: detail.commentCount }, { label: 'Shares', value: detail.shareCount }, ].map((s) => (

{formatNumber(s.value)}

{s.label}

))}
{/* Author */}
onUserClick?.(detail.user.id, detail.xsecToken)} > {detail.user.avatar && ( )}

{detail.user.nickname}

{detail.ipLocation} ยท {formatTime(detail.createTime)}

{/* IDs for interaction */}

Feed ID: {detail.id}

xsec_token: {detail.xsecToken}

User ID: {detail.user.id}

{/* Comments */} {detail.comments.length > 0 && (

Comments ({detail.comments.length})

)}
)}
); }