librelad 164606dc7c docs(webui): refresh stale features/ path comments after the components/ rename
Comment-only tidy from the feng-shui audit — no code behavior changes. The
features/ directory was renamed to components/ during modularization, but
several header banners and inline comments still named the old path:

- 6 component module headers (admin/tasks/backup/dashboard/updater/index.js +
  updater/js/updater-page.js) now name their real components/<id>/… path
- core/kernel/js/spa.js + core/tasks/js/task-router.js comments
- backend/routes/features.js doc-banner (drop a components/<id>/ folder …)
- core/update-notifier/css/update-notifier.css header (js/update-notifier.js)

Guarded the rewrite so the LIVE /api/features/list endpoint name (feature-
registry.js sources + backend route) is untouched — only stale 'features/<path>'
directory references were updated.

Signed-off-by: librelad <librelad@digitalangels.vip>
2026-05-31 00:41:16 +01:00

43 lines
2.1 KiB
JavaScript

// components/dashboard/index.js — the landing Dashboard as a feature module.
//
// dashboard.js exposes bare global functions (loadInstalledApps,
// loadDashboardData live in dashboard.js / data-loader.js, both eager core
// scripts) — there is no controller class to lazy-load, so scripts is empty.
// system-loader's 'dashboard' component already ran initializeData()/
// loadSystemInfo()/setupEventListeners() once at boot; mount() only does the
// per-navigation refresh (mirrors the old handleDashboard + the navigate()
// data-reload special-case, which has been removed from spa.js so the reload
// now fires exactly once here).
LP.features.register({
id: 'dashboard',
routes: ['/', '/dashboard'],
async mount(ctx) {
const html = await ctx.loadFragment('/components/dashboard/html/dashboard-content.html');
ctx.setContent(html, 'Dashboard');
// Render the installed-apps icon grid (handleDashboard's only post-render call).
if (typeof loadInstalledApps === 'function') loadInstalledApps();
// Repaint the stat cards / disk donut + (re)wire the 1 Hz live SSE. The
// 100 ms cushion lets the freshly-injected DOM settle (loadSystemInfo also
// guards on element presence). ctx.sub() cancels it if we navigate away
// before it fires.
const reloadTimer = setTimeout(() => {
if (typeof loadDashboardData === 'function') loadDashboardData();
}, 100);
ctx.sub(() => clearTimeout(reloadTimer));
},
async unmount() {
// Nothing this view owns is destroyable from here: the dashboard has no
// handler-newed controller and no system-loader singleton to tear down.
// The pending reload timer is cancelled via the ctx.sub() above (ctx.teardown).
// The 1 Hz LiveSystem SSE sub (attachDashboardLive) self-releases on its
// next sample once the dashboard DOM is gone, and the 1 s update countdown
// is a module-private interval with no exported stopper (pre-existing; it
// self-clears on the next dashboard mount). Both are noted for the Phase 5
// dashboard cleanup; neither is reachable here.
},
});