/* 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();