// App-skall: hash-ruting (fungerer på ren statisk hosting uten rewrites),
// mørk header, handlevogn-skuff og forsiden med nordlys-hero + live-søk.
// Monterer først når alle globals fra de andre filene finnes.
import React, { useState, useEffect } from 'react';
import { createRoot } from 'react-dom/client';
const NS = window.STWORDER;
function useHashRoute() {
const [route, setRoute] = useState(() => location.hash.replace(/^#\/?/, ''));
useEffect(() => {
const onChange = () => {
setRoute(location.hash.replace(/^#\/?/, ''));
window.scrollTo(0, 0);
};
window.addEventListener('hashchange', onChange);
return () => window.removeEventListener('hashchange', onChange);
}, []);
return route;
}
function Home() {
const { useI18n, nok, ProductCard, SectionTitle, TrustBar, MonoLabel } = NS.ui;
const { t } = useI18n();
const LiveSearch = NS.flows.LiveSearch;
const cheapestWeb = Math.min(...NS.data.products.filter((p) => p.group === 'webhotell').map((p) => p.monthly));
const cheapestVps = Math.min(...NS.data.vpsPlans.map((p) => p.monthly));
const noPrice = NS.data.tlds.find((r) => r.tld === 'no').register;
return (
{/* Nordlys-hero med live-søk i sentrum */}
{t('home.heroLabel')}
{t('home.titleA')}{' '}
{t('home.titleB')}
{t('home.subtitle')}
{/* Produktinnganger */}
{ location.hash = '#/domener'; }}
/>
{ location.hash = '#/hosting'; }}
/>
{ location.hash = '#/vps'; }}
/>
{/* Slik fungerer det – redaksjonelle serif-tall */}
{t('home.stepsLabel')}
{[1, 2, 3].map((n) => (
0{n}
{t('home.step' + n)}
{t('home.step' + n + 'd')}
))}
);
}
function App() {
const route = useHashRoute();
const [cartOpen, setCartOpen] = useState(false);
const { DemoBanner, Header, Footer, CartDrawer, CheckoutToast } = NS.ui;
useEffect(() => NS.bus.on('cart:open', () => setCartOpen(true)), []);
// Lukk skuffen ved navigasjon – ellers blokkerer overlayet den nye siden.
useEffect(() => { setCartOpen(false); }, [route]);
let page;
if (route.startsWith('domener')) page = ;
else if (route.startsWith('hosting')) page = ;
else if (route.startsWith('vps')) page = ;
else if (route.startsWith('kasse')) page = ;
else if (route.startsWith('kvittering')) page = ;
else page = ;
const routeKey = route.split('/')[0];
return (
<>
setCartOpen(true)} />
{page}
setCartOpen(false)} />
>
);
}
// Vent til alle filer har registrert seg på window.STWORDER før montering.
function ready() {
return !!(
NS.ui && NS.data && NS.api && NS.store && NS.i18n &&
NS.flows && NS.flows.Domains && NS.flows.Hosting && NS.flows.Vps && NS.flows.LiveSearch &&
NS.pages && NS.pages.Checkout && NS.pages.Receipt
);
}
function mountWhenReady() {
if (ready()) {
createRoot(document.getElementById('root')).render();
} else {
setTimeout(mountWhenReady, 25);
}
}
mountWhenReady();