import { useEffect, useState } from 'react' import type { Review } from '@/types/nostr' import { getReviewsForArticle } from '@/lib/reviews' import { getReviewTipsForArticle } from '@/lib/reviewAggregation' interface ArticleReviewsProps { articleId: string authorPubkey: string } export function ArticleReviews({ articleId, authorPubkey }: ArticleReviewsProps) { const [reviews, setReviews] = useState([]) const [tips, setTips] = useState(0) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) useEffect(() => { const load = async () => { setLoading(true) setError(null) try { const [list, tipsTotal] = await Promise.all([ getReviewsForArticle(articleId), getReviewTipsForArticle({ authorPubkey, articleId }), ]) setReviews(list) setTips(tipsTotal) } catch (e) { setError(e instanceof Error ? e.message : 'Erreur lors du chargement des critiques') } finally { setLoading(false) } } void load() }, [articleId, authorPubkey]) return (
{loading &&

Chargement des critiques...

} {error &&

{error}

} {!loading && !error && reviews.length === 0 &&

Aucune critique.

} {!loading && !error && }
) } function ArticleReviewsHeader({ tips }: { tips: number }) { return (

Critiques

Remerciements versés : {tips} sats
) } function ArticleReviewsList({ reviews }: { reviews: Review[] }) { return ( <> {reviews.map((r) => (
{r.content}
Auteur critique : {formatPubkey(r.reviewerPubkey)} {formatDate(r.createdAt)}
))} ) } function formatPubkey(pubkey: string): string { return `${pubkey.slice(0, 8)}...${pubkey.slice(-8)}` } function formatDate(timestamp: number): string { return new Date(timestamp * 1000).toLocaleString() }