/** * 插件商店 */ import { LoadingSpinner } from '@/components/LoadingSpinner'; import { PillTabPane, PillTabs } from '@/components/PillTabs'; import { Divider } from 'antd'; import React from 'react'; import { t, useAsync } from 'tailchat-shared'; import { builtinPlugins } from '../builtin'; import { pluginManager } from '../manager'; import { PluginStoreItem } from './Item'; import { ManualInstall } from './ManualInstall'; function usePluginStoreData() { const { loading: loading1, value: installedPluginList = [] } = useAsync( async () => pluginManager.getInstalledPlugins(), [] ); const { loading: loading2, value: allPlugins = [] } = useAsync( async () => pluginManager.getRegistryPlugins(), [] ); const loading = loading1 || loading2; return { loading, installedPluginList, allPlugins, }; } export const PluginStore: React.FC = React.memo(() => { const { loading, installedPluginList, allPlugins } = usePluginStoreData(); if (loading) { return ; } const installedPluginNameList = installedPluginList.map((p) => p.name); return (
{t('内置插件')}
{builtinPlugins.map((plugin) => (
))}
{t('插件中心')}
{allPlugins.map((plugin) => (
))}
{t('已安装')}
{[...builtinPlugins, ...installedPluginList].map((plugin) => (
))}
{t('手动安装')}} key="3" >
); }); PluginStore.displayName = 'PluginStore';