{"version":3,"file":"dep-2f60e9f3.mjs","sources":["../../../common/js/tree/tree-node-model.ts","../../../common/js/tree/tree-node.ts"],"sourcesContent":["import { isUndefined, isBoolean, omit, get } from 'lodash-es';\nimport { TreeNode } from './tree-node';\nimport { OptionData } from '../common';\nimport { TreeNodeValue, TypeTreeNodeModel, TypeTreeNodeData, TypeTreeItem } from './types';\nimport log from '../log/log';\n\nexport const nodeKey = '__tdesign_tree-node__';\n\nexport class TreeNodeModel {\n  private [nodeKey]: TreeNode;\n\n  constructor(node: TreeNode) {\n    this[nodeKey] = node;\n  }\n\n  public get value() {\n    const node = this[nodeKey];\n    return node.value;\n  }\n\n  public get label() {\n    const node = this[nodeKey];\n    return node.label;\n  }\n\n  public get data() {\n    const node = this[nodeKey];\n    return node.data;\n  }\n\n  public get actived() {\n    const node = this[nodeKey];\n    return node.actived;\n  }\n\n  public get expanded() {\n    const node = this[nodeKey];\n    return node.expanded;\n  }\n\n  public get checked() {\n    const node = this[nodeKey];\n    return node.checked;\n  }\n\n  public get indeterminate() {\n    const node = this[nodeKey];\n    return node.indeterminate;\n  }\n\n  public get loading() {\n    const node = this[nodeKey];\n    return node.loading;\n  }\n\n  public get disabled() {\n    const node = this[nodeKey];\n    return node.isDisabled();\n  }\n\n  /**\n   * 获取节点所处层级\n   * @return number 节点层级序号\n   */\n  public getLevel() {\n    const node = this[nodeKey];\n    return node.getLevel();\n  }\n\n  /**\n   * 获取节点在父节点的子节点列表中的位置\n   * - 如果没有父节点，则获取节点在根节点列表的位置\n   * @return number 节点位置序号\n   */\n  public getIndex() {\n    const node = this[nodeKey];\n    return node.getIndex();\n  }\n\n  /**\n   * 是否为兄弟节点中的第一个节点\n   * @return boolean 是否为第一个节点\n   */\n  public isFirst() {\n    const node = this[nodeKey];\n    return node.isFirst();\n  }\n\n  /**\n   * 是否为兄弟节点中的最后一个节点\n   * @return boolean 是否为最后一个节点\n   */\n  public isLast() {\n    const node = this[nodeKey];\n    return node.isLast();\n  }\n\n  /**\n   * 是否为叶子节点，叶子节点没有子节点\n   * @return boolean 是否为叶子节点\n   */\n  public isLeaf() {\n    const node = this[nodeKey];\n    return node.isLeaf();\n  }\n\n  /**\n   * 在当前节点之前插入节点\n   * @param {object} newData 要插入的节点或者数据\n   * @return void\n   */\n  public insertBefore(newData: TypeTreeItem) {\n    const node = this[nodeKey];\n    return node.insertBefore(newData);\n  }\n\n  /**\n   * 在当前节点之后插入节点\n   * @param {object} newData 要插入的节点或者数据\n   * @return void\n   */\n  public insertAfter(newData: TypeTreeItem) {\n    const node = this[nodeKey];\n    return node.insertAfter(newData);\n  }\n\n  /**\n   * 追加节点数据\n   * @param {object | object[]} data 节点数据\n   * @return void\n   */\n  public appendData(data: TypeTreeNodeData | TypeTreeNodeData[]) {\n    const node = this[nodeKey];\n    return node.append(data);\n  }\n\n  /**\n   * 返回路径节点\n   * - 路径节点包含自己在内\n   * - 节点顺序与父级节点顺序相反，从根到当前\n   * @return TreeNodeModel[] 路径节点数组\n   */\n  public getPath(): TypeTreeNodeModel[] {\n    const node = this[nodeKey];\n    const nodes = node.getPath();\n    return nodes.map((item: TreeNode) => item.getModel());\n  }\n\n  /**\n   * 获取本节点的父节点\n   * @return TreeNodeModel 父节点\n   */\n  public getParent(): TypeTreeNodeModel {\n    const node = this[nodeKey];\n    return node.parent?.getModel();\n  }\n\n  /**\n   * 获取所有父级节点\n   * - 顺序为从当前到根\n   * @return TreeNodeModel[] 父级节点数组\n   */\n  public getParents(): TypeTreeNodeModel[] {\n    const node = this[nodeKey];\n    const nodes = node.getParents();\n    return nodes.map((item: TreeNode) => item.getModel());\n  }\n\n  /**\n   * 获取本节点的根节点\n   * @return TreeNodeModel 根节点\n   */\n  public getRoot(): TypeTreeNodeModel {\n    const node = this[nodeKey];\n    const root = node.getRoot();\n    return root?.getModel();\n  }\n\n  /**\n   * 获取所有兄弟节点，包含自己在内\n   * @return TreeNodeModel[] 兄弟节点数组\n   */\n  public getSiblings(): TypeTreeNodeModel[] {\n    const node = this[nodeKey];\n    const nodes = node.getSiblings();\n    return nodes.map((item: TreeNode) => item.getModel());\n  }\n\n  /**\n   * 获取当前节点的子节点\n   * @param {boolean} deep 是否获取所有深层子节点\n   * @return TreeNodeModel[] 子节点数组\n   */\n  public getChildren(deep?: boolean): boolean | TypeTreeNodeModel[] {\n    const node = this[nodeKey];\n    let childrenModel: boolean | TypeTreeNodeModel[] = false;\n    const { children } = node;\n    if (Array.isArray(children)) {\n      if (children.length > 0) {\n        if (deep) {\n          const nodes = node.walk();\n          nodes.shift();\n          childrenModel = nodes.map((item) => item.getModel());\n        } else {\n          childrenModel = children.map((item) => item.getModel());\n        }\n      } else {\n        childrenModel = false;\n      }\n    } else if (isBoolean(children)) {\n      childrenModel = children;\n    }\n    return childrenModel;\n  }\n\n  /**\n   * 移除节点\n   * - 提供 value 参数，移除本节点子节点中的节点\n   * - 不提供 value 参数，移除自己\n   * @param {string} value 目标节点值\n   * @return void\n   */\n  public remove(value?: TreeNodeValue) {\n    const node = this[nodeKey];\n    if (!value) {\n      node.remove();\n      return;\n    }\n\n    const { tree } = node;\n    const targetNode = tree.getNode(value);\n    if (!targetNode) {\n      log.warnOnce('Tree', `\\`${value}\\` is not exist`);\n      return;\n    }\n\n    const parents = targetNode.getParents();\n    const parentValues = parents.map((pnode) => pnode.value);\n    if (parentValues.indexOf(node.value) < 0) {\n      log.warnOnce('Tree', `\\`${value}\\` is not a childNode of current node`);\n      return;\n    }\n    targetNode.remove();\n  }\n\n  /**\n   * 设置本节点携带的元数据\n   * @param {object} data 节点数据\n   * @return void\n   */\n  public setData(data: OptionData) {\n    const node = this[nodeKey];\n    // syncAttrs 列举的属性，key 名称可被 tree.config.keys 定义\n    // 因此同步状态时需要读取被定义的 key 名称\n    // 详细细节可见 https://github.com/Tencent/tdesign-common/issues/655\n    const syncAttrs = ['value', 'label', 'disabled'];\n    const cleanData = omit(data, ['children', ...syncAttrs]) as Partial<TypeTreeNodeData>;\n    const { keys } = node.tree.config;\n    syncAttrs.forEach((attr: string) => {\n      const dataAttrValue = get(data, keys?.[attr as keyof typeof keys] || attr);\n      if (!isUndefined(dataAttrValue)) cleanData[attr as keyof typeof keys] = dataAttrValue;\n    });\n    Object.assign(node.data, cleanData);\n    Object.assign(node, cleanData);\n    node.update();\n  }\n}\n\n// 封装对外暴露的对象\nexport function createNodeModel(node: TreeNode): TypeTreeNodeModel {\n  const model = new TreeNodeModel(node);\n  return model as TypeTreeNodeModel;\n}\n","import { get, isBoolean, isFunction, isNil, isNull, isNumber, uniqueId } from 'lodash-es';\nimport log from '../log';\nimport { createNodeModel } from './tree-node-model';\nimport { TreeStore } from './tree-store';\nimport type {\n  TreeNodeState,\n  TreeNodeValue,\n  TypeFnOperation,\n  TypeIdMap,\n  TypeSettingOptions,\n  TypeTreeItem,\n  TypeTreeNodeData,\n  TypeTreeNodeModel,\n  TypeTreeStoreOptions,\n} from './types';\n\nconst { hasOwnProperty } = Object.prototype;\n\n// 这里的属性为 data 中属性可以同步到 treeNode 实例属性的白名单\n// 仅 label 属性和在列表中的属性可以通过 set 方法配置到 treeNode 实例上\nexport const settableStatus: Record<string, boolean | null> = {\n  expandMutex: null,\n  activable: null,\n  checkable: null,\n  draggable: null,\n  loading: false,\n};\n\nexport const settableProps = Object.keys(settableStatus);\n\nexport const syncableProps = [...settableProps, 'actived', 'expanded', 'checked'];\n\nexport const privateKey = '__tdesign_id__';\n\n// vm 开头为视图属性，不可以外部设置\n// 用于触发视图更新\n// public 方法，在 ui 组件中有可能在使用，会保障其输入输出实现\n// private 方法，可能会改动其输入输出\n\n/**\n * tree 节点数据模型\n * @class TreeNode\n * @param {TreeStore} tree TreeStore 实例\n * @param {object} [data] 节点数据\n * @param {TreeNode} parent 指定的当前 TreeStore 实例中的父节点\n */\nexport class TreeNode {\n  // 节点隶属的树实例\n  public tree: TreeStore;\n\n  // 节点私有 id，不接受外部传入，确保唯一性\n  public [privateKey]: string;\n\n  // 节点 id ，唯一标志\n  public value: string;\n\n  // 节点文本\n  public label: string;\n\n  // 节点数据\n  public data: TypeTreeNodeData;\n\n  // 父节点\n  public parent: TreeNode;\n\n  // 子节点列表\n  public children: TreeNode[] | boolean;\n\n  // 暴露的 treeNodeModel，这个对象的属性和 api 提供给用户使用\n  public model: TypeTreeNodeModel;\n\n  // 是否为叶节点\n  public vmIsLeaf: boolean;\n\n  // 是否为子节点中的第一个\n  public vmIsFirst: boolean;\n\n  // 是否为子节点中的最后\n  public vmIsLast: boolean;\n\n  // 节点是否是经过过滤剩下的\n  public vmIsRest: boolean;\n\n  // 节点是否展示为锁定状态\n  public vmIsLocked: boolean;\n\n  // 节点在视图上实际的展开状态\n  public expanded: boolean;\n\n  // 展开时是否收起同级节点，对子节点生效\n  public expandMutex: null | boolean;\n\n  // 节点在视图上实际的激活状态\n  public actived: boolean;\n\n  // 是否可激活\n  public activable: null | boolean;\n\n  // 是否可选中\n  public checkable: null | boolean;\n\n  // 是否可选中的视图呈现\n  public vmCheckable: boolean;\n\n  // 节点在视图上实际的选中态\n  public checked: boolean;\n\n  // 节点实际是否为半选状态\n  public indeterminate: boolean;\n\n  // 节点是否已禁用\n  public disabled: null | boolean;\n\n  private disableManually: null | boolean;\n\n  // 节点是否可拖动\n  public draggable: null | boolean;\n\n  // 节点是否可视\n  public visible: boolean;\n\n  // 节点在树中的层级\n  public level: number;\n\n  // 节点是否正在加载数据\n  public loading: boolean;\n\n  public constructor(tree: TreeStore, data?: TypeTreeNodeData, parent?: TreeNode) {\n    this.data = data;\n    this.tree = tree;\n\n    const config = tree.config || {};\n    const prefix = config.prefix || 't';\n    const keys = config.keys || {};\n    const propChildren = keys.children || 'children';\n    const propLabel = keys.label || 'label';\n    const propValue = keys.value || 'value';\n\n    // 节点自身初始化数据\n    this.model = null;\n    this.children = null;\n    this.level = 0;\n\n    // vm 开头为视图属性，不可以外部设置\n    this.vmCheckable = false;\n    this.vmIsLeaf = false;\n    this.vmIsFirst = false;\n    this.vmIsLast = false;\n    this.vmIsRest = false;\n    this.vmIsLocked = false;\n\n    // 初始化节点基本状态\n    this.visible = false;\n    this.actived = false;\n    this.checked = false;\n    this.indeterminate = false;\n    this.loading = false;\n    this.expanded = config.expandAll;\n\n    // 下面几个属性，节点初始化的时候，可以设置与 treeStore.config 不同的值\n    // 初始化默认值为 null, 则在方法判断时，默认以 treeStore.config 为准\n    // 传递或者设置属性为 boolean 类型的值，则以节点属性值为准\n    // 这种处理方式主要是解决 treeStore.setConfig 方法配置全局属性导致的状态切换与保留的问题\n    this.activable = null;\n    this.checkable = null;\n    this.expandMutex = null;\n    this.draggable = null;\n    this.disableManually = null;\n\n    // 为节点设置唯一 id\n    // tree 数据替换时，value 相同有可能导致节点状态渲染冲突\n    // 用这个 唯一 id 来解决，用于类似 vue 组件的唯一 key 指定场景\n    this[privateKey] = uniqueId(prefix);\n\n    // 设置 value\n    // 没有 value 的时候，value 默认使用自动生成的 唯一 id\n    this.value = isNil(get(data, propValue)) ? this[privateKey] : get(data, propValue);\n    const { nodeMap, privateMap } = tree;\n    if (nodeMap.get(this.value)) {\n      log.warn('Tree', `Dulplicate value: ${this.value}`);\n    }\n    nodeMap.set(this.value, this);\n    privateMap.set(this[privateKey], this);\n\n    // 设置标签\n    this.label = get(data, propLabel) || '';\n\n    // 设置子节点\n    const children = data[propChildren];\n    // 子节点为 true 的状态逻辑需要放到状态计算之前\n    // 初始化加载逻辑需要依据这个来进行\n    if (children === true) {\n      this.children = children;\n    }\n\n    // 设置父节点\n    if (parent && parent instanceof TreeNode) {\n      this.parent = parent;\n    } else {\n      this.parent = null;\n    }\n\n    // 同步数据属性到节点属性\n    // 仅 syncableStatus 列举的属性被同步到 treeNode 实例属性\n    syncableProps.forEach((prop) => {\n      if (typeof data[prop] !== 'undefined') {\n        // @ts-ignore\n        // TODO: 待移除\n        this[prop] = data[prop];\n      }\n    });\n\n    // 初始化节点激活状态\n    this.initActived();\n    // 展开状态影响了子节点的显示状态，所以要在子节点插入之前初始化展开状态\n    this.initExpanded();\n\n    // 这里的子节点加载逻辑不能放到状态初始化之前\n    // 因为子节点状态计算依赖父节点初始化状态\n    if (Array.isArray(children)) {\n      this.append(children);\n    } else if (children === true && !config.lazy) {\n      this.loadChildren();\n    }\n\n    if (this.isLeaf()) {\n      // initExpanded 时，子节点没有完全加载，无法依赖 isLeaf 状态判断\n      this.expanded = false;\n      this.tree.expandedMap.delete(this.value);\n    }\n\n    // 节点的选中状态同时依赖于子节点状态与父节点状态\n    // 因此在子节点插入之后再更新选中状态\n    this.initChecked();\n    this.updateChecked();\n\n    // 标记节点更新\n    this.update();\n    // 创建节点需要回流操作\n    tree.reflow(this);\n  }\n\n  /* ------ 状态初始化 ------ */\n\n  /**\n   * 初始化选中态\n   * @return void\n   */\n  private initChecked(): void {\n    const { tree, value, parent } = this;\n    const { checkedMap } = tree;\n    const { checkStrictly } = tree.config;\n    if (this.checked) {\n      checkedMap.set(value, true);\n    }\n    // 这里不可以使用 parent.isChecked 方法\n    // 因为当前节点创建时尚未插入父节点的 children 数组，可能父节点选中态仅受到之前子节点状态的影响\n    // 这会导致父节点状态计算错误，进而引发子节点变更了选中状态\n    if (!checkStrictly && parent?.checked) {\n      checkedMap.set(value, true);\n    }\n  }\n\n  /**\n   * 初始化节点展开状态\n   * @return void\n   */\n  private initExpanded(): void {\n    const { tree } = this;\n    let { expanded } = this;\n    const { config } = tree;\n    if (isNumber(config.expandLevel) && this.getLevel() < config.expandLevel) {\n      tree.expandedMap.set(this.value, true);\n      expanded = true;\n    }\n    if (this.children === true && config.lazy) {\n      expanded = false;\n    }\n    if (expanded) {\n      tree.expandedMap.set(this.value, true);\n    } else {\n      tree.expandedMap.delete(this.value);\n    }\n    this.expanded = expanded;\n  }\n\n  /**\n   * 初始化节点激活状态\n   * @return void\n   */\n  private initActived(): void {\n    const { tree, actived } = this;\n    if (actived && this.isActivable()) {\n      tree.activedMap.set(this.value, true);\n    }\n  }\n\n  /* ------ 节点操作 ------ */\n\n  /**\n   * 追加节点数据\n   * @param {object | object[]} data 节点数据\n   * @return void\n   */\n  public append(data: TypeTreeNodeData | TypeTreeNodeData[]): void {\n    const list = [];\n    if (!Array.isArray(data)) {\n      list.push(data);\n    } else {\n      list.push(...data);\n    }\n    if (list.length <= 0) {\n      return;\n    }\n\n    const wasLeaf = this.isLeaf();\n\n    if (!Array.isArray(this.children)) {\n      this.children = [];\n    }\n    const { children, tree } = this;\n    list.forEach((item) => {\n      let node = null;\n      if (item instanceof TreeNode) {\n        node = item;\n        node.appendTo(this.tree, this);\n      } else {\n        node = new TreeNode(this.tree, item, this);\n        children.push(node);\n      }\n    });\n\n    // 如果之前是叶子节点，现在有了子节点，且 expandAll 为 true，则展开\n    if (wasLeaf && tree.config.expandAll && !this.isLeaf()) {\n      tree.expandedMap.set(this.value, true);\n      this.expanded = true;\n    }\n\n    tree.reflow(this);\n    this.updateRelated();\n  }\n\n  /**\n   * 将当前节点追加到某个父节点的子节点列表中\n   * @param {TreeStore} tree 目标树\n   * @param {TreeNode} [parent] 目标父节点\n   * @param {number} [index] 预期在子节点列表中的位置\n   * @return void\n   */\n  public appendTo(tree: TreeStore, parent?: TreeNode, index?: number): void {\n    const parentNode = parent;\n    let targetIndex = -1;\n    if (isNumber(index)) {\n      targetIndex = index;\n    }\n\n    const targetParents = parentNode?.getParents() || [];\n    const includeCurrent = targetParents.some((pnode) => pnode === this);\n    if (includeCurrent) {\n      throw new Error('无法将父节点插入到子节点');\n    }\n\n    if (parentNode === this) {\n      throw new Error('无法将节点插入到本节点');\n    }\n\n    if (Array.isArray(parentNode?.children)) {\n      const targetPosNode = parentNode?.children[targetIndex];\n      if (targetPosNode && targetPosNode === this) {\n        // 无需将节点插入到原位置\n        return;\n      }\n    }\n\n    // 先要取得 siblings\n    // 因为要应对节点在同一个 siblings 中变换位置的情况\n    let siblings = null;\n    if (parentNode instanceof TreeNode) {\n      if (!Array.isArray(parentNode?.children)) {\n        parentNode.children = [];\n      }\n      siblings = parent.children;\n    } else {\n      siblings = tree.children;\n    }\n\n    // 上面的逻辑其实已经覆盖了所有业务情况\n    // 这里的逻辑报错仅用于极限兜底，防止 treeStore 被误使用\n    if (!Array.isArray(siblings)) {\n      throw new Error('无法插入到目标位置，可插入的节点列表不存在');\n    }\n\n    const prevLength = siblings.length;\n    const prevIndex = this.getIndex();\n\n    this.remove();\n\n    if (isNumber(index)) {\n      let targetIndex = index;\n      if (parentNode === this.parent) {\n        // 前置节点被拔出后再插入到同一个 siblings 时，会引起目标 index 的变化\n        // 因此要相应的变更插入位置\n        // 后置节点被拔出时，目标 index 是不变的\n        const curLength = siblings.length;\n        if (curLength < prevLength && prevIndex <= targetIndex) {\n          targetIndex -= 1;\n        }\n      }\n      siblings.splice(targetIndex, 0, this);\n    } else {\n      siblings.push(this);\n    }\n\n    this.parent = parentNode;\n\n    // 插入节点应当继承展开状态\n    // 但不要继承选中状态和高亮状态\n    const nodes = this.walk();\n    nodes.forEach((item) => {\n      const node = item;\n      node.tree = tree;\n      tree.nodeMap.set(node.value, node);\n      tree.privateMap.set(node[privateKey], node);\n      if (node.expanded) {\n        tree.expandedMap.set(node.value, true);\n      }\n    });\n\n    const updateNodes = parentNode?.walk() || tree.children.map((item) => item.walk()).flat();\n    updateNodes.forEach((node) => {\n      node.update();\n      node.updateChecked();\n    });\n\n    tree.reflow();\n  }\n\n  /**\n   * 插入一个节点或者数据到到同级节点的目标位置\n   * @param {TreeNode | object} item 要插入的节点或者数据\n   * @param {number} [index] 预期在子节点列表中的位置\n   * @return void\n   */\n  private insert(item: TypeTreeItem, index?: number): void {\n    const { tree, parent } = this;\n    const siblings = this.getSiblings();\n    let node = null;\n    if (item instanceof TreeNode) {\n      node = item;\n      node.appendTo(tree, parent, index);\n    } else if (item) {\n      node = new TreeNode(tree, item, parent);\n      if (isNumber(index)) {\n        siblings.splice(index, 0, node);\n      }\n      siblings.forEach((sibling) => {\n        sibling.update();\n      });\n    }\n    tree.reflow();\n  }\n\n  /**\n   * 在当前节点之前插入节点\n   * @param {TreeNode | object} newData 要插入的节点或者数据\n   * @return void\n   */\n  public insertBefore(newData: TypeTreeItem): void {\n    const index = this.getIndex();\n    this.insert(newData, index);\n  }\n\n  /**\n   * 在当前节点之后插入节点\n   * @param {TreeNode | object} newData 要插入的节点或者数据\n   * @return void\n   */\n  public insertAfter(newData: TypeTreeItem): void {\n    const index = this.getIndex();\n    this.insert(newData, index + 1);\n  }\n\n  /**\n   * 从当前树中移除本节点\n   * @return void\n   */\n  public remove(): void {\n    const { tree } = this;\n\n    const nodes = this.walk();\n    const siblings = this.getSiblings();\n    const index = this.getIndex();\n    // 从父节点的子节点列表中移除自己\n    // 但不要将自己的父节点移除，避免渲染与判断失败\n    if (Array.isArray(siblings)) {\n      siblings.splice(index, 1);\n    }\n    // 清理与树的关系，但不清理自身状态\n    nodes.forEach((node) => {\n      node.clean();\n    });\n    // 同级节点的连线状态会受到影响\n    siblings.forEach((node) => {\n      node.update();\n    });\n    // 父节点选中态会受到影响\n    this.updateParents();\n    tree.reflow();\n  }\n\n  /**\n   * 清除本节点与当前树的关系\n   * @return void\n   */\n  private clean(): void {\n    const { tree, value } = this;\n    tree.activedMap.delete(value);\n    tree.checkedMap.delete(value);\n    tree.expandedMap.delete(value);\n    tree.nodeMap.delete(value);\n    tree.filterMap.delete(value);\n    tree.privateMap.delete(this[privateKey]);\n  }\n\n  /**\n   * 异步加载子节点\n   * @return Promise<void>\n   */\n  private async loadChildren(): Promise<void> {\n    const config: TypeTreeStoreOptions = get(this, 'tree.config') || {};\n    if (this.children === true && !this.loading) {\n      if (isFunction(config.load)) {\n        this.loading = true;\n        this.update();\n        let list = [];\n        list = await config.load(this);\n        this.tree.emit('load', {\n          node: this,\n          data: list,\n        });\n        this.loading = false;\n        if (Array.isArray(list) && list.length > 0) {\n          this.append(list);\n        } else {\n          this.children = false;\n        }\n        this.update();\n      }\n    }\n  }\n\n  /**\n   * 设置节点状态\n   */\n  public set(item: TreeNodeState): void {\n    const { tree } = this;\n    const keys = Object.keys(item);\n    keys.forEach((key) => {\n      // key, disabled 字段可被 tree.config.keys 定义\n      if (hasOwnProperty.call(settableStatus, key) || key === 'label') {\n        // @ts-ignore\n        // TODO: 待移除\n        this[key] = item[key];\n      }\n      if (key === 'disabled') {\n        this.setDisabled(item[key]);\n      }\n    });\n    tree.updated(this);\n  }\n\n  /* ------ 节点获取 ------- */\n\n  /**\n   * 获取本节点的父节点\n   * @return TreeNode 父节点\n   */\n  public getParent(): TreeNode {\n    return this.parent;\n  }\n\n  /**\n   * 获取所有父级节点\n   * - 顺序为从当前到根\n   * @return TreeNode[] 父级节点数组\n   */\n  public getParents(): TreeNode[] {\n    const parents = [];\n    let node = this.parent;\n    while (node) {\n      parents.push(node);\n      node = node.parent;\n    }\n    return parents;\n  }\n\n  /**\n   * 获取所有兄弟节点，包含自己在内\n   * @return TreeNode[] 兄弟节点数组\n   */\n  public getSiblings(): TreeNode[] {\n    const { parent, tree } = this;\n    let list: TreeNode[] = [];\n    if (parent) {\n      if (Array.isArray(parent.children)) {\n        list = parent.children;\n      }\n    } else if (tree) {\n      list = tree.children;\n    }\n    return list;\n  }\n\n  /**\n   * 获取当前节点的子节点\n   * @param {boolean} deep 是否获取所有深层子节点\n   * @return TreeNodeModel[] 子节点数组\n   */\n  public getChildren(deep?: boolean): boolean | TypeTreeNodeModel[] {\n    let childrenModel: boolean | TypeTreeNodeModel[] = false;\n    const { children } = this;\n    if (Array.isArray(children)) {\n      if (children.length > 0) {\n        if (deep) {\n          const nodes = this.walk();\n          nodes.shift();\n          childrenModel = nodes.map((item) => item.getModel());\n        } else {\n          childrenModel = children.map((item) => item.getModel());\n        }\n      } else {\n        childrenModel = false;\n      }\n    } else if (isBoolean(children)) {\n      childrenModel = children;\n    }\n    return childrenModel;\n  }\n\n  /**\n   * 获取本节点的根节点\n   * @return TreeNode 根节点\n   */\n  public getRoot(): TreeNode {\n    const parents = this.getParents();\n    return parents[parents.length - 1] || null;\n  }\n\n  /**\n   * 获取节点在父节点的子节点列表中的位置\n   * - 如果没有父节点，则获取节点在根节点列表的位置\n   * @return number 节点位置序号\n   */\n  public getIndex(): number {\n    const list = this.getSiblings();\n    return list.indexOf(this);\n  }\n\n  /**\n   * 返回路径节点\n   * - 路径节点包含自己在内\n   * - 节点顺序与父级节点顺序相反，从根到当前\n   * @return TreeNode[] 路径节点数组\n   */\n  public getPath(): TreeNode[] {\n    const nodes = this.getParents();\n    nodes.unshift(this);\n    return nodes.reverse();\n  }\n\n  /**\n   * 获取节点所在层级\n   * @return number 层级序号\n   */\n  public getLevel(): number {\n    const parents = this.getParents();\n    return parents.length;\n  }\n\n  /* ------ 节点状态判断 ------ */\n\n  /**\n   * 判断节点是否被过滤\n   * @return boolean 是否被过滤方法命中\n   */\n  public isRest(): boolean {\n    const { config, filterMap, hasFilter } = this.tree;\n\n    let rest = false;\n    if (hasFilter) {\n      // 仅在存在过滤条件时，过滤命中才有效\n      const nodeModel = this.getModel();\n      rest = config.filter(nodeModel);\n    }\n\n    if (rest) {\n      filterMap.set(this.value, true);\n    } else if (filterMap.get(this.value)) {\n      filterMap.delete(this.value);\n    }\n\n    return rest;\n  }\n\n  /**\n   * 判断节点是否可见\n   * @return boolean 是否可见\n   */\n  public isVisible(): boolean {\n    const { nodeMap, hasFilter, config } = this.tree;\n    const { allowFoldNodeOnFilter } = config;\n\n    let visible = true;\n\n    if (!nodeMap.get(this.value)) {\n      // 节点不在当前树上，所以不可见\n      return false;\n    }\n\n    if (hasFilter && !allowFoldNodeOnFilter) {\n      // 如果存在过滤条件\n      // 锁定状态和过滤命中状态，直接呈现\n      visible = this.vmIsLocked || this.vmIsRest;\n      return visible;\n    }\n\n    // 标志所有父节点展开导致的可见状态\n    let expandVisible = true;\n    const parents = this.getParents();\n    if (parents.length > 0) {\n      expandVisible = parents.every((node: TreeNode) => node.expanded);\n    }\n\n    if (hasFilter) {\n      visible = expandVisible && (this.vmIsRest || this.vmIsLocked);\n    } else {\n      visible = expandVisible;\n    }\n    return visible;\n  }\n\n  /**\n   * 判断节点为逻辑禁用状态，不包含过滤锁定状态\n   * - 优先级：Tree 配置 > checkStrictly > 手动 > 节点 data > disableCheck\n   */\n  public isDisabledState(): boolean {\n    const { tree, parent } = this;\n    const { config } = tree;\n    const { checkStrictly, disabled, disableCheck, keys = {} } = config;\n\n    if (disabled) return true;\n    if (!checkStrictly && parent?.isDisabled() && !this.vmIsRest) return true;\n\n    if (typeof this.disableManually === 'boolean') return this.disableManually;\n\n    const propDisabled = keys.disabled || 'disabled';\n    const state = get(this.data, propDisabled);\n    if (typeof state === 'boolean') return state;\n\n    if (disableCheck === true) return true;\n    if (typeof disableCheck === 'function') {\n      const stateCheck = disableCheck(this.getModel());\n      if (typeof stateCheck === 'boolean') {\n        return stateCheck;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * 判断节点是否呈现为禁用态，包含过滤锁定状态\n   * @return boolean 是否被禁用\n   */\n  public isDisabled(): boolean {\n    const { tree } = this;\n    const { hasFilter, config } = tree;\n    const { allowFoldNodeOnFilter } = config;\n    if (hasFilter && !allowFoldNodeOnFilter && this.vmIsLocked && !this.vmIsRest) {\n      // 当前树存在过滤条件，允许节点过滤后被折叠，当前节点为锁定节点，并且不是筛选后剩下的节点\n      // 则该节点应当呈现禁用状态\n      return true;\n    }\n    return this.isDisabledState();\n  }\n\n  /**\n   * 判断节点是否能拖拽\n   * @return boolean 是否能拖拽\n   */\n  public isDraggable(): boolean {\n    let state = !!get(this, 'tree.config.draggable');\n    if (typeof this.draggable === 'boolean') {\n      state = this.draggable;\n    }\n    return state;\n  }\n\n  /**\n   * 判断子节点是否互斥展开\n   * @return boolean 子节点是否互斥展开\n   */\n  public isExpandMutex(): boolean {\n    let state = !!get(this, 'tree.config.expandMutex');\n    if (typeof this.expandMutex === 'boolean') {\n      state = this.expandMutex;\n    }\n    return state;\n  }\n\n  /**\n   * 节点是否可被激活\n   * @return boolean 是否可被激活\n   */\n  public isActivable() {\n    let state = !!get(this, 'tree.config.activable');\n    if (typeof this.activable === 'boolean') {\n      state = this.activable;\n    }\n    return state;\n  }\n\n  /**\n   * 节点是否可选\n   * @return boolean 是否可选\n   */\n  public isCheckable() {\n    let state = !!get(this, 'tree.config.checkable');\n    if (typeof this.checkable === 'boolean') {\n      state = this.checkable;\n    }\n    return state;\n  }\n\n  /**\n   * 节点是否被激活\n   * @param {Map} [map] 预设激活节点 map, 用于计算节点在预期环境中的激活状态\n   * @return boolean 是否被激活\n   */\n  public isActived(map?: Map<string, boolean>): boolean {\n    const { tree, value } = this;\n    const activedMap = map || tree.activedMap;\n    return !!(tree.nodeMap.get(value) && activedMap.get(value));\n  }\n\n  /**\n   * 节点是否已展开\n   * @param {Map} [map] 预设展开节点 map, 用于计算节点在预期环境中的展开状态\n   * @return boolean 是否已展开\n   */\n  public isExpanded(map?: Map<string, boolean>): boolean {\n    const { tree, value, vmIsLocked } = this;\n    const { hasFilter, config } = tree;\n    const { allowFoldNodeOnFilter } = config;\n    if (hasFilter && !allowFoldNodeOnFilter && vmIsLocked) return true;\n    const expandedMap = map || tree.expandedMap;\n    return !!(tree.nodeMap.get(value) && expandedMap.get(value));\n  }\n\n  /**\n   * 节点是否被选中\n   * @param {Map} [map] 预设选中节点 map, 用于计算节点在预期环境中的选中态\n   * @return boolean 是否被选中\n   */\n  public isChecked(map?: TypeIdMap): boolean {\n    const { children, tree, value } = this;\n    const { checkStrictly, valueMode } = tree.config;\n    // 节点不在当前树上，视为未选中\n    if (!tree.nodeMap.get(value)) return false;\n    // 节点不可选，视为未选中\n    if (!this.isCheckable()) return false;\n    const checkedMap = map || tree.checkedMap;\n    // 严格模式，则已经可以判定选中状态\n    if (checkStrictly) {\n      return !!checkedMap.get(value);\n    }\n    let checked = false;\n    // 在 checkedMap 中，则根据 valueMode 的值进行判断\n    if (\n      checkedMap.get(value) &&\n      // 如果 valueMode 为 all、parentFirst，则视为选中\n      (valueMode !== 'onlyLeaf' ||\n        // 如果 valueMode 为 onlyLeaf 并且当前节点是叶子节点，则视为选中\n        this.isLeaf())\n    ) {\n      return true;\n    }\n    // 如果 valueMode 为 onlyLeaf 并且当前节点是父节点，则进一步判断\n    if (Array.isArray(children) && children.length > 0) {\n      // 子节点全部选中，则当前节点选中\n      checked = children.every((node) => {\n        const childIsChecked = node.isChecked(checkedMap);\n        return childIsChecked;\n      });\n    } else {\n      // 从父节点状态推断子节点状态\n      // 这里再调用 isChecked 会导致死循环\n      const parents = this.getParents();\n      checked = parents.some((node) => checkedMap.get(node.value));\n    }\n    return checked;\n  }\n\n  /**\n   * 是否为半选状态\n   * @return boolean 是否为半选状态\n   */\n  public isIndeterminate(): boolean {\n    const { children, tree, value } = this;\n    const { checkStrictly } = tree.config;\n    // 节点不在当前树上，视为未选中\n    if (!tree.nodeMap.get(value)) return false;\n    // 节点不可选，视为未选中\n    if (!this.isCheckable()) return false;\n    // 严格模式没有半选状态\n    if (checkStrictly) return false;\n    // 叶节点不存在半选状态\n    if (!Array.isArray(children)) return false;\n\n    let childChecked: null | boolean = null;\n    const indeterminate = children.some((node: TreeNode) => {\n      if (node.isIndeterminate()) {\n        // 子节点有任意一个半选，则其为半选状态\n        return true;\n      }\n      if (isNull(childChecked)) {\n        childChecked = node.isChecked();\n      }\n      if (childChecked !== node.isChecked()) {\n        // 子节点选中状态不一致，则其为半选状态\n        return true;\n      }\n      return false;\n    });\n\n    return indeterminate;\n  }\n\n  /**\n   * 是否为兄弟节点中的第一个节点\n   * @return boolean 是否为第一个节点\n   */\n  public isFirst(): boolean {\n    const siblings = this.getSiblings();\n    return siblings[0] === this;\n  }\n\n  /**\n   * 是否为兄弟节点中的最后一个节点\n   * @return boolean 是否为最后一个节点\n   */\n  public isLast(): boolean {\n    const siblings = this.getSiblings();\n    return siblings[siblings.length - 1] === this;\n  }\n\n  /**\n   * 是否为叶子节点，叶子节点没有子节点\n   * @return boolean 是否为叶子节点\n   */\n  public isLeaf(): boolean {\n    let isLeaf = false;\n    if (Array.isArray(this.children)) {\n      isLeaf = this.children.length <= 0;\n    } else {\n      isLeaf = !this.children;\n    }\n    return isLeaf;\n  }\n\n  /* ------ 节点状态切换 ------ */\n\n  /**\n   * 锁定节点，解锁节点\n   * - 搜索过滤节点时，路径节点需要固定呈现，视其为锁定态\n   * @param {boolean} lockState 锁定状态\n   * @return void\n   */\n  public lock(lockState: boolean): void {\n    this.vmIsLocked = lockState;\n    this.expanded = this.isExpanded();\n    this.visible = this.isVisible();\n  }\n\n  /**\n   * 节点展开关闭后需要调用的状态检查函数\n   * @return void\n   */\n  public afterExpanded(): void {\n    this.update();\n    // 节点展开时检查延迟加载的数据\n    if (this.expanded && this.children === true) {\n      this.loadChildren();\n    }\n    this.updateChildren();\n  }\n\n  /**\n   * 切换节点展开状态\n   * - 用于受控逻辑处理\n   * - 仅返回预期状态值数组，不直接操作状态\n   * @return string[] 当前树展开的节点值数组\n   */\n  public toggleExpanded(opts?: TypeSettingOptions): TreeNodeValue[] {\n    return this.setExpanded(!this.isExpanded(), opts);\n  }\n\n  /**\n   * 设置节点展开状态\n   * @param {boolean} expanded 节点展开状态\n   * @param {object} [opts] 操作选项\n   * @param {boolean} [opts.directly=false] 是否直接操作节点状态\n   * @return string[] 当前树展开的节点值数组\n   */\n  public setExpanded(expanded: boolean, opts?: TypeSettingOptions): TreeNodeValue[] {\n    const { tree } = this;\n    const { config } = tree;\n    const options = {\n      directly: false,\n      ...opts,\n    };\n\n    let map = tree.expandedMap;\n    if (!options.directly) {\n      map = new Map(tree.expandedMap);\n    }\n\n    // 手风琴效果，先折叠同级节点\n    if (expanded) {\n      // 列举需要展开的节点\n      const shouldExpandNodes = [];\n      // 自己一定在展开列表中\n      shouldExpandNodes.push(this);\n      if (config.expandParent) {\n        // expandParent 为 true，则父节点都要展开\n        this.getParents().forEach((node) => {\n          shouldExpandNodes.push(node);\n        });\n      }\n      shouldExpandNodes.forEach((node) => {\n        let isExpandMutex = false;\n        // 对于每一个节点，都需要判断是否启用手风琴效果\n        if (node.parent) {\n          isExpandMutex = node.parent.isExpandMutex();\n        } else {\n          isExpandMutex = tree?.config?.expandMutex;\n        }\n        if (isExpandMutex) {\n          // 折叠列表中，先移除同级节点\n          const siblings = node.getSiblings();\n          siblings.forEach((snode) => {\n            map.delete(snode.value);\n            // 同级节点相关状态更新\n            snode.update();\n            snode.updateChildren();\n          });\n        }\n        // 最后设置自己的折叠状态\n        map.set(node.value, true);\n        node.update();\n        node.updateChildren();\n      });\n    } else {\n      map.delete(this.value);\n    }\n\n    if (options.directly) {\n      this.afterExpanded();\n    }\n\n    return tree.getExpanded(map);\n  }\n\n  /**\n   * 切换节点激活状态\n   * - 用于受控逻辑处理\n   * - 仅返回预期状态值数组，不直接操作状态\n   * @return string[] 当前树激活的节点值数组\n   */\n  public toggleActived(opts?: TypeSettingOptions): TreeNodeValue[] {\n    return this.setActived(!this.isActived(), opts);\n  }\n\n  /**\n   * 设置节点激活状态\n   * @param {boolean} actived 节点激活状态\n   * @param {object} [opts] 操作选项\n   * @param {boolean} [opts.directly=false] 是否直接操作节点状态\n   * @return string[] 当前树激活的节点值数组\n   */\n  public setActived(actived: boolean, opts?: TypeSettingOptions): TreeNodeValue[] {\n    const { tree } = this;\n    const options = {\n      // 为 true, 为 UI 操作，状态变更受 disabled 影响\n      // 为 false, 为值操作, 状态变更不受 disabled 影响\n      isAction: true,\n      // 为 true, 直接操作节点状态\n      // 为 false, 返回预期状态\n      directly: false,\n      ...opts,\n    };\n    const config = tree.config || {};\n    let map = tree.activedMap;\n    if (!options.directly) {\n      map = new Map(tree.activedMap);\n    }\n    if (options.isAction && this.isDisabledState()) {\n      // 对于 UI 动作，禁用时不可切换激活状态\n      return tree.getActived(map);\n    }\n    if (this.isActivable()) {\n      if (actived) {\n        const prevKeys = Array.from(map.keys());\n        if (!config.activeMultiple) {\n          map.clear();\n        }\n        prevKeys.forEach((value) => {\n          const node = tree.getNode(value);\n          node?.update();\n        });\n        map.set(this.value, true);\n      } else {\n        map.delete(this.value);\n      }\n    }\n    this.update();\n    return tree.getActived(map);\n  }\n\n  /**\n   * 是否存在未选中的未禁用子节点\n   * @return boolean 未选中的未禁用子节点存在与否\n   */\n  public hasEnableUnCheckedChild(): boolean {\n    const { children } = this;\n    if (!Array.isArray(children) || children.length <= 0) {\n      // 没有子节点\n      return false;\n    }\n    let state = false;\n    children.some((child) => {\n      // 不理会禁用节点\n      if (child.isDisabledState()) return false;\n      // 不理会选中节点\n      if (child.isChecked()) return false;\n      if (child.isIndeterminate()) {\n        // 为半选节点则进行递归检查\n        if (child.hasEnableUnCheckedChild()) {\n          state = true;\n          return true;\n        }\n        // 都尽可能选中了，则检查之后的节点\n        return false;\n      }\n      // 子节点为未选中状态，且非半选状态\n      // 则直接返回 true\n      state = true;\n      return true;\n    });\n    return state;\n  }\n\n  /**\n   * 切换节点选中状态\n   * - 用于受控逻辑处理\n   * - 仅返回预期状态值数组，不直接操作状态\n   * @return string[] 当前树选中的节点值数组\n   */\n  public toggleChecked(opts?: TypeSettingOptions): TreeNodeValue[] {\n    if (this.isIndeterminate()) {\n      // 当前节点为半选情况下需要判断子节点是否尽可能全部选中\n      // 存在可操作的未选中的子节点，则应当尽可能选中子节点\n      // 不存在可操作的未选中的子节点，则应取消选中子节点\n      const expectState = this.hasEnableUnCheckedChild();\n      return this.setChecked(expectState, opts);\n    }\n    return this.setChecked(!this.isChecked(), opts);\n  }\n\n  /**\n   * 设置节点选中状态\n   * - 节点 UI 操作时调用这个方法\n   * - 节点设置自身状态时调用这个方法\n   * @param {boolean} checked 节点选中状态\n   * @param {object} [opts] 操作选项\n   * @param {boolean} [opts.isAction=true] 是否为 UI 动作\n   * @param {boolean} [opts.directly=false] 是否直接操作节点状态\n   * @return string[] 当前树选中的节点值数组\n   */\n  public setChecked(checked: boolean, opts?: TypeSettingOptions): TreeNodeValue[] {\n    const { tree } = this;\n    const config = tree.config || {};\n    const options: TypeSettingOptions = {\n      // 为 true, 为 UI 操作，状态变更受 disabled 影响\n      // 为 false, 为值操作, 状态变更不受 disabled 影响\n      isAction: true,\n      // 为 true, 直接操作节点状态\n      // 为 false, 返回预期状态\n      directly: false,\n      ...opts,\n    };\n    let map = tree.checkedMap;\n    if (!options.directly) {\n      map = new Map(tree.checkedMap);\n    }\n    if (!this.isCheckable()) {\n      // 当前节点非可选节点，则不可设置选中态\n      return tree.getChecked(map);\n    }\n    if (options.isAction && this.isDisabledState()) {\n      // 对于 UI 动作，禁用时不可切换选中态\n      return tree.getChecked(map);\n    }\n\n    if (checked === this.isChecked()) {\n      const shouldSet = this.isIndeterminate() && !this.hasEnableUnCheckedChild();\n      if (!shouldSet) {\n        // 值没有变更, 则选中态无变化\n        return tree.getChecked(map);\n      }\n    }\n\n    if (checked) {\n      map.set(this.value, true);\n    } else {\n      map.delete(this.value);\n    }\n\n    if (config.checkStrictly) {\n      // 严格模式下，选中态不扩散，仅操作节点自身\n      if (options.directly) {\n        // 严格模式值更新节点自身\n        this.updateChecked();\n      }\n    } else {\n      // 先向下游扩散选中态\n      this.spreadChildrenChecked(checked, map, options);\n      // 再计算上游选中态\n      this.spreadParentChecked(checked, map, options);\n      // 状态更新务必放到扩散动作之后\n      // 过早的状态更新会导致后续计算出错\n      if (options.directly) {\n        const relatedNodes = tree.getRelatedNodes([this.value], {\n          reverse: true,\n        });\n        relatedNodes.forEach((node) => {\n          node.updateChecked();\n        });\n      }\n    }\n\n    return tree.getChecked(map);\n  }\n\n  // 选中态向上游扩散\n  private spreadParentChecked(checked: boolean, map?: TypeIdMap, opts?: TypeSettingOptions) {\n    const options: TypeSettingOptions = {\n      isAction: true,\n      directly: false,\n      ...opts,\n    };\n\n    // 碰到不可选节点，中断扩散\n    if (!this.isCheckable()) return;\n\n    const { children } = this;\n    if (Array.isArray(children) && children.length > 0) {\n      // 有子节点，则选中态由子节点选中态集合来决定\n      map.delete(this.value);\n    }\n\n    const { parent } = this;\n    if (!parent) return;\n    parent.spreadParentChecked(checked, map, options);\n  }\n\n  // 选中态向下游扩散\n  private spreadChildrenChecked(checked: boolean, map?: TypeIdMap, opts?: TypeSettingOptions) {\n    const options: TypeSettingOptions = {\n      isAction: true,\n      directly: false,\n      ...opts,\n    };\n\n    // 碰到不可选节点，中断扩散\n    if (!this.isCheckable()) return;\n    // 对于 UI 动作操作，节点禁用，中断扩散\n    if (options.isAction && this.isDisabledState()) return;\n\n    const { children } = this;\n    if (!Array.isArray(children)) return;\n    if (children.length <= 0) return;\n    // 有子节点，则选中态由子节点选中态集合来决定\n    map.delete(this.value);\n    children.forEach((node) => {\n      // 对于 UI 动作，向下扩散时，禁用状态会阻止状态切换\n      if (options.isAction && node.isDisabledState()) return;\n      if (checked) {\n        map.set(node.value, true);\n      } else {\n        map.delete(node.value);\n      }\n      node.spreadChildrenChecked(checked, map, options);\n    });\n  }\n\n  /**\n   * 设置节点禁用状态\n   */\n  public setDisabled(disabled: null | boolean) {\n    if (!this.tree.config.checkStrictly && this.parent?.isDisabled()) return;\n    // 当 disabled 为 null 时，恢复为默认的禁用逻辑，而非通过设置强制指定\n    this.disableManually = disabled;\n    this.update();\n    this.updateChildren();\n  }\n\n  /* ------ 节点状态更新 ------ */\n\n  /**\n   * 更新节点当前状态，将节点放到延时更新检查队列\n   * @return void\n   */\n  public update(): void {\n    this.level = this.getLevel();\n    this.vmIsFirst = this.isFirst();\n    this.vmIsLast = this.isLast();\n    this.vmIsLeaf = this.isLeaf();\n    this.vmCheckable = this.isCheckable();\n    this.vmIsRest = this.isRest();\n    this.actived = this.isActived();\n    this.expanded = this.isExpanded();\n    this.visible = this.isVisible();\n    this.disabled = this.isDisabled();\n    this.tree.updated(this);\n  }\n\n  /**\n   * 更新节点选中态\n   * @return void\n   */\n  public updateChecked(): void {\n    const { tree, value } = this;\n    const { checkedMap } = tree;\n    this.checked = this.isChecked();\n    this.indeterminate = this.isIndeterminate();\n    if (this.checked) {\n      checkedMap.set(value, true);\n    }\n    tree.updated(this);\n  }\n\n  /**\n   * 更新所有子节点状态\n   * - 不包含自己\n   * @return void\n   */\n  public updateChildren(): void {\n    this.spreadChildren((node) => {\n      if (node === this) return;\n      node.update();\n      node.updateChecked();\n    });\n  }\n\n  /**\n   * 更新所有父级节点状态\n   * - 不包含自己\n   * @return void\n   */\n  public updateParents(): void {\n    this.spreadParents((node: TreeNode) => {\n      if (node === this) return;\n      node.update();\n      node.updateChecked();\n    });\n  }\n\n  /**\n   * 更新上下游相关节点状态\n   * - 包含自己\n   * @return void\n   */\n  public updateRelated(): void {\n    const { tree } = this;\n    const relatedNodes = tree.getRelatedNodes([this.value]);\n    relatedNodes.forEach((node) => {\n      node.update();\n      node.updateChecked();\n    });\n  }\n\n  /* ------ 节点遍历 ------ */\n\n  /**\n   * 获取包含自己在内所有的子节点\n   * - 包含自己\n   * @return TreeNode[] 遍历结果节点数组\n   */\n  public walk(): TreeNode[] {\n    const list: TreeNode[] = [];\n    this.spreadChildren((node: TreeNode) => {\n      list.push(node);\n    });\n    return list;\n  }\n\n  /**\n   * 向下遍历操作\n   * - 包含自己\n   * @return void\n   */\n  private spreadChildren(fn: TypeFnOperation) {\n    fn(this);\n    const { children } = this;\n    if (Array.isArray(children) && children.length > 0) {\n      children.forEach((node) => {\n        node?.spreadChildren(fn);\n      });\n    }\n  }\n\n  /**\n   * 向上遍历操作\n   * - 包含自己\n   * @return void\n   */\n  private spreadParents(fn: TypeFnOperation) {\n    fn(this);\n    const { parent } = this;\n    if (!parent) return;\n    parent?.spreadParents(fn);\n  }\n\n  /**\n   * 获取节点封装对象\n   * - TreeNode 对象 => TypeTreeNodeModel 对象\n   * - TypeTreeNodeModel 用于封装 treeNode 对外暴露的 api\n   * - 用户仅可操作经过封装的对象，减少了对外暴露的 api，利于代码重构\n   * @return TypeTreeNodeModel 节点封装对象\n   */\n  public getModel(): TypeTreeNodeModel {\n    let { model } = this;\n    if (!model) {\n      model = createNodeModel(this);\n      this.model = model;\n    }\n    return model;\n  }\n}\n\nexport default TreeNode;\n"],"names":["nodeKey","TreeNodeModel","node","_classCallCheck","_defineProperty","_createClass","key","get","value","label","data","actived","expanded","checked","indeterminate","loading","isDisabled","getLevel","getIndex","isFirst","isLast","isLeaf","insertBefore","newData","insertAfter","appendData","append","getPath","nodes","map","item","getModel","getParent","_node$parent","parent","getParents","getRoot","root","getSiblings","getChildren","deep","childrenModel","children","Array","isArray","length","walk","shift","isBoolean","remove","tree","targetNode","getNode","log","warnOnce","concat","parents","parentValues","pnode","indexOf","setData","syncAttrs","cleanData","omit","keys","config","forEach","attr","dataAttrValue","isUndefined","Object","assign","update","createNodeModel","model","hasOwnProperty","prototype","settableStatus","expandMutex","activable","checkable","draggable","settableProps","syncableProps","privateKey","TreeNode","_this","prefix","propChildren","propLabel","propValue","level","vmCheckable","vmIsLeaf","vmIsFirst","vmIsLast","vmIsRest","vmIsLocked","visible","expandAll","disableManually","uniqueId","isNil","nodeMap","privateMap","warn","set","prop","initActived","initExpanded","lazy","loadChildren","expandedMap","initChecked","updateChecked","reflow","checkedMap","checkStrictly","isNumber","expandLevel","isActivable","activedMap","_this2","list","push","apply","_toConsumableArray","wasLeaf","appendTo","updateRelated","index","_this3","parentNode","targetIndex","targetParents","includeCurrent","some","Error","targetPosNode","siblings","prevLength","prevIndex","curLength","splice","updateNodes","flat","insert","sibling","clean","updateParents","filterMap","_loadChildren","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","isFunction","load","sent","emit","stop","arguments","_this4","call","setDisabled","updated","unshift","reverse","isRest","_this$tree","hasFilter","rest","nodeModel","filter","isVisible","_this$tree2","allowFoldNodeOnFilter","expandVisible","every","isDisabledState","disabled","disableCheck","_config$keys","propDisabled","state","stateCheck","isDraggable","isExpandMutex","isCheckable","isActived","isExpanded","isChecked","_tree$config","valueMode","childIsChecked","isIndeterminate","childChecked","isNull","lock","lockState","afterExpanded","updateChildren","toggleExpanded","opts","setExpanded","options","_objectSpread","directly","Map","shouldExpandNodes","expandParent","_tree$config2","snode","getExpanded","toggleActived","setActived","isAction","getActived","prevKeys","from","activeMultiple","clear","hasEnableUnCheckedChild","child","toggleChecked","expectState","setChecked","getChecked","shouldSet","spreadChildrenChecked","spreadParentChecked","relatedNodes","getRelatedNodes","_this$parent","_this5","spreadChildren","_this6","spreadParents","fn"],"mappings":"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"}