mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-24 12:44:18 +08:00
8e21b061cf
Co-authored-by: Zihao Han <hanhan3344@users.noreply.github.com>
68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
import type { UsageData } from "@/types";
|
|
|
|
interface UsageSummaryLabels {
|
|
invalid: string;
|
|
remaining: string;
|
|
used: string;
|
|
}
|
|
|
|
function formatNumber(value: number): string {
|
|
return Number.isInteger(value) ? value.toString() : value.toFixed(2);
|
|
}
|
|
|
|
function formatValue(value: number, unit?: string): string {
|
|
if (!unit) {
|
|
return formatNumber(value);
|
|
}
|
|
|
|
return unit === "%"
|
|
? `${formatNumber(value)}%`
|
|
: `${formatNumber(value)} ${unit}`;
|
|
}
|
|
|
|
function isNumber(value: unknown): value is number {
|
|
return typeof value === "number" && Number.isFinite(value);
|
|
}
|
|
|
|
function formatUsed(
|
|
data: UsageData,
|
|
labels: UsageSummaryLabels,
|
|
): string | null {
|
|
if (!isNumber(data.used)) {
|
|
return null;
|
|
}
|
|
|
|
if (isNumber(data.total) && data.total > 0) {
|
|
const usedPercent = (data.used / data.total) * 100;
|
|
|
|
if (data.unit === "%" && data.total === 100) {
|
|
return `${labels.used} ${formatValue(data.used, "%")}`;
|
|
}
|
|
|
|
return `${labels.used} ${formatNumber(usedPercent)}%`;
|
|
}
|
|
|
|
return `${labels.used} ${formatValue(data.used, data.unit)}`;
|
|
}
|
|
|
|
export function formatUsageDataSummary(
|
|
data: UsageData,
|
|
labels: UsageSummaryLabels,
|
|
): string {
|
|
const planPrefix = data.planName ? `[${data.planName}] ` : "";
|
|
|
|
if (data.isValid === false) {
|
|
return `${planPrefix}${data.invalidMessage || labels.invalid}`;
|
|
}
|
|
|
|
const parts = [
|
|
formatUsed(data, labels),
|
|
isNumber(data.remaining)
|
|
? `${labels.remaining} ${formatValue(data.remaining, data.unit)}`
|
|
: null,
|
|
data.extra || null,
|
|
].filter((part): part is string => Boolean(part));
|
|
|
|
return `${planPrefix}${parts.join(" / ") || labels.invalid}`;
|
|
}
|