import React from 'react' import { knowledgeGroupService } from '../../services/knowledgeGroupService' import { KnowledgeGroup, UpdateGroupData, CreateGroupData } from '../../types' import { Plus, Book, MoreVertical, Library, MessageSquare, Trash2, Edit2, FolderInput } from 'lucide-react' import { NotebookDetailView } from './NotebookDetailView' // import { InputDrawer } from '../InputDrawer' // Removed // import { EditNotebookDialog } from '../EditNotebookDialog' // Removed import { CreateNotebookDrawer } from '../CreateNotebookDrawer' import { EditNotebookDrawer } from '../EditNotebookDrawer' import { ImportFolderDrawer } from '../ImportFolderDrawer' import { useLanguage } from '../../contexts/LanguageContext' interface NotebooksViewProps { authToken: string onChatWithContext: (context: { selectedGroups?: string[], selectedFiles?: string[] }) => void isAdmin?: boolean } export const NotebooksView: React.FC = ({ authToken, onChatWithContext, isAdmin = false }) => { const { t } = useLanguage() const [notebooks, setNotebooks] = React.useState([]) const [isLoading, setIsLoading] = React.useState(true) const [selectedNotebook, setSelectedNotebook] = React.useState(null) const [isCreateDrawerOpen, setIsCreateDrawerOpen] = React.useState(false) const [isImportDrawerOpen, setIsImportDrawerOpen] = React.useState(false) // Added const [editingNotebook, setEditingNotebook] = React.useState(null) const fetchNotebooks = async () => { try { const groups = await knowledgeGroupService.getGroups() setNotebooks(groups) } catch (error) { console.error(error) } finally { setIsLoading(false) } } React.useEffect(() => { fetchNotebooks() }, [authToken, selectedNotebook]) // Refresh when going back const handleCreateNotebook = async (data: CreateGroupData) => { try { setIsLoading(true) await knowledgeGroupService.createGroup(data) const groups = await knowledgeGroupService.getGroups() setNotebooks(groups) setIsCreateDrawerOpen(false) } catch (error) { console.error(error) alert(t('createFailed')) } finally { setIsLoading(false) } } const handleUpdateNotebook = async (id: string, data: UpdateGroupData) => { await knowledgeGroupService.updateGroup(id, data) const groups = await knowledgeGroupService.getGroups() setNotebooks(groups) } const handleDeleteNotebook = async (e: React.MouseEvent, id: string, name: string) => { e.stopPropagation() if (!window.confirm(t('confirmDeleteNotebook').replace('$1', name))) return try { setIsLoading(true) await knowledgeGroupService.deleteGroup(id) setNotebooks(prev => prev.filter(n => n.id !== id)) } catch (error) { console.error(error) alert(t('deleteFailed')) } finally { setIsLoading(false) } } if (selectedNotebook) { return ( setSelectedNotebook(null)} onChatWithContext={onChatWithContext} isAdmin={!!isAdmin} /> ) } if (isLoading) { return
{t('loading')}
} return (

{t('notebooks')}

{t('notebooksDesc')}

{isAdmin && ( )}
{notebooks.map((notebook) => (
setSelectedNotebook(notebook)} className="bg-white rounded-xl shadow-sm border border-slate-200 hover:shadow-md transition-shadow p-5 cursor-pointer group" >
{isAdmin && ( )}

{notebook.name}

{notebook.description || t('noDescription')}

{notebook.intro && (

{notebook.intro}

)}
{notebook.fileCount || 0} {t('files')} {notebook.updatedAt ? new Date(notebook.updatedAt).toLocaleDateString() : ''}
))} {notebooks.length === 0 && (
{t('noNotebooks')}
)}
{isCreateDrawerOpen && ( setIsCreateDrawerOpen(false)} onCreate={handleCreateNotebook} /> )} {editingNotebook && ( setEditingNotebook(null)} notebook={editingNotebook} onUpdate={handleUpdateNotebook} /> )} setIsImportDrawerOpen(false)} authToken={authToken} onImportSuccess={fetchNotebooks} />
) }