{"version":3,"file":"tree-node-model.mjs","sources":["../../../../src/_common/js/tree-v1/tree-node-model.ts"],"sourcesContent":["import { isUndefined, isBoolean, pick, omit } from 'lodash-es';\nimport { TreeNode } from './tree-node';\nimport { OptionData } from '../common';\nimport {\n  TreeNodeValue,\n  TypeTreeNodeModel,\n  TypeTreeNodeData,\n  TypeTreeItem,\n  TreeNodeModelProps,\n} from './types';\nimport log from '../log/log';\n\n// 获取节点需要暴露的属性\nfunction getExposedProps(node: TreeNode): TreeNodeModelProps {\n  const props = pick(node, [\n    'value',\n    'label',\n    'data',\n    'actived',\n    'expanded',\n    'checked',\n    'indeterminate',\n    'loading',\n  ]) as TreeNodeModelProps;\n  return props;\n}\n\n// 封装对外暴露的对象\nexport function createNodeModel(node: TreeNode): TypeTreeNodeModel {\n  const props = getExposedProps(node);\n\n  const model: TypeTreeNodeModel = {\n    ...props,\n\n    /**\n     * 获取节点所处层级\n     * @return number 节点层级序号\n     */\n    getLevel() {\n      return node.getLevel();\n    },\n\n    /**\n     * 获取节点在父节点的子节点列表中的位置\n     * - 如果没有父节点，则获取节点在根节点列表的位置\n     * @return number 节点位置序号\n     */\n    getIndex() {\n      return node.getIndex();\n    },\n\n    /**\n     * 是否为兄弟节点中的第一个节点\n     * @return boolean 是否为第一个节点\n     */\n    isFirst() {\n      return node.isFirst();\n    },\n\n    /**\n     * 是否为兄弟节点中的最后一个节点\n     * @return boolean 是否为最后一个节点\n     */\n    isLast() {\n      return node.isLast();\n    },\n\n    /**\n     * 是否为叶子节点，叶子节点没有子节点\n     * @return boolean 是否为叶子节点\n     */\n    isLeaf() {\n      return node.isLeaf();\n    },\n\n    /**\n     * 在当前节点之前插入节点\n     * @param {object} newData 要插入的节点或者数据\n     * @return void\n     */\n    insertBefore(newData: TypeTreeItem) {\n      return node.insertBefore(newData);\n    },\n\n    /**\n     * 在当前节点之后插入节点\n     * @param {object} newData 要插入的节点或者数据\n     * @return void\n     */\n    insertAfter(newData: TypeTreeItem) {\n      return node.insertAfter(newData);\n    },\n\n    /**\n     * 追加节点数据\n     * @param {object | object[]} data 节点数据\n     * @return void\n     */\n    appendData(data: TypeTreeNodeData | TypeTreeNodeData[]) {\n      return node.append(data);\n    },\n\n    /**\n     * 返回路径节点\n     * - 路径节点包含自己在内\n     * - 节点顺序与父级节点顺序相反，从根到当前\n     * @return TreeNodeModel[] 路径节点数组\n     */\n    getPath(): TypeTreeNodeModel[] {\n      const nodes = node.getPath();\n      return nodes.map((item: TreeNode) => item.getModel());\n    },\n\n    /**\n     * 获取本节点的父节点\n     * @return TreeNodeModel 父节点\n     */\n    getParent(): TypeTreeNodeModel {\n      return node.parent?.getModel();\n    },\n\n    /**\n     * 获取所有父级节点\n     * - 顺序为从当前到根\n     * @return TreeNodeModel[] 父级节点数组\n     */\n    getParents(): TypeTreeNodeModel[] {\n      const nodes = node.getParents();\n      return nodes.map((item: TreeNode) => item.getModel());\n    },\n\n    /**\n     * 获取本节点的根节点\n     * @return TreeNodeModel 根节点\n     */\n    getRoot(): TypeTreeNodeModel {\n      const root = node.getRoot();\n      return root?.getModel();\n    },\n\n    /**\n     * 获取所有兄弟节点，包含自己在内\n     * @return TreeNodeModel[] 兄弟节点数组\n     */\n    getSiblings(): TypeTreeNodeModel[] {\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    getChildren(deep?: boolean): boolean | TypeTreeNodeModel[] {\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    remove(value?: TreeNodeValue) {\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    setData(data: OptionData) {\n      // 详细细节可见 https://github.com/Tencent/tdesign-common/issues/655\n      const _data = omit(data, ['children', 'value', 'label']);\n      const { keys } = node.tree.config;\n      const dataValue = data[keys?.value || 'value'];\n      const dataLabel = data[keys?.label || 'label'];\n      if (!isUndefined(dataValue)) _data.value = dataValue;\n      if (!isUndefined(dataLabel)) _data.label = dataLabel;\n\n      Object.assign(node.data, _data);\n      Object.assign(node, _data);\n    },\n  };\n\n  return model;\n}\n\n/**\n * 同步节点属性到封装对象\n * @param {TreeNodeModel} 节点封装对象\n * @param {object} data 节点数据\n * @return void\n */\nexport function updateNodeModel(model: TypeTreeNodeModel, node: TreeNode) {\n  // 同步节点属性\n  const props = getExposedProps(node);\n  Object.assign(model, props);\n}\n"],"names":["getExposedProps","node","props","pick","createNodeModel","model","_objectSpread","getLevel","getIndex","isFirst","isLast","isLeaf","insertBefore","newData","insertAfter","appendData","data","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","value","tree","targetNode","getNode","log","warnOnce","concat","parents","parentValues","pnode","indexOf","setData","_data","omit","keys","config","dataValue","dataLabel","label","isUndefined","Object","assign","updateNodeModel"],"mappings":"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"}