Socket
Socket
Sign inDemoInstall

rc-tree-select

Package Overview
Dependencies
Maintainers
2
Versions
259
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rc-tree-select - npm Package Compare versions

Comparing version 1.5.2-beta to 1.5.2-beta.1

44

lib/Select.js

@@ -167,3 +167,3 @@ 'use strict';

// save parsed treeData, for performance (treeData may be very big)
this.renderedTreeData = this.renderTreeData(props);
this.renderedTreeData = this.renderTreeData();
value = this.addLabelToValue(props, value);

@@ -181,2 +181,9 @@ value = this.getValue(props, value);

if ('value' in nextProps) {
if (this._cacheTreeNodesStates !== 'force' && this._savedValue && nextProps.value === this._savedValue) {
// 只处理用户直接 在 onChange 里 this.setState({value}); 并且是同一个对象引用。
// 后续可以对比对象里边的值。
this._cacheTreeNodesStates = true;
} else {
this._cacheTreeNodesStates = false;
}
var value = (0, _util.toArray)(nextProps.value);

@@ -374,2 +381,5 @@ // save parsed treeData, for performance (treeData may be very big)

extraInfo.allCheckedNodes = props.treeCheckStrictly ? info.checkedNodes : (0, _util.flatToHierarchy)(info.checkedNodesPositions);
this._checkedNodes = info.checkedNodesPositions;
var _tree = this.refs.trigger.popupEle;
this._treeNodesStates = _tree.checkKeys;
} else {

@@ -534,6 +544,13 @@ extraInfo.selected = info.selected;

}
var checkedTreeNodes = (0, _util.getTreeNodesStates)(this.renderedTreeData || _props.children, value.map(function (item) {
return item.value;
})).checkedTreeNodes;
this.checkedTreeNodes = checkedTreeNodes;
var checkedTreeNodes = undefined;
if (this._cachetreeData && this._cacheTreeNodesStates && this.checkedTreeNodes) {
checkedTreeNodes = this._checkedNodes;
} else {
// getTreeNodesStates 耗时,做缓存处理。
this._treeNodesStates = (0, _util.getTreeNodesStates)(this.renderedTreeData || _props.children, value.map(function (item) {
return item.value;
}));
checkedTreeNodes = this._treeNodesStates.checkedNodes;
this.checkedTreeNodes = checkedTreeNodes;
}
var mapLabVal = function mapLabVal(arr) {

@@ -616,5 +633,7 @@ return arr.map(function (itemObj) {

});
this.fireChange(this.state.value.filter(function (val) {
var nv = this.state.value.filter(function (val) {
return newVals.indexOf(val.value) !== -1;
}), { triggerValue: selectedValue, clear: true });
});
this._cacheTreeNodesStates = 'force';
this.fireChange(nv, { triggerValue: selectedValue, clear: true });
},

@@ -736,3 +755,4 @@

});
props.onChange(this.getVLForOnChange(value), labs, ex);
this._savedValue = this.getVLForOnChange(value);
props.onChange(this._savedValue, labs, ex);
}

@@ -835,2 +855,8 @@ },

if (validProps.treeData) {
if (props && props.treeData === this.props.treeData && this.renderedTreeData) {
// cache and use pre data.
this._cachetreeData = true;
return this.renderedTreeData;
}
this._cachetreeData = false;
return loopTreeData(validProps.treeData);

@@ -871,2 +897,4 @@ }

treeData: this.renderedTreeData,
_cachetreeData: this._cachetreeData,
_treeNodesStates: this._treeNodesStates,
multiple: multiple,

@@ -873,0 +901,0 @@ disabled: disabled,

15

lib/SelectTrigger.js

@@ -136,3 +136,4 @@ 'use strict';

checkStrictly: props.treeCheckStrictly,
filterTreeNode: this.filterTree
filterTreeNode: this.filterTree,
_treeNodesStates: props._treeNodesStates
};

