import { useCallback, useEffect, useState } from "react"; import { Button, Spinner } from "../ui"; import { PolicySwitchCard } from "./PolicySwitchCard"; import { CardPolicyAPN } from "./CardPolicyAPN"; import { useCardPolicyToggles } from "./useCardPolicyToggles"; import { getCardPolicy, putCardPolicy, enableVoWiFi, disableVoWiFi, setFlightMode } from "./deviceActions"; import type { CardPolicy } from "../../types"; import { useI18n } from "../../lib/i18n"; export interface EsimCardPolicyInlineProps { deviceId: string; iccid: string; isActiveCard: boolean; deviceOnline: boolean; onPolicyChanged: () => void; } export function EsimCardPolicyInline({ deviceId, iccid, isActiveCard, deviceOnline, onPolicyChanged }: EsimCardPolicyInlineProps) { const { t } = useI18n(); const [policy, setPolicy] = useState(null); const [failed, setFailed] = useState(false); const [loading, setLoading] = useState(false); const mode = isActiveCard && deviceOnline ? "live" : "stored"; const noteText = mode === "live" ? "" : deviceOnline ? t("改动将在此卡激活后生效") : t("设备离线,改动已保存,激活/上线后生效"); const flags = policy ? { vowifiEnabled: policy.vowifiEnabled, airplaneEnabled: policy.airplaneEnabled } : null; const load = useCallback(async () => { setLoading(true); setFailed(false); try { const data = await getCardPolicy(iccid); setPolicy(data); } catch { setFailed(true); } finally { setLoading(false); } }, [iccid]); useEffect(() => { load(); }, [load]); const toggles = useCardPolicyToggles(flags, { applyVoWiFi: (value, next) => (mode === "stored" ? putCardPolicy(iccid, next) : value ? enableVoWiFi(deviceId) : disableVoWiFi(deviceId)), applyAirplane: (value, next) => (mode === "stored" ? putCardPolicy(iccid, next) : setFlightMode(deviceId, value)), onChanged: onPolicyChanged, }); const { local } = toggles; return (
{loading ? (
{t("正在加载策略...")}
) : failed ? (
{t("策略加载失败")}
) : ( <> {noteText ?
{noteText}
: null}
{ setPolicy(saved); onPolicyChanged(); }} /> )}
); }