fix(webui): finish ?=…→/… URL migration in two missed nav spots

Both used the pre-migration query/.html URL form through navigation that
no longer exists, so they landed on a not-found / wrong page:

- setup-wizard handoffToTasks: navigated to `tasks.html?task=<id>` via the
  never-defined window.router, falling back to a *relative*
  window.location.href. From any non-root path that resolves under the
  current path (e.g. /admin/config/tasks.html → matches the /admin*
  route), so the first-install "x of x installing" hand-off hit a
  not-found task page. Now navigates to the path-based
  `/tasks/all?task=<id>&from=setup` via window.navigateToRoute (absolute
  full-load fallback).
- apps-manager getNavigationButton / handleNavigation: the "Install
  <Service>" buttons on config requirement fields used
  `app.html?app=<name>` with a relative window.location.href; from the
  /admin/config/* pages they render on, that resolved to
  /admin/config/app.html (wrong route). Now `/app/<name>` via
  navigateToRoute.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: librelad <librelad@digitalangels.vip>
This commit is contained in:
librelad 2026-05-24 22:29:03 +01:00
parent 5532d6eee3
commit 42f2509193
2 changed files with 18 additions and 9 deletions

View File

@ -1914,10 +1914,10 @@ class AppsManager {
// Get navigation button for installing required services
getNavigationButton(fieldKey) {
const servicePages = {
'AUTHELIA': 'app.html?app=authelia',
'HEADSCALE': 'app.html?app=headscale',
'WHITELIST': 'app.html?app=traefik',
'TRAEFIK': 'app.html?app=traefik'
'AUTHELIA': '/app/authelia',
'HEADSCALE': '/app/headscale',
'WHITELIST': '/app/traefik',
'TRAEFIK': '/app/traefik'
};
let serviceName;
@ -1947,8 +1947,14 @@ class AppsManager {
// Handle navigation with unsaved changes check
handleNavigation(url, serviceName) {
// For now, just navigate - could add unsaved changes detection later
window.location.href = url;
// SPA in-app nav (path-based routes), with an absolute-path full-load
// fallback. A relative window.location.href here resolved wrong from the
// /admin/config/* pages these buttons render on.
if (typeof window.navigateToRoute === 'function' && window.spaClean) {
window.navigateToRoute(url);
} else {
window.location.href = url;
}
}
// Generate disabled field with navigation button

View File

@ -668,9 +668,12 @@ class SetupWizard {
this.container.classList.add('setup-launched');
setTimeout(() => {
const target = `tasks.html?task=${encodeURIComponent(firstTaskId)}&from=setup`;
if (window.router && typeof window.router.navigate === 'function') {
window.router.navigate(target);
// Path-based route (the app uses /… URLs); the specific task is still
// selected via ?task=. Navigate via the SPA helper, with an absolute-path
// full-load fallback.
const target = `/tasks/all?task=${encodeURIComponent(firstTaskId)}&from=setup`;
if (typeof window.navigateToRoute === 'function' && window.spaClean) {
window.navigateToRoute(target);
this.hide();
} else {
window.location.href = target;