UNPKG

shineout

Version:

Shein 前端组件库

106 lines (90 loc) 3.25 kB
import _extends from "@babel/runtime/helpers/extends"; import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose"; import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; import React from 'react'; import { getKey } from '../utils/uid'; import { Component } from '../component'; import { getFilterTree } from '../utils/tree'; export default (function (Origin) { var _class, _temp; return _temp = _class = /*#__PURE__*/ function (_Component) { _inheritsLoose(CascaderFilter, _Component); function CascaderFilter(props) { var _this; _this = _Component.call(this, props) || this; _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "firstMatchNode", void 0); _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "timer", void 0); _this.handleFilter = _this.handleFilter.bind(_assertThisInitialized(_assertThisInitialized(_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 getFilterTree(data, filter, undefined, function (node) { return 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.createElement(Origin, _extends({}, this.props, { sourceData: this.props.data })); var data = this.getData(); return React.createElement(Origin, _extends({}, this.props, { data: data, sourceData: this.props.data, filterText: filterText, onFilter: this.handleFilter, filterDataChange: filter, firstMatchNode: this.firstMatchNode })); }; return CascaderFilter; }(Component), _defineProperty(_class, "defaultProps", { filterDelay: 400, childrenKey: 'children' }), _temp; });