UNPKG

shineout

Version:

Shein 前端组件库

285 lines (233 loc) 9.38 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); 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 _uid = require("../utils/uid"); var _tree = require("../utils/tree"); var _Result = require("./Result"); var _default = function _default(Origin) { var _class, _temp; return _temp = _class = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(Filter, _React$Component); function Filter(props) { var _this; _this = _React$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: '', text: '' }; _this.handleCreate = _this.handleCreate.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleFilter = _this.handleFilter.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); // this.getResultByValues = this.getResultByValues.bind(this) _this.getCachedResult = _this.getCachedResult.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.resultCache = new Map(); return _this; } var _proto = Filter.prototype; _proto.componentDidUpdate = function componentDidUpdate(prevProps) { var _this$props = this.props, datum = _this$props.datum, multiple = _this$props.multiple; if (prevProps.multiple !== multiple) { datum.limit = multiple ? 0 : 1; } }; _proto.getTreeResult = function getTreeResult(value, prediction) { var _this$props2 = this.props, treeData = _this$props2.treeData, _this$props2$children = _this$props2.childrenKey, childrenKey = _this$props2$children === void 0 ? 'children' : _this$props2$children; var finded; var treeNode = function treeNode(children) { if (finded) return false; if (!children || children.length === 0) return false; for (var i = 0; i < children.length; i++) { var d = children[i]; if (prediction(value, d)) finded = d; // @ts-ignore treeNode(d[childrenKey]); } return false; }; treeNode(treeData); return finded; }; _proto.getResult = function getResult(value) { var _this$props3 = this.props, data = _this$props3.data, treeData = _this$props3.treeData, datum = _this$props3.datum, onCreate = _this$props3.onCreate; var prediction = datum.prediction || function (v, d) { return v === datum.format(d); }; if (treeData) return this.getTreeResult(value, prediction); for (var i = 0, count = data.length; i < count; i++) { var d = data[i]; if (prediction(value, d)) return d; } if (onCreate) return this.handleCreate(value); return undefined; }; _proto.getCachedResult = function getCachedResult(value) { var noCache = this.props.noCache; var res = noCache ? undefined : this.resultCache.get(value); if (!res) { var _res; res = this.getResult(value); if (res !== undefined && !noCache) this.resultCache.set(value, res);else if (res === undefined) res = (_res = {}, _res[_Result.IS_NOT_MATCHED_VALUE] = true, _res.value = value, _res); } return res; } // getResultByValues() { // const { datum } = this.props // const { values = [] }: { values: Value[] } = datum // const result: (Item | ResultValue<Value>)[] = [] // values.forEach(v => { // const res = this.getCachedResult(v) // if (res !== undefined) { // result.push(res) // } // }) // // return result // } ; _proto.handleFilter = function handleFilter(text, from) { var _this2 = this; if (from === void 0) { from = 'edit'; } var _this$props4 = this.props, filterDelay = _this$props4.filterDelay, onFilter = _this$props4.onFilter, onCreate = _this$props4.onCreate; this.setState({ text: text }); // not filter if (!text) { this.setState({ filterText: '', innerFilter: undefined, innerData: undefined }); if (this.timer) clearTimeout(this.timer); if (onFilter) onFilter(text, from); return; } if (onCreate) { var innerData = this.handleCreate(text); this.setState({ innerData: innerData }); } 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') { _this2.setState({ innerFilter: fn }); } }, filterDelay); }; _proto.handleCreate = function handleCreate(text) { var onCreate = this.props.onCreate; var createFn = typeof onCreate === 'boolean' ? function (t) { return t; } : onCreate; return createFn(text); }; _proto.filterTreeData = function filterTreeData() { var _this$props5 = this.props, treeData = _this$props5.treeData, expanded = _this$props5.expanded, showHitDescendants = _this$props5.showHitDescendants, onAdvancedFilter = _this$props5.onAdvancedFilter, other = (0, _objectWithoutPropertiesLoose2.default)(_this$props5, ["treeData", "expanded", "showHitDescendants", "onAdvancedFilter"]); var innerFilter = this.state.innerFilter; var filterExpandedKeys = expanded; var newData = treeData; if (innerFilter) { filterExpandedKeys = []; newData = (0, _tree.getFilterTree)(treeData, innerFilter, filterExpandedKeys, function (node) { return (0, _uid.getKey)(node, other.keygen); }, other.childrenKey, showHitDescendants, undefined, { advanced: !!onAdvancedFilter }); } return { treeData: newData, expanded: filterExpandedKeys, rawData: treeData }; }; _proto.filterData = function filterData() { var _this$props6 = this.props, data = _this$props6.data, hideCreateOption = _this$props6.hideCreateOption, other = (0, _objectWithoutPropertiesLoose2.default)(_this$props6, ["data", "hideCreateOption"]); var _this$state = this.state, innerFilter = _this$state.innerFilter, innerData = _this$state.innerData; var newData = data; if (innerFilter) newData = data.filter(function (d) { return innerFilter(d); }); if (innerData && !hideCreateOption) { var newKey = (0, _uid.getKey)(innerData, other.keygen, innerData); if (!newData.find(function (d) { return (0, _uid.getKey)(d, other.keygen, d) === newKey; })) { newData = [innerData].concat(newData); } } return { data: newData }; }; _proto.render = function render() { var _this$props7 = this.props, treeData = _this$props7.treeData, onFilter = _this$props7.onFilter, onCreate = _this$props7.onCreate, other = (0, _objectWithoutPropertiesLoose2.default)(_this$props7, ["treeData", "onFilter", "onCreate"]); var _this$state2 = this.state, filterText = _this$state2.filterText, innerData = _this$state2.innerData, text = _this$state2.text; var filterFn = onFilter || onCreate ? this.handleFilter : undefined; var dataGenerator = treeData ? this.filterTreeData : this.filterData; var props = (0, _objectSpread2.default)({}, other, { filterText: filterText, inputText: text, // result: this.getResultByValues(), getResultByValue: this.getCachedResult, inputable: !!onCreate, onCreate: onCreate ? this.handleCreate : undefined, onFilter: filterFn, innerData: innerData }, dataGenerator.call(this)); return _react.default.createElement(Origin, props); }; return Filter; }(_react.default.Component), (0, _defineProperty2.default)(_class, "defaultProps", { data: [], filterDelay: 300, showHitDescendants: false }), _temp; }; exports.default = _default;