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)) {
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<SimulatorProps> {
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

View File

@ -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;

View File

@ -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'
}
],
}

View File

@ -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;
}