'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); require('../../../utils/index.js'); require('../../../hooks/index.js'); require('../../form/index.js'); var token = require('../../select/src/token.js'); var treeStore = require('./model/tree-store.js'); var util = require('./model/util.js'); var treeNode = require('./tree-node.js'); var useNodeExpandEventBroadcast = require('./model/useNodeExpandEventBroadcast.js'); var useDragNode = require('./model/useDragNode.js'); var useKeydown = require('./model/useKeydown.js'); var pluginVue_exportHelper = require('../../../_virtual/plugin-vue_export-helper.js'); var icon = require('../../../utils/vue/icon.js'); var index = require('../../../hooks/use-locale/index.js'); var index$1 = require('../../../hooks/use-namespace/index.js'); var constants = require('../../form/src/constants.js'); const _sfc_main = vue.defineComponent({ name: "ElTree", components: { ElTreeNode: treeNode["default"] }, props: { data: { type: Array, default: () => [] }, emptyText: { type: String }, renderAfterExpand: { type: Boolean, default: true }, nodeKey: String, checkStrictly: Boolean, defaultExpandAll: Boolean, expandOnClickNode: { type: Boolean, default: true }, checkOnClickNode: Boolean, checkDescendants: { type: Boolean, default: false }, autoExpandParent: { type: Boolean, default: true }, defaultCheckedKeys: Array, defaultExpandedKeys: Array, currentNodeKey: [String, Number], renderContent: Function, showCheckbox: { type: Boolean, default: false }, draggable: { type: Boolean, default: false }, allowDrag: Function, allowDrop: Function, props: { type: Object, default: () => ({ children: "children", label: "label", disabled: "disabled" }) }, lazy: { type: Boolean, default: false }, highlightCurrent: Boolean, load: Function, filterNodeMethod: Function, accordion: Boolean, indent: { type: Number, default: 18 }, icon: { type: icon.iconPropType } }, emits: [ "check-change", "current-change", "node-click", "node-contextmenu", "node-collapse", "node-expand", "check", "node-drag-start", "node-drag-end", "node-drop", "node-drag-leave", "node-drag-enter", "node-drag-over" ], setup(props, ctx) { const { t } = index.useLocale(); const ns = index$1.useNamespace("tree"); const selectInfo = vue.inject(token.selectKey, null); const store = vue.ref(new treeStore["default"]({ key: props.nodeKey, data: props.data, lazy: props.lazy, props: props.props, load: props.load, currentNodeKey: props.currentNodeKey, checkStrictly: props.checkStrictly, checkDescendants: props.checkDescendants, defaultCheckedKeys: props.defaultCheckedKeys, defaultExpandedKeys: props.defaultExpandedKeys, autoExpandParent: props.autoExpandParent, defaultExpandAll: props.defaultExpandAll, filterNodeMethod: props.filterNodeMethod })); store.value.initialize(); const root = vue.ref(store.value.root); const currentNode = vue.ref(null); const el$ = vue.ref(null); const dropIndicator$ = vue.ref(null); const { broadcastExpanded } = useNodeExpandEventBroadcast.useNodeExpandEventBroadcast(props); const { dragState } = useDragNode.useDragNodeHandler({ props, ctx, el$, dropIndicator$, store }); useKeydown.useKeydown({ el$ }, store); const isEmpty = vue.computed(() => { const { childNodes } = root.value; const hasFilteredOptions = selectInfo ? selectInfo.hasFilteredOptions !== 0 : false; return (!childNodes || childNodes.length === 0 || childNodes.every(({ visible }) => !visible)) && !hasFilteredOptions; }); vue.watch(() => props.currentNodeKey, (newVal) => { store.value.setCurrentNodeKey(newVal); }); vue.watch(() => props.defaultCheckedKeys, (newVal) => { store.value.setDefaultCheckedKey(newVal); }); vue.watch(() => props.defaultExpandedKeys, (newVal) => { store.value.setDefaultExpandedKeys(newVal); }); vue.watch(() => props.data, (newVal) => { store.value.setData(newVal); }, { deep: true }); vue.watch(() => props.checkStrictly, (newVal) => { store.value.checkStrictly = newVal; }); const filter = (value) => { if (!props.filterNodeMethod) throw new Error("[Tree] filterNodeMethod is required when filter"); store.value.filter(value); }; const getNodeKey = (node) => { return util.getNodeKey(props.nodeKey, node.data); }; const getNodePath = (data) => { if (!props.nodeKey) throw new Error("[Tree] nodeKey is required in getNodePath"); const node = store.value.getNode(data); if (!node) return []; const path = [node.data]; let parent = node.parent; while (parent && parent !== root.value) { path.push(parent.data); parent = parent.parent; } return path.reverse(); }; const getCheckedNodes = (leafOnly, includeHalfChecked) => { return store.value.getCheckedNodes(leafOnly, includeHalfChecked); }; const getCheckedKeys = (leafOnly) => { return store.value.getCheckedKeys(leafOnly); }; const getCurrentNode = () => { const currentNode2 = store.value.getCurrentNode(); return currentNode2 ? currentNode2.data : null; }; const getCurrentKey = () => { if (!props.nodeKey) throw new Error("[Tree] nodeKey is required in getCurrentKey"); const currentNode2 = getCurrentNode(); return currentNode2 ? currentNode2[props.nodeKey] : null; }; const setCheckedNodes = (nodes, leafOnly) => { if (!props.nodeKey) throw new Error("[Tree] nodeKey is required in setCheckedNodes"); store.value.setCheckedNodes(nodes, leafOnly); }; const setCheckedKeys = (keys, leafOnly) => { if (!props.nodeKey) throw new Error("[Tree] nodeKey is required in setCheckedKeys"); store.value.setCheckedKeys(keys, leafOnly); }; const setChecked = (data, checked, deep) => { store.value.setChecked(data, checked, deep); }; const getHalfCheckedNodes = () => { return store.value.getHalfCheckedNodes(); }; const getHalfCheckedKeys = () => { return store.value.getHalfCheckedKeys(); }; const setCurrentNode = (node, shouldAutoExpandParent = true) => { if (!props.nodeKey) throw new Error("[Tree] nodeKey is required in setCurrentNode"); util.handleCurrentChange(store, ctx.emit, () => { broadcastExpanded(node); store.value.setUserCurrentNode(node, shouldAutoExpandParent); }); }; const setCurrentKey = (key, shouldAutoExpandParent = true) => { if (!props.nodeKey) throw new Error("[Tree] nodeKey is required in setCurrentKey"); util.handleCurrentChange(store, ctx.emit, () => { broadcastExpanded(); store.value.setCurrentNodeKey(key, shouldAutoExpandParent); }); }; const getNode = (data) => { return store.value.getNode(data); }; const remove = (data) => { store.value.remove(data); }; const append = (data, parentNode) => { store.value.append(data, parentNode); }; const insertBefore = (data, refNode) => { store.value.insertBefore(data, refNode); }; const insertAfter = (data, refNode) => { store.value.insertAfter(data, refNode); }; const handleNodeExpand = (nodeData, node, instance) => { broadcastExpanded(node); ctx.emit("node-expand", nodeData, node, instance); }; const updateKeyChildren = (key, data) => { if (!props.nodeKey) throw new Error("[Tree] nodeKey is required in updateKeyChild"); store.value.updateChildren(key, data); }; vue.provide("RootTree", { ctx, props, store, root, currentNode, instance: vue.getCurrentInstance() }); vue.provide(constants.formItemContextKey, void 0); return { ns, store, root, currentNode, dragState, el$, dropIndicator$, isEmpty, filter, getNodeKey, getNodePath, getCheckedNodes, getCheckedKeys, getCurrentNode, getCurrentKey, setCheckedNodes, setCheckedKeys, setChecked, getHalfCheckedNodes, getHalfCheckedKeys, setCurrentNode, setCurrentKey, t, getNode, remove, append, insertBefore, insertAfter, handleNodeExpand, updateKeyChildren }; } }); function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_el_tree_node = vue.resolveComponent("el-tree-node"); return vue.openBlock(), vue.createElementBlock("div", { ref: "el$", class: vue.normalizeClass([ _ctx.ns.b(), _ctx.ns.is("dragging", !!_ctx.dragState.draggingNode), _ctx.ns.is("drop-not-allow", !_ctx.dragState.allowDrop), _ctx.ns.is("drop-inner", _ctx.dragState.dropType === "inner"), { [_ctx.ns.m("highlight-current")]: _ctx.highlightCurrent } ]), role: "tree" }, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.root.childNodes, (child) => { return vue.openBlock(), vue.createBlock(_component_el_tree_node, { key: _ctx.getNodeKey(child), node: child, props: _ctx.props, accordion: _ctx.accordion, "render-after-expand": _ctx.renderAfterExpand, "show-checkbox": _ctx.showCheckbox, "render-content": _ctx.renderContent, onNodeExpand: _ctx.handleNodeExpand }, null, 8, ["node", "props", "accordion", "render-after-expand", "show-checkbox", "render-content", "onNodeExpand"]); }), 128)), _ctx.isEmpty ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(_ctx.ns.e("empty-block")) }, [ vue.renderSlot(_ctx.$slots, "empty", {}, () => { var _a; return [ vue.createElementVNode("span", { class: vue.normalizeClass(_ctx.ns.e("empty-text")) }, vue.toDisplayString((_a = _ctx.emptyText) != null ? _a : _ctx.t("el.tree.emptyText")), 3) ]; }) ], 2)) : vue.createCommentVNode("v-if", true), vue.withDirectives(vue.createElementVNode("div", { ref: "dropIndicator$", class: vue.normalizeClass(_ctx.ns.e("drop-indicator")) }, null, 2), [ [vue.vShow, _ctx.dragState.showDropIndicator] ]) ], 2); } var Tree = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["render", _sfc_render], ["__file", "tree.vue"]]); exports["default"] = Tree; //# sourceMappingURL=tree.js.map