// 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 && }
>
);
}
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render();