UNPKG

rsuite

Version:

A suite of react components

227 lines (183 loc) 6.91 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.isEveryChildChecked = isEveryChildChecked; exports.isSomeChildChecked = isSomeChildChecked; exports.isSomeNodeHasChildren = isSomeNodeHasChildren; exports.isAllSiblingNodeUncheckable = isAllSiblingNodeUncheckable; exports.isEveryFirstLevelNodeUncheckable = isEveryFirstLevelNodeUncheckable; exports.isNodeUncheckable = isNodeUncheckable; exports.getFormattedTree = getFormattedTree; exports.getDisabledState = getDisabledState; exports.getCheckTreePickerDefaultValue = getCheckTreePickerDefaultValue; exports.getSelectedItems = getSelectedItems; exports.getNodeCheckState = getNodeCheckState; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _isUndefined2 = _interopRequireDefault(require("lodash/isUndefined")); var _isNil2 = _interopRequireDefault(require("lodash/isNil")); var _utils = require("../utils"); var _treeUtils = require("../utils/treeUtils"); function isEveryChildChecked(nodes, parent) { if ((0, _isNil2.default)(parent.refKey) || (0, _isNil2.default)(nodes[parent.refKey])) { return false; } var children = (0, _treeUtils.getChildrenByFlattenNodes)(nodes, parent); if (!children.length) { var _nodes$parent$refKey$; return (_nodes$parent$refKey$ = nodes[parent.refKey].check) !== null && _nodes$parent$refKey$ !== void 0 ? _nodes$parent$refKey$ : false; } return children.every(function (child) { return !(0, _isNil2.default)(child.refKey) && nodes[child.refKey].check; }); } function isSomeChildChecked(nodes, parent, childrenKey) { if (!(0, _isNil2.default)(parent.refKey) && (0, _isNil2.default)(nodes[parent.refKey])) { return false; } var children = (0, _treeUtils.getChildrenByFlattenNodes)(nodes, parent); return children.some(function (child) { var _child$childrenKey; if ((child === null || child === void 0 ? void 0 : (_child$childrenKey = child[childrenKey]) === null || _child$childrenKey === void 0 ? void 0 : _child$childrenKey.length) > 0) { return isSomeChildChecked(nodes, child, childrenKey); } return !(0, _isNil2.default)(child.refKey) && nodes[child.refKey].check; }); } function isSomeNodeHasChildren(data, childrenKey) { return data.some(function (node) { return Array.isArray(node[childrenKey]); }); } /** * is all siblings nodes is uncheckable * @param {*} node */ function isAllSiblingNodeUncheckable(node, nodes, uncheckableItemValues, valueKey) { var list = []; var parentNodeRefKey = node.parent ? node.parent.refKey : ''; Object.keys(nodes).forEach(function (refKey) { var _curNode$parent; var curNode = nodes[refKey]; if ((0, _isNil2.default)(node.parent) && (0, _isNil2.default)(curNode.parent)) { list.push(curNode); } else if (((_curNode$parent = curNode.parent) === null || _curNode$parent === void 0 ? void 0 : _curNode$parent.refKey) === parentNodeRefKey) { list.push(curNode); } }); return list.every(function (node) { return isNodeUncheckable(node, { uncheckableItemValues: uncheckableItemValues, valueKey: valueKey }); }); } /** * get each first level node uncheckable state */ function isEveryFirstLevelNodeUncheckable(nodes, uncheckableItemValues, valueKey) { var list = []; Object.keys(nodes).forEach(function (refKey) { var curNode = nodes[refKey]; if (!curNode.parent) { list.push(curNode); } }); return list.every(function (node) { return isNodeUncheckable(node, { uncheckableItemValues: uncheckableItemValues, valueKey: valueKey }); }); } /** * get node uncheckable state * @param {*} node */ function isNodeUncheckable(node, props) { var _props$uncheckableIte = props.uncheckableItemValues, uncheckableItemValues = _props$uncheckableIte === void 0 ? [] : _props$uncheckableIte, valueKey = props.valueKey; return uncheckableItemValues.some(function (value) { return (0, _utils.shallowEqual)(node[valueKey], value); }); } function getFormattedTree(data, nodes, props) { var childrenKey = props.childrenKey, cascade = props.cascade; return data.map(function (node) { var formatted = (0, _extends2.default)({}, node); var curNode = nodes[node.refKey]; if (curNode) { var _node$childrenKey; var checkState = !(0, _isUndefined2.default)(cascade) ? getNodeCheckState({ node: curNode, cascade: cascade, nodes: nodes, childrenKey: childrenKey }) : undefined; formatted.check = curNode.check; formatted.expand = curNode.expand; formatted.uncheckable = curNode.uncheckable; formatted.parent = curNode.parent; formatted.checkState = checkState; if (((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) > 0) { formatted[childrenKey] = getFormattedTree(formatted[childrenKey], nodes, props); } } return formatted; }); } function getDisabledState(nodes, node, props) { var _props$disabledItemVa = props.disabledItemValues, disabledItemValues = _props$disabledItemVa === void 0 ? [] : _props$disabledItemVa, valueKey = props.valueKey; if (!(0, _isNil2.default)(node.refKey) && (0, _isNil2.default)(nodes[node.refKey])) { return false; } return disabledItemValues.some(function (value) { return node.refKey && (0, _utils.shallowEqual)(nodes[node.refKey][valueKey], value); }); } function getCheckTreePickerDefaultValue(value, uncheckableItemValues) { if (Array.isArray(value)) { return value.filter(function (v) { return !uncheckableItemValues.includes(v); }); } return []; } function getSelectedItems(nodes, value, valueKey) { var checkItems = []; Object.keys(nodes).map(function (refKey) { var node = nodes[refKey]; if (value.some(function (value) { return (0, _utils.shallowEqual)(node[valueKey], value); })) { checkItems.push(node); } }); return checkItems; } function getNodeCheckState(_ref) { var nodes = _ref.nodes, node = _ref.node, cascade = _ref.cascade, childrenKey = _ref.childrenKey; if ((0, _isNil2.default)(nodes[node.refKey])) { return _utils.CHECK_STATE.UNCHECK; } if (!node[childrenKey] || !node[childrenKey].length || !cascade) { nodes[node.refKey].checkAll = false; return node.check ? _utils.CHECK_STATE.CHECK : _utils.CHECK_STATE.UNCHECK; } if (isEveryChildChecked(nodes, node)) { nodes[node.refKey].checkAll = true; nodes[node.refKey].check = true; return _utils.CHECK_STATE.CHECK; } if (isSomeChildChecked(nodes, node, childrenKey)) { nodes[node.refKey].checkAll = false; return _utils.CHECK_STATE.INDETERMINATE; } return _utils.CHECK_STATE.UNCHECK; }