feat: support disabled daily subscription status in cabinet UI

- Show SubscriptionCardExpired for disabled daily subscriptions
- Use togglePause() API for resume instead of renewSubscription()
- Add "Suspended" status badge and balance query invalidation
- Add dashboard.suspended and subscription.pause.suspended translations (ru, en, zh, fa)
This commit is contained in:
Fringg
2026-03-08 21:35:00 +03:00
parent 9aae9cc0e6
commit 7940410d7d
7 changed files with 269 additions and 36 deletions

View File

@@ -235,8 +235,12 @@ export default function Dashboard() {
<div className="skeleton h-12 w-full rounded-xl" />
</div>
</div>
) : subscription?.is_expired ? (
<SubscriptionCardExpired subscription={subscription} />
) : subscription?.is_expired || subscription?.status === 'disabled' ? (
<SubscriptionCardExpired
subscription={subscription}
balanceKopeks={balanceData?.balance_kopeks ?? 0}
balanceRubles={balanceData?.balance_rubles ?? 0}
/>
) : subscription ? (
<SubscriptionCardActive
subscription={subscription}

View File

@@ -250,6 +250,7 @@ export default function Subscription() {
mutationFn: () => subscriptionApi.togglePause(),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['balance'] });
},
});
@@ -525,7 +526,9 @@ export default function Subscription() {
? subscription.is_trial
? t('subscription.trialStatus')
: t('subscription.active')
: t('subscription.expired')}
: subscription.status === 'disabled'
? t('subscription.pause.suspended')
: t('subscription.expired')}
</span>
</div>
@@ -982,9 +985,11 @@ export default function Subscription() {
{t('subscription.pause.title')}
</h2>
<div className="mt-1 text-[12px] text-dark-50/35">
{subscription.is_daily_paused
? t('subscription.pause.paused')
: t('subscription.pause.active')}
{subscription.status === 'disabled'
? t('subscription.pause.suspended')
: subscription.is_daily_paused
? t('subscription.pause.paused')
: t('subscription.pause.active')}
</div>
</div>
<button
@@ -992,20 +997,25 @@ export default function Subscription() {
disabled={pauseMutation.isPending}
className="rounded-[10px] px-4 py-2 text-sm font-semibold transition-colors duration-300"
style={{
background: subscription.is_daily_paused
? 'rgba(var(--color-accent-400), 0.12)'
: 'rgba(255,184,0,0.12)',
border: subscription.is_daily_paused
? '1px solid rgba(var(--color-accent-400), 0.2)'
: '1px solid rgba(255,184,0,0.2)',
color: subscription.is_daily_paused ? 'rgb(var(--color-accent-400))' : '#FFB800',
background:
subscription.is_daily_paused || subscription.status === 'disabled'
? 'rgba(var(--color-accent-400), 0.12)'
: 'rgba(255,184,0,0.12)',
border:
subscription.is_daily_paused || subscription.status === 'disabled'
? '1px solid rgba(var(--color-accent-400), 0.2)'
: '1px solid rgba(255,184,0,0.2)',
color:
subscription.is_daily_paused || subscription.status === 'disabled'
? 'rgb(var(--color-accent-400))'
: '#FFB800',
}}
>
{pauseMutation.isPending ? (
<span className="flex items-center gap-2">
<span className="h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" />
</span>
) : subscription.is_daily_paused ? (
) : subscription.is_daily_paused || subscription.status === 'disabled' ? (
t('subscription.pause.resumeBtn')
) : (
t('subscription.pause.pauseBtn')