diff --git a/src/pages/AdminUserDetail.tsx b/src/pages/AdminUserDetail.tsx index c920a43..12bbab9 100644 --- a/src/pages/AdminUserDetail.tsx +++ b/src/pages/AdminUserDetail.tsx @@ -336,6 +336,7 @@ export default function AdminUserDetail() { const [subDays, setSubDays] = useState(30); const [selectedTariffId, setSelectedTariffId] = useState(null); const [activeSubscriptionId, setActiveSubscriptionId] = useState(null); + const hasAutoSelectedSub = useRef(false); const [subscriptionDetailView, setSubscriptionDetailView] = useState(false); // Promo group @@ -782,13 +783,14 @@ export default function AdminUserDetail() { const selectedSub = userSubscriptions.find((s) => s.id === activeSubscriptionId) ?? user?.subscription ?? null; - // Auto-select first subscription when user loads + // Auto-select first subscription when user loads (one-time init) useEffect(() => { - if (user && userSubscriptions.length > 0 && !activeSubscriptionId) { + if (user && userSubscriptions.length > 0 && !hasAutoSelectedSub.current) { const activeSub = userSubscriptions.find((s) => s.is_active) ?? userSubscriptions[0]; setActiveSubscriptionId(activeSub.id); + hasAutoSelectedSub.current = true; } - }, [user, userSubscriptions, activeSubscriptionId]); + }, [user, userSubscriptions]); const currentTariff = tariffs.find((t) => t.id === selectedSub?.tariff_id) || null; diff --git a/src/pages/Subscription.tsx b/src/pages/Subscription.tsx index 5129da1..8c1871f 100644 --- a/src/pages/Subscription.tsx +++ b/src/pages/Subscription.tsx @@ -1,7 +1,7 @@ import { useState, useEffect, useRef, useCallback, memo } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; -import { useNavigate, useParams } from 'react-router'; +import { Navigate, useNavigate, useParams } from 'react-router'; import { subscriptionApi } from '../api/subscription'; import { WebBackButton } from '../components/WebBackButton'; import { useDestructiveConfirm } from '../platform/hooks/useNativeDialog'; @@ -456,8 +456,7 @@ export default function Subscription() { // In multi-tariff mode without a specific subscription ID, redirect to list if (isMultiTariff && !subscriptionId && !isLoading) { - navigate('/subscriptions', { replace: true }); - return null; + return ; } if (isLoading) { diff --git a/src/pages/Subscriptions.tsx b/src/pages/Subscriptions.tsx index 5511b2c..1b2e600 100644 --- a/src/pages/Subscriptions.tsx +++ b/src/pages/Subscriptions.tsx @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import { useNavigate } from 'react-router'; +import { Navigate, useNavigate } from 'react-router'; import { useTranslation } from 'react-i18next'; import { subscriptionApi } from '../api/subscription'; import { useTheme } from '../hooks/useTheme'; @@ -68,8 +68,7 @@ export default function Subscriptions() { // Single-tariff mode with one subscription: skip list, go directly to detail if (data && !isMultiTariff && subscriptions.length === 1) { - navigate(`/subscriptions/${subscriptions[0].id}`, { replace: true }); - return null; + return ; } return (