import React, { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { Rental } from "../types"; import { itemAPI } from "../services/api"; interface ItemReviewsProps { itemId: string; } const ItemReviews: React.FC = ({ itemId }) => { const navigate = useNavigate(); const [reviews, setReviews] = useState([]); const [loading, setLoading] = useState(true); const [averageRating, setAverageRating] = useState(0); useEffect(() => { fetchReviews(); }, [itemId]); const fetchReviews = async () => { try { const response = await itemAPI.getItemReviews(itemId); const { reviews, averageRating } = response.data; setReviews(reviews); setAverageRating(averageRating); } catch (error) { console.error("Failed to fetch reviews:", error); } finally { setLoading(false); } }; const renderStars = (rating: number) => { return ( {[1, 2, 3, 4, 5].map((star) => ( ))} ); }; if (loading) { return (
Reviews
Loading reviews...
); } return (
Reviews
{reviews.length === 0 ? (

Be the first to rent and review this item!

) : ( <>
{renderStars(Math.round(averageRating))} {averageRating.toFixed(1)} ({reviews.length} {reviews.length === 1 ? "review" : "reviews"})
{reviews.map((rental) => (
rental.renter && navigate(`/users/${rental.renterId}`)} style={{ cursor: "pointer" }} > {rental.renter?.profileImage ? ( {`${rental.renter.firstName} ) : (
)}
{rental.renter?.firstName} {rental.renter?.lastName}
{renderStars(rental.rating || 0)}
{new Date(rental.updatedAt).toLocaleDateString()}

{rental.review}

))}
)}
); }; export default ItemReviews;