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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
32146
694