import { useState } from 'react'; import { Button, Layout, Menu, theme, Input, Spin } from 'antd'; import { MenuFoldOutlined, MenuUnfoldOutlined, DatabaseOutlined, SearchOutlined, FileTextOutlined, } from '@ant-design/icons'; import type { Dataset } from '~/api/dify-dataset'; import '../../styles/components/dify-dataset-manager/sidebar.css'; const { Sider } = Layout; interface DatasetSidebarProps { collapsed: boolean; onToggle: () => void; datasets: Dataset[]; currentDatasetId: string; onDatasetSelect: (datasetId: string) => void; loading?: boolean; } /** * 知识库侧边栏组件 */ export default function DatasetSidebar({ collapsed, onToggle, datasets, currentDatasetId, onDatasetSelect, loading = false, }: DatasetSidebarProps) { const [searchValue, setSearchValue] = useState(''); const { token: { colorBgContainer }, } = theme.useToken(); // 过滤知识库列表 const filteredDatasets = datasets.filter((ds) => ds.name.toLowerCase().includes(searchValue.toLowerCase()) ); // 生成菜单项 const menuItems = filteredDatasets.map((ds) => ({ key: ds.id, icon: , label: (
{ds.name} {!collapsed && (
{ds.document_count}
)}
), })); return ( {/* 侧边栏头部 */}
{/* 搜索框 */} {!collapsed && ( } value={searchValue} onChange={(e) => setSearchValue(e.target.value)} allowClear /> )}
{/* 知识库列表 */}
{loading ? (
) : ( <> {!collapsed && filteredDatasets.length === 0 && searchValue && (

未找到相关知识库

)} {!collapsed && datasets.length === 0 && !searchValue && (

暂无知识库

)} onDatasetSelect(key)} style={{ border: 'none', background: 'transparent', }} className="dataset-sidebar-menu" /> )}
{/* 侧边栏底部 */} {!collapsed && datasets.length > 0 && (
共 {datasets.length} 个知识库
)}
); }