mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-06-16 13:34:04 +08:00
87b80c66b2
* style: format code and apply clippy lint fixes * feat(usage): enhance dashboard with auto-refresh control and robust formatting - Add configurable auto-refresh interval toggle (off/5s/10s/30s/60s) to usage dashboard - Extract shared format utilities (fmtUsd, fmtInt, parseFiniteNumber, getLocaleFromLanguage) - Refactor request log time filtering to rolling vs fixed mode with validation - Use stable serializable query keys instead of filter objects - Handle NaN/Infinity safely in number formatting across all usage components - Use RFC 3339 date format in backend trend data
40 lines
986 B
TypeScript
40 lines
986 B
TypeScript
export function parseFiniteNumber(value: unknown): number | null {
|
|
if (typeof value === "number") {
|
|
return Number.isFinite(value) ? value : null;
|
|
}
|
|
|
|
if (typeof value === "string") {
|
|
const parsed = Number.parseFloat(value);
|
|
return Number.isFinite(parsed) ? parsed : null;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
export function fmtInt(
|
|
value: unknown,
|
|
locale?: string,
|
|
fallback: string = "--",
|
|
): string {
|
|
const num = parseFiniteNumber(value);
|
|
if (num == null) return fallback;
|
|
return new Intl.NumberFormat(locale).format(Math.trunc(num));
|
|
}
|
|
|
|
export function fmtUsd(
|
|
value: unknown,
|
|
digits: number,
|
|
fallback: string = "--",
|
|
): string {
|
|
const num = parseFiniteNumber(value);
|
|
if (num == null) return fallback;
|
|
return `$${num.toFixed(digits)}`;
|
|
}
|
|
|
|
export function getLocaleFromLanguage(language: string): string {
|
|
if (!language) return "en-US";
|
|
if (language.startsWith("zh")) return "zh-CN";
|
|
if (language.startsWith("ja")) return "ja-JP";
|
|
return "en-US";
|
|
}
|