import { useEffect, useState } from 'react' import { useParams, useNavigate } from 'react-router-dom' import { ArrowLeft, GitBranch, AlertCircle, Loader } from 'lucide-react' import axios from 'axios' import PedigreeTree from '../components/PedigreeTree' import { transformPedigreeData, formatCOI, getPedigreeCompleteness } from '../utils/pedigreeHelpers' function PedigreeView() { const { id } = useParams() const navigate = useNavigate() const [loading, setLoading] = useState(true) const [error, setError] = useState('') const [dog, setDog] = useState(null) const [pedigreeData, setPedigreeData] = useState(null) const [coiData, setCoiData] = useState(null) const [generations, setGenerations] = useState(5) useEffect(() => { fetchPedigreeData() }, [id, generations]) const fetchPedigreeData = async () => { setLoading(true) setError('') try { const pedigreeRes = await axios.get(`/api/pedigree/${id}`) const dogData = pedigreeRes.data setDog(dogData) const treeData = transformPedigreeData(dogData, generations) setPedigreeData(treeData) try { const coiRes = await axios.get(`/api/pedigree/${id}/coi`) setCoiData(coiRes.data) } catch (coiError) { console.warn('COI calculation unavailable:', coiError) setCoiData(null) } setLoading(false) } catch (err) { console.error('Error fetching pedigree:', err) setError(err.response?.data?.error || 'Failed to load pedigree data') setLoading(false) } } const completeness = pedigreeData ? getPedigreeCompleteness(pedigreeData, generations) : 0 const coiInfo = formatCOI(coiData?.coi) if (loading) { return (

Loading pedigree data...

) } if (error) { return (

Error Loading Pedigree

{error}

) } // Completeness bar colour — uses theme tokens const barColor = completeness === 100 ? 'var(--success)' : 'var(--primary)' return (
{/* Header */}

{dog?.name}'s Pedigree

{dog?.registration_number && (

Registration: {dog.registration_number}

)}
{/* Stats Bar */}
{/* COI */}
Coefficient of Inbreeding
{coiInfo.value} {coiInfo.level}
{coiInfo.description}
{/* Completeness */}
Pedigree Completeness
{completeness}%
{/* Generations */}
Generations Displayed
{/* Pedigree Tree */}
{pedigreeData ? ( ) : (

No Pedigree Data Available

Add parent information to this dog to build the pedigree tree.

)}
{/* Tip */}
💡 Tip:{' '} Click any ancestor node to navigate to their profile. Use the zoom controls or scroll to explore the tree, and drag to pan.
) } export default PedigreeView