import React, { useEffect, useState } from 'react'; import { useParams, useNavigate, Link } from 'react-router-dom'; import { animalsApi, dailyStatusesApi } from '../api/client'; import { format } from 'date-fns'; import Button from '../components/ui/Button'; import Modal from '../components/ui/Modal'; import ConfirmDialog from '../components/ui/ConfirmDialog'; import DailyStatusForm from '../components/DailyStatusForm'; import Alert from '../components/ui/Alert'; import AuditLogSection from '../components/AuditLogSection'; export default function AnimalDetail() { const { id } = useParams(); const navigate = useNavigate(); const [animal, setAnimal] = useState(null); const [statuses, setStatuses] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [successMsg, setSuccessMsg] = useState(null); const [showAddStatus, setShowAddStatus] = useState(false); const [editStatus, setEditStatus] = useState(null); const [deleteStatus, setDeleteStatus] = useState(null); const [deleteLoading, setDeleteLoading] = useState(false); async function load() { setLoading(true); setError(null); try { const [animalData, statusData] = await Promise.all([ animalsApi.get(id), dailyStatusesApi.list(id), ]); setAnimal(animalData); setStatuses(statusData); } catch (err) { setError(err.message); } finally { setLoading(false); } } useEffect(() => { load(); }, [id]); function flash(msg) { setSuccessMsg(msg); setTimeout(() => setSuccessMsg(null), 3000); } function handleStatusSaved() { setShowAddStatus(false); setEditStatus(null); load(); flash(editStatus ? 'Daily status updated.' : 'Daily status logged.'); } async function handleDeleteStatus() { setDeleteLoading(true); try { await dailyStatusesApi.delete(deleteStatus.id); setDeleteStatus(null); load(); flash('Daily status removed.'); } catch (err) { setError(err.message); setDeleteStatus(null); } finally { setDeleteLoading(false); } } if (loading) return
ID: {animal.animal_id_string} {' · '} {statuses.length} daily status {statuses.length !== 1 ? 'entries' : 'entry'}
No daily statuses logged yet.
No details recorded for this date.
)}