37 lines
1.6 KiB
Markdown
37 lines
1.6 KiB
Markdown
# 4-32 VSCode Explorer DnD Modifier Guard v1
|
||||
|
|
|
|||
|
|
> 状态:done
|
|||
|
|
> 创建时间:2026-05-15
|
|||
|
|
> 所属主线:04-tree-domain / VSCode Explorer 文件树与垃圾箱闭环
|
|||
|
|
> 来源:`design/10-review/07-vscode-explorer-filetree-trash-gap-review.md` 阶段 7
|
|||
|
|
|
|||
|
|
## 1. 目标
|
|||
|
|
|
|||
|
|
补齐文件树 DnD copy modifier 的 VSCode 基线:Alt、Ctrl、Meta 任一修饰键都应进入 copy drop,而不是只有 Alt 生效。
|
|||
|
|
|
|||
|
|
## 2. 已落地
|
|||
|
|
|
|||
|
|
- `tree-shell-dom-host.tsx` 的 filetree dragover 改为 `Alt / Ctrl / Meta -> copy`。
|
|||
|
|
- `mnote-web` SSR 主壳 `layout.rs` 的 filetree dragover / drop 也同步改为 `Alt / Ctrl / Meta -> copy`。
|
|||
|
|
|
|||
|
|
## 3. 已有防线
|
|||
|
|
|
|||
|
|
- 父拖子 / 拖到自身禁止由 Rust `tree.filetree.drop.preflight` 校验,错误语义为不能把页面移动到自身或后代下面。
|
|||
|
|
- 主 Sidebar 继续依赖 drop preflight,不在 UI 层复制第二套树祖先判断。
|
|||
|
|
|
|||
|
|
## 4. 验证命令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /mnt/Data1T/mnote/wolai-frontend
|
|||
|
|
pnpm test src/components/sidebar/sidebar-dnd-source.test.ts
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
结果:1 个测试文件通过,1 项测试通过。
|
|||
|
|
|
|||
|
|
## 5. 待补
|
|||
|
|
|
|||
|
|
- 2026-05-15 已补 3000 主入口 `POST /api/tree/filetree/drop-preflight`,通过 Rust bridge `tree.filetree.drop.preflight` 返回真实 preflight plan。
|
|||
|
|
- 2026-05-15 已补 3000 主入口真实浏览器 smoke:`MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task430-vscode-explorer-stage7-smoke.js`。
|
|||
|
|
- `task430` 验证自拖自身与父拖子均返回 400;copy modifier preflight 返回 `copy: true` 与 `documentTransferPlan.action=copy`。
|
|||
|
|
- 后续 readonly 与命名冲突确认已由 `4-33-vscode-explorer-dnd-readonly-conflict-v1.md` 收口。
|