136 lines
4.5 KiB
JavaScript
136 lines
4.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.treeGetClickTarget = exports.filterTree = exports.emptyImage = exports.keysWithFilter = exports.isNodeDisabled = exports.useMergedCheckStrategy = void 0;
|
|
const vue_1 = require("vue");
|
|
const _utils_1 = require("../../_utils");
|
|
const seemly_1 = require("seemly");
|
|
function useMergedCheckStrategy(props) {
|
|
return (0, vue_1.computed)(() => (props.leafOnly ? 'child' : props.checkStrategy));
|
|
}
|
|
exports.useMergedCheckStrategy = useMergedCheckStrategy;
|
|
function isNodeDisabled(node, disabledField) {
|
|
return !!node.rawNode[disabledField];
|
|
}
|
|
exports.isNodeDisabled = isNodeDisabled;
|
|
function traverse(nodes, childrenField, callback, callbackAfter) {
|
|
nodes === null || nodes === void 0 ? void 0 : nodes.forEach((node) => {
|
|
callback(node);
|
|
traverse(node[childrenField], childrenField, callback, callbackAfter);
|
|
callbackAfter(node);
|
|
});
|
|
}
|
|
function keysWithFilter(nodes, pattern, keyField, childrenField, filter) {
|
|
const keys = new Set();
|
|
const highlightKeySet = new Set();
|
|
const path = [];
|
|
traverse(nodes, childrenField, (node) => {
|
|
path.push(node);
|
|
if (filter(pattern, node)) {
|
|
highlightKeySet.add(node[keyField]);
|
|
for (let i = path.length - 2; i >= 0; --i) {
|
|
if (!keys.has(path[i][keyField])) {
|
|
keys.add(path[i][keyField]);
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}, () => {
|
|
path.pop();
|
|
});
|
|
return {
|
|
expandedKeys: Array.from(keys),
|
|
highlightKeySet
|
|
};
|
|
}
|
|
exports.keysWithFilter = keysWithFilter;
|
|
const emptyImage = null;
|
|
exports.emptyImage = emptyImage;
|
|
if (_utils_1.isBrowser && Image) {
|
|
const emptyImage = new Image();
|
|
exports.emptyImage = emptyImage;
|
|
emptyImage.src =
|
|
'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
|
|
}
|
|
function filterTree(tree, filter, pattern, keyField, childrenField) {
|
|
const visitedTailKeys = new Set();
|
|
const visitedNonTailKeys = new Set();
|
|
const highlightKeySet = new Set();
|
|
const expandedKeys = [];
|
|
const filteredTree = [];
|
|
const path = [];
|
|
function visit(t) {
|
|
t.forEach((n) => {
|
|
path.push(n);
|
|
if (filter(pattern, n)) {
|
|
visitedTailKeys.add(n[keyField]);
|
|
highlightKeySet.add(n[keyField]);
|
|
for (let i = path.length - 2; i >= 0; --i) {
|
|
const key = path[i][keyField];
|
|
if (!visitedNonTailKeys.has(key)) {
|
|
visitedNonTailKeys.add(key);
|
|
if (visitedTailKeys.has(key)) {
|
|
visitedTailKeys.delete(key);
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
const children = n[childrenField];
|
|
if (children) {
|
|
visit(children);
|
|
}
|
|
path.pop();
|
|
});
|
|
}
|
|
visit(tree);
|
|
function build(t, sibs) {
|
|
t.forEach((n) => {
|
|
const key = n[keyField];
|
|
const isVisitedTail = visitedTailKeys.has(key);
|
|
const isVisitedNonTail = visitedNonTailKeys.has(key);
|
|
if (!isVisitedTail && !isVisitedNonTail)
|
|
return;
|
|
const children = n[childrenField];
|
|
if (children) {
|
|
if (isVisitedTail) {
|
|
// If it is visited path tail, use origin node
|
|
sibs.push(n);
|
|
}
|
|
else {
|
|
// It it is not visited path tail, use cloned node
|
|
expandedKeys.push(key);
|
|
const clonedNode = Object.assign(Object.assign({}, n), { [childrenField]: [] });
|
|
sibs.push(clonedNode);
|
|
build(children, clonedNode[childrenField]);
|
|
}
|
|
}
|
|
else {
|
|
sibs.push(n);
|
|
}
|
|
});
|
|
}
|
|
build(tree, filteredTree);
|
|
return {
|
|
filteredTree,
|
|
highlightKeySet,
|
|
expandedKeys
|
|
};
|
|
}
|
|
exports.filterTree = filterTree;
|
|
function treeGetClickTarget(e) {
|
|
if ((0, seemly_1.happensIn)(e, 'checkbox')) {
|
|
return 'checkbox';
|
|
}
|
|
else if ((0, seemly_1.happensIn)(e, 'switcher')) {
|
|
return 'switcher';
|
|
}
|
|
else {
|
|
return 'node';
|
|
}
|
|
}
|
|
exports.treeGetClickTarget = treeGetClickTarget;
|