拆分 AccountCenter 超大组件:提取类型、常量、钱包、支付等独立模块
- AccountCenter.tsx 从 3565 行缩减约 1000 行 - 新增 8 个模块:types / constants / formatters / account-copy / wallet / payment-utils / usePaymentState / AccountInfoRow - 同步更新 paymentShell 测试 Confidence: high
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import { PAYMENT_RECOVERY_STORAGE_KEY } from "./constants";
|
||||
|
||||
export function chainIdToDisplayName(chainId: number | undefined | null): string {
|
||||
if (chainId === 137) return "Polygon";
|
||||
if (chainId === 1) return "Ethereum Mainnet";
|
||||
if (chainId) return `Chain ID ${chainId}`;
|
||||
return "Polygon";
|
||||
}
|
||||
|
||||
export function formatTime(value: string | undefined | null, locale: string) {
|
||||
if (!value) return "--";
|
||||
try {
|
||||
const dt = new Date(value);
|
||||
if (Number.isNaN(dt.getTime())) return "--";
|
||||
return new Intl.DateTimeFormat(locale, {
|
||||
year: "numeric",
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
}).format(dt);
|
||||
} catch {
|
||||
return "--";
|
||||
}
|
||||
}
|
||||
|
||||
export function parseSubscriptionExpiry(value: string | undefined | null) {
|
||||
const raw = String(value || "").trim();
|
||||
if (!raw) return null;
|
||||
const dt = new Date(raw);
|
||||
if (Number.isNaN(dt.getTime())) return null;
|
||||
const diffMs = dt.getTime() - Date.now();
|
||||
return {
|
||||
raw,
|
||||
date: dt,
|
||||
expired: diffMs <= 0,
|
||||
daysLeft: Math.ceil(diffMs / 86_400_000),
|
||||
};
|
||||
}
|
||||
|
||||
export function shortAddress(address: string) {
|
||||
const text = String(address || "");
|
||||
if (!text.startsWith("0x") || text.length < 12) return text || "--";
|
||||
return `${text.slice(0, 8)}...${text.slice(-6)}`;
|
||||
}
|
||||
|
||||
export function clearStoredPaymentRecovery() {
|
||||
if (typeof window === "undefined") return;
|
||||
window.sessionStorage.removeItem(PAYMENT_RECOVERY_STORAGE_KEY);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user