dashboard: serve the dashboard at /, fold kept state in as a tab, add a pages menu
Drop the H0M3 tile hub and the core page. The dashboard is now the index; kept state is its fifth tab. A pages menu in the chrome links flow, stats, API docs and the swarm UI. The swarm apex URL comes from services.hyperhive.swarm.domain via HIVE_SWARM_PUBLIC_URL and the new swarm_public_url field of the state snapshot.
This commit is contained in:
parent
265f8a47cc
commit
0622736b30
35 changed files with 661 additions and 986 deletions
|
|
@ -1,5 +1,5 @@
|
|||
// esbuild build for @hive/dashboard: one JS+CSS bundle per page (H0M3 at
|
||||
// `/`, dashboard/flow/core/stats at their own
|
||||
// esbuild build for @hive/dashboard: one JS+CSS bundle per page (the
|
||||
// dashboard at `/`, flow/stats at their own
|
||||
// `.html`), each named after its own entry point below — see the
|
||||
// `entryPoints`/`for` lists for the exact map, not repeated here to
|
||||
// avoid this comment drifting out of sync with the real build steps.
|
||||
|
|
@ -9,10 +9,7 @@
|
|||
// module into each bundle rather than emitting a shared chunk (no
|
||||
// `splitting: true`). The Rust binary mounts `dist/` as a
|
||||
// `tower_http::ServeDir` fallback (`append_index_html_on_directories`
|
||||
// serves index.html at /); the dashboard SPA lives at /dashboard.html
|
||||
// (a plain file, not a /dashboard/ prefix) so it never shadows the
|
||||
// exact-match /dashboard/stream + /dashboard/history SSE routes
|
||||
// registered before the ServeDir fallback.
|
||||
// serves index.html at /); the dashboard SPA is that index.html.
|
||||
|
||||
import { build } from "esbuild";
|
||||
import { mkdirSync, copyFileSync, rmSync } from "node:fs";
|
||||
|
|
@ -32,13 +29,7 @@ mkdirSync(staticDir(""), { recursive: true });
|
|||
// follow-up once asset sizes warrant it). esbuild writes each entry
|
||||
// to `static/<name>.js` based on the entryPoint basename.
|
||||
await build({
|
||||
entryPoints: [
|
||||
src("tabs.js"),
|
||||
src("flow.js"),
|
||||
src("home.js"),
|
||||
src("stats.js"),
|
||||
src("core.js"),
|
||||
],
|
||||
entryPoints: [src("tabs.js"), src("flow.js"), src("stats.js")],
|
||||
outdir: staticDir(""),
|
||||
bundle: true,
|
||||
format: "esm",
|
||||
|
|
@ -99,9 +90,7 @@ for (const entry of [
|
|||
"common.css",
|
||||
"dashboard.css",
|
||||
"flow.css",
|
||||
"home.css",
|
||||
"stats.css",
|
||||
"core.css",
|
||||
]) {
|
||||
await build({
|
||||
entryPoints: [src(entry)],
|
||||
|
|
@ -112,13 +101,7 @@ for (const entry of [
|
|||
});
|
||||
}
|
||||
|
||||
for (const html of [
|
||||
"index.html",
|
||||
"dashboard.html",
|
||||
"flow.html",
|
||||
"stats.html",
|
||||
"core.html",
|
||||
]) {
|
||||
for (const html of ["index.html", "flow.html", "stats.html"]) {
|
||||
copyFileSync(src(html), dist(html));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue