import React, { useState } from "react"; import { rentalAPI } from "../services/api"; import { Rental } from "../types"; import SuccessModal from "./SuccessModal"; interface ReviewRenterModalProps { show: boolean; onClose: () => void; rental: Rental; onSuccess: () => void; } const ReviewRenterModal: React.FC = ({ show, onClose, rental, onSuccess, }) => { const [rating, setRating] = useState(5); const [review, setReview] = useState(""); const [privateMessage, setPrivateMessage] = useState(""); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); const [showSuccessModal, setShowSuccessModal] = useState(false); const [successMessage, setSuccessMessage] = useState(""); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); setSubmitting(true); try { const response = await rentalAPI.reviewRenter(rental.id, { rating, review, privateMessage, }); // Reset form setRating(5); setReview(""); setPrivateMessage(""); // Show success modal with appropriate message if (response.data.reviewVisible) { setSuccessMessage("Review published successfully!"); } else { setSuccessMessage("Review submitted! It will be published when both parties have reviewed or after 10 minutes."); } setShowSuccessModal(true); } catch (err: any) { setError(err.response?.data?.error || "Failed to submit review"); } finally { setSubmitting(false); } }; const handleStarClick = (value: number) => { setRating(value); }; const handleSuccessModalClose = () => { setShowSuccessModal(false); onSuccess(); onClose(); }; if (!show) return null; return (
Review Renter
{rental.renter && rental.item && (
{rental.renter.profileImage ? ( {`${rental.renter.firstName} ) : (
{rental.renter.firstName[0]} {rental.renter.lastName[0]}
)}
{rental.renter.firstName} {rental.renter.lastName}

{rental.item.name}

{new Date(rental.startDate).toLocaleDateString()} to{" "} {new Date(rental.endDate).toLocaleDateString()}
)} {error && (
{error}
)}
{[1, 2, 3, 4, 5].map((star) => ( ))}
); }; export default ReviewRenterModal;