diff --git a/app/property/[id]/PropertyDetail.js b/app/property/[id]/PropertyDetail.js index 63da9fb..43399bc 100644 --- a/app/property/[id]/PropertyDetail.js +++ b/app/property/[id]/PropertyDetail.js @@ -49,6 +49,9 @@ import { getRentProperty, getSaleProperty, bookReservation, checkAvailability, g import AuthService from '../../services/AuthService'; import { useFavorites } from '@/app/contexts/FavoritesContext'; import { BuildingTypeKeys, PropertyStatusKeys, extractCity } from '../../enums'; +import RatingForm from '../../components/ratings/RatingForm.js'; +import RatingList from '../../components/ratings/RatingList.js'; +import StarRating from '../../components/ratings/StarRating.js'; // Copy to clipboard that works on HTTP too async function copyToClipboard(text) { @@ -177,6 +180,11 @@ export default function PropertyDetailsPage() { const [favLoading, setFavLoading] = useState(false); const [selectingEnd, setSelectingEnd] = useState(false); const [showLoginDialog, setShowLoginDialog] = useState(false); + const [showRatingForm, setShowRatingForm] = useState(false); + const [currentRating, setCurrentRating] = useState(0); + const [currentComment, setCurrentComment] = useState(''); + const [userRating, setUserRating] = useState(null); + const [canRate, setCanRate] = useState(false); useEffect(() => { const id = params.id; @@ -218,20 +226,29 @@ export default function PropertyDetailsPage() { fetchProperty(); }, [params.id]); - // Fetch available date ranges + // Fetch user rating and check if they can rate useEffect(() => { - if (!property) return; - const propId = property._raw?.id || params.id; - console.log('[Property] Fetching available dates for:', propId); - getAvailableDateRanges(propId) - .then((data) => { - const ranges = Array.isArray(data) ? data : []; - console.log('[Property] Available date ranges:', ranges); - setAvailableRanges(ranges); - }) - .catch((err) => { - console.warn('[Property] Failed to fetch available dates:', err); - }); + async function fetchUserRatingAndCheck() { + if (!property || !AuthService.isAuthenticated()) return; + + try { + // Check if user has already rated + const rating = await getUserPropertyRating(property._raw?.id || parseInt(params.id), AuthService.getUserId()); + if (rating) { + setUserRating(rating); + setCurrentRating(rating.rating); + setCurrentComment(rating.comment || ''); + } + + // Check if user can rate (e.g., after renting) + const canRateProperty = await canRateProperty(property._raw?.id || parseInt(params.id), AuthService.getUserId()); + setCanRate(canRateProperty); + } catch (error) { + console.error('[Property] Failed to fetch user rating:', error); + } + } + + fetchUserRatingAndCheck(); }, [property, params.id]); // Set Open Graph meta tags dynamically for Facebook/Twitter sharing @@ -754,12 +771,17 @@ export default function PropertyDetailsPage() { {property.reviewList.map((review, idx) => (
شارك تجربتك مع المستأجرين الآخرين