/* ===== Подари вторую жизнь — Catalog + Filter (подбор) ===== */ const emptyFilter = () => ({ species:'all', sizes:[], ages:[], sexes:[], colors:[], breed:'' }); function filterMatch(a, f){ if(f.species!=='all' && a.species!==f.species) return false; if(f.sizes.length && !f.sizes.includes(a.size)) return false; if(f.ages.length && !f.ages.includes(a.ageGroup)) return false; if(f.sexes.length && !f.sexes.includes(a.sex)) return false; if(f.colors.length && !f.colors.includes(a.color)) return false; if(f.breed && a.breed!==f.breed) return false; return true; } const toggleIn = (arr, v) => arr.includes(v) ? arr.filter(x=>x!==v) : [...arr, v]; /* ---- reusable filter controls ---- */ function FilterControls({ f, setF }){ const breeds = useMemo(()=>{ const set = PF.animals.filter(a=> f.species==='all'||a.species===f.species).map(a=>a.breed); return [...new Set(set)].sort(); },[f.species]); const Field = ({label, children}) => (
{loading?'Загружаем подопечных…':`Найдено ${list.length} ${plural(list.length,'друг','друга','друзей')}, готовых обрести дом`}
Сверяем ваши пожелания с теми, кто ждёт дом
Своими словами — мы поймём вид, размер, возраст, пол и окрас.
{q.sub}
}