30 lines
2.1 KiB
Markdown
30 lines
2.1 KiB
Markdown
# FileTree 连续新建页面会展开上一个页面包目录
|
||
|
||
> 状态:done
|
||
> Owner:05-editor-mainline / 04-tree-domain
|
||
> 发现日期:2026-05-27
|
||
> 来源:用户反馈 / Sidex Explorer 行为对照
|
||
|
||
## 现象
|
||
|
||
在 local folder 的“我的空间”中连续点击新建页面时,FileTree 会先短暂显示内部 `.md` 行,然后折叠;再次新建页面后,上一个页面包目录会被自动展开,当前页面包目录保持折叠,视觉上像是展开状态串到了旧页面。
|
||
|
||
## 根因
|
||
|
||
本地页面是 `页面名/页面名.md` 的同名目录包。新建完成后,前端 `selectSidebarFileTreeDocument(...)` 找不到折叠目录内部的 `.md` 行,会调用 `revealFileTreeResource(...)` 展开目录包并持久化展开状态。后端 `load_local_folder_file_tree_snapshot_with_reveal(...)` 也会把同名页面包目录当作普通祖先展开,导致下一次刷新时旧页面包恢复展开。
|
||
|
||
Sidex / VSCode Explorer 的对齐原则是:刷新 collapsed 节点只标记 stale;reveal 只展开必要祖先,不应把当前资源自身的内部实现目录当作用户展开状态持久化。
|
||
|
||
## 修复
|
||
|
||
- `local-md:` 路径解码改为完整 `~XX -> %XX -> decodeURIComponent`,避免中文路径无法匹配可见目录包行。
|
||
- 前端选择 local markdown 时,若目标是同名页面包 `目录/目录.md` 且目录包行已可见,则直接选中/激活目录包行,不展开内部 `.md`。
|
||
- 后端 FileTree reveal 对同名页面包只展开到页面包父级,不扫描并展开包内部 `.md`。
|
||
- `task494-filetree-lazy-loading-dedup-smoke.js` 增加连续新建页面回归:上一个页面包不自动展开,当前页面包不展开内部 md,当前页面包行保持 active。
|
||
|
||
## 验证
|
||
|
||
- `node scripts/task494-filetree-lazy-loading-dedup-smoke.js` 先失败于上一个页面包 `expanded=true`,修复后通过。
|
||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web filetree -- --nocapture --test-threads=1`,46 passed。
|
||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_file_tree -- --nocapture --test-threads=1`,4 passed。
|