mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-09-13 08:13:09 +00:00
fix(auth): вернуть виджет после «Назад» и добить локали до четырёх
Дополнения к 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.
This commit is contained in:
@@ -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 () => {
|
||||
|
||||
@@ -199,6 +199,9 @@
|
||||
"orOpenInApp": "یا ربات را در برنامه باز کنید",
|
||||
"loginFailed": "ورود ناموفق",
|
||||
"telegramWidgetBlocked": "ویجت ورود تلگرام در دسترس نیست. از طریق ربات وارد شوید:",
|
||||
"deepLinkIntro": "ورود را مستقیماً در ربات تأیید کنید — بدون نیاز به شماره تلفن:",
|
||||
"loginWithBot": "ورود از طریق ربات",
|
||||
"backToWidget": "بازگشت به ورود با ویجت",
|
||||
"openBotToLogin": "باز کردن ربات برای ورود",
|
||||
"waitingForConfirmation": "در انتظار تایید...",
|
||||
"deepLinkExpired": "لینک منقضی شده است. لطفا دوباره تلاش کنید.",
|
||||
|
||||
@@ -199,6 +199,9 @@
|
||||
"orOpenInApp": "或在应用中打开机器人",
|
||||
"loginFailed": "登录失败",
|
||||
"telegramWidgetBlocked": "Telegram登录小部件不可用。请使用机器人登录:",
|
||||
"deepLinkIntro": "直接在机器人中确认登录 — 无需手机号:",
|
||||
"loginWithBot": "通过机器人登录",
|
||||
"backToWidget": "返回小部件登录",
|
||||
"openBotToLogin": "打开机器人登录",
|
||||
"waitingForConfirmation": "等待确认...",
|
||||
"deepLinkExpired": "链接已过期,请重试。",
|
||||
|
||||
Reference in New Issue
Block a user