UNPKG

shineout

Version:

Shein 前端组件库

227 lines (183 loc) 7.81 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 _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _AbsoluteList = _interopRequireDefault(require("../AnimationList/AbsoluteList")); var _component = require("../component"); var _tree = require("../utils/tree"); var _styles = require("../Select/styles"); var _styles2 = require("./styles"); var _Spin = _interopRequireDefault(require("../Spin")); var FilterItem = /*#__PURE__*/ function (_Component) { (0, _inheritsLoose2.default)(FilterItem, _Component); function FilterItem(props) { var _this; _this = _Component.call(this, props) || this; _this.handleSelect = _this.handleSelect.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleSelectItem = _this.handleSelectItem.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); return _this; } var _proto = FilterItem.prototype; _proto.checkDisabled = function checkDisabled(data) { var datum = this.props.datum; var key = datum.getKey(data); return datum.isDisabled(key); }; _proto.handleSelectItem = function handleSelectItem(index, e) { var _this$props = this.props, data = _this$props.data, datum = _this$props.datum, onChange = _this$props.onChange, onPathChange = _this$props.onPathChange, onFilter = _this$props.onFilter, filterText = _this$props.filterText, expandTrigger = _this$props.expandTrigger; if (expandTrigger === 'hover-only' && index !== data.length - 1) return; if (e) e.stopPropagation(); var item = this.props.data[index]; if (this.checkDisabled(item)) return; var keys = data.slice(0, index + 1).map(function (i) { return datum.getKey(i); }); onChange(keys); onPathChange(datum.getKey(item), item, keys.slice(0, keys.length - 1), true); if (onFilter && filterText) onFilter(''); }; _proto.handleSelect = function handleSelect() { var data = this.props.data; this.handleSelectItem(data.length - 1); }; _proto.renderItem = function renderItem(item) { var renderItem = this.props.renderItem; var render = renderItem; if (typeof render === 'string') { var copyRender = render; render = function render(n) { return n[copyRender]; }; } return render(item); }; _proto.render = function render() { var _this2 = this; var data = this.props.data; return _react.default.createElement("div", { className: (0, _styles2.cascaderClass)('node'), onClick: this.handleSelect }, data.map(function (item, i) { var content = _react.default.createElement("div", { onClick: _this2.handleSelectItem.bind(_this2, i), key: "content", className: (0, _styles2.cascaderClass)('filter-list-content', _this2.checkDisabled(item) && 'disabled') }, _this2.renderItem(item)); if (i === 0) return content; return [_react.default.createElement("span", { key: "separator", className: (0, _styles2.cascaderClass)('filter-list-separator') }, "/"), content]; })); }; return FilterItem; }(_component.Component); // eslint-disable-next-line react/no-multi-comp (0, _defineProperty2.default)(FilterItem, "propTypes", { renderItem: _propTypes.default.func.isRequired, data: _propTypes.default.array, datum: _propTypes.default.any, onChange: _propTypes.default.func, onPathChange: _propTypes.default.func, filterText: _propTypes.default.string, onFilter: _propTypes.default.func, expandTrigger: _propTypes.default.string }); var FilterList = /*#__PURE__*/ function (_Component2) { (0, _inheritsLoose2.default)(FilterList, _Component2); function FilterList() { return _Component2.apply(this, arguments) || this; } var _proto2 = FilterList.prototype; _proto2.getKey = function getKey(path) { var datum = this.props.datum; return path.map(function (d) { return datum.getKey(d); }).join('-'); }; _proto2.renderList = function renderList() { var _this3 = this; var _this$props2 = this.props, data = _this$props2.data, childrenKey = _this$props2.childrenKey, height = _this$props2.height, loading = _this$props2.loading, others = (0, _objectWithoutPropertiesLoose2.default)(_this$props2, ["data", "childrenKey", "height", "loading"]); var list = (0, _tree.getFlattenTree)(data, childrenKey); return _react.default.createElement("div", { className: (0, _styles2.cascaderClass)('filter-list'), style: { maxHeight: height } }, loading ? _react.default.createElement("div", { className: (0, _styles2.cascaderClass)('list-loading') }, typeof loading === 'boolean' ? _react.default.createElement(_Spin.default, { size: 20 }) : loading) : list.map(function (path) { return _react.default.createElement(FilterItem, (0, _extends2.default)({ key: _this3.getKey(path) }, others, { data: path })); })); }; _proto2.render = function render() { var _this$props3 = this.props, focus = _this$props3.focus, getRef = _this$props3.getRef, fixed = _this$props3.fixed, data = _this$props3.data, childrenKey = _this$props3.childrenKey, renderItem = _this$props3.renderItem, datum = _this$props3.datum, expandTrigger = _this$props3.expandTrigger, onChange = _this$props3.onChange, onPathChange = _this$props3.onPathChange, filterText = _this$props3.filterText, onFilter = _this$props3.onFilter, height = _this$props3.height, others = (0, _objectWithoutPropertiesLoose2.default)(_this$props3, ["focus", "getRef", "fixed", "data", "childrenKey", "renderItem", "datum", "expandTrigger", "onChange", "onPathChange", "filterText", "onFilter", "height"]); if (!focus) return null; return _react.default.createElement("div", (0, _extends2.default)({}, others, { ref: getRef, className: (0, _classnames.default)((0, _styles.selectClass)('options'), (0, _styles2.cascaderClass)('filter', expandTrigger === 'hover-only' && 'leaf-only')) }), this.renderList()); }; return FilterList; }(_component.Component); (0, _defineProperty2.default)(FilterList, "propTypes", { data: _propTypes.default.array, focus: _propTypes.default.bool, getRef: _propTypes.default.func, fixed: _propTypes.default.any, childrenKey: _propTypes.default.string, renderItem: _propTypes.default.any, expandTrigger: _propTypes.default.string, datum: _propTypes.default.any, onChange: _propTypes.default.func, onPathChange: _propTypes.default.func, filterText: _propTypes.default.string, onFilter: _propTypes.default.func, height: _propTypes.default.number, loading: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.node]) }); var _default = (0, _AbsoluteList.default)(FilterList); exports.default = _default;