crossAddTo()

in packages/core/src/models/Selection.ts [118:147]


  crossAddTo(node: TreeNode) {
    if (node.parent) {
      const selectedNodes = this.selectedNodes
      if (this.has(node)) {
        this.remove(node)
      } else {
        const minDistanceNode = selectedNodes.reduce(
          (minDistanceNode, item) => {
            return item.distanceTo(node) < minDistanceNode.distanceTo(node)
              ? item
              : minDistanceNode
          },
          selectedNodes[0]
        )
        if (minDistanceNode) {
          const crossNodes = node.crossSiblings(minDistanceNode)
          crossNodes.forEach((node) => {
            if (!this.has(node.id)) {
              this.selected.push(node.id)
              this.indexes[node.id] = true
            }
          })
        }
        if (!this.has(node.id)) {
          this.selected.push(node.id)
          this.indexes[node.id] = true
        }
      }
    }
  }