import React from 'react'; import { clsx } from 'clsx'; import { AlertTriangle, TrendingUp } from 'lucide-react'; import { Alert, Button } from '@/components/ui'; import { useSubscription } from '@/contexts/SubscriptionContext'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from '@/hooks/useI18n'; export interface LimitWarningProps { limitType: 'organizations' | 'users' | 'storage' | 'apiCalls'; current: number; threshold?: number; // Percentage (0-100) at which to show warning showUpgradeButton?: boolean; className?: string; } /** * Component that shows a warning when approaching subscription limits */ export const LimitWarning = ({ limitType, current, threshold = 80, showUpgradeButton = true, className, }: LimitWarningProps) => { const { subscription, getRemainingLimit, isWithinLimits } = useSubscription(); const navigate = useNavigate(); const { t } = useTranslation(); if (!subscription) return null; const limit = subscription.limits[limitType]; if (limit === undefined || limit === -1) return null; // Unlimited const remaining = getRemainingLimit(limitType, current); const percentage = (current / limit) * 100; const isNearLimit = percentage >= threshold; const isAtLimit = !isWithinLimits(limitType, current); if (!isNearLimit && !isAtLimit) return null; const limitLabels = { organizations: 'organizations', users: 'team members', storage: 'storage', apiCalls: 'API calls', }; const label = limitLabels[limitType]; if (isAtLimit) { return (

{t('paywall.limitReached')}

{t('paywall.limitReachedDescription', { label, limit })}

{showUpgradeButton && ( )}
); } return (

{t('paywall.approachingLimit')}

{t('paywall.approachingLimitDescription', { current, limit, label, percentage: Math.round(percentage), remaining })}

{showUpgradeButton && ( )}
); };