element-plus
Version:
A Component Library for Vue 3
1 lines • 17.5 kB
Source Map (JSON)
{"version":3,"file":"tree-node.vue2.mjs","sources":["../../../../../../packages/components/tree/src/tree-node.vue"],"sourcesContent":["<template>\n <div\n v-show=\"node.visible\"\n ref=\"node$\"\n :class=\"[\n ns.b('node'),\n ns.is('expanded', expanded),\n ns.is('current', node.isCurrent),\n ns.is('hidden', !node.visible),\n ns.is('focusable', !node.disabled),\n ns.is('checked', !node.disabled && node.checked),\n getNodeClass(node),\n ]\"\n role=\"treeitem\"\n tabindex=\"-1\"\n :aria-expanded=\"expanded\"\n :aria-disabled=\"node.disabled\"\n :aria-checked=\"node.checked\"\n :draggable=\"tree.props.draggable\"\n :data-key=\"getNodeKey(node)\"\n @click.stop=\"handleClick\"\n @contextmenu=\"handleContextMenu\"\n @dragstart.stop=\"handleDragStart\"\n @dragover.stop=\"handleDragOver\"\n @dragend.stop=\"handleDragEnd\"\n @drop.stop=\"handleDrop\"\n >\n <div\n :class=\"ns.be('node', 'content')\"\n :style=\"{ paddingLeft: (node.level - 1) * tree.props.indent + 'px' }\"\n >\n <el-icon\n v-if=\"tree.props.icon || CaretRight\"\n :class=\"[\n ns.be('node', 'expand-icon'),\n ns.is('leaf', node.isLeaf),\n {\n expanded: !node.isLeaf && expanded,\n },\n ]\"\n @click.stop=\"handleExpandIconClick\"\n >\n <component :is=\"tree.props.icon || CaretRight\" />\n </el-icon>\n <el-checkbox\n v-if=\"showCheckbox\"\n :model-value=\"node.checked\"\n :indeterminate=\"node.indeterminate\"\n :disabled=\"!!node.disabled\"\n @click.stop\n @change=\"handleCheckChange\"\n />\n <el-icon\n v-if=\"node.loading\"\n :class=\"[ns.be('node', 'loading-icon'), ns.is('loading')]\"\n >\n <loading />\n </el-icon>\n <node-content :node=\"node\" :render-content=\"renderContent\" />\n </div>\n <el-collapse-transition>\n <div\n v-if=\"!renderAfterExpand || childNodeRendered\"\n v-show=\"expanded\"\n :class=\"ns.be('node', 'children')\"\n role=\"group\"\n :aria-expanded=\"expanded\"\n @click.stop\n >\n <el-tree-node\n v-for=\"child in node.childNodes\"\n :key=\"getNodeKey(child)\"\n :render-content=\"renderContent\"\n :render-after-expand=\"renderAfterExpand\"\n :show-checkbox=\"showCheckbox\"\n :node=\"child\"\n :accordion=\"accordion\"\n :props=\"props\"\n @node-expand=\"handleChildNodeExpand\"\n />\n </div>\n </el-collapse-transition>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n getCurrentInstance,\n inject,\n nextTick,\n provide,\n ref,\n watch,\n} from 'vue'\nimport { debugWarn, isFunction, isString } from '@element-plus/utils'\nimport ElCollapseTransition from '@element-plus/components/collapse-transition'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { CaretRight, Loading } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport NodeContent from './tree-node-content.vue'\nimport { getNodeKey as getNodeKeyUtil, handleCurrentChange } from './model/util'\nimport { useNodeExpandEventBroadcast } from './model/useNodeExpandEventBroadcast'\nimport { dragEventsKey } from './model/useDragNode'\nimport Node from './model/node'\nimport { NODE_INSTANCE_INJECTION_KEY, ROOT_TREE_INJECTION_KEY } from './tokens'\n\nimport type { ComponentInternalInstance, PropType } from 'vue'\nimport type { RootTreeType, TreeNodeData, TreeOptionProps } from './tree.type'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\n\nexport default defineComponent({\n name: 'ElTreeNode',\n components: {\n ElCollapseTransition,\n ElCheckbox,\n NodeContent,\n ElIcon,\n Loading,\n },\n props: {\n node: {\n type: Node,\n default: () => ({}),\n },\n props: {\n type: Object as PropType<TreeOptionProps>,\n default: () => ({}),\n },\n accordion: Boolean,\n renderContent: Function,\n renderAfterExpand: Boolean,\n showCheckbox: Boolean,\n },\n emits: ['node-expand'],\n setup(props, ctx) {\n const ns = useNamespace('tree')\n const { broadcastExpanded } = useNodeExpandEventBroadcast(props)\n const tree = inject<RootTreeType>(ROOT_TREE_INJECTION_KEY)!\n const expanded = ref(false)\n const childNodeRendered = ref(false)\n const oldChecked = ref<boolean>()\n const oldIndeterminate = ref<boolean>()\n const node$ = ref<HTMLElement>()\n const dragEvents = inject(dragEventsKey)!\n const instance = getCurrentInstance()\n\n provide(NODE_INSTANCE_INJECTION_KEY, instance)\n if (!tree) {\n debugWarn('Tree', \"Can not find node's tree.\")\n }\n\n if (props.node.expanded) {\n expanded.value = true\n childNodeRendered.value = true\n }\n\n const childrenKey = tree.props.props['children'] || 'children'\n watch(\n () => {\n const children = props.node.data?.[childrenKey]\n return children && [...children]\n },\n () => {\n props.node.updateChildren()\n }\n )\n\n watch(\n () => props.node.indeterminate,\n (val) => {\n handleSelectChange(props.node.checked, val)\n }\n )\n\n watch(\n () => props.node.checked,\n (val) => {\n handleSelectChange(val, props.node.indeterminate)\n }\n )\n\n watch(\n () => props.node.childNodes.length,\n () => props.node.reInitChecked()\n )\n\n watch(\n () => props.node.expanded,\n (val) => {\n nextTick(() => (expanded.value = val))\n if (val) {\n childNodeRendered.value = true\n }\n }\n )\n\n const getNodeKey = (node: Node): any => {\n return getNodeKeyUtil(tree.props.nodeKey, node.data)\n }\n\n const getNodeClass = (node: Node) => {\n const nodeClassFunc = props.props.class\n if (!nodeClassFunc) {\n return {}\n }\n let className\n if (isFunction(nodeClassFunc)) {\n const { data } = node\n className = nodeClassFunc(data, node)\n } else {\n className = nodeClassFunc\n }\n\n if (isString(className)) {\n return { [className]: true }\n } else {\n return className\n }\n }\n\n const handleSelectChange = (checked: boolean, indeterminate: boolean) => {\n if (\n oldChecked.value !== checked ||\n oldIndeterminate.value !== indeterminate\n ) {\n tree.ctx.emit('check-change', props.node.data, checked, indeterminate)\n }\n oldChecked.value = checked\n oldIndeterminate.value = indeterminate\n }\n\n const handleClick = (e: MouseEvent) => {\n handleCurrentChange(tree.store, tree.ctx.emit, () => {\n const nodeKeyProp = tree?.props?.nodeKey\n if (nodeKeyProp) {\n const curNodeKey = getNodeKey(props.node)\n tree.store.value.setCurrentNodeKey(curNodeKey)\n } else {\n tree.store.value.setCurrentNode(props.node)\n }\n })\n tree.currentNode.value = props.node\n\n if (tree.props.expandOnClickNode) {\n handleExpandIconClick()\n }\n\n if (\n (tree.props.checkOnClickNode ||\n (props.node.isLeaf &&\n tree.props.checkOnClickLeaf &&\n props.showCheckbox)) &&\n !props.node.disabled\n ) {\n handleCheckChange(!props.node.checked)\n }\n tree.ctx.emit('node-click', props.node.data, props.node, instance, e)\n }\n\n const handleContextMenu = (event: Event) => {\n if (tree.instance.vnode.props?.['onNodeContextmenu']) {\n event.stopPropagation()\n event.preventDefault()\n }\n tree.ctx.emit(\n 'node-contextmenu',\n event,\n props.node.data,\n props.node,\n instance\n )\n }\n\n const handleExpandIconClick = () => {\n if (props.node.isLeaf) return\n if (expanded.value) {\n tree.ctx.emit('node-collapse', props.node.data, props.node, instance)\n props.node.collapse()\n } else {\n props.node.expand(() => {\n ctx.emit('node-expand', props.node.data, props.node, instance)\n })\n }\n }\n\n const handleCheckChange = (value: CheckboxValueType) => {\n const checkStrictly = tree?.props.checkStrictly\n const childNodes = props.node.childNodes\n if (!checkStrictly && childNodes.length) {\n value = childNodes.some((node) => !node.isEffectivelyChecked)\n }\n props.node.setChecked(value as boolean, !checkStrictly)\n nextTick(() => {\n const store = tree.store.value\n tree.ctx.emit('check', props.node.data, {\n checkedNodes: store.getCheckedNodes(),\n checkedKeys: store.getCheckedKeys(),\n halfCheckedNodes: store.getHalfCheckedNodes(),\n halfCheckedKeys: store.getHalfCheckedKeys(),\n })\n })\n }\n\n const handleChildNodeExpand = (\n nodeData: TreeNodeData,\n node: Node,\n instance: ComponentInternalInstance\n ) => {\n broadcastExpanded(node)\n tree.ctx.emit('node-expand', nodeData, node, instance)\n }\n\n const handleDragStart = (event: DragEvent) => {\n if (!tree.props.draggable) return\n dragEvents.treeNodeDragStart({ event, treeNode: props })\n }\n\n const handleDragOver = (event: DragEvent) => {\n event.preventDefault()\n if (!tree.props.draggable) return\n dragEvents.treeNodeDragOver({\n event,\n treeNode: { $el: node$.value, node: props.node },\n })\n }\n\n const handleDrop = (event: DragEvent) => {\n event.preventDefault()\n }\n\n const handleDragEnd = (event: DragEvent) => {\n if (!tree.props.draggable) return\n dragEvents.treeNodeDragEnd(event)\n }\n\n return {\n ns,\n node$,\n tree,\n expanded,\n childNodeRendered,\n oldChecked,\n oldIndeterminate,\n getNodeKey,\n getNodeClass,\n handleSelectChange,\n handleClick,\n handleContextMenu,\n handleExpandIconClick,\n handleCheckChange,\n handleChildNodeExpand,\n handleDragStart,\n handleDragOver,\n handleDrop,\n handleDragEnd,\n CaretRight,\n }\n },\n})\n</script>\n"],"names":["NodeContent","getNodeKey","getNodeKeyUtil","instance"],"mappings":"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"}