diff --git a/app/owner/properties/page.js b/app/owner/properties/page.js index fe27fc2..1088d44 100644 --- a/app/owner/properties/page.js +++ b/app/owner/properties/page.js @@ -59,6 +59,8 @@ import { getMySaleListings, editRentProperty, editSaleProperty, + updateRentPropertyStatus, + updateSalePropertyStatus, } from "../../utils/api"; const DeleteConfirmationModal = ({ @@ -117,6 +119,86 @@ const DeleteConfirmationModal = ({ ); }; +const DeactivateConfirmationModal = ({ + isOpen, + onClose, + onConfirm, + propertyTitle, + isActivating, +}) => { + if (!isOpen) return null; + + return ( + + e.stopPropagation()} + > +
+
+ +
+

+ {isActivating ? "تأكيد التنشيط" : "تأكيد إلغاء التنشيط"} +

+

+ العقار:{" "} + "{propertyTitle}" +

+ {!isActivating ? ( +
+

+ ⚠️ تحذير +

+

+ إذا قمت بإلغاء التنشيط، سيصبح هذا العقار غير متاح للحجز أو الشراء. + لا يمكن للعملاء رؤيته أو حجزه حتى تقوم بتنشيطه مرة أخرى. +

+
+ ) : ( +
+

+ ✅ تنشيط العقار +

+

+ سيصبح العقار متاحاً مرة أخرى للحجز أو الشراء. +

+
+ )} +
+ +
+ + +
+
+
+ ); +}; + const serviceLabels = { Electricity: "كهرباء", Internet: "إنترنت", @@ -1074,6 +1156,11 @@ export default function OwnerPropertiesPage() { }); const [viewModal, setViewModal] = useState({ isOpen: false, property: null }); const [editModal, setEditModal] = useState({ isOpen: false, property: null }); + const [deactivateModal, setDeactivateModal] = useState({ + isOpen: false, + property: null, + isActivating: false, + }); const filteredProperties = properties.filter((p) => p.purpose === activeTab); const rentCount = properties.filter((p) => p.purpose === "rent").length; @@ -1511,11 +1598,44 @@ export default function OwnerPropertiesPage() { toast.success('تم تحديث العقار بنجاح'); } catch (err) { console.error('[OwnerProperties] Edit failed:', err); - toast.error('فشل تحديث العقار'); + toast.error("فشل تحديث العقار"); throw err; } }; + const handleToggleActivation = async () => { + const prop = deactivateModal.property; + if (!prop) return; + + const willActivate = deactivateModal.isActivating; + const newStatus = willActivate ? "available" : "notAvailable"; + const statusCode = willActivate ? 0 : 1; + + setDeactivateModal({ isOpen: false, property: null, isActivating: false }); + + try { + if (prop.purpose === "rent") { + await updateRentPropertyStatus(prop.id, statusCode); + } else { + await updateSalePropertyStatus(prop.id, statusCode); + } + + const newProperties = properties.map((p) => + p.id === prop.id ? { ...p, status: newStatus } : p, + ); + setProperties(newProperties); + localStorage.setItem("ownerProperties", JSON.stringify(newProperties)); + toast.success( + willActivate + ? "تم تنشيط العقار بنجاح" + : "تم إلغاء تنشيط العقار بنجاح", + ); + } catch (err) { + console.error("[OwnerProperties] Toggle status failed:", err); + toast.error("فشل تحديث حالة العقار"); + } + }; + const fadeInUp = { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, @@ -1557,6 +1677,16 @@ export default function OwnerPropertiesPage() { onSave={handleSaveEdit} /> + + setDeactivateModal({ isOpen: false, property: null, isActivating: false }) + } + onConfirm={handleToggleActivation} + propertyTitle={deactivateModal.property?.title} + isActivating={deactivateModal.isActivating} + /> +
)} -
- - {property.status === "available" ? "متاح" : "مؤجر"} - +
+ + {property.status === "notAvailable" + ? "غير متاح" + : property.status === "available" + ? "متاح" + : "مؤجل"} + {property.purpose === "rent" && property.furnished !== undefined && (
+ {property.status === "notAvailable" ? ( + + ) : ( + + )}