@@ -193,4 +194,12 @@

};
var treeNodes = recursive(props.treeData || props.treeNodes);
// const s = Date.now();
// let treeNodes = recursive(props.treeData || props.treeNodes);
var treeNodes = undefined;
if (props._cachetreeData && this.treeNodes) {
treeNodes = this.treeNodes;
} else {
treeNodes = recursive(props.treeData || props.treeNodes);
this.treeNodes = treeNodes;
}
// console.log(Date.now()-s);
var recursive1 = function recursive1(children) {

@@ -197,0 +206,0 @@ var cb = arguments.length <= 1 || arguments[1] === undefined ? function (ch) {

@@ -21,3 +21,2 @@ /* eslint no-loop-func: 0*/

exports.isInclude = isInclude;
exports.getCheckedKeys = getCheckedKeys;
exports.loopAllChildren = loopAllChildren;

@@ -31,4 +30,2 @@ exports.flatToHierarchy = flatToHierarchy;

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
var _react = require('react');

@@ -124,7 +121,8 @@

function getCheckedKeys(node, checkedKeys, allCheckedNodesKeys) {
var nodeKey = node.props.eventKey;
var newCks = [].concat(_toConsumableArray(checkedKeys));
var nodePos = undefined;
var unCheck = allCheckedNodesKeys.some(function (item) {
/*
export function getCheckedKeys(node, checkedKeys, allCheckedNodesKeys) {
const nodeKey = node.props.eventKey;
let newCks = [...checkedKeys];
let nodePos;
const unCheck = allCheckedNodesKeys.some(item => {
if (item.key === nodeKey) {

@@ -136,15 +134,15 @@ nodePos = item.pos;

if (unCheck) {
(function () {
var nArr = nodePos.split('-');
newCks = [];
allCheckedNodesKeys.forEach(function (item) {
var iArr = item.pos.split('-');
if (item.pos === nodePos || nArr.length > iArr.length && isInclude(iArr, nArr) || nArr.length < iArr.length && isInclude(nArr, iArr)) {
// 过滤掉 父级节点 和 所有子节点。
// 因为 node节点 不选时,其 父级节点 和 所有子节点 都不选。
return;
}
newCks.push(item.key);
});
})();
const nArr = nodePos.split('-');
newCks = [];
allCheckedNodesKeys.forEach(item => {
const iArr = item.pos.split('-');
if (item.pos === nodePos ||
nArr.length > iArr.length && isInclude(iArr, nArr) ||
nArr.length < iArr.length && isInclude(nArr, iArr)) {
// 过滤掉 父级节点 和 所有子节点。
// 因为 node节点 不选时,其 父级节点 和 所有子节点 都不选。
return;
}
newCks.push(item.key);
});
} else {

@@ -155,18 +153,52 @@ newCks.push(nodeKey);

}
*/
function loopAllChildren(childs, callback) {
var loop = function loop(children, level) {
function getChildrenlength(children) {
var len = 1;
if (Array.isArray(children)) {
len = children.length;
}
return len;
}
function getSiblingPosition(index, len, siblingPosition) {
if (len === 1) {
siblingPosition.first = true;
siblingPosition.last = true;
} else {
siblingPosition.first = index === 0;
siblingPosition.last = index === len - 1;
}
return siblingPosition;
}
function loopAllChildren(childs, callback, parent) {
var loop = function loop(children, level, _parent) {
var len = getChildrenlength(children);
_react2['default'].Children.forEach(children, function (item, index) {
var pos = level + '-' + index;
if (item && item.props.children) {
loop(item.props.children, pos);
if (item.props.children && item.type) {
loop(item.props.children, pos, { node: item, pos: pos });
}
if (item) {
callback(item, index, pos, getValuePropValue(item));
}
callback(item, index, pos, item.key || pos, getSiblingPosition(index, len, {}), _parent);
});
};
loop(childs, 0);
loop(childs, 0, parent);
}
// export function loopAllChildren(childs, callback) {
// const loop = (children, level) => {
// React.Children.forEach(children, (item, index) => {
// const pos = `${level}-${index}`;
// if (item && item.props.children) {
// loop(item.props.children, pos);
// }
// if (item) {
// callback(item, index, pos, getValuePropValue(item));
// }
// });
// };
// loop(childs, 0);
// }
function flatToHierarchy(arr) {

@@ -260,3 +292,3 @@ if (!arr.length) {

var stripTail = function stripTail(str) {
function stripTail(str) {
var arr = str.match(/(.+)(-[^-]+)$/);

@@ -268,6 +300,6 @@ var st = '';

return st;
};
var splitPosition = function splitPosition(pos) {
}
function splitPosition(pos) {
return pos.split('-');
};
}

@@ -361,13 +393,18 @@ // TODO 再优化

function getCheck(treeNodesStates) {
var checkedTreeNodes = [];
function getCheck(treeNodesStates, checkedPositions) {
var checkPartKeys = [];
var checkedKeys = [];
var checkedNodes = [];
Object.keys(treeNodesStates).forEach(function (item) {
var itemObj = treeNodesStates[item];
if (itemObj.checked) {
// checkedTreeNodes.push(getValuePropValue(itemObj.node));
checkedTreeNodes.push(_extends({}, itemObj, { pos: item }));
checkedKeys.push(itemObj.key);
// checkedNodes.push(getValuePropValue(itemObj.node));
checkedNodes.push(_extends({}, itemObj, { pos: item }));
} else if (itemObj.checkPart) {
checkPartKeys.push(itemObj.key);
}
});
return {
checkedTreeNodes: checkedTreeNodes
checkPartKeys: checkPartKeys, checkedKeys: checkedKeys, checkedNodes: checkedNodes, treeNodesStates: treeNodesStates, checkedPositions: checkedPositions
};

@@ -377,20 +414,21 @@ }

function getTreeNodesStates(children, values) {
var checkedPos = [];
var checkedPositions = [];
var treeNodesStates = {};
loopAllChildren(children, function (item, index, pos, value) {
var checked = false;
if (values.indexOf(value) !== -1) {
checked = true;
checkedPos.push(pos);
}
loopAllChildren(children, function (item, index, pos, keyOrPos, siblingPosition) {
treeNodesStates[pos] = {
node: item,
checked: checked,
checkPart: false
key: keyOrPos,
checked: false,
checkPart: false,
siblingPosition: siblingPosition
};
if (values.indexOf(getValuePropValue(item)) !== -1) {
treeNodesStates[pos].checked = true;
checkedPositions.push(pos);
}
});
handleCheckState(treeNodesStates, filterParentPosition(checkedPos.sort()), true);
handleCheckState(treeNodesStates, filterParentPosition(checkedPositions.sort()), true);
return getCheck(treeNodesStates);
return getCheck(treeNodesStates, checkedPositions);
}
{
"name": "rc-tree-select",
"version": "1.5.2-beta",
"version": "1.5.2-beta.1",
"description": "tree-select ui component for react",

@@ -60,3 +60,3 @@ "keywords": [

"rc-animate": "^2.0.2",
"rc-tree": "^1.2.0-beta.2",
"rc-tree": "^1.2.0-beta.3",
"rc-trigger": "^1.0.6",

@@ -63,0 +63,0 @@ "rc-util": "^3.1.2"

@@ -84,3 +84,2 @@ # rc-tree-select

|treeCheckStrictly | check node precisely, parent and children nodes are not associated| bool | false |
|skipHandleInitValue | skip handle init value when enable treeCheckable | bool | false |
|filterTreeNode | filter some treeNodes as you need. it should return true | function(treeNode) | - |

@@ -87,0 +86,0 @@ |treeNodeFilterProp | which prop value of treeNode will be used for filter if filterTreeNode return true | String | 'value' |

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