// App-Root + Routing
const { useHashRoute, Header, Footer } = window.UI;
const { HomePage, AnlaesseOverview, AnlassDetail, LeistungenPage, GaleriePage, UeberUnsPage, KontaktPage, NotFound } = window.PAGES;
const { ConfiguratorPage, DankePage } = window.CONFIGURATOR;
function App() {
const route = useHashRoute();
const segs = route.segs;
let page;
if (segs.length === 0) page = ;
else if (segs[0] === 'anlaesse') {
if (segs[1]) page = ;
else page = ;
}
else if (segs[0] === 'leistungen') page = ;
else if (segs[0] === 'galerie') page = ;
else if (segs[0] === 'ueber-uns') page = ;
else if (segs[0] === 'kontakt') page = ;
else if (segs[0] === 'konfigurator') {
if (segs[1] === 'danke') page = ;
else page = ;
}
else page = ;
// Konfigurator hat eigenes Layout (eigener Stepper statt Hero)
const isConfig = segs[0] === 'konfigurator';
return (
{page}
{!isConfig && }
);
}
// Konfig vom Server holen, dann erst rendern.
// Fallback (Hardcoded) ist bereits in window.SITE_DATA — wenn fetch scheitert,
// rendert die App einfach mit den Default-Werten.
(async function bootstrap() {
if (window.OF_API && typeof window.OF_API.loadPublicConfig === 'function') {
try {
const cfg = await window.OF_API.loadPublicConfig();
// Server-Werte ins SITE_DATA mergen (überschreibt Fallback)
const sd = window.SITE_DATA;
if (cfg.anlaesse && cfg.anlaesse.length) sd.ANLAESSE = cfg.anlaesse;
if (cfg.bausteine && Object.keys(cfg.bausteine).length) sd.BAUSTEINE = cfg.bausteine;
if (cfg.anfahrt) sd.ANFAHRT = cfg.anfahrt;
if (cfg.timeline_bausteine && cfg.timeline_bausteine.length) sd.TIMELINE_BAUSTEINE = cfg.timeline_bausteine;
if (cfg.timeline_vorlagen) {
sd.TIMELINE_VORLAGEN = cfg.timeline_vorlagen;
if (cfg.timeline_vorlagen.default) sd.TIMELINE_VORLAGE = cfg.timeline_vorlagen.default;
}
sd.TEXTE = cfg.texte || {};
} catch (e) { /* Fallback bleibt */ }
}
ReactDOM.createRoot(document.getElementById('root')).render();
})();