import { useState, useMemo } from 'react' import type { Game } from '../types' import { GameCard } from './GameCard' const GENERATION_LABELS: Record = { 1: 'Generation I', 2: 'Generation II', 3: 'Generation III', 4: 'Generation IV', 5: 'Generation V', 6: 'Generation VI', 7: 'Generation VII', 8: 'Generation VIII', 9: 'Generation IX', } interface GameGridProps { games: Game[] selectedId: number | null onSelect: (game: Game) => void } export function GameGrid({ games, selectedId, onSelect }: GameGridProps) { const [filter, setFilter] = useState(null) const generations = useMemo( () => [...new Set(games.map((g) => g.generation))].sort(), [games], ) const filtered = filter ? games.filter((g) => g.generation === filter) : games const grouped = useMemo(() => { const groups: Record = {} for (const game of filtered) { ;(groups[game.generation] ??= []).push(game) } return Object.entries(groups) .map(([gen, games]) => ({ generation: Number(gen), games })) .sort((a, b) => a.generation - b.generation) }, [filtered]) return (
{generations.map((gen) => ( ))}
{grouped.map(({ generation, games }) => (

{GENERATION_LABELS[generation] ?? `Generation ${generation}`}

{games.map((game) => ( ))}
))}
) }