UNPKG

@aliretail/react-materials-components

Version:
190 lines (153 loc) 7.36 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 _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _tree = _interopRequireDefault(require("@alifd/next/lib/tree")); var React = _interopRequireWildcard(require("react")); var PropTypes = _interopRequireWildcard(require("prop-types")); var _ramda = require("ramda"); var _properties = require("./utils/properties"); var _interface = require("./interface"); var _dataAdapter = require("./data-adapter"); var _excluded = ["readOnly", "checkable", "value", "dataSource"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var TreeNode = _tree["default"].Node; var PREFIX = 'aliretail-tree-field'; var TreeField = /*#__PURE__*/function (_React$Component) { (0, _inheritsLoose2["default"])(TreeField, _React$Component); // 即便 ts 声明了 TreeFieldProps,这里还是要提供 propsTypes,用于 react 报错提示 TreeField.getDerivedStateFromProps = function getDerivedStateFromProps(props) { if ('value' in props) { return { treeValue: props.value || [] }; } return null; }; function TreeField(props) { var _this; _this = _React$Component.call(this, props) || this; _this.renderTreeNode = function (data) { var _this$props = _this.props, useRange = _this$props.useRange, checkable = _this$props.checkable, readOnly = _this$props.readOnly, addTagText = _this$props.addTagText, deleteTagText = _this$props.deleteTagText, keyCode = _this$props.keyCode, labelCode = _this$props.labelCode, changeStatusCode = _this$props.changeStatusCode, checkboxDisabled = _this$props.checkboxDisabled, _this$props$defaultVa = _this$props.defaultValue, defaultValue = _this$props$defaultVa === void 0 ? [] : _this$props$defaultVa, dataSource = _this$props.dataSource; var treeValue = _this.state.treeValue; var relationMap = (0, _dataAdapter.genRelationMap)(dataSource); var diffList = (0, _dataAdapter.getValueDiff)(defaultValue, treeValue); var labelStatus = 0; return data && data.map(function (item) { var isDisabled = 'disabled' in item ? item.disabled : checkboxDisabled; var label = /*#__PURE__*/React.createElement("span", null, item[labelCode]); var addLabel = /*#__PURE__*/React.createElement("div", null, item[labelCode], /*#__PURE__*/React.createElement("span", { className: PREFIX + "-add-item" }, addTagText)); var deleteLabel = /*#__PURE__*/React.createElement("div", null, item[labelCode], /*#__PURE__*/React.createElement("span", { className: PREFIX + "-delete-item" }, deleteTagText)); switch (useRange) { case 'needFrag': // 只读状态下根据数据中changeStatus展示状态标识 if (readOnly) { labelStatus = item[changeStatusCode]; } else if (checkable) { labelStatus = (0, _dataAdapter.calculateStatus)(diffList, item[keyCode], relationMap); } switch (labelStatus) { case _interface.TreeNodeStatus.add: label = addLabel; break; case _interface.TreeNodeStatus["delete"]: label = deleteLabel; break; default: break; } break; default: break; } return /*#__PURE__*/React.createElement(TreeNode, { key: item[keyCode], label: label, checkboxDisabled: isDisabled }, item.children && _this.renderTreeNode(item.children)); }); }; _this.onCheck = function (checkedKeys, extra) { var changeFirstParamType = _this.props.changeFirstParamType; var checkedNodes = extra.checkedNodes; _this.setState({ treeValue: checkedKeys }); if (_this.props.onChange) { changeFirstParamType === 'keys' ? _this.props.onChange(checkedKeys, extra) : _this.props.onChange(checkedNodes, extra); } }; _this.state = { treeValue: props.value || props.defaultValue || [] }; return _this; } var _proto = TreeField.prototype; _proto.render = function render() { var _this$props2 = this.props, readOnly = _this$props2.readOnly, checkable = _this$props2.checkable, value = _this$props2.value, dataSource = _this$props2.dataSource, rest = (0, _objectWithoutPropertiesLoose2["default"])(_this$props2, _excluded); var _this$state$treeValue = this.state.treeValue, treeValue = _this$state$treeValue === void 0 ? [] : _this$state$treeValue; var treeProps = (0, _ramda.pick)(_properties.NextTreePropsKey, rest); return /*#__PURE__*/React.createElement(_tree["default"], (0, _extends2["default"])({}, treeProps, { checkable: readOnly ? false : checkable, onCheck: this.onCheck, checkedKeys: treeValue }), this.renderTreeNode(dataSource)); }; return TreeField; }(React.Component); TreeField.propTypes = { useRange: PropTypes.string, addTagText: PropTypes.string, deleteTagText: PropTypes.string, readOnly: PropTypes.bool, checkboxDisabled: PropTypes.bool, checkable: PropTypes.bool, value: PropTypes.array, dataSource: PropTypes.array, keyCode: PropTypes.any, labelCode: PropTypes.any, changeStatusCode: PropTypes.any, changeFirstParamType: PropTypes.string, defaultValue: PropTypes.array }; TreeField.defaultProps = { useRange: 'normal', addTagText: '新增', deleteTagText: '删除', readOnly: false, checkable: false, checkboxDisabled: false, dataSource: [], keyCode: 'key', labelCode: 'label', changeStatusCode: 'changeStatus', changeFirstParamType: 'keys' }; var _default = TreeField; exports["default"] = _default;