The Space tab is Usage; the Cron tab is Jobs

Both are named for what they do rather than the tool underneath, the way Services is.
Old links and saved rail orders still land in the right place. The Go packages and their
endpoints keep their names, with a pointer in each to what the UI calls them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Mitchell-Johnson
2026-09-24 12:54:23 -07:00
co-authored by Claude Opus 5
parent dfa9e88f5b
commit a07a444170
6 changed files with 48 additions and 20 deletions
+18 -1
View File
@@ -5,8 +5,25 @@ import { useEffect, useState } from 'react'
const KEY = 'hamlab.rail'
// Pages that were renamed, so an order saved before it still puts the page where it was put:
// Top became Processes, Space became Usage, Cron became Jobs. A page that was removed
// outright (Dashboard) is not here — orderBy drops ids that match no page.
const RENAMED: Record<string, string> = { top: 'procs', space: 'usage', cron: 'jobs' }
export function getRailOrder(): string[] {
try { const v = JSON.parse(localStorage.getItem(KEY) ?? '[]'); return Array.isArray(v) ? v.filter((x) => typeof x === 'string') : [] } catch { return [] }
let raw: unknown
try { raw = JSON.parse(localStorage.getItem(KEY) ?? '[]') } catch { return [] }
if (!Array.isArray(raw)) return []
const seen = new Set<string>()
const out: string[] = []
for (const x of raw) {
if (typeof x !== 'string') continue
const id = RENAMED[x] ?? x
if (seen.has(id)) continue // a merged page keeps the earlier of the two slots
seen.add(id)
out.push(id)
}
return out
}
export function setRailOrder(ids: string[], save = true) {