UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 6.34 kB
{"version":3,"file":"util.mjs","sources":["../../src/tree/util.ts"],"sourcesContent":["import { VNode, h } from 'vue';\nimport pick from 'lodash/pick';\nimport isFunction from 'lodash/isFunction';\nimport isString from 'lodash/isString';\nimport isArray from 'lodash/isArray';\nimport isNumber from 'lodash/isNumber';\nimport TreeStore from '../_common/js/tree/tree-store';\nimport TreeNode from '../_common/js/tree/tree-node';\nimport { TypeMark, TypeLineModel, TypeTNodeProp, TypeGetTNodeOption, TypeTargetNode } from './interface';\nimport { TdTreeProps } from './type';\n\nexport function getParentsToRoot(element?: HTMLElement, root?: HTMLElement): HTMLElement[] {\n const list = [];\n let el: HTMLElement = element;\n while (el && el.parentNode) {\n list.push(el);\n if (el === root) {\n break;\n }\n el = el.parentNode as HTMLElement;\n }\n return list;\n}\n\nexport function getParentMarks(name: string, element?: HTMLElement, root?: HTMLElement): TypeMark[] {\n const list = getParentsToRoot(element, root);\n return list\n .map((el) => {\n const mark: TypeMark = {\n name,\n value: el.getAttribute(name) || '',\n el,\n };\n return mark;\n })\n .filter((mark) => mark.value);\n}\n\nexport function getMark(name: string, element?: HTMLElement, root?: HTMLElement): TypeMark {\n const list = getParentMarks(name, element, root);\n const info = list.pop() || null;\n return info;\n}\n\nexport function getTNode(prop: TypeTNodeProp, options: TypeGetTNodeOption = {}): string | VNode {\n let tnode = null;\n let item = null;\n const conf = {\n ...options,\n };\n if (isFunction(prop)) {\n item = prop(h, conf.node?.getModel());\n } else if (isString(prop)) {\n item = prop;\n }\n if (isString(item)) {\n tnode = item;\n } else if (item) {\n tnode = item as VNode;\n }\n return tnode;\n}\n\n// 获取一个节点层级位置的连线模型\nexport function getLineModel(nodes: TreeNode[], node: TreeNode, index: number): TypeLineModel {\n // 标记 [上,右,下,左] 是否有连线\n const lineModel: TypeLineModel = {\n top: false,\n right: false,\n bottom: false,\n left: false,\n };\n\n let nodeChildren = [];\n if (isArray(node.children)) {\n nodeChildren = node.children;\n }\n const childNode = nodes[index - 1] || null;\n const nodeItemIndex = childNode ? childNode.getIndex() : 0;\n\n if (index === 0) {\n lineModel.left = !!node.parent;\n lineModel.bottom = node.children && node.expanded;\n lineModel.right = node.parent && !node.children;\n } else if (index === 1) {\n lineModel.top = true;\n lineModel.right = true;\n lineModel.bottom = nodeItemIndex < nodeChildren.length - 1;\n } else if (nodeItemIndex < nodeChildren.length - 1) {\n lineModel.top = true;\n lineModel.bottom = true;\n }\n\n return lineModel;\n}\n\nexport function isTreeNodeValue(item: unknown): boolean {\n return isString(item) || isNumber(item);\n}\n\nexport function getNode(store: TreeStore, item: TypeTargetNode): TreeNode {\n let node = null;\n let val = null;\n if (isString(item) || isNumber(item)) {\n val = item;\n } else if (item && isTreeNodeValue(item.value)) {\n val = item.value;\n }\n node = store.getNode(val);\n return node;\n}\n\n// 统一获取tree的config\nexport const getStoreConfig = (props: TdTreeProps) => {\n // 统一更新选项,然后在 store 统一识别属性更新\n const storeProps = pick(props, [\n 'keys',\n 'expandAll',\n 'expandLevel',\n 'expandMutex',\n 'expandParent',\n 'activable',\n 'activeMultiple',\n 'disabled',\n 'draggable',\n 'checkable',\n 'checkStrictly',\n 'load',\n 'lazy',\n 'valueMode',\n 'filter',\n 'allowFoldNodeOnFilter',\n ]);\n return storeProps;\n};\n"],"names":["list","name","el","isFunction","item","isString","tnode","top","right","bottom","left","isArray","lineModel","val","node","pick"],"mappings":"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"}