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 => (
+
+ ))}
+
+
}
);
@@ -206,7 +248,7 @@ function DetailsModal({ r, isOpen, onClose, onPay, payingId }) {
المعلومات المالية
الإجمالي{r.totalPrice?.toLocaleString()??'—'}
- {hasTimeWindow &&
+ {isOwnerConfirmed && hasTimeWindow &&