UNPKG

chowa

Version:

UI component library based on React

185 lines (184 loc) 6.52 kB
/** * @license chowa v1.1.3 * * Copyright (c) Chowa Techonlogies Co.,Ltd.(http://www.chowa.cn). * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const React = require("react"); const tree_node_1 = require("./tree-node"); const utils_1 = require("../utils"); function transformReactNodeToNodes(children, parentIndex) { const nodes = []; React.Children.forEach(children, (child, key) => { if (!utils_1.isReactElement(child) || child.type !== tree_node_1.default) { return; } const index = utils_1.isExist(child.props.index) ? child.props.index : utils_1.isExist(parentIndex) ? `${parentIndex}-${key}` : key; nodes.push(Object.assign(Object.assign({}, child.props), { index, children: transformReactNodeToNodes(child.props.children, index) })); }); return nodes; } exports.transformReactNodeToNodes = transformReactNodeToNodes; function complutedNodes(nodes, parentIndex) { if (!Array.isArray(nodes)) { return nodes; } const ret = []; nodes.forEach((node, key) => { const index = utils_1.isExist(node.index) ? node.index : utils_1.isExist(parentIndex) ? `${parentIndex}-${key}` : key; ret.push(Object.assign(Object.assign({}, node), { index, disabled: node.disabled === true, hasChildren: node.hasChildren === true, checkable: node.checkable === true, disabledCheck: node.checkable === true, children: Array.isArray(node.children) ? complutedNodes(node.children) : [] })); }); return ret; } exports.complutedNodes = complutedNodes; function atuoCheckNodes(checkedIndexs, node, parentChecked, checked) { if (node.children.length === 0) { return checkedIndexs.includes(node.index); } node.children.forEach((childNode) => { atuoCheckNodes(checkedIndexs, childNode, parentChecked || checkedIndexs.includes(childNode.index), checked); }); const allChecked = node.children.every((childNode) => { return checkedIndexs.includes(childNode.index); }); if (checked) { if (!parentChecked && allChecked) { checkedIndexs.push(node.index); } else if (parentChecked && !allChecked) { node.children.forEach((childNode) => { if (!checkedIndexs.includes(childNode.index)) { checkedIndexs.push(childNode.index); } }); } } else { if (!parentChecked && allChecked) { node.children.forEach((childNode) => { if (checkedIndexs.includes(childNode.index)) { checkedIndexs.splice(checkedIndexs.indexOf(childNode.index), 1); } }); } else if (parentChecked && !allChecked) { checkedIndexs.splice(checkedIndexs.indexOf(node.index), 1); } } } function computedCheckedNodeIndexs(checkedIndexs, nodes, checked) { const indexs = [].concat(checkedIndexs); nodes.forEach((node) => { const selfChecked = indexs.includes(node.index); atuoCheckNodes(indexs, node, selfChecked, checked); }); return indexs; } exports.computedCheckedNodeIndexs = computedCheckedNodeIndexs; function hasCheckedChildNode(checkedIndexs, indeterminteIndexs, node) { if (node.children.length === 0) { return; } node.children.forEach((childNode) => { hasCheckedChildNode(checkedIndexs, indeterminteIndexs, childNode); }); const hasChecked = node.children.some((childNode) => { return checkedIndexs.includes(childNode.index) || indeterminteIndexs.includes(childNode.index); }); if (hasChecked && !indeterminteIndexs.includes(node.index)) { indeterminteIndexs.push(node.index); } } function compuntedIndeterminteNodeIndexs(checkedIndexs, nodes) { const indexs = []; nodes.forEach((node) => { hasCheckedChildNode(checkedIndexs, indexs, node); }); return indexs; } exports.compuntedIndeterminteNodeIndexs = compuntedIndeterminteNodeIndexs; function updateNodeChildren(nodes, parentIndexs, children) { const newNodes = [].concat(nodes); let updateNode; parentIndexs.forEach((index) => { updateNode = updateNode === undefined ? nodes[index] : updateNode[index]; }); if (utils_1.isExist(updateNode)) { updateNode.children = children; } return newNodes; } exports.updateNodeChildren = updateNodeChildren; function hasChildNode(node, indexs) { if (node.children.length === 0) { return; } node.children.forEach((childNode) => { hasChildNode(childNode, indexs); }); if (node.children.length > 0) { indexs.push(node.index); } } function findHasChildNodeIndexs(nodes) { const indexs = []; nodes.forEach((node) => { hasChildNode(node, indexs); }); return indexs; } exports.findHasChildNodeIndexs = findHasChildNodeIndexs; function cloneNodes(nodes) { const ret = []; [].concat(nodes).forEach((node) => { ret.push(Object.assign(Object.assign({}, node), { children: cloneNodes(node.children) })); }); return ret; } exports.cloneNodes = cloneNodes; function getNodeBySelfIndexs(nodes, selfIndexs) { const indexs = [].concat(selfIndexs); let node = nodes[indexs.shift()]; indexs.forEach((index) => { node = node.children[index]; }); return node; } exports.getNodeBySelfIndexs = getNodeBySelfIndexs; function getChildNodesBySelfIndexs(nodes, selfIndexs) { const indexs = [].concat(selfIndexs); let childNodes = nodes; indexs.pop(); indexs.forEach((index) => { childNodes = childNodes[index].children; }); return childNodes; } exports.getChildNodesBySelfIndexs = getChildNodesBySelfIndexs; function isDropInSameParent(a, b) { const cloneA = [].concat(a); const cloneB = [].concat(b); cloneA.pop(); cloneB.pop(); return utils_1.isEqual(cloneA, cloneB); } exports.isDropInSameParent = isDropInSameParent; function isDropInSamePreParent(a, b) { const cloneA = [].concat(a); const cloneB = [].concat(b); cloneA.pop(); cloneB.pop(); return cloneA.length - cloneB.length === 1 && cloneB.every((index, key) => { return cloneA[key] === index; }); } exports.isDropInSamePreParent = isDropInSamePreParent;