UNPKG

tdesign-mobile-vue

Version:
1 lines 11.7 kB
{"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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"}