fix(dashboard): убрать дубль кнопки покупки при пустом списке подписок

Мульти-тариф блок рендерился даже при пустом списке подписок (пустой
массив truthy) — показывал заголовок «Подписки» и кнопку покупки, которая
дублировала кнопку из блока «нет подписок» (триал-оффер). Получалось две
одинаковые «Посмотреть тарифы и купить подписку».

Теперь мульти-тариф блок рендерится только когда подписки реально есть
(length > 0), а блок «нет подписок» показывает триал (если доступен) и
ВСЕГДА одну явную кнопку покупки — заодно закрывает случай «нет подписок и
триал недоступен» (раньше его прикрывал пустой мульти-тариф блок).
This commit is contained in:
c0mrade
2026-06-03 11:17:00 +03:00
parent 39bfef58d0
commit cecfe7ec03

View File

@@ -279,8 +279,10 @@ export default function Dashboard() {
{/* Pending Gift Activations */}
{pendingGifts && pendingGifts.length > 0 && <PendingGiftCard gifts={pendingGifts} />}
{/* Multi-tariff: show subscription cards (max 3) */}
{isMultiTariff && multiSubData?.subscriptions && (
{/* Multi-tariff: show subscription cards (max 3) — только когда подписки
реально есть. Пустой случай (нет подписок) ведёт блок ниже (триал/покупка),
иначе кнопка покупки дублировалась. */}
{isMultiTariff && multiSubData?.subscriptions && multiSubData.subscriptions.length > 0 && (
<div className="space-y-3">
<div className="flex items-center justify-between px-1">
<span className="text-sm font-medium opacity-60">
@@ -361,9 +363,14 @@ export default function Dashboard() {
</>
)}
{/* Trial Activation */}
{hasNoSubscription && !trialLoading && trialInfo?.is_available && (
{/* Нет подписок: показываем триал (если доступен) и ВСЕГДА одну явную
кнопку покупки. Триал не обязателен, чтобы попасть в витрину — раньше
при доступном триале это был единственный экран без кнопки покупки
(Telegram-баг #605056/#605063). Единственная кнопка тут (вместо дубля
с мульти-тариф блоком). */}
{hasNoSubscription && !trialLoading && (
<div className="space-y-3">
{trialInfo?.is_available && (
<TrialOfferCard
trialInfo={trialInfo}
balanceKopeks={balanceData?.balance_kopeks || 0}
@@ -371,10 +378,7 @@ export default function Dashboard() {
activateTrialMutation={activateTrialMutation}
trialError={trialError}
/>
{/* Новый пользователь не обязан активировать триал, чтобы попасть в
витрину — даём явный путь к покупке подписки. Раньше при доступном
триале это был единственный экран без кнопки покупки, и на дашборде
(вход по умолчанию) юзер оставался заперт (Telegram-баг #605056/#605063). */}
)}
<Link
to="/subscription/purchase"
className="flex w-full items-center justify-center gap-2 rounded-2xl bg-accent-500 p-3.5 text-sm font-semibold text-white transition-colors hover:bg-accent-600"