{"version":3,"file":"tree-node-model.mjs","sources":["../../../../src/_common/js/tree-v1/tree-node-model.ts"],"sourcesContent":["import { isBoolean, isUndefined, omit, pick } from 'lodash-es';\nimport log from '../log/log';\nimport { TreeNode } from './tree-node';\n\nimport type { TreeNodeModelProps, TreeNodeValue, TypeTreeItem, TypeTreeNodeData, TypeTreeNodeModel } from './types';\n\nexport const PATH_SEPARATOR = '/';\n\n// 带上类型前缀，避免 1、'1'、1n 在 allowDuplicateValue 下覆盖同一个节点\nexport function pathToKey(path: TreeNodeValue[]) {\n  return path.map((value) => `${typeof value}:${value}`).join(PATH_SEPARATOR);\n}\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    'disabled',\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 (isUndefined(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: TypeTreeNodeData) {\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      node.update();\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":["PATH_SEPARATOR","pathToKey","path","map","value","concat","_typeof","join","getExposedProps","node","props","pick","createNodeModel","model","_objectSpread","getLevel","getIndex","isFirst","isLast","isLeaf","insertBefore","newData","insertAfter","appendData","data","append","getPath","nodes","item","getModel","getParent","_node$parent","parent","getParents","getRoot","root","getSiblings","getChildren","deep","childrenModel","children","Array","isArray","length","walk","shift","isBoolean","remove","isUndefined","tree","targetNode","getNode","log","warnOnce","parents","parentValues","pnode","indexOf","setData","_data","omit","keys","config","dataValue","dataLabel","label","Object","assign","update","updateNodeModel"],"mappings":"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"}