import React, { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Item, Rental } from '../types'; import { useAuth } from '../contexts/AuthContext'; import { itemAPI, rentalAPI } from '../services/api'; import LocationMap from '../components/LocationMap'; import ItemReviews from '../components/ItemReviews'; const ItemDetail: React.FC = () => { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const { user } = useAuth(); const [item, setItem] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [selectedImage, setSelectedImage] = useState(0); const [isAlreadyRenting, setIsAlreadyRenting] = useState(false); useEffect(() => { fetchItem(); if (user) { checkIfAlreadyRenting(); } }, [id, user]); const fetchItem = async () => { try { const response = await itemAPI.getItem(id!); setItem(response.data); } catch (err: any) { setError(err.response?.data?.message || 'Failed to fetch item'); } finally { setLoading(false); } }; const checkIfAlreadyRenting = async () => { try { const response = await rentalAPI.getMyRentals(); const rentals: Rental[] = response.data; // Check if user has an active rental for this item const hasActiveRental = rentals.some(rental => rental.item?.id === id && ['pending', 'confirmed', 'active'].includes(rental.status) ); setIsAlreadyRenting(hasActiveRental); } catch (err) { console.error('Failed to check rental status:', err); } }; const handleEdit = () => { navigate(`/items/${id}/edit`); }; const handleRent = () => { navigate(`/items/${id}/rent`); }; if (loading) { return (
Loading...
); } if (error || !item) { return (
{error || 'Item not found'}
); } const isOwner = user?.id === item.ownerId; return (
{item.images.length > 0 ? (
{item.name} {item.images.length > 1 && (
{item.images.map((image, index) => ( {`${item.name} setSelectedImage(index)} /> ))}
)}
) : (
No image available
)}

{item.name}

{item.location}

{item.owner && (
navigate(`/users/${item.ownerId}`)} style={{ cursor: 'pointer' }} > {item.owner.profileImage ? ( {`${item.owner.firstName} ) : (
)} {item.owner.firstName} {item.owner.lastName}
)}
{item.tags.map((tag, index) => ( {tag} ))}
Description

{item.description}

Pricing
{item.pricePerHour && (
Per Hour: ${item.pricePerHour}
)} {item.pricePerDay && (
Per Day: ${item.pricePerDay}
)} {item.pricePerWeek && (
Per Week: ${item.pricePerWeek}
)} {item.pricePerMonth && (
Per Month: ${item.pricePerMonth}
)}
Details

Replacement Cost: ${item.replacementCost}

{item.minimumRentalDays && (

Minimum Rental: {item.minimumRentalDays} days

)} {item.maximumRentalDays && (

Maximum Rental: {item.maximumRentalDays} days

)}
{item.rules && (
Rules

{item.rules}

)}
{isOwner ? ( ) : ( item.availability && !isAlreadyRenting && ( ) )} {!isOwner && isAlreadyRenting && ( )}
); }; export default ItemDetail;