mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-09-13 08:13:09 +00:00
fix(dashboard): счётчик устройств в плитке на главной
Дополнения к PR #544 при мерже. Плитка на главной берёт число подключённых устройств из запроса ['devices'], а он выключен ровно там, где плитка живёт: `enabled: !!subscription && !isMultiTariff`, тогда как блок с плиткой рендерится в мультитарифной ветке, где `subscription` всегда null (свой запрос отключён по !isMultiTariff). То есть счётчик показывал бы «0 из N» всегда, лимит устройств не срабатывал бы никогда, а точки-индикаторы стояли бы пустыми — при том, что счётчик и есть смысл плитки. Добавлен запрос по конкретной подписке: getDevices принимает subscription_id, ключ ['devices', id] — тот же, что на странице подписки, поэтому кэш общий и лишнего похода в сеть при переходе туда не будет. Заодно вынес выбор единственной подписки в переменную, чтобы условие показа и данные плитки не разъезжались. Отдельно поправлен потерянный пробел в className: `duration-300${...}` склеивал класс в `duration-300cursor-not-allowed`, из-за чего оформление заблокированной плитки не применялось. Баг приехал вместе с переносом из SubscriptionCardActive (там он с самого начала), но раз компонент всё равно выделяется — чиню здесь.
This commit is contained in:
@@ -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' }}
|
||||
>
|
||||
|
||||
@@ -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 && (
|
||||
<ConnectDeviceTile
|
||||
subscription={multiSubData.subscriptions[0]}
|
||||
connectedDevices={devicesData?.total ?? 0}
|
||||
subscription={homeSingleSub}
|
||||
connectedDevices={homeSingleSubDevices?.total ?? 0}
|
||||
usedPercent={
|
||||
multiSubData.subscriptions[0].traffic_limit_gb > 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
|
||||
|
||||
Reference in New Issue
Block a user