diff --git a/web/src/pages/PluginsPage.tsx b/web/src/pages/PluginsPage.tsx index e50e0aa..36f66dd 100644 --- a/web/src/pages/PluginsPage.tsx +++ b/web/src/pages/PluginsPage.tsx @@ -1,11 +1,10 @@ -import { memo, useCallback, useEffect, useMemo, useState } from 'react'; -import { Button, Modal, Form, Input, Tag, message, Card, Typography, Popconfirm, Empty, Skeleton, theme, Divider, Tabs, Select, Pagination } from 'antd'; +import { memo, useEffect, useMemo, useState } from 'react'; +import { Button, Modal, Form, Input, Tag, message, Card, Typography, Popconfirm, Empty, Skeleton, theme, Divider, Tabs } from 'antd'; import { GithubOutlined, LinkOutlined } from '@ant-design/icons'; import { pluginsApi, type PluginItem } from '../api/plugins'; import { loadPlugin, ensureManifest } from '../plugins/runtime'; import { getAppByKey, reloadPluginApps, ensureAppsLoaded, listSystemApps, type AppDescriptor } from '../apps/registry'; import { useI18n } from '../i18n'; -import { fetchRepoList, type RepoItem, buildCenterUrl } from '../api/pluginCenter'; import { useAppWindows } from '../contexts/AppWindowsContext'; const PluginsPage = memo(function PluginsPage() { @@ -15,14 +14,6 @@ const PluginsPage = memo(function PluginsPage() { const [loading, setLoading] = useState(false); const [q, setQ] = useState(''); const [tab, setTab] = useState<'installed' | 'discover'>('installed'); - const [repoLoading, setRepoLoading] = useState(false); - const [repoQ, setRepoQ] = useState(''); - const [repoSort, setRepoSort] = useState<'createdAt' | 'downloads'>('createdAt'); - const [repoPage, setRepoPage] = useState(1); - const [repoPageSize, setRepoPageSize] = useState(12); - const [repoTotal, setRepoTotal] = useState(0); - const [repoItems, setRepoItems] = useState([]); - const [installingKeys, setInstallingKeys] = useState>({}); const [form] = Form.useForm<{ url: string }>(); const { token } = theme.useToken(); const { t } = useI18n(); @@ -42,30 +33,6 @@ const PluginsPage = memo(function PluginsPage() { })(); }, []); - const installedKeySet = useMemo(() => { - const set = new Set(); - data.forEach(p => { if (p.key) set.add(p.key); }); - return set; - }, [data]); - - const reloadRepo = useCallback(async () => { - try { - setRepoLoading(true); - const res = await fetchRepoList({ query: repoQ || undefined, sort: repoSort, page: repoPage, pageSize: repoPageSize }); - setRepoItems(res.items || []); - setRepoTotal(res.total || 0); - } catch { - setRepoItems([]); - setRepoTotal(0); - } finally { - setRepoLoading(false); - } - }, [repoPage, repoPageSize, repoQ, repoSort]); - - useEffect(() => { - if (tab === 'discover') reloadRepo(); - }, [reloadRepo, tab]); - const handleAdd = async () => { try { const { url } = await form.validateFields(); @@ -246,99 +213,6 @@ const PluginsPage = memo(function PluginsPage() { ); }; - const renderRepoCard = (item: RepoItem) => { - const icon = item.icon || '/plugins/demo-text-viewer.svg'; - const name = item.name || item.key; - const exts = (item.supportedExts || []).slice(0, 6); - const more = (item.supportedExts || []).length - exts.length; - const installed = installedKeySet.has(item.key); - const installing = !!installingKeys[item.key]; - const title = ( -
- {name} { (e.currentTarget as HTMLImageElement).src = '/plugins/demo-text-viewer.svg'; }} /> - {name} - {item.version && {item.version}} -
- ); - return ( - - {t('Downloads')}: {item.downloads} - - ) : ( - - ), - - ]} - > - - {item.description || '(暂无描述)'} - -
-
- {(exts.length > 0 ? exts : ['任意']).map(e => {e})} -
- {more > 0 && +{more}} -
- - {(item.author || item.github || item.website) && ( -
- {item.author && {t('Author')}: {item.author}} - - {item.github && ( - - - - )} - {item.website && ( - - - - )} - -
- )} -
- ); - }; - return (
@@ -392,63 +266,8 @@ const PluginsPage = memo(function PluginsPage() { key: 'discover', label: t('Discover'), children: ( -
-
- { setRepoQ(e.target.value); setRepoPage(1); }} - allowClear - style={{ maxWidth: 360 }} - onPressEnter={() => { setRepoPage(1); reloadRepo(); }} - /> -