UNPKG

hongluan-ui

Version:
87 lines (82 loc) 2.57 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); function useTree({ load, treeProps, getRowKey, defaultExpandAll, expandRowKeys }) { const tableTreeMap = vue.ref({}); const { emit } = vue.getCurrentInstance(); const childrenKey = treeProps.children; const hasChildrenKey = treeProps.hasChildren; const hasChildren = (row) => { if (row[childrenKey] && Array.isArray(row[childrenKey]) && row[childrenKey].length) return true; if (row[hasChildrenKey]) return true; }; const walkTreeNode = (data, level = 0) => { data && data.forEach((row) => { const rowKey = getRowKey(row); const expanded = expandRowKeys.value.includes(rowKey) ? true : defaultExpandAll.value; if (row[childrenKey] && Array.isArray(row[childrenKey])) { tableTreeMap.value[rowKey] = { lazy: false, isLoading: false, expanded, level }; walkTreeNode(row[childrenKey], level + 1); } else if (row[hasChildrenKey]) { tableTreeMap.value[rowKey] = { lazy: true, isLoading: false, expanded: false, level }; expanded && toggleExpandTree(row); } }); }; const loadChildren = (row, level, finish) => { tableTreeMap.value[getRowKey(row)] = { lazy: false, isLoading: true, expanded: false, level }; if (load) { load(row, { level }, (children) => { row[childrenKey] = children; tableTreeMap.value[getRowKey(row)].isLoading = false; walkTreeNode(children, level + 1); finish && finish(); }); } else { row[childrenKey] = []; tableTreeMap.value[getRowKey(row)].isLoading = false; finish && finish(); } }; const toggleExpandTree = (row) => { return new Promise((resolve) => { if (tableTreeMap.value[getRowKey(row)].lazy) { loadChildren(row, tableTreeMap.value[getRowKey(row)].level, () => { tableTreeMap.value[getRowKey(row)].expanded = true; resolve(); emit("tree-expand", true, row); }); } else { tableTreeMap.value[getRowKey(row)].expanded = !tableTreeMap.value[getRowKey(row)].expanded; resolve(); emit("tree-expand", tableTreeMap.value[getRowKey(row)].expanded, row); } }); }; return { walkTreeNode, hasChildren, loadChildren, tableTreeMap, toggleExpandTree }; } exports.useTree = useTree; //# sourceMappingURL=use-tree.js.map