From 33ea4d380323f3ce7c2590d8d6313b973dbad178 Mon Sep 17 00:00:00 2001 From: kangwei Date: Mon, 16 Mar 2020 17:50:39 +0800 Subject: [PATCH] fix click select --- .../src/builtins/simulator/host/host.ts | 5 +- .../src/designer/document/selection.ts | 10 ++- packages/editor/src/config/assets.js | 78 ++++++++++++++++++- .../src/register-transducer.ts | 1 + 4 files changed, 87 insertions(+), 7 deletions(-) diff --git a/packages/designer/src/builtins/simulator/host/host.ts b/packages/designer/src/builtins/simulator/host/host.ts index a3620245d..9fab87841 100644 --- a/packages/designer/src/builtins/simulator/host/host.ts +++ b/packages/designer/src/builtins/simulator/host/host.ts @@ -260,8 +260,6 @@ export class SimulatorHost implements ISimulator { if (isLeftButton && !isRootNode(node)) { let nodes: Node[] = [node]; let ignoreUpSelected = false; - // 排除根节点拖拽 - selection.remove(this.document.rootNode.id); if (isMulti) { // multi select mode, directily add if (!selection.has(node.id)) { @@ -269,9 +267,10 @@ export class SimulatorHost implements ISimulator { selection.add(node.id); ignoreUpSelected = true; } + selection.remove(this.document.rootNode.id); // 获得顶层 nodes nodes = selection.getTopNodes(); - } else if (selection.containsNode(node)) { + } else if (selection.containsNode(node, true)) { nodes = selection.getTopNodes(); } else { // will clear current selection & select dragment in dragstart diff --git a/packages/designer/src/designer/document/selection.ts b/packages/designer/src/designer/document/selection.ts index 14bddac12..c481b1bce 100644 --- a/packages/designer/src/designer/document/selection.ts +++ b/packages/designer/src/designer/document/selection.ts @@ -97,9 +97,12 @@ export class Selection { /** * 选区是否包含节点 */ - containsNode(node: Node) { + containsNode(node: Node, excludeRoot = false) { for (const id of this._selected) { const parent = this.doc.getNode(id); + if (excludeRoot && parent === this.doc.rootNode) { + continue; + } if (parent?.contains(node)) { return true; } @@ -124,11 +127,12 @@ export class Selection { /** * 获取顶层选区节点, 场景:拖拽时,建立蒙层,只蒙在最上层 */ - getTopNodes() { + getTopNodes(includeRoot = false) { const nodes = []; for (const id of this._selected) { const node = this.doc.getNode(id); - if (!node) { + // 排除根节点 + if (!node || (!includeRoot && node === this.doc.rootNode)) { continue; } let i = nodes.length; diff --git a/packages/editor/src/config/assets.js b/packages/editor/src/config/assets.js index b4fa7e612..954ac79e6 100644 --- a/packages/editor/src/config/assets.js +++ b/packages/editor/src/config/assets.js @@ -28,6 +28,10 @@ export default { name: 'type', propType: 'string' }, + { + name: 'onClick', + propType: 'func' + }, { name: 'children', propType: 'string' @@ -66,6 +70,22 @@ export default { { name: 'placeholder', propType: 'string' + }, + { + name: 'onChange', + propType: 'func' + }, + { + name: 'onKeyDown', + propType: 'func' + }, + { + name: 'onFocus', + propType: 'func' + }, + { + name: 'onBlur', + propType: 'func' } ], }, @@ -83,7 +103,11 @@ export default { { name: 'device', propType: 'string' - } + }, + { + name: 'onChange', + propType: 'func' + }, ], }, 'Form.Item': { @@ -126,6 +150,26 @@ export default { { name: 'defaultValue', propType: 'number' + }, + { + name: 'onChange', + propType: 'func' + }, + { + name: 'onKeyDown', + propType: 'func' + }, + { + name: 'onFocus', + propType: 'func' + }, + { + name: 'onBlur', + propType: 'func' + }, + { + name: 'onCorrect', + propType: 'func' } ], }, @@ -151,6 +195,38 @@ export default { { name: 'placeholder', propType: 'string' + }, + { + name: 'onChange', + propType: 'func' + }, + { + name: 'onVisibleChange', + propType: 'func' + }, + { + name: 'onToggleHighlightItem', + propType: 'func' + }, + { + name: 'onSearch', + propType: 'func' + }, + { + name: 'onSearchClear', + propType: 'func' + }, + { + name: 'onRemove', + propType: 'func' + }, + { + name: 'onFocus', + propType: 'func' + }, + { + name: 'onBlur', + propType: 'func' } ], } diff --git a/packages/plugin-settings/src/register-transducer.ts b/packages/plugin-settings/src/register-transducer.ts index 9668ad079..2fbde2084 100644 --- a/packages/plugin-settings/src/register-transducer.ts +++ b/packages/plugin-settings/src/register-transducer.ts @@ -191,6 +191,7 @@ registerMetadataTransducer(metadata => { if (EVENT_RE.test(name) && (propType === 'func' || propType === 'any')) { if (supportEvents) { supportEvents.push(name); + (events as any).supportEvents = supportEvents; } return; }