/* ===== Подари вторую жизнь — Animal detail ===== */ function Gallery({ urls, name }){ const [i, setI] = useState(0); const [loaded, setLoaded] = useState(false); useEffect(()=>{ setLoaded(false); },[i]); const go = (d)=> setI(p=> (p+d+urls.length)%urls.length); return (
{!loaded &&
} {name}setLoaded(true)} style={{width:'100%',height:'100%',objectFit:'cover',opacity:loaded?1:0,transition:'opacity .35s',animation:'fadeUp .4s'}}/> {urls.length>1 && <>
{urls.map((_,k)=>setI(k)} style={{width:k===i?22:8,height:8,borderRadius:99,background:k===i?'#fff':'rgba(255,255,255,.6)',cursor:'pointer',transition:'.2s'}}/>)}
}
{urls.length>1 &&
{urls.map((u,k)=>( ))}
}
); } function ParamCard({ ico:Ico, label, value, accent }){ return (
{label}
{value}
); } function DetailScreen(){ const { route, go, favs, toggleFav } = useNav(); const a = PF.byId(route.params?.id); const [adopt, setAdopt] = useState(false); const [adoptDone, setAdoptDone] = useState(false); useEffect(()=>{ setAdopt(false); setAdoptDone(false); window.scrollTo(0,0); },[route.params?.id]); if(!a) return
go('catalog')}>Ко всем животным}/>
; const on = favs.includes(a.id); const similar = PF.animals.filter(x=>x.id!==a.id && x.species===a.species).slice(0,4); const colorObj = PF.COLORS.find(c=>c.id===a.color); return (
{PF.speciesOne(a.species)} {a.breed}

{a.name}

{PF.sexLabel(a.sex)} · {a.ageText}
} label="Окрас" value={PF.colorLabel(a.color)}/>

О характере

{a.desc}

Здоровье
{a.health}
{a.needs &&
Особые потребности
{a.needs}
}
Где находится
{a.loc}
{!adoptDone ?
Хотите забрать {a.sex==='male'?'его':'её'} домой?

Оставьте заявку — пройдём короткую анкету, согласие на обработку данных и договор. После модерации куратор свяжется с вами.

{['Анкета','Согласие','Чек-лист','Договор'].map((s,i)=>({i+1}{s}))}
:
Заявка отправлена куратору
На модерации — обычно отвечаем в течение дня
Контакт куратора
{a.contact}
Проверенный куратор
}
{similar.length>0 &&

Похожие друзья

go('catalog',{species:a.species})}>Все {a.species==='cat'?'кошки':'собаки'}
{similar.map(s=>)}
} {adopt && setAdopt(false)} onDone={()=>{ setAdopt(false); setAdoptDone(true); }}/>}
); } window.DetailScreen = DetailScreen;