Open filetree mindmap assets inside the primary document pane so the sidebar root is not rebuilt during rapid mindmap/page switching. Keep filetree active rows on doc:<documentId> and asset:<mindmapId>, shorten generated mindmap filenames, and preserve legacy index rows only as compatibility input. Add task438-task445 browser smokes and close the 4-27/4-38/4-39/4-40 tree-domain bug records.
2.6 KiB
2.6 KiB
4-38 文件树 mindmap 点击后选中态闪回父页面
状态
- 状态:done
- 分类:04-tree-domain
- 发现时间:2026-05-15
- 修复时间:2026-05-15
现象
点击页面树普通页面时视觉稳定;点击文件树中的思维导图资源行时,资源行会快速闪一下,随后文件树选中态回到父页面 .md 行。用户体感类似“点了 mindmap 文件,但文件树又跳回对应页面/index”。
根因
文件树资源点击路径先执行 selectSidebarFileTreeRow(),使 asset row 短暂 selected;随后 mindmap 资源通过 tree.asset.open -> openConvexAssetFromFileTree() 整页跳转到 /mindmap/{documentId}/{mindmapId}。
旧实现中 /mindmap 对象页重新渲染文件树时只按当前 documentId 计算选中态:
rowId === 'doc:' + activeId
因此页面重建或 tree live snapshot 重绘后,选中态会从 asset:{mindmapId} 回落到 doc:{documentId},形成快速闪烁。
修复
mindmap_object_shell加载文件树时传入 active row:asset:{mindmapId}。collect_filetree_render_rows()新增active_row_id,当存在 active row 时优先按 row id 选中,避免父页面 fallback 抢回 selected。SIDEBAR_TREE_JS的 live snapshot renderer 新增currentFileTreeActiveRowId(),在/mindmap/{doc}/{asset}路径下保持asset:{asset}选中,防止 SSE 重绘后再次闪回。
验证
Rust 定向测试:
cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_filetree_runtime_uses_markdown_page_row_without_local_index_child -- --nocapture
cargo test --manifest-path rust/Cargo.toml -p mnote-web mindmap_shell_returns_rust_object_shell_contract -- --nocapture
cargo test --manifest-path rust/Cargo.toml -p mnote-web filetree_rows_select_active_mindmap_asset_in_object_shell -- --nocapture
真实浏览器 smoke:
MNOTE_UI_BASE_URL=http://127.0.0.1:3428 node scripts/task443-filetree-mindmap-click-active-row-smoke.js
验证结果:
tmp/task443-filetree-mindmap-click-active-row-smoke/result.json- 截图:
tmp/task443-filetree-mindmap-click-active-row-smoke/after-mindmap-click.png - 点击后 URL 为
/mindmap/{documentId}/{mindmapId}。 - 点击前 selected row 为
doc:{documentId}。 - 点击后 selected row 为
asset:{mindmapId}。 - 点击后不再出现父页面
doc:{documentId}selected。
后续口径
mindmap、附件、table 等资源对象打开后,文件树 active/selected 不能只按父 documentId 回落到页面行;对象页或对象视图必须优先表达资源对象身份。页面正文才选中 doc:{documentId}。