fix: 知识图谱与思维导图不显示内容

三个独立 bug 修复:
1. MindmapTree StrictMode 双重渲染: Effect 1 创建 mm 实例, Effect 2 设置数据,
   StrictMode 下 Effect 1 重建 mm 但 Effect 2 不重新运行 → 新 mm 无数据
   修复: 在 Effect 1 中用 useStore.getState().tree 设置初始数据

2. LinkGraph onSwitchToEditor 不稳定: App 传内联箭头函数每次渲染新引用,
   导致 D3 力导向图 Effect 2 依赖变化不断重置 → 图谱闪烁/不显示
   修复: useCallback 稳定 switchToEditor 引用

3. frontmatter 块式 YAML 列表解析: parseList 只支持内联 [a, b] 格式,
   用户手写 links:/tags: 多行 - item 格式无法解析 → 知识图谱无边
   修复: parseYaml 支持 YAML 块式列表 (- item 多行)

新增 E2E 测试 graph-render.spec.ts 验证思维导图+知识图谱渲染内容
新增单元测试覆盖块式 YAML 列表解析
This commit is contained in:
hunter-dev
2026-08-27 16:35:47 +08:00
parent ebd955ce4b
commit 96f5c72fa7
5 changed files with 105 additions and 5 deletions
+14
View File
@@ -14,6 +14,20 @@ describe('splitFrontmatter', () => {
expect(meta).toEqual<DocMeta>({ title: '我的标题', tags: ['a','b'], star: true, links: ['x/y.md'] });
expect(body).toBe('# 正文');
});
it('块式 YAML 列表(多行 - item)', () => {
const raw = '---\ntitle: 标题\nlinks:\n - a.md\n - b.md\ntags:\n - x\n - y\n---\n# 正文';
const { meta, body } = splitFrontmatter(raw);
expect(meta.links).toEqual(['a.md', 'b.md']);
expect(meta.tags).toEqual(['x', 'y']);
expect(meta.title).toBe('标题');
expect(body).toBe('# 正文');
});
it('块式列表后紧跟其他字段', () => {
const raw = '---\nlinks:\n - a.md\nstar: true\n---\n# B';
const { meta } = splitFrontmatter(raw);
expect(meta.links).toEqual(['a.md']);
expect(meta.star).toBe(true);
});
it('带引号的值', () => {
const { meta } = splitFrontmatter('---\ntitle: "含: 冒号"\n---\n');
expect(meta.title).toBe('含: 冒号');