mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-28 17:43:47 +00:00
fix: multi-subscription frontend improvements
- Connection page: reads subscription_id from ?sub= query param - Subscription detail: passes subscriptionId to /connection URL - Dashboard: skip single-subscription and devices queries in multi-tariff mode (data comes from subscriptions-list instead)
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { useEffect, useCallback, useMemo, useRef } from 'react';
|
import { useEffect, useCallback, useMemo, useRef } from 'react';
|
||||||
import { Link, useNavigate } from 'react-router';
|
import { Link, useNavigate, useSearchParams } from 'react-router';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { openLink as sdkOpenLink } from '@telegram-apps/sdk-react';
|
import { openLink as sdkOpenLink } from '@telegram-apps/sdk-react';
|
||||||
@@ -14,6 +14,8 @@ import InstallationGuide from '../components/connection/InstallationGuide';
|
|||||||
export default function Connection() {
|
export default function Connection() {
|
||||||
const { t, i18n } = useTranslation();
|
const { t, i18n } = useTranslation();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
const [searchParams] = useSearchParams();
|
||||||
|
const subId = searchParams.get('sub') ? Number(searchParams.get('sub')) : undefined;
|
||||||
const user = useAuthStore((state) => state.user);
|
const user = useAuthStore((state) => state.user);
|
||||||
const isAdmin = useAuthStore((state) => state.isAdmin);
|
const isAdmin = useAuthStore((state) => state.isAdmin);
|
||||||
const { isTelegramWebApp } = useTelegramSDK();
|
const { isTelegramWebApp } = useTelegramSDK();
|
||||||
@@ -27,8 +29,8 @@ export default function Connection() {
|
|||||||
isLoading,
|
isLoading,
|
||||||
error,
|
error,
|
||||||
} = useQuery<AppConfig>({
|
} = useQuery<AppConfig>({
|
||||||
queryKey: ['appConfig'],
|
queryKey: ['appConfig', subId],
|
||||||
queryFn: () => subscriptionApi.getAppConfig(),
|
queryFn: () => subscriptionApi.getAppConfig(subId),
|
||||||
});
|
});
|
||||||
|
|
||||||
const handleGoBack = useCallback(() => {
|
const handleGoBack = useCallback(() => {
|
||||||
|
|||||||
@@ -51,16 +51,6 @@ export default function Dashboard() {
|
|||||||
refetchOnMount: 'always',
|
refetchOnMount: 'always',
|
||||||
});
|
});
|
||||||
|
|
||||||
const { data: subscriptionResponse, isLoading: subLoading } = useQuery({
|
|
||||||
queryKey: ['subscription'],
|
|
||||||
queryFn: () => subscriptionApi.getSubscription(),
|
|
||||||
retry: false,
|
|
||||||
staleTime: API.BALANCE_STALE_TIME_MS,
|
|
||||||
refetchOnMount: 'always',
|
|
||||||
});
|
|
||||||
|
|
||||||
const subscription = subscriptionResponse?.subscription ?? null;
|
|
||||||
|
|
||||||
// Multi-tariff: check if user has multiple subscriptions
|
// Multi-tariff: check if user has multiple subscriptions
|
||||||
const { data: multiSubData } = useQuery({
|
const { data: multiSubData } = useQuery({
|
||||||
queryKey: ['subscriptions-list'],
|
queryKey: ['subscriptions-list'],
|
||||||
@@ -69,6 +59,17 @@ export default function Dashboard() {
|
|||||||
});
|
});
|
||||||
const isMultiTariff = multiSubData?.multi_tariff_enabled ?? false;
|
const isMultiTariff = multiSubData?.multi_tariff_enabled ?? false;
|
||||||
|
|
||||||
|
const { data: subscriptionResponse, isLoading: subLoading } = useQuery({
|
||||||
|
queryKey: ['subscription'],
|
||||||
|
queryFn: () => subscriptionApi.getSubscription(),
|
||||||
|
retry: false,
|
||||||
|
staleTime: API.BALANCE_STALE_TIME_MS,
|
||||||
|
refetchOnMount: 'always',
|
||||||
|
enabled: !isMultiTariff,
|
||||||
|
});
|
||||||
|
|
||||||
|
const subscription = subscriptionResponse?.subscription ?? null;
|
||||||
|
|
||||||
const { data: trialInfo, isLoading: trialLoading } = useQuery({
|
const { data: trialInfo, isLoading: trialLoading } = useQuery({
|
||||||
queryKey: ['trial-info'],
|
queryKey: ['trial-info'],
|
||||||
queryFn: () => subscriptionApi.getTrialInfo(),
|
queryFn: () => subscriptionApi.getTrialInfo(),
|
||||||
@@ -78,7 +79,7 @@ export default function Dashboard() {
|
|||||||
const { data: devicesData } = useQuery({
|
const { data: devicesData } = useQuery({
|
||||||
queryKey: ['devices'],
|
queryKey: ['devices'],
|
||||||
queryFn: () => subscriptionApi.getDevices(),
|
queryFn: () => subscriptionApi.getDevices(),
|
||||||
enabled: !!subscription,
|
enabled: !!subscription && !isMultiTariff,
|
||||||
staleTime: API.BALANCE_STALE_TIME_MS,
|
staleTime: API.BALANCE_STALE_TIME_MS,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -794,7 +794,7 @@ export default function Subscription() {
|
|||||||
haptic.notification('error');
|
haptic.notification('error');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
navigate('/connection');
|
navigate(subscriptionId ? `/connection?sub=${subscriptionId}` : '/connection');
|
||||||
}}
|
}}
|
||||||
className={`mb-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-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' : ''}`}
|
||||||
style={{ fontFamily: 'inherit' }}
|
style={{ fontFamily: 'inherit' }}
|
||||||
|
|||||||
Reference in New Issue
Block a user