import { useMemo } from "react"; import { useDevice } from "@/contexts/DeviceContext"; import { isLikelyNetworkFetchError } from "@/lib/networkError"; import { Loader2, Wifi } from "lucide-react"; import BottomNav from "@/components/BottomNav"; import localeZh from "@/locales/data-zh.json"; import localeZhHK from "@/locales/data-zh-HK.json"; import localeEn from "@/locales/data-en.json"; type ConnectLocale = (typeof localeZh)["connect"]; function pickConnectLocale(): ConnectLocale { const params = new URLSearchParams(window.location.search); const lang = params.get("lang"); if (lang === "0") return localeEn.connect; if (lang === "1") return localeZhHK.connect; if (lang === "2") return localeZh.connect; return localeEn.connect; } function fmt(template: string, vars: Record): string { let s = template; for (const [k, v] of Object.entries(vars)) { s = s.split(`{${k}}`).join(v); } return s; } /** 自动连接设备时的占位(替代原 ConnectScreen) */ export default function ConnectionPlaceholder() { const { ip, isConnecting, error, ipMissing } = useDevice(); const text = useMemo(pickConnectLocale, []); return (
{ipMissing ? ( <>

{text.ipMissingTitle}

{text.ipMissingDesc}

?ip=10.0.0.119

) : isConnecting ? ( <>

{fmt(text.connecting, { ip })}

) : ( <>

{text.failedTitle}

{error && !isLikelyNetworkFetchError(error) ? error : text.failedDesc}

{text.failedHint}

)}
); }