diff --git a/client/src/pages/DogDetail.jsx b/client/src/pages/DogDetail.jsx index af61ae5..9688c63 100644 --- a/client/src/pages/DogDetail.jsx +++ b/client/src/pages/DogDetail.jsx @@ -1,12 +1,16 @@ -import { useEffect, useState } from 'react' +import { useEffect, useState, useRef } from 'react' import { useParams, Link } from 'react-router-dom' -import { Dog, GitBranch, Edit, Trash2 } from 'lucide-react' +import { Dog, GitBranch, Edit, Upload, Trash2 } from 'lucide-react' import axios from 'axios' +import DogForm from '../components/DogForm' function DogDetail() { const { id } = useParams() const [dog, setDog] = useState(null) const [loading, setLoading] = useState(true) + const [showEditModal, setShowEditModal] = useState(false) + const [uploading, setUploading] = useState(false) + const fileInputRef = useRef(null) useEffect(() => { fetchDog() @@ -23,6 +27,40 @@ function DogDetail() { } } + const handlePhotoUpload = async (e) => { + const file = e.target.files[0] + if (!file) return + + setUploading(true) + const formData = new FormData() + formData.append('photo', file) + + try { + await axios.post(`/api/dogs/${id}/photos`, formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) + fetchDog() + } catch (error) { + console.error('Error uploading photo:', error) + alert('Failed to upload photo') + } finally { + setUploading(false) + if (fileInputRef.current) fileInputRef.current.value = '' + } + } + + const handleDeletePhoto = async (photoIndex) => { + if (!confirm('Delete this photo?')) return + + try { + await axios.delete(`/api/dogs/${id}/photos/${photoIndex}`) + fetchDog() + } catch (error) { + console.error('Error deleting photo:', error) + alert('Failed to delete photo') + } + } + if (loading) { return