import { useEffect, useRef, useState } from 'react'; import { Icon } from '../Icon'; import { GameSort } from '../../lib/types'; const OPTIONS: ReadonlyArray<{ key: GameSort; label: string }> = [ { key: 'az', label: 'Name (A–Z)' }, { key: 'sizeDesc', label: 'Size (largest)' }, { key: 'sizeAsc', label: 'Size (smallest)' }, { key: 'status', label: 'Status' }, ]; interface Props { value: GameSort; onChange: (value: GameSort) => void; } export const SortMenu = ({ value, onChange }: Props) => { const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { if (!open) return; const onClick = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); }; document.addEventListener('mousedown', onClick); return () => document.removeEventListener('mousedown', onClick); }, [open]); const current = OPTIONS.find(o => o.key === value) ?? OPTIONS[0]; return (
{open && (
{OPTIONS.map(o => ( ))}
)}
); };