UNPKG

@kaspersky/components

Version:

Kaspersky Design System UI Kit

103 lines (102 loc) 2.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkNode = checkNode; exports.getNodes = getNodes; exports.getParents = getParents; exports.hasUncheckedChildren = hasUncheckedChildren; exports.sortCheckedKeys = sortCheckedKeys; exports.uncheckNode = uncheckNode; function hasUncheckedChildren(node, checked) { if (!node.children) { return false; } for (const child of node.children) { if (!checked.has(child.key)) { return true; } } return false; } function checkNode(node, checkChildren, checked, halfChecked) { if (checkChildren) { checked.add(node.key); halfChecked.delete(node.key); if (!node.children) { return; } for (const child of node.children) { checkNode(child, checkChildren, checked, halfChecked); } } else { if (hasUncheckedChildren(node, checked)) { halfChecked.add(node.key); } else { checked.add(node.key); } } } function uncheckNode(node, uncheckChildren, checked, halfChecked) { checked.delete(node.key); halfChecked.delete(node.key); if (!uncheckChildren || !node.children) { return; } for (const child of node.children) { uncheckNode(child, uncheckChildren, checked, halfChecked); } } function getParents(treeData) { const out = {}; const collect = node => { if (!node.children) { return; } for (const child of node.children) { out[child.key] = node; collect(child); } }; if (treeData) { treeData.forEach(collect); } return out; } function getNodes(treeData) { const out = {}; const collect = node => { var _node$children; out[node.key] = node; (_node$children = node.children) === null || _node$children === void 0 ? void 0 : _node$children.forEach(collect); }; if (treeData) { treeData.forEach(collect); } return out; } function sortCheckedKeys(treeData, keys) { if (!keys) { return { checked: [], halfChecked: [] }; } const nodes = getNodes(treeData); const checked = []; const halfChecked = []; for (const key of keys) { if (!nodes[key]) { continue; } if (hasUncheckedChildren(nodes[key], new Set(keys))) { halfChecked.push(key); } else { checked.push(key); } } return { checked, halfChecked }; }