/* ====== Shared: routing, Logo, Nav, Footer, helpers ====== */
const { useState, useEffect } = React;
/* hash router: #/tentang -> "tentang", empty -> "home" */
function parseRoute() {
const h = (location.hash || "").replace(/^#\/?/, "").trim();
return h || "home";
}
function useRoute() {
const [route, setRoute] = useState(parseRoute);
useEffect(() => {
const on = () => { setRoute(parseRoute()); window.scrollTo({ top: 0, behavior: "instant" }); };
window.addEventListener("hashchange", on);
return () => window.removeEventListener("hashchange", on);
}, []);
return route;
}
function Logo({ light, lg, sub = true }) {
return (
GMN
{sub && Gajah Muda Nusantara}
);
}
function Eyebrow({ id, en, light, children }) {
return (
{id || children}{en && · {en}}
);
}
function Placeholder({ label, red, style, className = "" }) {
return (
{label && {label}}
);
}
const Arrow = () => (
);
function ProgIcon({ i }) {
const paths = [
,
,
,
,
,
,
];
return (
);
}
const NAV_LINKS = [
["tentang", "Tentang"],
["program", "Program"],
["galeri", "Galeri"],
["berita", "Berita"],
["pengurus", "Pengurus"],
["kontak", "Kontak"],
];
function Nav() {
const route = useRoute();
const [open, setOpen] = useState(false);
useEffect(() => { setOpen(false); }, [route]);
return (
);
}
/* compact red header band for inner pages */
function PageHero({ eyebrow, en, title, sub }) {
return (
{title}
{sub &&
{sub}
}
);
}
function Footer() {
const cols = [
["Organisasi", [["#/tentang", "Tentang Kami"], ["#/program", "Program"], ["#/pengurus", "Pengurus"], ["#/berita", "Berita"]]],
["Bergabung", [["daftar.html", "Daftar Anggota"], ["#/program", "Cara Bergabung"], ["#/galeri", "Galeri"], ["#/kontak", "Kontak"]]],
["Ikuti", [["#", "Instagram"], ["#", "TikTok"], ["#", "X / Twitter"], ["#", "YouTube"]]],
];
return (
);
}
Object.assign(window, { useRoute, Logo, Eyebrow, Placeholder, Arrow, ProgIcon, Nav, PageHero, Footer });