import { useParams } from 'react-router-dom';
import ctaImage from '../assets/figma/checkup-cta-3d.webp';
import { api } from '../api.js';
import Breadcrumbs from '../components/Breadcrumbs.jsx';
import CtaBand from '../components/CtaBand.jsx';
import { useLeadModal } from '../context/LeadModalContext.jsx';
import { plural, priceLabel } from '../lib/format.js';
import { checkupMedia } from '../lib/media.js';
import { checklistItems, cleanText, introText } from '../lib/text.js';
import { useApi } from '../lib/useApi.js';
import { usePageTitle } from '../lib/usePageTitle.js';
import { pageMetadata } from '../lib/seo.js';
import { useInitialApiData } from '../context/ApiData.jsx';
import StubPage from './StubPage.jsx';
import './CheckupPage.css';
export default function CheckupPage() {
const { slug } = useParams();
const { open } = useLeadModal();
const checkup = useApi((signal) => api.checkup(slug, { signal }), [slug], `checkup:${slug}`);
const name = cleanText(checkup.data?.name);
const siteURL = useInitialApiData('siteURL') || (typeof window !== 'undefined' ? window.location.origin : '');
usePageTitle(name || undefined, checkup.data ? pageMetadata(`/checkup/${slug}/`, name, siteURL, checkup.data.seo, checkup.data.lead) : undefined);
if (checkup.error?.status === 404) return
Не удалось загрузить программу. Обновите страницу.
; if (!checkup.data || checkup.data.slug !== slug) returnЗагружаем…
; const c = checkup.data; const { hero, photo, cutout, heroBg, cutoutRatio } = checkupMedia(c); const items = c.items?.length ? c.items.map(cleanText) : checklistItems(c.blocks); const intro = introText(c.blocks); const lead = cleanText(c.lead); const book = () => open({ form: 'appointment', message: `Чек-ап: ${name}` }); const askPrice = () => open({ form: 'service_order', message: `Стоимость чек-апа: ${name}` }); // первый столбец списка заполняется сверху вниз, затем второй — как в макете const rows = Math.ceil(items.length / 2); return ({lead}
} {intro &&{intro}
}Все ключевые этапы собраны в одном маршруте — от приёма специалиста до лабораторной диагностики.
{c.price ? `Стоимость программы — ${priceLabel({ price: c.price })}. Администратор подтвердит её при записи.` : 'Актуальную стоимость программы администратор назовёт при записи или по телефону.'}
Администратор расскажет о подготовке к анализам и исследованиям при подтверждении записи.
Состав программы и актуальную стоимость уточняйте у администратора клиники.