UNPKG

react-widgets

Version:

An à la carte set of polished, extensible, and accessible inputs built for React

76 lines (52 loc) 2.23 kB
'use strict'; var babelHelpers = require('../util/babelHelpers.js'); var _react = require('react'); var _react2 = babelHelpers.interopRequireDefault(_react); var _utilFilter = require('../util/filter'); var _utilFilter2 = babelHelpers.interopRequireDefault(_utilFilter); var _utilPropTypes = require('../util/propTypes'); var _utilPropTypes2 = babelHelpers.interopRequireDefault(_utilPropTypes); var _utilDataHelpers = require('../util/dataHelpers'); var dflt = function dflt(f) { return f === true ? 'startsWith' : f ? f : 'eq'; }; module.exports = { propTypes: { data: _react2['default'].PropTypes.array, value: _react2['default'].PropTypes.any, filter: _utilPropTypes2['default'].filter, caseSensitive: _react2['default'].PropTypes.bool, minLength: _react2['default'].PropTypes.number }, getDefaultProps: function getDefaultProps() { return { caseSensitive: false, minLength: 1 }; }, filterIndexOf: function filterIndexOf(items, searchTerm) { var idx = -1, matches = typeof this.props.filter === 'function' ? this.props.filter : getFilter(_utilFilter2['default'][dflt(this.props.filter)], searchTerm, this); if (!searchTerm || !searchTerm.trim() || this.props.filter && searchTerm.length < (this.props.minLength || 1)) return -1; items.every(function (item, i) { if (matches(item, searchTerm, i)) return (idx = i, false); return true; }); return idx; }, filter: function filter(items, searchTerm) { var matches = typeof this.props.filter === 'string' ? getFilter(_utilFilter2['default'][this.props.filter], searchTerm, this) : this.props.filter; if (!matches || !searchTerm || !searchTerm.trim() || searchTerm.length < (this.props.minLength || 1)) return items; return items.filter(function (item, idx) { return matches(item, searchTerm, idx); }); } }; function getFilter(matcher, searchTerm, ctx) { searchTerm = !ctx.props.caseSensitive ? searchTerm.toLowerCase() : searchTerm; return function (item) { var val = _utilDataHelpers.dataText(item, ctx.props.textField); if (!ctx.props.caseSensitive) val = val.toLowerCase(); return matcher(val, searchTerm); }; }