/* App shell: routing + state management + footer + mount */
const { useState: useAppState, useEffect: useAppEffect } = React;
function PPFooter({ t, setRoute }) {
return (
);
}
function PPHomePage({ t, setRoute }) {
return (
);
}
function App() {
const [route, setRouteState] = useAppState(() => {
const h = window.location.hash.replace(/^#/, "");
return h || "/";
});
const [lang, setLangState] = useAppState(() => localStorage.getItem("pp-lang") || "pl");
const [theme, setThemeState] = useAppState(() => localStorage.getItem("pp-theme") || "dark");
const [fontSize, setFontSizeState] = useAppState(() => localStorage.getItem("pp-fs") || "md");
const [simple, setSimpleState] = useAppState(() => localStorage.getItem("pp-simple") === "true");
const [accOpen, setAccOpen] = useAppState(false);
// Apply prefs to
useAppEffect(() => {
document.documentElement.dataset.theme = theme;
localStorage.setItem("pp-theme", theme);
}, [theme]);
useAppEffect(() => {
document.documentElement.dataset.fs = fontSize;
localStorage.setItem("pp-fs", fontSize);
}, [fontSize]);
useAppEffect(() => {
document.documentElement.dataset.simple = simple ? "true" : "false";
localStorage.setItem("pp-simple", simple);
}, [simple]);
useAppEffect(() => {
document.documentElement.lang = lang;
localStorage.setItem("pp-lang", lang);
}, [lang]);
// Hash-based routing
useAppEffect(() => {
const onHash = () => {
const h = window.location.hash.replace(/^#/, "");
setRouteState(h || "/");
};
window.addEventListener("hashchange", onHash);
return () => window.removeEventListener("hashchange", onHash);
}, []);
const setRoute = (r) => {
setRouteState(r);
window.location.hash = "#" + r;
};
const setLang = (l) => setLangState(l);
const t = window.PP_CONTENT[lang] || window.PP_CONTENT.pl;
let Page;
switch (route) {
case "/o-poradni": Page = ; break;
case "/oferta": Page = ; break;
case "/zespol": Page = ; break;
case "/aktualnosci": Page = ; break;
case "/strefa-rodzica": Page = ; break;
case "/do-pobrania": Page = ; break;
case "/kontakt": Page = ; break;
case "/dostepnosc": Page = ; break;
default: Page = ;
}
return (
<>
setAccOpen(true)}
/>
{Page}
setAccOpen(true)} lang={lang} />
setAccOpen(false)}
theme={theme}
setTheme={setThemeState}
fontSize={fontSize}
setFontSize={setFontSizeState}
simple={simple}
setSimple={setSimpleState}
t={t}
lang={lang}
/>
>
);
}
ReactDOM.createRoot(document.getElementById("root")).render();