import { Router, Route, Switch, Link, useLocation } from "wouter-preact";
import { useHashLocation } from "wouter-preact/use-hash-location";
import { HomePage } from "./pages/Home.jsx";
import { TerminalPage } from "./pages/Terminal.jsx";
import { SettingsPage } from "./pages/Settings.jsx";
import { InstallPage } from "./pages/Install.jsx";
import { HostPicker } from "./components/HostPicker.jsx";
export function App() {
return (
<Router hook={useHashLocation}>
<Switch>
{}
<Route path="/s/:host/:name">
{(params) => <TerminalPage host={params.host} name={params.name} />}
</Route>
<Route path="/s/:name">
{(params) => <TerminalPage name={params.name} />}
</Route>
{}
<Route>
<Shell>
<Switch>
<Route path="/" component={HomePage} />
<Route path="/settings" component={SettingsPage} />
<Route path="/install" component={InstallPage} />
<Route>
<div class="settings-card">
<h2>Not found</h2>
<p>
No SPA route here yet. <Link href="/">Home</Link>
</p>
</div>
</Route>
</Switch>
</Shell>
</Route>
</Switch>
</Router>
);
}
function HomeHeader() {
const [, navigate] = useLocation();
return (
<header class="app-header">
<h1
class="app-wordmark"
role="link"
tabindex="0"
onClick={() => navigate("/")}
onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") navigate("/");
}}
>
mobux
</h1>
<HostPicker />
<button
class="header-icon header-icon-btn"
type="button"
aria-label="Settings"
onClick={() => navigate("/settings")}
>
⚙
</button>
</header>
);
}
function SettingsHeader() {
return (
<header class="app-header">
<Link href="/" class="header-back" aria-label="Back">
‹
</Link>
<h1>settings</h1>
</header>
);
}
function Shell({ children }) {
const [location] = useLocation();
const onSettings = location === "/settings";
return (
<div class="spa-shell">
{onSettings ? <SettingsHeader /> : <HomeHeader />}
<main class="spa-main">{children}</main>
</div>
);
}