hongluan-ui
Version:
Hongluan Component Library for Vue 3
87 lines (82 loc) • 2.57 kB
JavaScript
;
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