import React, { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import axios from 'axios'; import { Card, CardHeader, CardBody, CardFooter, Row, Col, Table, Badge, Button, Spinner, Alert, Tabs, Tab, Modal } from 'react-bootstrap'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faEdit, faTrash, faWrench, faInfoCircle, faHistory, faFileAlt, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; import ServiceHistoryList from './ServiceHistoryList'; import DocumentList from './DocumentList'; const EquipmentDetails = () => { const { propertyId, equipmentId } = useParams(); const navigate = useNavigate(); const [equipment, setEquipment] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [activeTab, setActiveTab] = useState('details'); const [showDeleteModal, setShowDeleteModal] = useState(false); useEffect(() => { const fetchEquipmentDetails = async () => { try { setLoading(true); const response = await axios.get(`/api/v1/properties/${propertyId}/equipment/${equipmentId}`); setEquipment(response.data.data); setError(null); } catch (err) { setError(err.response?.data?.message || 'Failed to load equipment details'); } finally { setLoading(false); } }; fetchEquipmentDetails(); }, [propertyId, equipmentId]); const handleEdit = () => { navigate(`/properties/${propertyId}/equipment/${equipmentId}/edit`); }; const handleServiceRequest = () => { navigate(`/properties/${propertyId}/equipment/${equipmentId}/service-request`); }; const handleDelete = async () => { try { await axios.delete(`/api/v1/properties/${propertyId}/equipment/${equipmentId}`); setShowDeleteModal(false); navigate(`/properties/${propertyId}/equipment`); } catch (err) { setError(err.response?.data?.message || 'Failed to delete equipment'); setShowDeleteModal(false); } }; const renderStatusBadge = (status) => { const statusMap = { 'operational': { variant: 'success', label: 'Operational' }, 'needs_maintenance': { variant: 'warning', label: 'Needs Maintenance' }, 'out_of_service': { variant: 'danger', label: 'Out of Service' } }; const { variant, label } = statusMap[status] || { variant: 'secondary', label: status }; return {label}; }; if (loading) { return (
Loading...
); } if (error) { return ( {error} ); } if (!equipment) { return ( Equipment not found ); } return (

{equipment.nickname || equipment.model.name}

setActiveTab(k)} className="mb-4" >
Manufacturer {equipment.model.manufacturerName}
Model {equipment.model.name} ({equipment.model.modelNumber})
Category {equipment.model.categoryName}
Serial Number {equipment.serialNumber || 'N/A'}
Status {renderStatusBadge(equipment.status)}
Location {equipment.locationInProperty || 'N/A'}
Installation Date {equipment.installationDate || 'N/A'}
Warranty Expiry {equipment.warrantyExpiry || 'N/A'}
Purchase Date {equipment.purchaseDate || 'N/A'}
Purchase Price {equipment.purchasePrice ? `${equipment.purchasePrice}` : 'N/A'}
Seller {equipment.sellerName || 'N/A'}
Last Serviced {equipment.lastServicedDate || 'N/A'}
{equipment.notes && (
Notes

{equipment.notes}

)} {equipment.specifications && equipment.specifications.length > 0 && (
Specifications
{equipment.specifications.map((spec) => ( ))}
Specification Value
{spec.specName} {spec.specValue} {spec.specUnit}
)}
{/* Delete Confirmation Modal */} setShowDeleteModal(false)}> Confirm Deletion Are you sure you want to delete this equipment? This action cannot be undone and will remove all service history.
); }; export default EquipmentDetails;