/** * Admin All Subscriptions Page * Manage all subscriptions across all accounts */ import { useState, useEffect } from 'react'; import { useLocation } from 'react-router-dom'; import { Search, Filter, Loader2, AlertCircle, Check, X, RefreshCw } from 'lucide-react'; import { Card } from '../../components/ui/card'; import Badge from '../../components/ui/badge/Badge'; import { fetchAPI } from '../../services/api'; import Button from '../../components/ui/button/Button'; interface Subscription { id: number; account_name: string; status: string; current_period_start: string; current_period_end: string; cancel_at_period_end: boolean; plan_name: string; account: number; plan: number | string; } export default function AdminSubscriptionsPage() { const [subscriptions, setSubscriptions] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); const [actionLoadingId, setActionLoadingId] = useState(null); const location = useLocation(); useEffect(() => { const params = new URLSearchParams(location.search); const accountId = params.get('account_id'); loadSubscriptions(accountId ? Number(accountId) : undefined); }, [location.search]); const loadSubscriptions = async (accountId?: number) => { try { setLoading(true); const query = accountId ? `?account_id=${accountId}` : ''; const data = await fetchAPI(`/v1/admin/subscriptions/${query}`); setSubscriptions(data.results || []); } catch (err: any) { setError(err.message || 'Failed to load subscriptions'); } finally { setLoading(false); } }; const filteredSubscriptions = subscriptions.filter((sub) => { return statusFilter === 'all' || sub.status === statusFilter; }); const changeStatus = async (id: number, action: 'activate' | 'cancel') => { try { setActionLoadingId(id); const endpoint = action === 'activate' ? `/v1/admin/subscriptions/${id}/activate/` : `/v1/admin/subscriptions/${id}/cancel/`; await fetchAPI(endpoint, { method: 'POST' }); await loadSubscriptions(); } catch (err: any) { setError(err.message || 'Failed to update subscription'); } finally { setActionLoadingId(null); } }; const refreshPlans = async () => { await loadSubscriptions(); }; if (loading) { return (
); } return (

All Subscriptions

Manage all active and past subscriptions

{error && (

{error}

)}
{filteredSubscriptions.length === 0 ? ( ) : ( filteredSubscriptions.map((sub) => ( )) )}
Account Plan Status Period End Actions
No subscriptions found
{sub.account_name} {sub.plan_name} {sub.status} {new Date(sub.current_period_end).toLocaleDateString()} {sub.status !== 'active' && ( )} {sub.status === 'active' && ( )}
); }