swarm-ui: use native Intl.RelativeTimeFormat for fmtAgo, not hand-rolled
Answers mara's question on PR#3342 (lightweight dep for fmtAgo?): no dep needed, Intl.RelativeTimeFormat is built into the runtime and its narrow style produces the same '5m ago' shape, verified with a real call rather than assumed from the spec.
This commit is contained in:
parent
9786a9a519
commit
b03ae55786
1 changed files with 14 additions and 10 deletions
|
|
@ -1,15 +1,19 @@
|
|||
// Small pure render helpers shared across swarm-ui pages. Not folded
|
||||
// into `@hive/shared` — these are swarm-ui's own formatting choices
|
||||
// (compact, one unit deep), not a cross-package contract, and the
|
||||
// dashboard package already has its own near-identical `fmtAgo` in
|
||||
// `util.js` for the same reason: two small vanilla-vs-Preact call
|
||||
// sites don't justify a shared abstraction over a five-line function.
|
||||
// into `@hive/shared` — swarm-ui's formatting choices aren't a
|
||||
// cross-package contract, and there's nothing here worth sharing.
|
||||
|
||||
// Relative age, coarsened to one unit ("5m ago"). Built on the native
|
||||
// `Intl.RelativeTimeFormat` (no dependency needed — mara asked whether
|
||||
// a lightweight package was warranted; the runtime already ships this)
|
||||
// with `style: 'narrow'`, which produces the same "5s/5m/5h/5d ago"
|
||||
// shape the dashboard package's hand-rolled equivalent does, verified
|
||||
// against a real `Intl` call rather than assumed from the spec.
|
||||
const RTF = new Intl.RelativeTimeFormat('en', { numeric: 'always', style: 'narrow' });
|
||||
|
||||
// Relative age in whole seconds, coarsened to one unit ("5m ago").
|
||||
export function fmtAgo(ageSeconds: number): string {
|
||||
const age = Math.max(0, Math.floor(ageSeconds));
|
||||
if (age < 60) return age + 's ago';
|
||||
if (age < 3600) return Math.floor(age / 60) + 'm ago';
|
||||
if (age < 86400) return Math.floor(age / 3600) + 'h ago';
|
||||
return Math.floor(age / 86400) + 'd ago';
|
||||
if (age < 60) return RTF.format(-age, 'second');
|
||||
if (age < 3600) return RTF.format(-Math.floor(age / 60), 'minute');
|
||||
if (age < 86400) return RTF.format(-Math.floor(age / 3600), 'hour');
|
||||
return RTF.format(-Math.floor(age / 86400), 'day');
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue