import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router'; import { Link } from 'react-router'; import { UseMutationResult } from '@tanstack/react-query'; import TrafficProgressBar from './TrafficProgressBar'; import Sparkline from './Sparkline'; import { useAnimatedNumber } from '../../hooks/useAnimatedNumber'; import { useTheme } from '../../hooks/useTheme'; import { getTrafficZone } from '../../utils/trafficZone'; import { formatTraffic } from '../../utils/formatTraffic'; import { getGlassColors } from '../../utils/glassTheme'; import { HoverBorderGradient } from '../ui/hover-border-gradient'; import type { Subscription } from '../../types'; interface SubscriptionCardActiveProps { subscription: Subscription; trafficData: { traffic_used_gb: number; traffic_used_percent: number; is_unlimited: boolean; } | null; refreshTrafficMutation: UseMutationResult; trafficRefreshCooldown: number; connectedDevices: number; } const RefreshIcon = ({ className = 'w-4 h-4' }: { className?: string }) => ( ); export default function SubscriptionCardActive({ subscription, trafficData, refreshTrafficMutation, trafficRefreshCooldown, connectedDevices, }: SubscriptionCardActiveProps) { const { t } = useTranslation(); const navigate = useNavigate(); const { isDark } = useTheme(); const g = getGlassColors(isDark); const usedPercent = trafficData?.traffic_used_percent ?? subscription.traffic_used_percent; const usedGb = trafficData?.traffic_used_gb ?? subscription.traffic_used_gb; const isUnlimited = trafficData?.is_unlimited ?? subscription.traffic_limit_gb === 0; const zone = useMemo(() => getTrafficZone(usedPercent), [usedPercent]); const animatedPercent = useAnimatedNumber(usedPercent); const formattedDate = new Date(subscription.end_date).toLocaleDateString(); const daysLeft = subscription.days_left; // Sparkline placeholder data (hidden until API provides daily usage) const dailyUsage: number[] = []; return (
{/* Trial shimmer border */} {subscription.is_trial && (