'use client'; import { useMemo, useState, type ChangeEvent } from 'react'; import { Search } from 'lucide-react'; import type { GameListItem } from '@/types/response/store/game'; import GameCard from './GameCard'; type SortKey = 'latest'|'name'; const SORT_OPTIONS: { value: SortKey; label: string }[] = [ { value: 'latest', label: '최신순' }, { value: 'name', label: '이름순' } ]; export default function GamesExplorer({ games }: { games: GameListItem[] }) { const [keyword, setKeyword] = useState(''); const [sort, setSort] = useState('latest'); const filtered = useMemo(() => { let list = [...games]; const kw = keyword.trim().toLowerCase(); if (kw) { list = list.filter(g => g.korName.toLowerCase().includes(kw) || (g.engName?.toLowerCase().includes(kw) ?? false)); } if (sort === 'name') { list.sort((a, b) => a.korName.localeCompare(b.korName)); } else { list.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()); } return list; }, [games, keyword, sort]); return (

게임 {filtered.length.toLocaleString()}

e.preventDefault()} className="flex gap-2"> setKeyword(e.target.value)} placeholder="게임명 검색" aria-label="검색" className="h-9 min-w-[200px] rounded-lg border border-[var(--border-default)] bg-[var(--bg-elevated)] px-3 text-sm" />
{filtered.length === 0 ? (

게임이 없습니다.

) : (
{filtered.map(g => )}
)}
); }