UNPKG

shineout

Version:

Shein 前端组件库

184 lines (150 loc) 6.45 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _immer = _interopRequireDefault(require("immer")); var _uid = require("../utils/uid"); var _transform = require("../utils/transform"); var TREE_TABLE_DEFAULT_INDENT = 15; var defaultProps = { defaultTreeExpandKeys: [] }; var _default = function _default(WrappedComponent) { var _class, _temp; return _temp = _class = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(TreeExpand, _React$Component); function TreeExpand(props) { var _this; _this = _React$Component.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "changedByExpand", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "expandLevel", void 0); _this.state = { expandKeys: TreeExpand.getMapFromArray(props.defaultTreeExpandKeys) }; _this.handleTreeExpand = _this.handleTreeExpand.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); return _this; } var _proto = TreeExpand.prototype; _proto.componentDidUpdate = function componentDidUpdate() { this.changedByExpand = false; }; _proto.getTreeIndent = function getTreeIndent() { var columns = this.props.columns; for (var i = 0; i < columns.length; i++) { if (typeof columns[i].treeIndent === 'number') return columns[i].treeIndent; } return TREE_TABLE_DEFAULT_INDENT; }; _proto.getExpandKeys = function getExpandKeys() { var treeExpandKeys = this.props.treeExpandKeys; if (!treeExpandKeys) return this.state.expandKeys; return TreeExpand.getMapFromArray(treeExpandKeys); }; TreeExpand.getMapFromArray = function getMapFromArray(arr) { return arr.reduce(function (map, key) { map.set(key, true); return map; }, new Map()); } // getChildrenLength(children) { // const { treeColumnsName, keygen } = this.props // const { expandKeys } = this.state // if (!children) return 0 // let { length = 0 } = children // for (let i = 0; i < children.length; i++) { // const child = children[i] // const key = getKey(child, keygen) // if (!expandKeys.get(key)) continue // expandKeys.delete(key) // if (child[treeColumnsName] && child[treeColumnsName].length) { // length += this.getChildrenLength(child[treeColumnsName]) // } // } // return length // } ; _proto.getExpandData = function getExpandData() { var _this2 = this; var _this$props = this.props, data = _this$props.data, keygen = _this$props.keygen, treeColumnsName = _this$props.treeColumnsName; var expandKeys = this.getExpandKeys(); this.expandLevel = new Map(); if (expandKeys.size === 0) return data; var storeExpandKeys = new Map(); expandKeys.forEach(function (value, key) { return storeExpandKeys.set(key, value); }); var cloneData = JSON.parse(JSON.stringify(data)); return (0, _immer.default)(cloneData, function (draft) { var dataCo = draft; var _loop = function _loop(i) { if (storeExpandKeys.size === 0) return "break"; var item = dataCo[i]; var key = (0, _uid.getKey)(item, keygen, i); var parentLevel = _this2.expandLevel.get(key) || 0; var children = item[treeColumnsName]; if (storeExpandKeys.get(key) && children) { children.forEach(function (child) { _this2.expandLevel.set((0, _uid.getKey)(child, keygen), parentLevel + 1); }); draft.splice.apply(draft, [i + 1, 0].concat(children)); dataCo = draft; storeExpandKeys.delete(key); } }; for (var i = 0; i < dataCo.length; i++) { var _ret = _loop(i); if (_ret === "break") break; } }); }; _proto.handleTreeExpand = function handleTreeExpand(data, index) { var _this$props2 = this.props, keygen = _this$props2.keygen, treeExpandKeys = _this$props2.treeExpandKeys, onTreeExpand = _this$props2.onTreeExpand; var expandKeys = this.getExpandKeys(); var key = (0, _uid.getKey)(data, keygen, index); var changedKeys = (0, _immer.default)(expandKeys, function (draft) { // eslint-disable-next-line no-unused-expressions expandKeys.get(key) ? draft.delete(key) : draft.set(key, true); }); if (treeExpandKeys && onTreeExpand) { onTreeExpand((0, _transform.keysToArray)(changedKeys), data, !!expandKeys.get(key), index); return; } this.changedByExpand = true; this.setState({ expandKeys: changedKeys }); }; _proto.render = function render() { var treeColumnsName = this.props.treeColumnsName; var expandKeys = this.getExpandKeys(); var data = this.getExpandData(); var rootTree = data.filter(function (v) { return v && v[treeColumnsName] && v[treeColumnsName].length; }).length === 0; var treeIndent = this.getTreeIndent(); return _react.default.createElement(WrappedComponent, (0, _extends2.default)({}, this.props, { changedByExpand: this.changedByExpand || this.props.changedByExpand, data: data, onTreeExpand: this.handleTreeExpand, treeExpandKeys: expandKeys, treeExpandLevel: this.expandLevel, treeRoot: rootTree, treeIndent: treeIndent })); }; return TreeExpand; }(_react.default.Component), (0, _defineProperty2.default)(_class, "defaultProps", defaultProps), _temp; }; exports.default = _default;