'use client'; import { useState, useMemo } from 'react'; import shared from '../../styles/shared.module.css'; import styles from '../../styles/Items.module.css'; import QuantityCard from '../../components/QuantityCard'; import { Addon, getAddonIconUrl, randInRange } from './types'; type Props = { addons: Addon[]; quantities: Record; randMin: number; randMax: number; onSetQty: (id: string, qty: number) => void; }; export default function AddonGrid({ addons, quantities, randMin, randMax, onSetQty }: Props) { const [search, setSearch] = useState(''); const [roleFilter, setRoleFilter] = useState<'all' | 'killer' | 'survivor'>('all'); const filtered = useMemo(() => { return addons.filter(addon => { if (roleFilter === 'killer' && addon.role !== 1) return false; if (roleFilter === 'survivor' && addon.role !== 2) return false; if (search.trim() && !addon.name.toLowerCase().includes(search.toLowerCase())) return false; return true; }); }, [addons, search, roleFilter]); const handleGive100Visible = () => filtered.forEach(a => onSetQty(a.id, 100)); const handleRandVisible = () => filtered.forEach(a => onSetQty(a.id, randInRange(randMin, randMax))); const handleLockVisible = () => filtered.forEach(a => onSetQty(a.id, 0)); const activeCount = Object.values(quantities).filter(q => q > 0).length; return ( <>
setSearch(e.target.value)} />
{filtered.length} shown ยท {activeCount} active out of {addons.length} total
{filtered.length === 0 ? (
No addons match
) : (
{filtered.map(addon => ( ))}
)} ); }