// VEXEL — Main app shell + router const { useState: useState_app, useEffect: useEffect_app } = React; function App() { const [route, setRoute] = useState_app(() => { const h = window.location.hash.slice(1); if (!h) return { name: "home", params: {} }; const [name, q] = h.split("?"); const params = {}; if (q) q.split("&").forEach(p => { const [k, v] = p.split("="); params[k] = v; }); return { name, params }; }); const [signedIn, setSignedIn] = useState_app(false); const [lang, setLang] = useState_app("EN"); const [currency, setCurrency] = useState_app("AED"); // Probe the API on first load to check if a session cookie is valid useEffect_app(() => { (async () => { const r = await window.VexelAPI.me(); if (r.ok && r.user) setSignedIn(true); })(); }, []); const go = (name, params = {}) => { setRoute({ name, params }); const q = Object.keys(params).length ? "?" + Object.entries(params).map(([k, v]) => `${k}=${v}`).join("&") : ""; window.location.hash = name + q; window.scrollTo(0, 0); }; useEffect_app(() => { const onHash = () => { const h = window.location.hash.slice(1); if (!h) return setRoute({ name: "home", params: {} }); const [name, q] = h.split("?"); const params = {}; if (q) q.split("&").forEach(p => { const [k, v] = p.split("="); params[k] = v; }); setRoute({ name, params }); window.scrollTo(0, 0); }; window.addEventListener("hashchange", onHash); return () => window.removeEventListener("hashchange", onHash); }, []); const dir = lang === "AR" ? "rtl" : "ltr"; useEffect_app(() => { document.documentElement.dir = dir; }, [dir]); let Page; const r = route.name; if (r === "home") Page = ; else if (r === "tournaments") Page = ; else if (r === "tournament") Page = ; else if (r === "live") Page = ; else if (r === "teams") Page = ; else if (r === "team") Page = ; else if (r === "players") Page = ; else if (r === "player") Page = ; else if (r === "news") Page = ; else if (r === "article") Page = ; else if (r === "store") Page = ; else if (r === "partners") Page = ; else if (r === "about") Page = ; else if (r === "careers") Page = ; else if (r === "contact") Page = ; else if (r === "signin") Page = ; else if (r === "dashboard") Page = ; else if (r === "privacy") Page = ; else if (r === "terms") Page = ; else if (r === "conduct") Page = ; else if (r === "anticheat") Page = ; else if (r === "faq") Page = ; else if (r === "press") Page = ; else Page = ; // Hide nav/footer on sign in page for fullscreen treatment const hideChrome = r === "signin"; return ( <> {!hideChrome &&
} {Page} {!hideChrome &&