shineout
Version:
Shein 前端组件库
120 lines (95 loc) • 3.79 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 _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 _uid = require("../utils/uid");
var _component = require("../component");
var _tree = require("../utils/tree");
var _default = function _default(Origin) {
var _class, _temp;
return _temp = _class =
/*#__PURE__*/
function (_Component) {
(0, _inheritsLoose2.default)(CascaderFilter, _Component);
function CascaderFilter(props) {
var _this;
_this = _Component.call(this, props) || this;
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "firstMatchNode", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "timer", void 0);
_this.handleFilter = _this.handleFilter.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.state = {
filterText: '',
filter: null
};
return _this;
}
var _proto = CascaderFilter.prototype;
_proto.getData = function getData() {
var _this2 = this;
var _this$props = this.props,
data = _this$props.data,
childrenKey = _this$props.childrenKey,
keygen = _this$props.keygen;
var filter = this.state.filter;
if (!filter) return data;
return (0, _tree.getFilterTree)(data, filter, undefined, function (node) {
return (0, _uid.getKey)(node, keygen);
}, childrenKey, true, function (node) {
if (_this2.firstMatchNode) return;
_this2.firstMatchNode = node;
});
};
_proto.handleFilter = function handleFilter(filterText) {
var _this3 = this;
var _this$props2 = this.props,
filterDelay = _this$props2.filterDelay,
onFilter = _this$props2.onFilter;
if (this.timer) clearTimeout(this.timer);
this.firstMatchNode = null;
if (filterText.length === 0) {
this.setState({
filter: null,
filterText: filterText
});
return;
}
this.timer = setTimeout(function () {
var fn = onFilter(filterText);
if (typeof fn === 'function') {
_this3.setState({
filter: fn,
filterText: filterText
});
}
}, filterDelay);
};
_proto.render = function render() {
var onFilter = this.props.onFilter;
var _this$state = this.state,
filterText = _this$state.filterText,
filter = _this$state.filter;
if (!onFilter) return _react.default.createElement(Origin, (0, _extends2.default)({}, this.props, {
sourceData: this.props.data
}));
var data = this.getData();
return _react.default.createElement(Origin, (0, _extends2.default)({}, this.props, {
data: data,
sourceData: this.props.data,
filterText: filterText,
onFilter: this.handleFilter,
filterDataChange: filter,
firstMatchNode: this.firstMatchNode
}));
};
return CascaderFilter;
}(_component.Component), (0, _defineProperty2.default)(_class, "defaultProps", {
filterDelay: 400,
childrenKey: 'children'
}), _temp;
};
exports.default = _default;