diff --git a/src/App.tsx b/src/App.tsx index 964d63c..0a0322a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,6 +8,8 @@ import TasksPage from '@/pages/TasksPage' import TaskDetailPage from '@/pages/TaskDetailPage' import ProjectsPage from '@/pages/ProjectsPage' import ProjectDetailPage from '@/pages/ProjectDetailPage' +import KnowledgeBasesPage from '@/pages/KnowledgeBasesPage' +import KnowledgeBaseDetailPage from '@/pages/KnowledgeBaseDetailPage' import MilestonesPage from '@/pages/MilestonesPage' import MilestoneDetailPage from '@/pages/MilestoneDetailPage' import NotificationsPage from '@/pages/NotificationsPage' @@ -130,6 +132,8 @@ export default function App() { } /> } /> } /> + } /> + } /> } /> } /> } /> diff --git a/src/components/KnowledgeBaseFormModal.tsx b/src/components/KnowledgeBaseFormModal.tsx new file mode 100644 index 0000000..e15e7b7 --- /dev/null +++ b/src/components/KnowledgeBaseFormModal.tsx @@ -0,0 +1,104 @@ +import { useEffect, useState } from 'react' +import api from '@/services/api' +import type { KnowledgeBase } from '@/types' + +type Props = { + isOpen: boolean + onClose: () => void + onSaved?: (kb: KnowledgeBase) => void | Promise + knowledgeBase?: KnowledgeBase | null +} + +type FormState = { + title: string + description: string +} + +const emptyForm: FormState = { title: '', description: '' } + +export default function KnowledgeBaseFormModal({ isOpen, onClose, onSaved, knowledgeBase }: Props) { + const [saving, setSaving] = useState(false) + const [error, setError] = useState('') + const [form, setForm] = useState(emptyForm) + + useEffect(() => { + if (!isOpen) return + setError('') + if (knowledgeBase) { + setForm({ title: knowledgeBase.title, description: knowledgeBase.description || '' }) + } else { + setForm(emptyForm) + } + }, [isOpen, knowledgeBase]) + + const submit = async (e: React.FormEvent) => { + e.preventDefault() + setSaving(true) + setError('') + try { + if (knowledgeBase) { + const { data } = await api.patch(`/knowledge-bases/${knowledgeBase.id}`, { + title: form.title, + description: form.description || null, + }) + await onSaved?.(data) + } else { + const { data } = await api.post('/knowledge-bases', { + title: form.title, + description: form.description || null, + }) + await onSaved?.(data) + } + onClose() + } catch (err: any) { + setError(err?.response?.data?.detail || 'Failed to save knowledge base') + } finally { + setSaving(false) + } + } + + if (!isOpen) return null + + return ( +
+
e.stopPropagation()}> +
+

{knowledgeBase ? 'Edit Knowledge Base' : 'Create Knowledge Base'}

+ +
+ +
+ + +