import { useState, useEffect, useMemo } from 'react'; import { DocContent } from '../api'; import { cleanDisplayText } from '../presentation'; import { renderKnowledgeMarkdown } from '../markdown'; interface Props { doc: DocContent; onSave: (title: string, body: string) => void; onWikiSelect?: (target: string) => void; } export function Editor({ doc, onSave, onWikiSelect }: Props) { const [editing, setEditing] = useState(false); const [title, setTitle] = useState(doc.meta.title); const [body, setBody] = useState(doc.body); // 切换文档时重置 useEffect(() => { setTitle(doc.meta.title); setBody(doc.body); setEditing(false); }, [doc.meta.id]); const rendered = useMemo(() => { try { return renderKnowledgeMarkdown(body); } catch { return '
渲染失败
'; } }, [body]); const handleSave = () => { onSave(title, body); setEditing(false); }; const handleCancel = () => { setTitle(doc.meta.title); setBody(doc.body); setEditing(false); }; const displayPath = doc.meta.id.split('/').map(cleanDisplayText).join(' / '); const handleRenderedClick = (event: React.MouseEvent