import { useMemo, useState } from 'react' import { useGenlockeGraveyard } from '../hooks/useGenlockes' import { TypeBadge } from './TypeBadge' import type { GraveyardEntry } from '../types' type SortKey = 'leg' | 'level' | 'species' interface GenlockeGraveyardProps { genlockeId: number } function GraveyardCard({ entry }: { entry: GraveyardEntry }) { const displayPokemon = entry.currentPokemon ?? entry.pokemon const isEvolved = entry.currentPokemon !== null return (
{displayPokemon.spriteUrl ? ( {displayPokemon.name} ) : (
{displayPokemon.name[0]?.toUpperCase()}
)}
{entry.nickname || displayPokemon.name}
{entry.nickname &&
{displayPokemon.name}
}
{displayPokemon.types.map((type) => ( ))}
Lv. {entry.catchLevel} → {entry.faintLevel}
{entry.routeName}
Leg {entry.legOrder} — {entry.gameName}
{isEvolved && (
Originally: {entry.pokemon.name}
)} {entry.deathCause && (
{entry.deathCause}
)}
) } export function GenlockeGraveyard({ genlockeId }: GenlockeGraveyardProps) { const { data, isLoading, error } = useGenlockeGraveyard(genlockeId) const [filterLeg, setFilterLeg] = useState(null) const [sortKey, setSortKey] = useState('leg') const filtered = useMemo(() => { if (!data) return [] let entries = data.entries if (filterLeg !== null) { entries = entries.filter((e) => e.legOrder === filterLeg) } return [...entries].sort((a, b) => { switch (sortKey) { case 'leg': return a.legOrder - b.legOrder || a.id - b.id case 'level': return (b.faintLevel ?? 0) - (a.faintLevel ?? 0) case 'species': { const nameA = (a.currentPokemon ?? a.pokemon).name const nameB = (b.currentPokemon ?? b.pokemon).name return nameA.localeCompare(nameB) } default: return 0 } }) }, [data, filterLeg, sortKey]) if (isLoading) { return (
) } if (error) { return (
Failed to load graveyard data.
) } if (!data || data.totalDeaths === 0) { return (
No deaths recorded across any leg.
) } return (
{/* Summary bar */}
{data.totalDeaths} total death{data.totalDeaths !== 1 ? 's' : ''} {data.deadliestLeg && ( Deadliest: Leg {data.deadliestLeg.legOrder} — {data.deadliestLeg.gameName} ( {data.deadliestLeg.deathCount}) )}
{/* Controls */}
{/* Grid */}
{filtered.map((entry) => ( ))}
) }