/* global React, ReactDOM, Nav, Footer, ContactModal, CookieBanner, HomePage, AboutPage, ConsultancyPage, CoachingPage, PartnersPage, DiagnosticPage, PrivacyPage */
const { useState, useEffect } = React;
const ROUTES = ["home", "about", "consultancy", "coaching", "partners", "diagnostic", "privacy"];
const ROUTE_LABELS = {
home: "People Cake",
about: "About",
consultancy: "HR Consultancy",
coaching: "Career Coaching",
partners: "Partners",
diagnostic: "Team Diagnostic",
privacy: "Privacy Policy"
};
function App() {
const [route, setRoute] = useState(() => {
const h = window.location.hash.replace("#", "");
return ROUTES.includes(h) ? h : "home";
});
const [contactOpen, setContactOpen] = useState(false);
const [modalAccent, setModalAccent] = useState("purple");
const navigate = (id) => {
if (!ROUTES.includes(id)) return;
setRoute(id);
window.location.hash = id;
window.scrollTo({ top: 0, behavior: "instant" });
document.title = `${ROUTE_LABELS[id]} · People Cake`;
};
const openContact = (accent = "purple") => {
setModalAccent(typeof accent === "string" ? accent : "purple");
setContactOpen(true);
};
useEffect(() => {
const onHash = () => {
const h = window.location.hash.replace("#", "");
if (ROUTES.includes(h) && h !== route) setRoute(h);
};
window.addEventListener("hashchange", onHash);
document.title = `${ROUTE_LABELS[route]} · People Cake`;
return () => window.removeEventListener("hashchange", onHash);
}, [route]);
const pageProps = { navigate, onCTA: () => openContact(route === "coaching" ? "violet" : "purple") };
let Page;
switch (route) {
case "about": Page = AboutPage; break;
case "consultancy": Page = ConsultancyPage; break;
case "coaching": Page = CoachingPage; break;
case "partners": Page = PartnersPage; break;
case "diagnostic": Page = DiagnosticPage; break;
case "privacy": Page = PrivacyPage; break;
default: Page = HomePage;
}
return (
);
}
ReactDOM.createRoot(document.getElementById("root")).render();