fix(subscriptions): дать новым юзерам путь в витрину без активации триала

Новый пользователь с доступным триалом видел только TrialOfferCard (CTA
активации), без пути в витрину тарифов — приходилось сперва активировать
пробную. Добавлена вторичная кнопка «Посмотреть тарифы и купить подписку»
→ /subscription/purchase под карточкой триала на обеих страницах, где она
рендерится: Subscriptions и Dashboard (вход по умолчанию).

Telegram-баг #605056/#605063.
This commit is contained in:
c0mrade
2026-05-31 15:52:08 +03:00
parent c24ae0039c
commit 2d5982d82b
2 changed files with 39 additions and 14 deletions

View File

@@ -360,13 +360,25 @@ export default function Dashboard() {
{/* Trial Activation */} {/* Trial Activation */}
{hasNoSubscription && !trialLoading && trialInfo?.is_available && ( {hasNoSubscription && !trialLoading && trialInfo?.is_available && (
<TrialOfferCard <div className="space-y-3">
trialInfo={trialInfo} <TrialOfferCard
balanceKopeks={balanceData?.balance_kopeks || 0} trialInfo={trialInfo}
balanceRubles={balanceData?.balance_rubles || 0} balanceKopeks={balanceData?.balance_kopeks || 0}
activateTrialMutation={activateTrialMutation} balanceRubles={balanceData?.balance_rubles || 0}
trialError={trialError} activateTrialMutation={activateTrialMutation}
/> trialError={trialError}
/>
{/* Новый пользователь не обязан активировать триал, чтобы попасть в
витрину — даём явный путь к покупке подписки. Раньше при доступном
триале это был единственный экран без кнопки покупки, и на дашборде
(вход по умолчанию) юзер оставался заперт (Telegram-баг #605056/#605063). */}
<Link
to="/subscription/purchase"
className="flex w-full items-center justify-center rounded-2xl border border-dashed border-white/15 p-3.5 text-sm font-medium opacity-60 transition-opacity hover:opacity-90"
>
{t('subscriptions.browsePlans', 'Посмотреть тарифы и купить подписку')}
</Link>
</div>
)} )}
{/* Promo Offers */} {/* Promo Offers */}

View File

@@ -157,13 +157,26 @@ export default function Subscriptions() {
{/* Empty state: показываем триал, если доступен; иначе — обычный empty */} {/* Empty state: показываем триал, если доступен; иначе — обычный empty */}
{hasNoSubscriptions && !trialLoading && trialInfo?.is_available && ( {hasNoSubscriptions && !trialLoading && trialInfo?.is_available && (
<TrialOfferCard <div className="space-y-4">
trialInfo={trialInfo} <TrialOfferCard
balanceKopeks={balanceData?.balance_kopeks ?? 0} trialInfo={trialInfo}
balanceRubles={balanceData?.balance_rubles ?? 0} balanceKopeks={balanceData?.balance_kopeks ?? 0}
activateTrialMutation={activateTrialMutation} balanceRubles={balanceData?.balance_rubles ?? 0}
trialError={trialError} activateTrialMutation={activateTrialMutation}
/> trialError={trialError}
/>
{/* Новый пользователь не обязан активировать триал, чтобы попасть
в витрину — даём явный путь к покупке подписки. Раньше при
доступном триале это был единственный экран без кнопки «Купить»
(Telegram-баг #605056/#605063). */}
<button
onClick={() => navigate('/subscription/purchase')}
className="w-full rounded-xl border px-6 py-3 text-sm font-medium transition-colors"
style={{ background: g.innerBg, borderColor: g.cardBorder, color: g.text }}
>
{t('subscriptions.browsePlans', 'Посмотреть тарифы и купить подписку')}
</button>
</div>
)} )}
{hasNoSubscriptions && !trialLoading && !trialInfo?.is_available && ( {hasNoSubscriptions && !trialLoading && !trialInfo?.is_available && (
<EmptyState onBuy={() => navigate('/subscription/purchase')} /> <EmptyState onBuy={() => navigate('/subscription/purchase')} />