Fix Pairing Simulator: dog dropdowns were always empty
Build and Push Docker Image / build (push) Successful in 26s

PairingSimulator read 'data.dogs' from GET /api/dogs, but that endpoint returns
a paginated { data, total, ... } object — the fallback silently produced an
empty list, so no sires or dams ever appeared. Same latent wrong-response-key
bug as the Start Heat Cycle female list fixed in 55d636b.

Switch to GET /api/dogs/all (unpaginated, kennel + external — no 50-dog page
cap) and surface load failures in the existing error card instead of
swallowing them.

Verified in-browser: dropdowns populate, parent-offspring pairing shows the
'Related' warning and computes COI 25.00% with common ancestor listed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jason Stedwell
2026-07-06 15:51:56 -05:00
parent 9f446d7b01
commit be79364aa4
+10 -5
View File
@@ -15,14 +15,19 @@ export default function PairingSimulator() {
const [geneticChecking, setGeneticChecking] = useState(false) const [geneticChecking, setGeneticChecking] = useState(false)
useEffect(() => { useEffect(() => {
// include_external=1 ensures external sires/dams appear for pairing // /all returns an unpaginated array of every active dog (kennel + external),
fetch('/api/dogs?include_external=1') // so external sires/dams appear and nothing is cut off by pagination
.then(r => r.json()) fetch('/api/dogs/all')
.then(r => r.ok ? r.json() : Promise.reject(new Error(`HTTP ${r.status}`)))
.then(data => { .then(data => {
setDogs(Array.isArray(data) ? data : (data.dogs || [])) setDogs(Array.isArray(data) ? data : (data.data || []))
setDogsLoading(false)
})
.catch((err) => {
console.error('Failed to load dogs for pairing:', err)
setError('Failed to load dogs — refresh to try again')
setDogsLoading(false) setDogsLoading(false)
}) })
.catch(() => setDogsLoading(false))
}, []) }, [])
// Check for direct relation whenever both sire and dam are selected // Check for direct relation whenever both sire and dam are selected