diff --git a/packages/designer/IMPLEMENTATION.zh-CN.md b/packages/designer/IMPLEMENTATION.zh-CN.md index c91f44f3c..d67ca4a28 100644 --- a/packages/designer/IMPLEMENTATION.zh-CN.md +++ b/packages/designer/IMPLEMENTATION.zh-CN.md @@ -160,27 +160,29 @@ function CustomDesigner() { 以下功能在路线图中,但尚未实现: -1. **拖放功能**: 从组件面板拖放组件到画布 (当前是点击添加) -2. **撤销/重做**: 历史记录和撤销功能 -3. **Schema 验证**: 验证 schema 的正确性 -4. **组件树视图**: 显示组件的树形结构 -5. **键盘快捷键**: 快捷键支持 -6. **组件搜索**: 在组件面板中搜索 -7. **复制粘贴**: 复制和粘贴组件 -8. **导出为代码**: 将 schema 导出为 React 代码 +1. **撤销/重做**: 历史记录和撤销功能 +2. **Schema 验证**: 验证 schema 的正确性 +3. **组件树视图**: 显示组件的树形结构 +4. **键盘快捷键**: 快捷键支持 +5. **组件搜索**: 在组件面板中搜索 +6. **复制粘贴**: 复制和粘贴组件 +7. **导出为代码**: 将 schema 导出为 React 代码 + +## 已实现功能 + +1. **✅ 拖放功能**: 从组件面板拖放组件到画布 +2. **✅ 画布内拖动**: 在画布中拖动组件以重新排序 ## 已知问题 -1. **构建错误**: renderer 和 ui 包中存在 TypeScript 错误 (这些是已存在的问题,不是由本 PR 引入) -2. **需要修复配置**: TypeScript 配置需要调整以正确编译 +1. **拖动位置**: 当前拖动组件到容器时,总是插入到开头位置。未来版本将支持根据鼠标位置计算插入位置。 ## 下一步 -1. 修复构建配置问题 -2. 实现拖放功能 (使用 react-dnd 或类似库) -3. 添加撤销/重做功能 -4. 实现 schema 验证 -5. 创建更多示例和教程 +1. 优化拖动插入位置计算 (根据鼠标位置而不是总是插入到开头) +2. 添加撤销/重做功能 +3. 实现 schema 验证 +4. 创建更多示例和教程 ## 总结 @@ -189,6 +191,8 @@ function CustomDesigner() { - ✅ 组件面板和属性编辑 - ✅ JSON 导入导出 - ✅ 实时预览 +- ✅ 拖放功能 (从面板到画布) +- ✅ 画布内拖动重排序 - ✅ 示例应用 - ✅ 文档 diff --git a/packages/designer/README.md b/packages/designer/README.md index 4b8c1ba2d..bcb7e3c32 100644 --- a/packages/designer/README.md +++ b/packages/designer/README.md @@ -5,6 +5,7 @@ A drag-and-drop visual editor to generate Object UI schemas. ## Features - **Visual Schema Editor**: Edit Object UI schemas visually with a live preview +- **Drag-and-Drop**: Drag components from the palette to the canvas and reorder them within the canvas - **Component Palette**: Browse and add components from a categorized list - **Property Editor**: Configure component properties with a dynamic form - **JSON Import/Export**: Import and export schemas as JSON @@ -207,8 +208,8 @@ module.exports = { ## Features Roadmap -- [ ] Drag and drop components from palette -- [ ] Drag to reorder components in canvas +- [x] Drag and drop components from palette +- [x] Drag to reorder components in canvas - [ ] Undo/redo functionality - [ ] Schema validation - [ ] Component tree view diff --git a/packages/designer/src/__tests__/drag-and-drop.test.tsx b/packages/designer/src/__tests__/drag-and-drop.test.tsx new file mode 100644 index 000000000..2796c181d --- /dev/null +++ b/packages/designer/src/__tests__/drag-and-drop.test.tsx @@ -0,0 +1,134 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { render, screen, act } from '@testing-library/react'; +import { DesignerProvider, useDesigner } from '../context/DesignerContext'; +import type { SchemaNode } from '@object-ui/protocol'; +import React from 'react'; +import userEvent from '@testing-library/user-event'; + +// Test component to access designer context +const TestComponent = () => { + const { + schema, + draggingNodeId, + setDraggingNodeId, + moveNode, + addNode + } = useDesigner(); + + return ( +