UNPKG

element-plus

Version:

A Component Library for Vue 3

239 lines (234 loc) 7.53 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var index$2 = require('../../collapse-transition/index.js'); var index$1 = require('../../checkbox/index.js'); var index = require('../../icon/index.js'); var iconsVue = require('@element-plus/icons-vue'); var treeNodeContent_vue_vue_type_script_lang = require('./tree-node-content.vue2.js'); var util = require('./model/util.js'); var useNodeExpandEventBroadcast = require('./model/useNodeExpandEventBroadcast.js'); var useDragNode = require('./model/useDragNode.js'); var node = require('./model/node.js'); var tokens = require('./tokens.js'); var index$3 = require('../../../hooks/use-namespace/index.js'); var error = require('../../../utils/error.js'); var shared = require('@vue/shared'); var _sfc_main = vue.defineComponent({ name: "ElTreeNode", components: { ElCollapseTransition: index$2.ElCollapseTransition, ElCheckbox: index$1.ElCheckbox, NodeContent: treeNodeContent_vue_vue_type_script_lang.default, ElIcon: index.ElIcon, Loading: iconsVue.Loading }, props: { node: { type: node.default, default: () => ({}) }, props: { type: Object, default: () => ({}) }, accordion: Boolean, renderContent: Function, renderAfterExpand: Boolean, showCheckbox: Boolean }, emits: ["node-expand"], setup(props, ctx) { const ns = index$3.useNamespace("tree"); const { broadcastExpanded } = useNodeExpandEventBroadcast.useNodeExpandEventBroadcast(props); const tree = vue.inject(tokens.ROOT_TREE_INJECTION_KEY); const expanded = vue.ref(false); const childNodeRendered = vue.ref(false); const oldChecked = vue.ref(); const oldIndeterminate = vue.ref(); const node$ = vue.ref(); const dragEvents = vue.inject(useDragNode.dragEventsKey); const instance = vue.getCurrentInstance(); vue.provide(tokens.NODE_INSTANCE_INJECTION_KEY, instance); if (!tree) { error.debugWarn("Tree", "Can not find node's tree."); } if (props.node.expanded) { expanded.value = true; childNodeRendered.value = true; } const childrenKey = tree.props.props["children"] || "children"; vue.watch( () => { var _a; const children = (_a = props.node.data) == null ? void 0 : _a[childrenKey]; return children && [...children]; }, () => { props.node.updateChildren(); } ); vue.watch( () => props.node.indeterminate, (val) => { handleSelectChange(props.node.checked, val); } ); vue.watch( () => props.node.checked, (val) => { handleSelectChange(val, props.node.indeterminate); } ); vue.watch( () => props.node.childNodes.length, () => props.node.reInitChecked() ); vue.watch( () => props.node.expanded, (val) => { vue.nextTick(() => expanded.value = val); if (val) { childNodeRendered.value = true; } } ); const getNodeKey = (node) => { return util.getNodeKey(tree.props.nodeKey, node.data); }; const getNodeClass = (node) => { const nodeClassFunc = props.props.class; if (!nodeClassFunc) { return {}; } let className; if (shared.isFunction(nodeClassFunc)) { const { data } = node; className = nodeClassFunc(data, node); } else { className = nodeClassFunc; } if (shared.isString(className)) { return { [className]: true }; } else { return className; } }; const handleSelectChange = (checked, indeterminate) => { if (oldChecked.value !== checked || oldIndeterminate.value !== indeterminate) { tree.ctx.emit("check-change", props.node.data, checked, indeterminate); } oldChecked.value = checked; oldIndeterminate.value = indeterminate; }; const handleClick = (e) => { util.handleCurrentChange(tree.store, tree.ctx.emit, () => { var _a; const nodeKeyProp = (_a = tree == null ? void 0 : tree.props) == null ? void 0 : _a.nodeKey; if (nodeKeyProp) { const curNodeKey = getNodeKey(props.node); tree.store.value.setCurrentNodeKey(curNodeKey); } else { tree.store.value.setCurrentNode(props.node); } }); tree.currentNode.value = props.node; if (tree.props.expandOnClickNode) { handleExpandIconClick(); } if ((tree.props.checkOnClickNode || props.node.isLeaf && tree.props.checkOnClickLeaf && props.showCheckbox) && !props.node.disabled) { handleCheckChange(!props.node.checked); } tree.ctx.emit("node-click", props.node.data, props.node, instance, e); }; const handleContextMenu = (event) => { var _a; if ((_a = tree.instance.vnode.props) == null ? void 0 : _a["onNodeContextmenu"]) { event.stopPropagation(); event.preventDefault(); } tree.ctx.emit( "node-contextmenu", event, props.node.data, props.node, instance ); }; const handleExpandIconClick = () => { if (props.node.isLeaf) return; if (expanded.value) { tree.ctx.emit("node-collapse", props.node.data, props.node, instance); props.node.collapse(); } else { props.node.expand(() => { ctx.emit("node-expand", props.node.data, props.node, instance); }); } }; const handleCheckChange = (value) => { const checkStrictly = tree == null ? void 0 : tree.props.checkStrictly; const childNodes = props.node.childNodes; if (!checkStrictly && childNodes.length) { value = childNodes.some((node) => !node.isEffectivelyChecked); } props.node.setChecked(value, !checkStrictly); vue.nextTick(() => { const store = tree.store.value; tree.ctx.emit("check", props.node.data, { checkedNodes: store.getCheckedNodes(), checkedKeys: store.getCheckedKeys(), halfCheckedNodes: store.getHalfCheckedNodes(), halfCheckedKeys: store.getHalfCheckedKeys() }); }); }; const handleChildNodeExpand = (nodeData, node, instance2) => { broadcastExpanded(node); tree.ctx.emit("node-expand", nodeData, node, instance2); }; const handleDragStart = (event) => { if (!tree.props.draggable) return; dragEvents.treeNodeDragStart({ event, treeNode: props }); }; const handleDragOver = (event) => { event.preventDefault(); if (!tree.props.draggable) return; dragEvents.treeNodeDragOver({ event, treeNode: { $el: node$.value, node: props.node } }); }; const handleDrop = (event) => { event.preventDefault(); }; const handleDragEnd = (event) => { if (!tree.props.draggable) return; dragEvents.treeNodeDragEnd(event); }; return { ns, node$, tree, expanded, childNodeRendered, oldChecked, oldIndeterminate, getNodeKey, getNodeClass, handleSelectChange, handleClick, handleContextMenu, handleExpandIconClick, handleCheckChange, handleChildNodeExpand, handleDragStart, handleDragOver, handleDrop, handleDragEnd, CaretRight: iconsVue.CaretRight }; } }); exports.default = _sfc_main; //# sourceMappingURL=tree-node.vue2.js.map