Compare commits

...

2 Commits

Author SHA1 Message Date
librelad
d4e5cdca83 Merge claude/1 2026-06-01 00:01:59 +01:00
librelad
c7ae1414b9 feat(webui): redirect /updater into Overview; surface backup config in Admin
- _legacyRedirect: /updater[/tab] -> /overview[/tab] (security/recovery/history
  fold into the Updates expander -> /overview/updates). /backup is intentionally
  NOT redirected — it stays the operational backup center (locations/migrate/
  snapshots), reached from Overview › Backups.
- Re-point the per-app hotfix chip to /overview/improvements.
- Unhide the existing backup config category in the Admin sidebar so
  engine/schedule/retention config lives under Admin (same generated category
  the backup center binds, so edits stay in sync).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 00:01:59 +01:00
3 changed files with 17 additions and 7 deletions

View File

@ -76,10 +76,10 @@ class ConfigSidebar {
var self = this; // Preserve 'this' context var self = this; // Preserve 'this' context
categoriesArray.forEach(function(category) { categoriesArray.forEach(function(category) {
// Backup category has its own top-level page (/backup) which renders // The backup config category (engine/schedule/retention) surfaces here in
// these same fields dynamically — hide it from the /config sidebar to // Admin. The operational backup center (/backup, reached from Overview
// avoid two surfaces for the same data. // Backups) keeps locations, migrate and snapshots. Both bind the same
if (category.id === 'backup') return; // generated category, so edits stay in sync.
const categoryItem = document.createElement('div'); const categoryItem = document.createElement('div');
categoryItem.className = 'category'; categoryItem.className = 'category';

View File

@ -489,9 +489,9 @@ class AppsManager {
chip.style.cursor = 'pointer'; chip.style.cursor = 'pointer';
chip.style.display = ''; chip.style.display = '';
chip.onclick = () => { chip.onclick = () => {
if (typeof window.navigateToRoute === 'function') window.navigateToRoute('/updater/improvements'); if (typeof window.navigateToRoute === 'function') window.navigateToRoute('/overview/improvements');
else if (typeof window.spaClean === 'function') window.spaClean('/updater/improvements'); else if (typeof window.spaClean === 'function') window.spaClean('/overview/improvements');
else window.location.href = '/updater/improvements'; else window.location.href = '/overview/improvements';
}; };
} catch (_) { /* best-effort */ } } catch (_) { /* best-effort */ }
} }

View File

@ -370,6 +370,16 @@ class LibrePortalSPAClean {
else { const seg = p.replace(/^\/config\/?/, ''); if (seg) cat = seg; } else { const seg = p.replace(/^\/config\/?/, ''); if (seg) cat = seg; }
return (typeof window.adminPath === 'function') ? window.adminPath(cat) : '/admin'; return (typeof window.adminPath === 'function') ? window.adminPath(cat) : '/admin';
} }
// The standalone Updater page is now the fleet Overview area. /updater[/tab]
// -> /overview[/tab]; security/recovery/history folded into the Updates
// expander, so they land on /overview/updates. (/backup is NOT redirected —
// it remains the operational backup center, reached from Overview Backups.)
if (p === '/updater' || p.startsWith('/updater/')) {
const seg = p.replace(/^\/updater\/?/, '');
if (seg === 'updates' || seg === 'improvements') return '/overview/' + seg;
if (!seg || seg === 'overview') return '/overview';
return '/overview/updates';
}
return null; return null;
} }