fix click select

This commit is contained in:
kangwei 2020-03-16 17:50:39 +08:00
parent ab5bad582e
commit 33ea4d3803
4 changed files with 87 additions and 7 deletions

View File

@ -260,8 +260,6 @@ export class SimulatorHost implements ISimulator<SimulatorProps> {
if (isLeftButton && !isRootNode(node)) { if (isLeftButton && !isRootNode(node)) {
let nodes: Node[] = [node]; let nodes: Node[] = [node];
let ignoreUpSelected = false; let ignoreUpSelected = false;
// 排除根节点拖拽
selection.remove(this.document.rootNode.id);
if (isMulti) { if (isMulti) {
// multi select mode, directily add // multi select mode, directily add
if (!selection.has(node.id)) { if (!selection.has(node.id)) {
@ -269,9 +267,10 @@ export class SimulatorHost implements ISimulator<SimulatorProps> {
selection.add(node.id); selection.add(node.id);
ignoreUpSelected = true; ignoreUpSelected = true;
} }
selection.remove(this.document.rootNode.id);
// 获得顶层 nodes // 获得顶层 nodes
nodes = selection.getTopNodes(); nodes = selection.getTopNodes();
} else if (selection.containsNode(node)) { } else if (selection.containsNode(node, true)) {
nodes = selection.getTopNodes(); nodes = selection.getTopNodes();
} else { } else {
// will clear current selection & select dragment in dragstart // will clear current selection & select dragment in dragstart

View File

@ -97,9 +97,12 @@ export class Selection {
/** /**
* *
*/ */
containsNode(node: Node) { containsNode(node: Node, excludeRoot = false) {
for (const id of this._selected) { for (const id of this._selected) {
const parent = this.doc.getNode(id); const parent = this.doc.getNode(id);
if (excludeRoot && parent === this.doc.rootNode) {
continue;
}
if (parent?.contains(node)) { if (parent?.contains(node)) {
return true; return true;
} }
@ -124,11 +127,12 @@ export class Selection {
/** /**
* , * ,
*/ */
getTopNodes() { getTopNodes(includeRoot = false) {
const nodes = []; const nodes = [];
for (const id of this._selected) { for (const id of this._selected) {
const node = this.doc.getNode(id); const node = this.doc.getNode(id);
if (!node) { // 排除根节点
if (!node || (!includeRoot && node === this.doc.rootNode)) {
continue; continue;
} }
let i = nodes.length; let i = nodes.length;

View File

@ -28,6 +28,10 @@ export default {
name: 'type', name: 'type',
propType: 'string' propType: 'string'
}, },
{
name: 'onClick',
propType: 'func'
},
{ {
name: 'children', name: 'children',
propType: 'string' propType: 'string'
@ -66,6 +70,22 @@ export default {
{ {
name: 'placeholder', name: 'placeholder',
propType: 'string' 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', name: 'device',
propType: 'string' propType: 'string'
} },
{
name: 'onChange',
propType: 'func'
},
], ],
}, },
'Form.Item': { 'Form.Item': {
@ -126,6 +150,26 @@ export default {
{ {
name: 'defaultValue', name: 'defaultValue',
propType: 'number' 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', name: 'placeholder',
propType: 'string' 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'
} }
], ],
} }

View File

@ -191,6 +191,7 @@ registerMetadataTransducer(metadata => {
if (EVENT_RE.test(name) && (propType === 'func' || propType === 'any')) { if (EVENT_RE.test(name) && (propType === 'func' || propType === 'any')) {
if (supportEvents) { if (supportEvents) {
supportEvents.push(name); supportEvents.push(name);
(events as any).supportEvents = supportEvents;
} }
return; return;
} }