From 42a71902418d3f5e8cd34c225442db40a9a1cf0d Mon Sep 17 00:00:00 2001 From: Fringg Date: Fri, 24 Jul 2026 07:28:50 +0300 Subject: [PATCH] =?UTF-8?q?fix(sbp-recurring):=20toast=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=BE=D1=82=D0=BC=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20+=20per-sub=20=D0=BA=D0=BB=D1=8E=D1=87=20inline-confirm=20?= =?UTF-8?q?=D0=B2=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cancelSbpMutation: onError-тост с detail бэкенда (зеркально enable) — молчаливый провал отмены выглядел как успех - SubscriptionTab: ключ подтверждения cancelSbpRecurring_{subId} — взведённый confirm не переживает переключение подписки в пикере - Локали: subscription.sbpRecurring.cancelError (en/ru/zh/fa) --- src/components/admin/userDetail/SubscriptionTab.tsx | 10 +++++++--- src/locales/en.json | 1 + src/locales/fa.json | 1 + src/locales/ru.json | 1 + src/locales/zh.json | 1 + src/pages/Subscription.tsx | 10 ++++++++++ 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/components/admin/userDetail/SubscriptionTab.tsx b/src/components/admin/userDetail/SubscriptionTab.tsx index a8b8d8b..a8b83c8 100644 --- a/src/components/admin/userDetail/SubscriptionTab.tsx +++ b/src/components/admin/userDetail/SubscriptionTab.tsx @@ -408,15 +408,19 @@ export function SubscriptionTab(props: SubscriptionTabProps) { {hasPermission('users:subscription') && ( diff --git a/src/locales/en.json b/src/locales/en.json index 9847458..79dd250 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -683,6 +683,7 @@ "confirmCancel": "Disable SBP auto-payment? Your subscription will no longer renew automatically via SBP.", "cancelled": "SBP auto-payment disabled", "enableError": "Failed to connect SBP auto-payment", + "cancelError": "Failed to cancel SBP auto-payment", "statusPending": "Waiting for confirmation in your banking app", "statusActive": "Active", "statusPastDue": "Payment failed — please retry", diff --git a/src/locales/fa.json b/src/locales/fa.json index 168b8ad..5bc36d9 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -582,6 +582,7 @@ "confirmCancel": "پرداخت خودکار SBP غیرفعال شود؟ اشتراک شما دیگر به‌صورت خودکار از طریق SBP تمدید نخواهد شد.", "cancelled": "پرداخت خودکار SBP غیرفعال شد", "enableError": "اتصال پرداخت خودکار SBP ناموفق بود", + "cancelError": "لغو پرداخت خودکار SBP ناموفق بود", "statusPending": "در انتظار تأیید در اپلیکیشن بانک", "statusActive": "فعال", "statusPastDue": "پرداخت ناموفق بود — دوباره تلاش کنید", diff --git a/src/locales/ru.json b/src/locales/ru.json index 30ee69f..c8239a3 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -702,6 +702,7 @@ "confirmCancel": "Отключить автоплатёж по СБП? Подписка больше не будет продлеваться автоматически через СБП.", "cancelled": "Автоплатёж по СБП отключён", "enableError": "Не удалось подключить автоплатёж по СБП", + "cancelError": "Не удалось отменить автоплатёж по СБП", "statusPending": "Ожидает подтверждения в приложении банка", "statusActive": "Активен", "statusPastDue": "Платёж не прошёл — попробуйте снова", diff --git a/src/locales/zh.json b/src/locales/zh.json index c9894ce..2d8ff03 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -582,6 +582,7 @@ "confirmCancel": "关闭 SBP 自动扣款?您的订阅将不再通过 SBP 自动续订。", "cancelled": "SBP 自动扣款已关闭", "enableError": "开通 SBP 自动扣款失败", + "cancelError": "取消 SBP 自动扣款失败", "statusPending": "等待银行应用确认", "statusActive": "已启用", "statusPastDue": "扣款失败 — 请重试", diff --git a/src/pages/Subscription.tsx b/src/pages/Subscription.tsx index 2d62a4f..c879276 100644 --- a/src/pages/Subscription.tsx +++ b/src/pages/Subscription.tsx @@ -354,6 +354,16 @@ export default function Subscription() { duration: 3000, }); }, + onError: (error: unknown) => { + const detail = (error as { response?: { data?: { detail?: unknown } } })?.response?.data + ?.detail; + showToast({ + type: 'error', + title: typeof detail === 'string' ? detail : t('subscription.sbpRecurring.cancelError'), + message: '', + duration: 3000, + }); + }, }); const handleCancelSbp = async () => {