shineout
Version:
Shein 前端组件库
172 lines (137 loc) • 5.61 kB
JavaScript
"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 _component = require("../component");
var _tree = require("../utils/tree");
var _is = require("../utils/is");
var DefaultValue = {
data: [],
filterDelay: 300,
showHitDescendants: false
};
var _default = function _default(Origin) {
var _class, _temp;
return _temp = _class =
/*#__PURE__*/
function (_Component) {
(0, _inheritsLoose2.default)(Filter, _Component);
function Filter(props) {
var _this;
_this = _Component.call(this, props) || this;
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "resultCache", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "timer", void 0);
_this.state = {
innerFilter: undefined,
innerData: undefined,
filterText: ''
};
_this.handleFilter = _this.handleFilter.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.getResultByValues = _this.getResultByValues.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.resultCache = new Map();
return _this;
}
var _proto = Filter.prototype;
_proto.getResultByValues = function getResultByValues() {
var _this2 = this;
var _this$props = this.props,
datum = _this$props.datum,
noCache = _this$props.noCache,
renderUnmatched = _this$props.renderUnmatched;
var value = datum.getValue() || [];
var vr = (0, _is.isArray)(this.props.value) ? this.props.value : [this.props.value];
if (renderUnmatched) {
var emptyArr = [];
value = value.concat(emptyArr.concat(vr).filter(function (v) {
return v && value.indexOf(v) === -1;
}));
}
var result = [];
value.forEach(function (v) {
var res = noCache ? undefined : _this2.resultCache.get(v);
if (!res) {
res = datum.getDataById(v);
if (res && !noCache && !datum.isUnMatch(res)) _this2.resultCache.set(v, res);
}
if (res) {
result.push(res);
}
});
return result;
};
_proto.handleFilter = function handleFilter(text, from) {
var _this3 = this;
if (from === void 0) {
from = 'edit';
}
var _this$props2 = this.props,
filterDelay = _this$props2.filterDelay,
onFilter = _this$props2.onFilter; // not filter
if (!text) {
this.setState({
filterText: '',
innerFilter: undefined,
innerData: undefined
});
if (this.timer) clearTimeout(this.timer);
if (onFilter) onFilter(text, from);
return;
}
if (!onFilter) return;
this.setState({
filterText: text
});
if (this.timer) clearTimeout(this.timer);
this.timer = setTimeout(function () {
var fn = onFilter(text, from);
if (typeof fn === 'function') {
_this3.setState({
innerFilter: fn
});
}
}, filterDelay);
};
_proto.render = function render() {
var _this4 = this;
var _this$props3 = this.props,
_this$props3$data = _this$props3.data,
data = _this$props3$data === void 0 ? DefaultValue.data : _this$props3$data,
onFilter = _this$props3.onFilter,
expanded = _this$props3.expanded,
_this$props3$showHitD = _this$props3.showHitDescendants,
showHitDescendants = _this$props3$showHitD === void 0 ? DefaultValue.showHitDescendants : _this$props3$showHitD,
other = (0, _objectWithoutPropertiesLoose2.default)(_this$props3, ["data", "onFilter", "expanded", "showHitDescendants"]);
var _this$state = this.state,
innerFilter = _this$state.innerFilter,
filterText = _this$state.filterText;
var filterFn = onFilter ? this.handleFilter : undefined;
var newData = data;
var newExpanded = expanded;
if (innerFilter) {
var filterExpandedKeys = [];
newData = (0, _tree.getFilterTree)(data, innerFilter, filterExpandedKeys, function (node) {
return _this4.props.datum.getKey(node);
}, other.childrenKey, showHitDescendants, undefined, {
advanced: other.onAdvancedFilter
});
newExpanded = filterExpandedKeys;
}
return _react.default.createElement(Origin, (0, _extends2.default)({}, other, {
filterText: filterText,
result: this.getResultByValues(),
data: newData,
rawData: data,
onFilter: filterFn,
expanded: newExpanded
}));
};
return Filter;
}(_component.Component), (0, _defineProperty2.default)(_class, "defaultProps", DefaultValue), _temp;
};
exports.default = _default;