// 仅使用类型
import { Node } from '@alilc/lowcode-designer';

export const getClosestNode = (node: Node, until: (node: Node) => boolean): Node | undefined => {
  if (!node) {
    return undefined;
  }
  if (until(node)) {
    return node;
  } else {
    // @ts-ignore
    return getClosestNode(node.getParent(), until);
  }
};

/**
 * 判断节点是否可被点击
 * @param {Node} node 节点
 * @param {unknown} e 点击事件
 * @returns {boolean} 是否可点击，true表示可点击
 */
export const canClickNode = (node: Node, e: unknown): boolean => {
  const onClickHook = node.componentMeta?.getMetadata().configure?.advanced?.callbacks?.onClickHook;
  const canClick = typeof onClickHook === 'function' ? onClickHook(e as MouseEvent, node) : true;
  return canClick;
};
