shineout
Version:
Shein 前端组件库
173 lines (137 loc) • 6.36 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.advancedFilterHOC = exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
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 _Tree = _interopRequireDefault(require("../Datum/Tree"));
var _func = require("../utils/func");
var _tree = require("../utils/tree");
var _styles = require("../Tree/styles");
var _styles2 = require("./styles");
var _component = require("../component");
var DefaultProps = {
childrenKey: 'children'
};
var _default = (0, _func.curry)(function (options, Origin) {
var _options$dataKey = options.dataKey,
dataKey = _options$dataKey === void 0 ? 'data' : _options$dataKey;
var Tiled =
/*#__PURE__*/
function (_Component) {
(0, _inheritsLoose2.default)(Tiled, _Component);
function Tiled(props) {
var _this;
_this = _Component.call(this, props) || this;
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "rawDatum", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "filteredDatum", void 0);
_this.state = {
tileds: []
};
_this.getIcon = _this.getIcon.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.handleFilter = _this.handleFilter.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
if (props.onAdvancedFilter) _this.genRawDatum();
return _this;
}
var _proto = Tiled.prototype;
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
if (prevProps.rawData !== this.props.rawData && this.props.onAdvancedFilter) {
if (this.rawDatum) this.rawDatum.setData(this.props.rawData);else this.genRawDatum();
this.forceUpdate();
}
};
_proto.getFilteredDatum = function getFilteredDatum() {
var _this$props = this.props,
keygen = _this$props.keygen,
childrenKey = _this$props.childrenKey;
var data = this.props[dataKey];
if (this.filteredDatum && this.filteredDatum.data === data) return this.filteredDatum;
this.filteredDatum = new _Tree.default({
data: data,
keygen: keygen,
childrenKey: childrenKey || DefaultProps.childrenKey
});
return this.filteredDatum;
};
_proto.getIcon = function getIcon(data) {
var _this$props2 = this.props,
childrenKey = _this$props2.childrenKey,
_this$props2$expanded = _this$props2.expanded,
expanded = _this$props2$expanded === void 0 ? [] : _this$props2$expanded;
var originIcon = _react.default.createElement("span", {
className: (0, _styles.treeClass)('default-icon')
});
var key = this.rawDatum.getKey(data);
var rawData = this.rawDatum.getDataById(key);
if (!data || !rawData) return originIcon;
var sameCount = data[childrenKey] && rawData[childrenKey] && data[childrenKey].length === rawData[childrenKey].length;
if (expanded.indexOf(key) === -1) return originIcon;
return _react.default.createElement("span", {
className: (0, _styles2.treeSelectClass)('match', sameCount && 'full'),
onClick: this.handleToggle.bind(this, key)
}, _react.default.createElement("span", null));
};
_proto.handleFilter = function handleFilter(text, from) {
var onFilter = this.props.onFilter;
if (!text) this.setState({
tileds: []
});
if (onFilter) onFilter(text, from);
};
_proto.handleToggle = function handleToggle(key, e) {
e.stopPropagation();
this.setState((0, _immer.default)(function (draft) {
var index = draft.tileds.indexOf(key);
if (index >= 0) draft.tileds.splice(index, 1);else draft.tileds.push(key);
}));
};
_proto.genRawDatum = function genRawDatum() {
var _this$props3 = this.props,
rawData = _this$props3.rawData,
_this$props3$children = _this$props3.childrenKey,
childrenKey = _this$props3$children === void 0 ? DefaultProps.childrenKey : _this$props3$children,
keygen = _this$props3.keygen;
this.rawDatum = new _Tree.default({
data: rawData,
childrenKey: childrenKey,
keygen: keygen
});
};
_proto.render = function render() {
var _objectSpread2;
var _this$props4 = this.props,
filterText = _this$props4.filterText,
onAdvancedFilter = _this$props4.onAdvancedFilter;
var tileds = this.state.tileds;
if (!filterText || !onAdvancedFilter) return _react.default.createElement(Origin, this.props);
var expandIcons = [this.getIcon, this.getIcon];
var filterDatum = this.getFilteredDatum();
var data = (0, _tree.mergeFilteredTree)(filterDatum, this.rawDatum, tileds);
var props = (0, _objectSpread3.default)({}, this.props, (_objectSpread2 = {
onFilter: this.handleFilter,
expandIcons: expandIcons
}, _objectSpread2[dataKey] = data, _objectSpread2));
return _react.default.createElement(Origin, props);
};
return Tiled;
}(_component.Component);
(0, _defineProperty2.default)(Tiled, "defaultProps", DefaultProps);
return Tiled;
});
exports.default = _default;
var advancedFilterHOC = function advancedFilterHOC(Origin) {
return function (props) {
var onAdvancedFilter = props.onAdvancedFilter,
onFilter = props.onFilter;
return _react.default.createElement(Origin, (0, _extends2.default)({}, props, {
onFilter: onAdvancedFilter || onFilter,
onAdvancedFilter: !!onAdvancedFilter
}));
};
};
exports.advancedFilterHOC = advancedFilterHOC;