// 'use client';
// import { useState, useEffect } from 'react';
// import { motion } from 'framer-motion';
// import { Star } from 'lucide-react';
// import { getPropertyRatings } from '../../utils/ratings.js';
// import toast, { Toaster } from 'react-hot-toast';
// const RatingList = ({ propertyId, userId }) => {
// const [reviews, setReviews] = useState([]);
// const [loading, setLoading] = useState(true);
// const [error, setError] = useState(null);
// useEffect(() => {
// const fetchReviews = async () => {
// if (!propertyId) {
// setLoading(false);
// return;
// }
// try {
// setLoading(true);
// const data = await getPropertyReviews(propertyId);
// setReviews(data || []);
// setError(null);
// } catch (err) {
// console.error('[RatingList] Failed to fetch reviews:', err);
// setError('فشل تحميل التقييمات');
// setReviews([]);
// } finally {
// setLoading(false);
// }
// };
// fetchReviews();
// }, [propertyId]);
// if (loading) {
// return (
//
//
// جاري تحميل التقييمات...
//
// );
// }
// if (error) {
// return (
//
// {error}
//
// );
// }
// if (reviews.length === 0) {
// return (
//
// لا توجد تقييمات حتى الآن. كن أول من يقيم هذا العقار!
//
// );
// }
// // Calculate average rating
// const averageRating = reviews.reduce((sum, review) => sum + review.rating, 0) / reviews.length;
// return (
//
//
//
// {/* Header with average rating */}
//
//
//
تقييمات المستأجرين
//
// {reviews.length} تقييمات
//
//
//
//
// {Array.from({ length: 5 }).map((_, index) => (
//
// ))}
// {averageRating % 1 !== 0 && (
//
// )}
// {averageRating.toFixed(1)}
//
//
//
// {/* Reviews list */}
//
// {reviews.map((review, index) => (
//
//
//
//
//
//
//
//
{review.userName || 'مستأجر'}
//
// {Array.from({ length: 5 }).map((_, starIndex) => (
//
// ))}
// ({review.rating}/5)
//
//
//
//
// {review.createdAt ? new Date(review.createdAt).toLocaleDateString('ar-SA') : ''}
//
//
// {review.comment && (
//
{review.comment}
// )}
//
// ))}
//
//
//
// );
// };
// export default RatingList;
'use client';
import { useState, useEffect } from 'react';
import { Star, User, Calendar, ChevronDown, Loader2 } from 'lucide-react';
import { getPropertyRatings, getPropertyAverageRating } from '../../utils/ratings';
const RatingItem = ({ rating }) => {
const overall = (
rating.cleanRating + rating.servicesRating +
rating.ownerBehaviorRating + rating.experienceRating
) / 4;
return (
{rating.customerName || 'مستأجر'}
{overall.toFixed(1)}
النظافة: {rating.cleanRating}/5
الخدمات: {rating.servicesRating}/5
سلوك المالك: {rating.ownerBehaviorRating}/5
التجربة: {rating.experienceRating}/5
{rating.comment && (
"{rating.comment}"
)}
{new Date(rating.createdAt).toLocaleDateString('ar-SA')}
);
};
export default function PropertyRatingList({ propertyId }) {
const [ratings, setRatings] = useState([]);
const [average, setAverage] = useState(null);
const [page, setPage] = useState(1);
const [hasMore, setHasMore] = useState(false);
const [loading, setLoading] = useState(true);
const [loadingMore, setLoadingMore] = useState(false);
const fetchRatings = async (reset = false) => {
const currentPage = reset ? 1 : page;
try {
if (reset) setLoading(true);
else setLoadingMore(true);
const result = await getPropertyRatings(propertyId, currentPage, 10);
const items = result?.items || result?.data?.items || result || [];
const totalPages = result?.totalPages || result?.data?.totalPages || 1;
setRatings(prev => reset ? items : [...prev, ...items]);
setHasMore(currentPage < totalPages);
if (reset) setPage(1);
} catch (err) {
console.error(err);
} finally {
setLoading(false);
setLoadingMore(false);
}
};
const fetchAverage = async () => {
try {
const avg = await getPropertyAverageRating(propertyId);
setAverage(avg);
} catch (err) {
console.error(err);
}
};
useEffect(() => {
if (propertyId) {
fetchRatings(true);
fetchAverage();
}
}, [propertyId]);
const loadMore = () => {
const nextPage = page + 1;
setPage(nextPage);
fetchRatings(false);
};
if (loading && ratings.length === 0) {
return (
);
}
return (
تقييمات المستأجرين
{average !== null && (
{average.toFixed(1)}
/5
)}
{ratings.length === 0 ? (
لا توجد تقييمات حتى الآن. كن أول من يقيم هذا العقار.
) : (
<>
{ratings.map((r, idx) =>
)}
{hasMore && (
)}
>
)}
);
}