From 78138e6445e47a8e492cc2e8a3a541f2706809e3 Mon Sep 17 00:00:00 2001 From: Claw AI Date: Sun, 12 Apr 2026 20:44:04 +0000 Subject: [PATCH 1/2] Commited by hamza on openclaw's belalf --- app/property/[id]/PropertyDetail.js | 92 +++++++++++++++++++---------- 1 file changed, 61 insertions(+), 31 deletions(-) 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) => (
-
- {review.user} -
- {[...Array(5)].map((_, i) => ( - - ))} +
+
+ +
+
+ {review.user} +
+ {[...Array(5)].map((_, i) => ( + + ))} +
{review.date} @@ -771,24 +793,32 @@ export default function PropertyDetailsPage() { )} - {property.rules && property.rules.length > 0 && ( + {/* New Rating Components */} + {AuthService.isAuthenticated() && canRate && !userRating && ( setShowRatingForm(true)} > -

قوانين المنزل

-
    - {property.rules.map((rule, idx) => ( -
  • -
    - {rule} -
  • - ))} -
+ +

قيّم هذا العقار

+ <

شارك تجربتك مع المستأجرين الآخرين

)} + + + +
From f761ab6f48a63c75915b8c00f2265dd7cfc16696 Mon Sep 17 00:00:00 2001 From: hamzeh Date: Sun, 12 Apr 2026 20:50:02 +0000 Subject: [PATCH 2/2] Removed double << --- app/property/[id]/PropertyDetail.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/property/[id]/PropertyDetail.js b/app/property/[id]/PropertyDetail.js index 43399bc..eb2d07c 100644 --- a/app/property/[id]/PropertyDetail.js +++ b/app/property/[id]/PropertyDetail.js @@ -804,7 +804,7 @@ export default function PropertyDetailsPage() { >

قيّم هذا العقار

- <

شارك تجربتك مع المستأجرين الآخرين

+

شارك تجربتك مع المستأجرين الآخرين

)}