fix(pwa): keep PWA alive during TG login (anchor opens Telegram, app polls on /tg-wait)

window.location.href=deep_link navigated the whole PWA to t.me, destroying the
/tg-wait polling screen -> the authenticated token was never fetched. Prefetch
the pairing session and open Telegram via an <a href> (OS app-switch, PWA stays
mounted polling); add an Open-Telegram fallback link on the wait screen.

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-06-19 23:44:57 +10:00
co-authored by claude-flow
parent 5ab4e9e74e
commit d2cd7632a5
2 changed files with 50 additions and 18 deletions
+19 -3
View File
@@ -6,6 +6,7 @@ import { Spinner } from "@/components/Spinner";
export function TgWaitPage() {
const nav = useNavigate();
const pairSession = sessionStorage.getItem("pp-pair-session");
const deepLink = sessionStorage.getItem("pp-pair-deeplink");
const { status } = usePairPoll(pairSession);
useEffect(() => {
@@ -13,14 +14,29 @@ export function TgWaitPage() {
}, [pairSession, nav]);
useEffect(() => {
if (status === "authenticated") { sessionStorage.removeItem("pp-pair-session"); nav("/", { replace: true }); }
if (status === "expired") { sessionStorage.removeItem("pp-pair-session"); nav("/login", { replace: true, state: { expired: true } }); }
if (status === "authenticated") {
sessionStorage.removeItem("pp-pair-session");
sessionStorage.removeItem("pp-pair-deeplink");
nav("/", { replace: true });
}
if (status === "expired") {
sessionStorage.removeItem("pp-pair-session");
sessionStorage.removeItem("pp-pair-deeplink");
nav("/login", { replace: true, state: { expired: true } });
}
}, [status, nav]);
return (
<div className="pt-16 text-center">
<h1 className="text-xl font-extrabold mb-2">Премиум Водитель</h1>
<p className="text-muted text-sm mb-8">Подтвердите номер в Telegram нажмите «Поделиться номером», затем вернитесь сюда.</p>
<p className="text-muted text-sm mb-6">
В Telegram нажмите «Поделиться номером для входа», затем вернитесь сюда вход произойдёт автоматически.
</p>
{deepLink && (
<a href={deepLink} target="_blank" rel="noopener noreferrer" className="btn-primary block text-center mb-6">
Открыть Telegram
</a>
)}
<Spinner />
</div>
);