From c1088325aabaf43de6f60653ff650c3cfb1beb2f Mon Sep 17 00:00:00 2001 From: Fringg Date: Thu, 6 Aug 2026 02:16:02 +0300 Subject: [PATCH] =?UTF-8?q?fix(auth):=20=D0=B2=D0=B5=D1=80=D0=BD=D1=83?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B2=D0=B8=D0=B4=D0=B6=D0=B5=D1=82=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D0=BB=D0=B5=20=C2=AB=D0=9D=D0=B0=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=C2=BB=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B8=D1=82=D1=8C=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=20=D0=B4=D0=BE=20=D1=87=D0=B5?= =?UTF-8?q?=D1=82=D1=8B=D1=80=D1=91=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Дополнения к PR #539 при мерже. Кнопка «Назад к входу через виджет» оставляла пустое место. Пока открыт deep-link-экран, контейнер виджета размонтирован ранним return'ом, а эффект, который вставляет скрипт Telegram, от этого не перезапускается: его зависимости не меняются. Единственная зависимость, способная дрогнуть, — handleScriptFailed через scriptLoaded, но на legacy-пути scriptLoaded не выставляется никогда (только в OIDC-ветке). Так что при возврате контейнер монтировался обратно уже пустым, и войти через виджет было нельзя до перезагрузки страницы. Добавлен showDeepLinkUI в зависимости и ранний выход: на входе в deep-link отрабатывает cleanup, на выходе скрипт вставляется заново. Локали были только en и ru, а в кабинете их четыре. fallbackLng — 'ru', поэтому персидские и китайские пользователи увидели бы русский текст на самом первом экране. Именно этот класс регрессии описан в шапке locales.test.ts, и поймать его тест не может: он сравнивает только en и ru. Добавлены fa и zh; в zh термин «виджет» приведён к тому же 小部件, что уже используется в telegramWidgetBlocked. --- src/components/TelegramLoginButton.tsx | 17 +++++++++++++++-- src/locales/fa.json | 3 +++ src/locales/zh.json | 3 +++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/components/TelegramLoginButton.tsx b/src/components/TelegramLoginButton.tsx index 05d79de..9cc0c59 100644 --- a/src/components/TelegramLoginButton.tsx +++ b/src/components/TelegramLoginButton.tsx @@ -172,7 +172,12 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto const loginWithTelegramWidget = useAuthStore((s) => s.loginWithTelegramWidget); useEffect(() => { - if (isOIDC || !containerRef.current || !botUsername || !widgetConfig) return; + // showDeepLinkUI обязан быть в зависимостях: пока он true, контейнер + // виджета размонтирован, а при возврате «Назад к виджету» сам по себе + // эффект не перезапустится — на legacy-пути scriptLoaded не меняется + // никогда, поэтому ни одна из остальных зависимостей не дрогнет, и + // пользователь получил бы пустое место вместо виджета. + if (showDeepLinkUI || isOIDC || !containerRef.current || !botUsername || !widgetConfig) return; const container = containerRef.current; while (container.firstChild) { @@ -233,7 +238,15 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto container.removeChild(container.firstChild); } }; - }, [isOIDC, botUsername, widgetConfig, loginWithTelegramWidget, navigate, handleScriptFailed]); + }, [ + showDeepLinkUI, + isOIDC, + botUsername, + widgetConfig, + loginWithTelegramWidget, + navigate, + handleScriptFailed, + ]); // Deep link auth: request token and start polling with recursive setTimeout const startDeepLinkAuth = useCallback(async () => { diff --git a/src/locales/fa.json b/src/locales/fa.json index fe8a782..f135511 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -199,6 +199,9 @@ "orOpenInApp": "یا ربات را در برنامه باز کنید", "loginFailed": "ورود ناموفق", "telegramWidgetBlocked": "ویجت ورود تلگرام در دسترس نیست. از طریق ربات وارد شوید:", + "deepLinkIntro": "ورود را مستقیماً در ربات تأیید کنید — بدون نیاز به شماره تلفن:", + "loginWithBot": "ورود از طریق ربات", + "backToWidget": "بازگشت به ورود با ویجت", "openBotToLogin": "باز کردن ربات برای ورود", "waitingForConfirmation": "در انتظار تایید...", "deepLinkExpired": "لینک منقضی شده است. لطفا دوباره تلاش کنید.", diff --git a/src/locales/zh.json b/src/locales/zh.json index 87b3dce..754fb98 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -199,6 +199,9 @@ "orOpenInApp": "或在应用中打开机器人", "loginFailed": "登录失败", "telegramWidgetBlocked": "Telegram登录小部件不可用。请使用机器人登录:", + "deepLinkIntro": "直接在机器人中确认登录 — 无需手机号:", + "loginWithBot": "通过机器人登录", + "backToWidget": "返回小部件登录", "openBotToLogin": "打开机器人登录", "waitingForConfirmation": "等待确认...", "deepLinkExpired": "链接已过期,请重试。",