chowa
Version:
UI component library based on React
185 lines (184 loc) • 6.52 kB
JavaScript
/**
* @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.
*/
;
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;