From 29de55196a4366db3ba950e72b1b07f126e0710d Mon Sep 17 00:00:00 2001 From: mouazkh Date: Tue, 26 May 2026 22:53:18 +0300 Subject: [PATCH] added a swicher on the properties --- app/property/[id]/PropertyDetail.js | 23 +------------- app/reservations/page.js | 48 +++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/app/property/[id]/PropertyDetail.js b/app/property/[id]/PropertyDetail.js index f5e32a4..18bbcda 100644 --- a/app/property/[id]/PropertyDetail.js +++ b/app/property/[id]/PropertyDetail.js @@ -20,8 +20,6 @@ import AuthService from '../../services/AuthService'; import { useFavorites } from '@/app/contexts/FavoritesContext'; import { BuildingTypeKeys, PropertyStatusKeys, extractCity } from '../../enums'; import PropertyRatingList from '@/app/components/ratings/PropertyRatingList'; -import PropertyRatingForm from '@/app/components/ratings/PropertyRatingForm'; -import StarRating from '@/app/components/ratings/StarRating'; import { getPropertyAverageRating } from '../../utils/ratings'; import dynamic from 'next/dynamic'; import 'leaflet/dist/leaflet.css'; @@ -189,7 +187,6 @@ export default function PropertyDetailsPage() { const [isOwnProperty, setIsOwnProperty] = useState(false); const [favLoading, setFavLoading] = useState(false); const [avgRating, setAvgRating] = useState(null); - const [showRatingForm, setShowRatingForm] = useState(false); const [showContact, setShowContact] = useState(false); const [contactInfo, setContactInfo] = useState(null); const [ownerData, setOwnerData] = useState(null); @@ -264,7 +261,6 @@ export default function PropertyDetailsPage() { const avg = await getPropertyAverageRating(propId); setAvgRating(avg); } catch {} - }; const fetchContactInfo = async () => { if (!property) return; @@ -605,7 +601,7 @@ export default function PropertyDetailsPage() {
بلكونات
)} - {avgRating !== null && avgRating > 0 && ( + {avgRating !== null && avgRating > 0 && (
{avgRating.toFixed(1)}
@@ -782,23 +778,6 @@ export default function PropertyDetailsPage() { - {AuthService.isAuthenticated() && !showRatingForm && ( - setShowRatingForm(true)}> - -

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

-

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

-
- )} - - {showRatingForm && ( - setShowRatingForm(false)} - /> - )}
{/* Sidebar */} diff --git a/app/reservations/page.js b/app/reservations/page.js index da3acda..19e4115 100644 --- a/app/reservations/page.js +++ b/app/reservations/page.js @@ -5,11 +5,12 @@ import { motion } from 'framer-motion'; import { useRouter } from 'next/navigation'; import { Calendar, Clock, CheckCircle, XCircle, Eye, Loader2, Search, - MapPin, DollarSign, Home, ArrowLeft, CreditCard, Timer, + MapPin, DollarSign, Home, ArrowLeft, CreditCard, Timer, Star, } from 'lucide-react'; import toast, { Toaster } from 'react-hot-toast'; import AuthService from '../services/AuthService'; import { getRentProperties, getUserReservations, payDeposit } from '../utils/api'; +import { addPropertyRating } from '../utils/ratings'; const API_BASE = process.env.NEXT_PUBLIC_API_URL || 'https://45.93.137.91.nip.io/api'; @@ -106,12 +107,17 @@ function ReservationCard({ r, onViewDetails, onPay, payingId }) { const beds = propBeds(p, r); const baths = propBaths(p, r); const isOwnerConfirmed = STATUS_MAP[r.status] === 'ownerConfirmed'; + const canRate = STATUS_MAP[r.status] === 'depositPaid' || STATUS_MAP[r.status] === 'completed'; const hasTimeWindow = r.ownerApprovalDate && p?.allowedPaymentPeriod; const deadline = hasTimeWindow ? new Date(r.ownerApprovalDate).getTime() + parseTimeSpan(p.allowedPaymentPeriod) : null; const isExpired = deadline ? Date.now() > deadline : false; const isPaying = payingId === r.id; + const [showRating, setShowRating] = useState(false); + const [ratingValue, setRatingValue] = useState(0); + const [ratingComment, setRatingComment] = useState(''); + const [submittingRating, setSubmittingRating] = useState(false); return ( {new Date(r.endDate).toLocaleDateString('ar')} - {hasTimeWindow &&
+ {isOwnerConfirmed && hasTimeWindow &&
متبقي للدفع: @@ -156,6 +162,42 @@ function ReservationCard({ r, onViewDetails, onPay, payingId }) { {isPaying ? : } {isPaying ? 'جاري الدفع...' : 'ادفع الآن'} }
+ {canRate && !showRating && } + {canRate && showRating &&
+
+ {[1,2,3,4,5].map(n => ( + + ))} +
+