/** * Quota management page - coordinates the three quota sections. */ import { useCallback, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Button } from '@/components/ui/Button'; import { useAuthStore } from '@/stores'; import { authFilesApi } from '@/services/api'; import { QuotaSection, ANTIGRAVITY_CONFIG, CODEX_CONFIG, GEMINI_CLI_CONFIG } from '@/components/quota'; import type { AuthFileItem } from '@/types'; import styles from './QuotaPage.module.scss'; export function QuotaPage() { const { t } = useTranslation(); const connectionStatus = useAuthStore((state) => state.connectionStatus); const [files, setFiles] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const disableControls = connectionStatus !== 'connected'; const loadFiles = useCallback(async () => { setLoading(true); setError(''); try { const data = await authFilesApi.list(); setFiles(data?.files || []); } catch (err: unknown) { const errorMessage = err instanceof Error ? err.message : t('notification.refresh_failed'); setError(errorMessage); } finally { setLoading(false); } }, [t]); useEffect(() => { loadFiles(); }, [loadFiles]); return (

{t('quota_management.title')}

{t('quota_management.description')}

{error &&
{error}
}
); }