The app repeated itself. The module list, /api/prefs/dashboard, applyPrefs and the per-user dashboard blob are gone. Widgets stays and now says plainly that it is for dashboards outside Ham Lab. This also closes a bug: applyPrefs set the sampling rate from intervalMs inside the dashboard layout, and reset it to the default when that field was absent — so with per-user layouts, one account saving a dashboard could reset the sampling rate for the whole machine. The sampler now has one source. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
20 lines
827 B
TypeScript
20 lines
827 B
TypeScript
// Sizes and rates, shown the way the rest of the console shows them. These lived in
|
|
// Dashboard.tsx until that page was retired (2026-09-23); Disks, Files and Space all use
|
|
// them, so they belong on their own.
|
|
|
|
// fmtBytes is binary — what a disk or a file actually occupies.
|
|
export function fmtBytes(b: number): string {
|
|
const u = ['B', 'KiB', 'MiB', 'GiB', 'TiB']
|
|
let i = 0
|
|
while (b >= 1024 && i < u.length - 1) { b /= 1024; i++ }
|
|
return `${b < 10 && i > 0 ? b.toFixed(1) : Math.round(b)} ${u[i]}`
|
|
}
|
|
|
|
// fmtRate is decimal — how throughput is quoted everywhere else.
|
|
export function fmtRate(bps: number): string {
|
|
const u = ['B/s', 'kB/s', 'MB/s', 'GB/s']
|
|
let i = 0
|
|
while (bps >= 1000 && i < u.length - 1) { bps /= 1000; i++ }
|
|
return `${bps < 10 && i > 0 ? bps.toFixed(1) : Math.round(bps)} ${u[i]}`
|
|
}
|