/* global React, BVH_D */ /* Services hub + service detail */ const DS = window.BVH_DATA; const { useState: useStateS } = React; function ServicesPage({ setRoute }) { const [filter, setFilter] = useStateS("all"); const groups = { all: DS.services, urgent: DS.services.filter(s => s.tag === "URGENT" || s.id === "hospitalisation-icu"), preventive: DS.services.filter(s => ["vaccinations","microchipping","dental"].includes(s.id)), surgical: DS.services.filter(s => ["surgery","dental","diagnostics-imaging"].includes(s.id)), relocation: DS.services.filter(s => ["pet-relocation","boarding","microchipping"].includes(s.id)), }; const list = groups[filter]; return (
02SERVICES — FULL HOSPITAL

A full hospital,
under one roof.

Nine services that cover wellness through critical care. Pick a category, or browse all — every page is written conservatively, without guaranteed-outcome language. No public prices: we quote per case after consultation.

{[ { k:'all', label:'All nine' }, { k:'urgent', label:'Emergency & ICU' }, { k:'surgical', label:'Surgical & imaging' }, { k:'preventive', label:'Preventive & dental' }, { k:'relocation', label:'Travel & boarding' }, ].map(c => ( ))}
{list.map(svc => (
setRoute({type:'service', id:svc.id})} style={{gridColumn: 'span 1', minHeight:380}}> {svc.tag && {svc.tag}}
— {svc.num}
{svc.name}

{svc.name}

{svc.blurb}

))}
); } function ServiceDetail({ id, setRoute }) { const svc = DS.services.find(s => s.id === id); if (!svc) return null; const others = DS.services.filter(s => s.id !== id).slice(0,3); return (
{svc.num} SERVICE — {svc.name.toUpperCase()}

{svc.name.split(' ').map((w,i,arr) => ( {i === arr.length - 1 ? {w} : w} {i < arr.length - 1 && ' '} ))}

{svc.blurb}

Ask on WhatsApp {svc.id === 'emergency-critical-care' && ( Call now · {DS.hospital.phoneMain} )}
{svc.name}
FIG. {svc.num} — {svc.name.toUpperCase()}
AWHO IT'S FOR

The right cases.

{svc.forWho}

BWHAT TO EXPECT

Step by step.

    {svc.expect.map((e,i) => (
  1. STEP {String(i+1).padStart(2,'0')} {e}
  2. ))}
CAFTERCARE

What follows.

{svc.aftercare}

NOTE
We don't publish guaranteed-outcome claims or fixed prices. Every estimate is per case, signed and shared with you before treatment starts.
DOTHER SERVICES

Often booked alongside.

{others.map(s => (
setRoute({type:'service', id:s.id})}>
— {s.num}
{s.name}

{s.name}

{s.blurb}

))}
); } Object.assign(window, { ServicesPage, ServiceDetail });