Socket
Socket
Sign inDemoInstall

rc-tree

Package Overview
Dependencies
Maintainers
2
Versions
306
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rc-tree - npm Package Compare versions

Comparing version 0.13.0 to 0.13.1

120

lib/Tree.js

@@ -28,6 +28,20 @@ 'use strict';

var id = 1;
function uuid() {
var uuid = function uuid() {
return id++;
}
};
// ['0-0','0-1', '0-0-1', '0-1-1'] => ['0-0', '0-1']
var filterMin = function filterMin(arr) {
var a = [];
arr.forEach(function (item) {
var b = a.filter(function (i) {
return item.indexOf(i) === 0;
});
if (!b.length) {
a.push(item);
}
});
return a;
};
var rootTrees = {};

@@ -73,3 +87,3 @@

rootTrees[this._rootTreeId] = {
_rootTreeId: this._rootTreeId,
_rootTree: this,
rootConfig: rootConfig,

@@ -130,9 +144,9 @@ treeNodesState: {},

if (!props._childTreeNode && !props._childTree) {
this._obj = {};
this.handleChildren(props.children);
if (!this._finishInit && !props._childTreeNode && !props._childTree) {
this.handleChildren(props.children, this._obj = {}, this._propsCheckedArray = []);
this._propsCheckedArray = filterMin(this._propsCheckedArray);
this.handleCheckState(this._obj, this._propsCheckedArray);
// console.log(this._obj);
this.handleObj(this._obj);
// console.log(this._obj);
rootTrees[this._rootTreeId].treeNodesState = this._obj;
this._finishInit = true;
}

@@ -150,60 +164,57 @@

}, {
key: 'handleObj',
value: function handleObj(obj, unCheckEvent, pos) {
if (unCheckEvent) {
key: 'handleCheckState',
value: function handleCheckState(obj, checkedArr, unCheckEvent) {
var evt = false;
if (typeof unCheckEvent === 'boolean') {
evt = true;
}
checkedArr.forEach(function (_pos) {
Object.keys(obj).forEach(function (i) {
if (i.indexOf(pos) === 0) {
obj[i].checked = false;
if (i.length > _pos.length && i.indexOf(_pos) === 0) {
obj[i].checkPart = false;
if (evt) {
if (unCheckEvent) {
obj[i].checked = false;
} else {
obj[i].checked = true;
}
} else {
obj[i].checked = true;
}
}
});
// return;
} else if (pos) {
Object.keys(obj).forEach(function (i) {
if (i.indexOf(pos) === 0) {
obj[i].checked = true;
obj[i].checkPart = false;
}
});
}
var checkedArr = Object.keys(obj).filter(function (key) {
return obj[key].checked;
});
// console.log(checkedArr);
// todo 过滤掉checkedArr中的重复项
checkedArr.forEach(function (key) {
var keyLen = key.length;
var loop = function loop(len) {
if (len <= 3) {
Object.keys(obj).forEach(function (i) {
if (i.indexOf(key) === 0) {
obj[i].checked = true;
obj[i].checkPart = false;
}
});
var loop = function loop(__pos) {
var _posLen = __pos.length;
if (_posLen <= 3) {
return;
}
var lenIndex = 0;
var chkIndex = 0;
var sibling = 0;
var siblingChecked = 0;
var parentPos = __pos.substring(0, _posLen - 2);
Object.keys(obj).forEach(function (i) {
if (i.length === len && i.substring(0, len - 2) === key.substring(0, len - 2)) {
lenIndex++;
if (i.length === _posLen && i.substring(0, _posLen - 2) === parentPos) {
sibling++;
if (obj[i].checked) {
chkIndex++;
siblingChecked++;
} else if (obj[i].checkPart) {
siblingChecked += 0.5;
}
} else if (i.length > len && i.indexOf(key) === 0) {
obj[i].checked = true;
}
});
// 子项全选,向上递归
var parent = obj[key.substring(0, len - 2)];
if (chkIndex === lenIndex) {
var parent = obj[parentPos];
// sibling 不会等于0
// 全不选 - 全选 - 半选
if (siblingChecked === 0) {
parent.checked = false;
parent.checkPart = false;
} else if (siblingChecked === sibling) {
parent.checked = true;
loop(len - 2);
parent.checkPart = false;
} else {
parent.checkPart = true;
loop(len - 2, true);
parent.checked = false;
}
loop(parentPos);
};
loop(keyLen);
loop(_pos);
});

@@ -213,3 +224,3 @@ }

key: 'handleChildren',
value: function handleChildren(children, level) {
value: function handleChildren(children, _obj, _propsCheckedArray, level) {
var _this2 = this;

@@ -224,6 +235,9 @@

}
_this2._obj[pos] = {
_obj[pos] = {
checkPart: child.props.checkPart || false,
checked: props.checked || props.defaultChecked || false
};
if (_obj[pos].checked) {
_propsCheckedArray.push(pos);
}
var childChildren = child.props.children;

@@ -234,3 +248,3 @@ if (childChildren && typeof childChildren.type === 'function' && typeof childChildren.type.TreeNode === 'function') {

if (Array.isArray(childChildren)) {
return _this2.handleChildren(childChildren, pos);
return _this2.handleChildren(childChildren, _obj, _propsCheckedArray, pos);
}

@@ -237,0 +251,0 @@ return null;

@@ -25,4 +25,2 @@ 'use strict';

var _rcUtil2 = _interopRequireDefault(_rcUtil);
var _Tree2 = require('./Tree');

@@ -43,8 +41,6 @@

_get(Object.getPrototypeOf(TreeNode.prototype), 'constructor', this).call(this, props);
var tnState = rootTrees[this.props._rootTreeId].treeNodesState[this.props._pos];
var tnState = this.getTreeNodesState();
this.state = {
expanded: props.expandAll || props.expanded || props.defaultExpanded,
selected: props.selected || false,
// checkPart: props.checkPart || false,
// checked: props.checked || false,
checkPart: tnState.checkPart || false,

@@ -59,14 +55,6 @@ checked: tnState.checked || false

_createClass(TreeNode, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.componentDidUpdate();
// console.log(rootTrees[this.props._rootTreeId].treeNodesState);
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps() {
var tnState = rootTrees[this.props._rootTreeId].treeNodesState[this.props._pos];
var tnState = this.getTreeNodesState();
this.setState({
// checkPart: nextProps.checkPart,
// checked: nextProps.checked,
checkPart: tnState.checkPart,

@@ -77,41 +65,7 @@ checked: tnState.checked

}, {
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate(nextProps, nextState) {
var checkbox = this.refs.checkbox;
if (checkbox && this.state.checkPart !== nextState.checkPart) {
var cls = checkbox.getDOMNode().className;
var checkSt = rootTrees[this.props._rootTreeId].treeNodesState[this.props._pos] || {};
checkSt.checkPart = nextState.checkPart;
checkSt.checked = nextState.checked;
var checkPartCls = this.props.prefixCls + '-checkbox_true_part';
if (nextState.checkPart) {
checkbox.getDOMNode().className = cls.indexOf(checkPartCls) > -1 ? cls : cls + ' ' + checkPartCls;
return false;
}
checkbox.getDOMNode().className = cls.replace(new RegExp(checkPartCls, 'g'), '');
}
return true;
key: 'getTreeNodesState',
value: function getTreeNodesState() {
return rootTrees[this.props._rootTreeId].treeNodesState[this.props._pos];
}
}, {
key: 'componentDidUpdate',
value: function componentDidUpdate() {
if (this.newChildren) {
var trees = rootTrees[this.props._rootTreeId].trees;
for (var i = 0; i < trees.length; i++) {
if (trees[i].props._pos === this.props._pos) {
trees.splice(i--, 1);
}
}
trees.push(this);
}
// add treeNodes checked state
var tnState = rootTrees[this.props._rootTreeId].treeNodesState[this.props._pos];
rootTrees[this.props._rootTreeId].treeNodesState[this.props._pos] = {
// checked: this.state.checked,
// checkPart: this.state.checkPart,
checkPart: tnState.checkPart,
checked: tnState.checked
};
}
}, {
key: 'renderSwitcher',

@@ -166,4 +120,9 @@ value: function renderSwitcher(props, prefixCls, switchState) {

if (props.checkbox) {
props.checkbox.props.checked = state.checked;
checkboxCls[prefixCls + '-checkbox-custom'] = true;
_react2['default'].cloneElement(props.checkbox, {
checked: state.checked
});
// props.checkbox.props.checked = state.checked;
}
// defaultChecked: state.checked,
return _react2['default'].createElement(

@@ -266,12 +225,7 @@ 'span',

}, {
key: 'switchExpandedState',
value: function switchExpandedState(newState, onStateChangeComplete) {
this.setState({
expanded: newState
}, onStateChangeComplete);
}
}, {
key: 'handleExpandedState',
value: function handleExpandedState() {
this.switchExpandedState(!this.state.expanded);
this.setState({
expanded: !this.state.expanded
});
}

@@ -307,3 +261,3 @@ }, {

if (this.state.checkPart) {
checked = false;
checked = true;
}

@@ -315,8 +269,9 @@

};
this.setState(nSt);
this.newTNState(props, checked);
rootTrees[props._rootTreeId].treeNodesState[props._pos] = nSt;
_get(Object.getPrototypeOf(TreeNode.prototype), 'handleCheckState', this).call(this, rootTrees[props._rootTreeId].treeNodesState, [props._pos], !checked);
// console.log(rootTrees[props._rootTreeId].treeNodesState);
_get(Object.getPrototypeOf(TreeNode.prototype), 'handleObj', this).call(this, rootTrees[props._rootTreeId].treeNodesState, !checked, props._pos);
// console.log(rootTrees[props._rootTreeId].treeNodesState);
// this.setState(nSt);
// 从rootTree更新
rootTrees[props._rootTreeId]._rootTree.forceUpdate();

@@ -328,70 +283,2 @@ if (props.onChecked) {

// set parent treeNodes's state
}, {
key: 'newTNState',
value: function newTNState(props, checked) {
var _this3 = this;
var _pos = props._pos;
rootTrees[this.props._rootTreeId].trees.sort(function (a, b) {
return b.props._pos.length - a.props._pos.length;
}).forEach(function (c) {
var cPos = c.props._pos;
if (_pos.indexOf(cPos) === 0 && _pos !== cPos) {
var childArr = _rcUtil2['default'].Children.toArray(c.props.children);
var len = childArr.length;
var checkedNumbers = 0;
// 先计算已经选中的节点数
// console.log(this);
for (var i = 0; i < len; i++) {
var checkSt = rootTrees[_this3.props._rootTreeId].treeNodesState[cPos + '-' + i];
if (checkSt.checked) {
checkedNumbers++;
} else if (checkSt.checkPart) {
checkedNumbers += 0.5;
}
}
// 点击节点的 直接父级
if (_pos.length - cPos.length <= 2) {
// 如果原来是半选
if (rootTrees[_this3.props._rootTreeId].treeNodesState[_pos].checkPart) {
// checked ? checkedNumbers += 0.5 : checkedNumbers -= 0.5;
if (checked) {
checkedNumbers += 0.5;
} else {
checkedNumbers -= 0.5;
}
} else if (checked) {
checkedNumbers++;
} else {
checkedNumbers--;
}
}
var newSt = undefined;
if (checkedNumbers <= 0) {
// 都不选
newSt = {
checkPart: false,
checked: false
};
} else if (checkedNumbers === len) {
// 全选
newSt = {
checkPart: false,
checked: true
};
} else {
// 部分选择
newSt = {
checkPart: true,
checked: false
};
}
c.setState(newSt);
rootTrees[_this3.props._rootTreeId].treeNodesState[cPos] = newSt;
}
});
}
// keyboard event support

@@ -398,0 +285,0 @@ }, {

{
"name": "rc-tree",
"version": "0.13.0",
"version": "0.13.1",
"description": "tree ui component for react",

@@ -5,0 +5,0 @@ "keywords": [

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc