import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Boxes, Loader2, Package } from 'lucide-react'; import apiClient from '../../api/client'; interface HeavyPlugin { name: string; display_name: string; description: string; status: string; } export function HeavyPluginList() { const { t } = useTranslation(); const [plugins, setPlugins] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); useEffect(() => { const fetchPlugins = async () => { setLoading(true); try { const resp = await apiClient.get('/api/v1/plugin/list'); setPlugins(resp.data.plugins || []); setError(''); } catch (err) { console.error('Failed to fetch heavy plugins:', err); setError(t('plugin.heavyPluginLoadFailed')); setPlugins([]); } finally { setLoading(false); } }; fetchPlugins(); }, [t]); return (

{t('plugin.heavyPluginManagement')}

{t('plugin.heavyPluginDesc')}

{loading ? (
{t('common.loading')}
) : error ? (
{error}
) : plugins.length === 0 ? (
{t('plugin.heavyPluginEmpty')} {t('plugin.heavyPluginEmptyHint')}
) : (
{plugins.map((p) => (

{p.display_name || p.name}

{p.name}
{p.status === 'running' && } {p.status}
{p.description && (

{p.description}

)}
))}
)}
); }