// Directions pages: catalog + detail const { useState: p3S, useMemo: p3M } = React; // ============ DIRECTIONS CATALOG ============ const DirectionsCatalogPage = ({ onBook }) => { const [query, setQuery] = p3S(''); const filtered = p3M(() => { if (!query.trim()) return DATA.directions; const q = query.toLowerCase(); return DATA.directions.filter(d => d.name.toLowerCase().includes(q) || d.desc.toLowerCase().includes(q) || (d.problems || []).some(p => p.toLowerCase().includes(q)) ); }, [query]); // Group directions into categories visually return ( <>
setQuery(e.target.value)} /> {query && ( )}
{filtered.length === 0 ? (

Ничего не найдено

Попробуйте сформулировать запрос иначе

) : (
{filtered.map((d) => { const doctorsCount = DATA.doctors.filter(doc => doc.directions && doc.directions.includes(d.id)).length; return (
Приём от
{d.priceFrom}

{d.name}

{d.desc}

{doctorsCount > 0 ? `${doctorsCount} ${pluralDoctors(doctorsCount)}` : 'команда центра'} Перейти
); })}
)}
); }; function pluralDoctors(n) { const last = n % 10; const teens = n % 100; if (teens >= 11 && teens <= 14) return 'врачей'; if (last === 1) return 'врач'; if (last >= 2 && last <= 4) return 'врача'; return 'врачей'; } // ============ DIRECTION DETAIL ============ const DirectionDetailPage = ({ directionId, onBook }) => { const direction = p3M(() => DATA.directions.find(d => d.id === directionId), [directionId]) || DATA.directions[0]; const directionDoctors = p3M(() => DATA.doctors.filter(doc => doc.directions && doc.directions.includes(direction.id)) , [direction]); const [openFaq, setOpenFaq] = p3S(0); return ( <>
Центр компетенций

{direction.name}

{direction.longDesc}

Что мы лечим
Приём от
{direction.priceFrom}
Врачей в направлении
{directionDoctors.length || '—'}
Видов диагностики
{(direction.diagnostics || []).length}
Методов лечения
{(direction.methods || []).length}
{/* PROBLEMS */}
{(direction.problems || []).map((p, i) => (
{String(i + 1).padStart(2, '0')} {p}
))}
{/* DIAGNOSTICS + METHODS */}
Диагностика

Что мы исследуем

Современное оборудование экспертного класса и опытные диагносты. Все исследования сопровождаются расшифровкой.

{(direction.diagnostics || []).map((d, i) => ( {d} ))}
Лечение

Методы лечения

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

{(direction.methods || []).map((m, i) => ( {m} ))}
{/* DOCTORS OF DIRECTION */} {directionDoctors.length > 0 && (
Все врачи} />
{directionDoctors.map(d => )}
)} {/* FAQ */} {direction.faq && direction.faq.length > 0 && (
{direction.faq.map((item, i) => (
{openFaq === i && (
{item.a}
)}
))}
)} {/* CTA */}

Нужна помощь по направлению «{direction.name}»?

Запишитесь на консультацию или загрузите документы для консилиума.

Второе мнение
); }; Object.assign(window, { DirectionsCatalogPage, DirectionDetailPage, pluralDoctors });