feat(dashboard): плитка «Подключить устройство» на главной

Подписку может выдать бонус рекламной кампании — она создаётся
автоматически, и человек попадает на главную с уже готовым доступом.
Плитка подключения жила только в карточке подписки на отдельной
странице, так что на главной ему нечем было воспользоваться: подписка
есть, а как подключить устройство — не видно.

Плитка вынесена из SubscriptionCardActive в отдельный компонент и
переиспользована обоими экранами, второй копии разметки не появилось.
На главной показывается, пока подписка одна: при нескольких выбор
устройства неоднозначен, и уместнее уходить в конкретную подписку.
This commit is contained in:
Case211
2026-08-05 00:30:40 +05:00
parent b866bebeeb
commit 06c7d13883
3 changed files with 172 additions and 111 deletions

View File

@@ -14,6 +14,7 @@ import PromoOffersSection from '../components/PromoOffersSection';
import NewsSection from '../components/news/NewsSection';
import SubscriptionCardActive from '../components/dashboard/SubscriptionCardActive';
import SubscriptionCardExpired from '../components/dashboard/SubscriptionCardExpired';
import ConnectDeviceTile from '../components/dashboard/ConnectDeviceTile';
import TrialOfferCard from '../components/dashboard/TrialOfferCard';
import StatsGrid from '../components/dashboard/StatsGrid';
import { giftApi } from '../api/gift';
@@ -301,6 +302,28 @@ export default function Dashboard() {
onClick={() => navigate(`/subscriptions/${sub.id}`)}
/>
))}
{/* Подписку мог выдать бонус рекламной кампании — она создаётся сама,
и человек попадает на главную с готовым доступом. Пока подписка
одна, показываем здесь же, как подключить устройство: иначе за
этим нужно уходить на отдельную страницу, о чём он не догадается. */}
{multiSubData.subscriptions.length === 1 && (
<ConnectDeviceTile
subscription={multiSubData.subscriptions[0]}
connectedDevices={devicesData?.total ?? 0}
usedPercent={
multiSubData.subscriptions[0].traffic_limit_gb > 0
? Math.min(
100,
Math.round(
(multiSubData.subscriptions[0].traffic_used_gb /
multiSubData.subscriptions[0].traffic_limit_gb) *
100,
),
)
: 0
}
/>
)}
{multiSubData.subscriptions.length > 3 && (
<Link
to="/subscriptions"