diff --git a/src/api/subscription.ts b/src/api/subscription.ts index ef8dc7e..3e2162b 100644 --- a/src/api/subscription.ts +++ b/src/api/subscription.ts @@ -48,6 +48,11 @@ export const subscriptionApi = { return response.data; }, + deleteSubscription: async (subscriptionId: number): Promise<{ message: string }> => { + const response = await apiClient.delete(`/cabinet/subscriptions/${subscriptionId}`); + return response.data; + }, + // ── Legacy single-subscription status ─────────────────────────────── getSubscription: async (subscriptionId?: number): Promise => { diff --git a/src/pages/Subscription.tsx b/src/pages/Subscription.tsx index bf32f9f..55c6642 100644 --- a/src/pages/Subscription.tsx +++ b/src/pages/Subscription.tsx @@ -4,6 +4,14 @@ import { useTranslation } from 'react-i18next'; import { useNavigate, useParams } from 'react-router'; import { subscriptionApi } from '../api/subscription'; import { WebBackButton } from '../components/WebBackButton'; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from '../components/primitives/Dialog'; import TrafficProgressBar from '../components/dashboard/TrafficProgressBar'; import { HoverBorderGradient } from '../components/ui/hover-border-gradient'; import { useTrafficZone } from '../hooks/useTrafficZone'; @@ -175,6 +183,8 @@ export default function Subscription() { const g = getGlassColors(isDark); const haptic = useHaptic(); const [copied, setCopied] = useState(false); + const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); + const [deleteLoading, setDeleteLoading] = useState(false); // Helper to format price from kopeks const formatPrice = (kopeks: number) => `${formatAmount(kopeks / 100)} ${currencySymbol}`; @@ -1264,6 +1274,72 @@ export default function Subscription() { {/* Purchase / Renewal CTA */} + {/* Delete expired subscription */} + {isMultiTariff && subscription && !subscription.is_active && !subscription.is_trial && ( + <> + + + + + + {t('subscription.deleteTitle', 'Удалить подписку?')} + + {t( + 'subscription.deleteWarning', + 'Подписка будет удалена безвозвратно. Все данные, устройства и настройки будут потеряны. Это действие нельзя отменить.', + )} + + + + + + + + + + )} + {/* Additional Options (Buy Devices) */} {subscription && (subscription.is_active || subscription.is_limited) &&