diff --git a/src/components/dashboard/ConnectDeviceTile.tsx b/src/components/dashboard/ConnectDeviceTile.tsx index 12a9387..49929f3 100644 --- a/src/components/dashboard/ConnectDeviceTile.tsx +++ b/src/components/dashboard/ConnectDeviceTile.tsx @@ -53,7 +53,7 @@ export default function ConnectDeviceTile({ } navigate(`/connection?sub=${subscription.id}`); }} - className={`mb-2.5 flex w-full items-center gap-3.5 rounded-[14px] p-3.5 text-left transition-shadow duration-300${isAtDeviceLimit ? 'cursor-not-allowed opacity-50' : ''}`} + className={`mb-2.5 flex w-full items-center gap-3.5 rounded-[14px] p-3.5 text-left transition-shadow duration-300 ${isAtDeviceLimit ? 'cursor-not-allowed opacity-50' : ''}`} data-onboarding="connect-devices" style={{ fontFamily: 'inherit' }} > diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx index 7404dc9..6b15a8d 100644 --- a/src/pages/Dashboard.tsx +++ b/src/pages/Dashboard.tsx @@ -80,6 +80,24 @@ export default function Dashboard() { staleTime: API.BALANCE_STALE_TIME_MS, }); + // Плитка «Подключить устройство» на главной живёт в МУЛЬТИТАРИФНОЙ ветке, а + // запрос выше там выключен: он привязан к одиночной подписке (`subscription` + // в мультитарифе всегда null). Без отдельного запроса счётчик плитки всегда + // показывал бы «0 из N», а лимит устройств не срабатывал бы никогда — то + // есть ровно то, ради чего плитку и добавили, не работало бы. + // Ключ ['devices', id] — тот же, что на странице подписки, так что кэш общий. + const homeSingleSub = + isMultiTariff && multiSubData?.subscriptions?.length === 1 + ? multiSubData.subscriptions[0] + : null; + + const { data: homeSingleSubDevices } = useQuery({ + queryKey: ['devices', homeSingleSub?.id], + queryFn: () => subscriptionApi.getDevices(homeSingleSub?.id), + enabled: !!homeSingleSub, + staleTime: API.BALANCE_STALE_TIME_MS, + }); + const { data: referralInfo, isLoading: refLoading } = useQuery({ queryKey: ['referral-info'], queryFn: referralApi.getReferralInfo, @@ -306,18 +324,16 @@ export default function Dashboard() { и человек попадает на главную с готовым доступом. Пока подписка одна, показываем здесь же, как подключить устройство: иначе за этим нужно уходить на отдельную страницу, о чём он не догадается. */} - {multiSubData.subscriptions.length === 1 && ( + {homeSingleSub && ( 0 + homeSingleSub.traffic_limit_gb > 0 ? Math.min( 100, Math.round( - (multiSubData.subscriptions[0].traffic_used_gb / - multiSubData.subscriptions[0].traffic_limit_gb) * - 100, + (homeSingleSub.traffic_used_gb / homeSingleSub.traffic_limit_gb) * 100, ), ) : 0