forked from alibaba/lowcode-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnode-helper.ts
More file actions
30 lines (28 loc) · 894 Bytes
/
node-helper.ts
File metadata and controls
30 lines (28 loc) · 894 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 仅使用类型
import { IPublicModelNode } from '@alilc/lowcode-types';
import { MouseEvent } from 'react';
export const getClosestNode = <Node extends IPublicModelNode = IPublicModelNode>(
node: Node,
until: (n: Node) => boolean,
): Node | undefined => {
if (!node) {
return undefined;
}
if (until(node)) {
return node;
} else {
// @ts-ignore
return getClosestNode(node.parent, until);
}
};
/**
* 判断节点是否可被点击
* @param {Node} node 节点
* @param {unknown} e 点击事件
* @returns {boolean} 是否可点击,true表示可点击
*/
export function canClickNode<Node extends IPublicModelNode = IPublicModelNode>(node: Node, e: MouseEvent): boolean {
const onClickHook = node.componentMeta?.advanced?.callbacks?.onClickHook;
const canClick = typeof onClickHook === 'function' ? onClickHook(e, node) : true;
return canClick;
}