import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { PlusIcon, MapPinIcon, TrashIcon, PencilIcon } from '@heroicons/react/24/outline'; import { propertiesAPI } from '../../services/api'; import LoadingSpinner from '../../components/UI/LoadingSpinner'; import PropertyForm from '../../components/Properties/PropertyForm'; import toast from 'react-hot-toast'; const Properties = () => { const [properties, setProperties] = useState([]); const [loading, setLoading] = useState(true); const [showCreateForm, setShowCreateForm] = useState(false); useEffect(() => { fetchProperties(); }, []); const fetchProperties = async () => { try { setLoading(true); const response = await propertiesAPI.getAll(); console.log('Properties API response:', response); console.log('Response data:', response.data); console.log('Response data type:', typeof response.data); // Handle different possible response structures let propertiesData = []; if (response.data?.data?.properties) { propertiesData = Array.isArray(response.data.data.properties) ? response.data.data.properties : []; console.log('Using response.data.data.properties:', propertiesData); } else if (response.data?.data) { propertiesData = Array.isArray(response.data.data) ? response.data.data : []; console.log('Using response.data.data:', propertiesData); } else if (response.data) { propertiesData = Array.isArray(response.data) ? response.data : []; console.log('Using response.data:', propertiesData); } console.log('Final properties data:', propertiesData); setProperties(propertiesData); } catch (error) { console.error('Failed to fetch properties:', error); toast.error('Failed to load properties'); setProperties([]); // Ensure it's always an array } finally { setLoading(false); } }; const handleCreateProperty = async (propertyData) => { try { await propertiesAPI.create(propertyData); toast.success('Property created successfully!'); setShowCreateForm(false); fetchProperties(); } catch (error) { console.error('Failed to create property:', error); toast.error(error.response?.data?.message || 'Failed to create property'); throw error; // Re-throw to let the form handle it } }; const handleDelete = async (id, name) => { if (window.confirm(`Are you sure you want to delete "${name}"?`)) { try { await propertiesAPI.delete(id); toast.success('Property deleted successfully'); fetchProperties(); } catch (error) { console.error('Failed to delete property:', error); toast.error('Failed to delete property'); } } }; if (loading) { return (

Properties

); } return (

Properties

Manage your lawn care properties

{/* Create Property Form */} {showCreateForm && ( setShowCreateForm(false)} /> )} {/* Properties List */} {!Array.isArray(properties) || properties.length === 0 ? (

No Properties Yet

Get started by adding your first property

) : (
{Array.isArray(properties) && properties.map((property) => (

{property.name}

{property.address && (

{property.address}

)}
{property.totalArea && (
Total Area: {property.totalArea.toLocaleString()} sq ft
)}
Sections: {property.sectionCount || 0}
Created: {new Date(property.createdAt).toLocaleDateString()}
View Details →
))}
)}
); }; export default Properties;