/* Torre Auro — App router and bootstrap */ class ErrorBoundary extends React.Component { constructor(p) { super(p); this.state = { err: null }; } static getDerivedStateFromError(err) { return { err }; } componentDidCatch(err, info) { console.error('Torre Auro error:', err, info); } render() { if (this.state.err) { return (
Algo no cargó bien.

Recarga la página para continuar. Si el problema persiste, contáctanos al 229 302 7197.

); } return this.props.children; } } function App() { const route = useRoute(); // Resolve which page to render let page; let key = route; if (route === '/' || route === '') { page = ; key = 'home'; } else if (route === '/contacto') { page = ; } else if (route === '/perspectiva' || route === '/perspectiva/') { page = ; key = 'perspectiva'; } else if (route.startsWith('/perspectiva/')) { const slug = route.replace(/^\/perspectiva\//, '').replace(/\/$/, ''); const post = POST_BY_SLUG[slug]; if (post) { page = ; key = 'post-' + slug; } else { page = ; key = 'perspectiva'; window.history.replaceState({}, '', '/perspectiva'); } } else if (route === '/eventos' || route === '/eventos/') { page = ; key = 'eventos'; } else if (route.startsWith('/eventos/')) { const slug = route.replace(/^\/eventos\//, '').replace(/\/$/, ''); const ev = EVENT_BY_SLUG[slug]; if (ev) { page = ; key = 'event-' + slug; } else { page = ; key = 'eventos'; window.history.replaceState({}, '', '/eventos'); } } else { // try match a floor by its route ID, or a floor/office detail const slug = route.replace(/^\/+/, '').replace(/\/$/, ''); const parts = slug.split('/'); const floor = FLOOR_BY_ID[parts[0]]; if (floor && parts.length === 2) { const office = floor.offices.find(o => o.code === parts[1]); if (office) { page = ; key = 'office-' + parts[0] + '-' + parts[1]; } else { page = ; window.history.replaceState({}, '', floor.route); } } else if (floor) { page = ; } else { // 404 — redirect to home page = ; if (typeof window !== 'undefined') { window.history.replaceState({}, '', '/'); } key = 'home'; } } // Update document title useEffect(() => { const t = (() => { if (route === '/') return 'Torre Auro · El ecosistema empresarial de Boca del Río'; if (route === '/contacto') return 'Contacto · Torre Auro'; if (route === '/perspectiva') return 'Perspectiva · Torre Auro'; if (route.startsWith('/perspectiva/')) { const s = route.replace(/^\/perspectiva\//, '').replace(/\/$/, ''); const p = POST_BY_SLUG[s]; return p ? `${p.title} · Perspectiva` : 'Perspectiva · Torre Auro'; } if (route === '/eventos') return 'El Calendario · Torre Auro'; if (route.startsWith('/eventos/')) { const s = route.replace(/^\/eventos\//, '').replace(/\/$/, ''); const ev = EVENT_BY_SLUG[s]; return ev ? `${ev.title} · Torre Auro` : 'El Calendario · Torre Auro'; } const slug = route.replace(/^\/+/, '').replace(/\/$/, ''); const parts = slug.split('/'); const f = FLOOR_BY_ID[parts[0]]; if (f && parts.length === 2) return `${parts[1]} · ${f.sh} · Torre Auro`; if (f) return `${f.sh} · ${f.short} · Torre Auro`; return 'Torre Auro'; })(); document.title = t; }, [route]); return (
); } const root = ReactDOM.createRoot(document.getElementById('app')); root.render();