/* global React */
const { useState, useEffect } = window.ReactHooks;
function applyTweaks(t) {
const root = document.documentElement;
root.setAttribute("data-theme", t.theme);
root.setAttribute("data-density", t.density);
root.style.setProperty("--accent", t.accent);
}
function Shell() {
const route = window.useRoute();
const [tweaks, setTweaks] = useState(window.__TCVIZ_TWEAKS);
const [showTweaks, setShowTweaks] = useState(false);
useEffect(() => { applyTweaks(tweaks); }, [tweaks]);
// Scroll to top on nav change (except product, which stays in-page)
useEffect(() => {
if (typeof window !== "undefined") window.scrollTo(0, 0);
}, [route.path, route.query]);
// Edit-mode contract
useEffect(() => {
const onMsg = (e) => {
const d = e.data || {};
if (d.type === "__activate_edit_mode") setShowTweaks(true);
if (d.type === "__deactivate_edit_mode") setShowTweaks(false);
};
window.addEventListener("message", onMsg);
window.parent && window.parent.postMessage({ type: "__edit_mode_available" }, "*");
return () => window.removeEventListener("message", onMsg);
}, []);
const setTweak = (k, v) => {
setTweaks((t) => {
const next = { ...t, [k]: v };
window.parent && window.parent.postMessage({ type: "__edit_mode_set_keys", edits: { [k]: v } }, "*");
return next;
});
};
const hideChrome = route.path === "admin";
let Page;
switch (route.path) {
case "catalog": Page = ; break;
case "product": Page = ; break;
case "gallery": Page = ; break;
case "contact": Page = ; break;
case "admin": Page = ; break;
case "home":
default: Page = ;
}
return (
<>
{!hideChrome && }
{hideChrome && (
)}
{Page}
{!hideChrome && }
{!hideChrome && }
{showTweaks && }
>
);
}
window.Shell = Shell;