UNPKG

@elastic/react-search-ui

Version:

A React library for building search experiences

195 lines (164 loc) 18.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.FacetContainer = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = require("react"); var _reactSearchUiViews = require("@elastic/react-search-ui-views"); var _types = require("../types"); var _helpers = require("../helpers"); var _ = require(".."); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { keys.push.apply(keys, Object.getOwnPropertySymbols(object)); } if (enumerableOnly) keys = keys.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function findFacetValueInFilters(name, filters, filterType) { var filter = filters.find(function (f) { return f.field === name && f.type === filterType; }); if (!filter) return; return filter.values; } var FacetContainer = /*#__PURE__*/ function (_Component) { (0, _inherits2.default)(FacetContainer, _Component); function FacetContainer(_ref) { var _this; var _ref$show = _ref.show, show = _ref$show === void 0 ? 5 : _ref$show; (0, _classCallCheck2.default)(this, FacetContainer); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(FacetContainer).call(this)); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleClickMore", function (totalOptions) { _this.setState(function (_ref2) { var more = _ref2.more; var visibleOptionsCount = more + 10; var showingAll = visibleOptionsCount >= totalOptions; if (showingAll) visibleOptionsCount = totalOptions; _this.props.a11yNotify("moreFilters", { visibleOptionsCount: visibleOptionsCount, showingAll: showingAll }); return { more: visibleOptionsCount }; }); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleFacetSearch", function (searchTerm) { _this.setState({ searchTerm: searchTerm }); }); _this.state = { more: show, searchTerm: "" }; return _this; } (0, _createClass2.default)(FacetContainer, [{ key: "render", value: function render() { var _this2 = this; var _this$state = this.state, more = _this$state.more, searchTerm = _this$state.searchTerm; var _this$props = this.props, addFilter = _this$props.addFilter, className = _this$props.className, facets = _this$props.facets, field = _this$props.field, filterType = _this$props.filterType, filters = _this$props.filters, label = _this$props.label, removeFilter = _this$props.removeFilter, setFilter = _this$props.setFilter, view = _this$props.view, isFilterable = _this$props.isFilterable, a11yNotify = _this$props.a11yNotify, rest = (0, _objectWithoutProperties2.default)(_this$props, ["addFilter", "className", "facets", "field", "filterType", "filters", "label", "removeFilter", "setFilter", "view", "isFilterable", "a11yNotify"]); var facetValues = facets[field]; if (!facetValues) return null; var options = facetValues[0].data; var selectedValues = findFacetValueInFilters(field, filters, filterType) || []; if (!options.length && !selectedValues.length) return null; if (searchTerm.trim()) { options = options.filter(function (option) { return (0, _helpers.accentFold)(option.value).toLowerCase().includes((0, _helpers.accentFold)(searchTerm).toLowerCase()); }); } var View = view || _reactSearchUiViews.MultiCheckboxFacet; return View(_objectSpread({ className: className, label: label, onMoreClick: this.handleClickMore.bind(this, options.length), onRemove: function onRemove(value) { removeFilter(field, value, filterType); }, onChange: function onChange(value) { setFilter(field, value, filterType); }, onSelect: function onSelect(value) { addFilter(field, value, filterType); }, options: options.slice(0, more), showMore: options.length > more, values: selectedValues, showSearch: isFilterable, onSearch: function onSearch(value) { _this2.handleFacetSearch(value); }, searchPlaceholder: "Filter ".concat(field) }, rest)); } }]); return FacetContainer; }(_react.Component); exports.FacetContainer = FacetContainer; (0, _defineProperty2.default)(FacetContainer, "propTypes", { // Props className: _propTypes.default.string, field: _propTypes.default.string.isRequired, label: _propTypes.default.string.isRequired, filterType: _types.FilterType, show: _propTypes.default.number, view: _propTypes.default.func, isFilterable: _propTypes.default.bool, // State filters: _propTypes.default.arrayOf(_types.Filter).isRequired, facets: _propTypes.default.objectOf(_propTypes.default.arrayOf(_types.Facet)).isRequired, // Actions addFilter: _propTypes.default.func.isRequired, removeFilter: _propTypes.default.func.isRequired, setFilter: _propTypes.default.func.isRequired, a11yNotify: _propTypes.default.func.isRequired }); (0, _defineProperty2.default)(FacetContainer, "defaultProps", { filterType: "all", isFilterable: false }); var _default = (0, _.withSearch)(function (_ref3) { var filters = _ref3.filters, facets = _ref3.facets, addFilter = _ref3.addFilter, removeFilter = _ref3.removeFilter, setFilter = _ref3.setFilter, a11yNotify = _ref3.a11yNotify; return { filters: filters, facets: facets, addFilter: addFilter, removeFilter: removeFilter, setFilter: setFilter, a11yNotify: a11yNotify }; })(FacetContainer); exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250YWluZXJzL0ZhY2V0LmpzIl0sIm5hbWVzIjpbImZpbmRGYWNldFZhbHVlSW5GaWx0ZXJzIiwibmFtZSIsImZpbHRlcnMiLCJmaWx0ZXJUeXBlIiwiZmlsdGVyIiwiZmluZCIsImYiLCJmaWVsZCIsInR5cGUiLCJ2YWx1ZXMiLCJGYWNldENvbnRhaW5lciIsInNob3ciLCJ0b3RhbE9wdGlvbnMiLCJzZXRTdGF0ZSIsIm1vcmUiLCJ2aXNpYmxlT3B0aW9uc0NvdW50Iiwic2hvd2luZ0FsbCIsInByb3BzIiwiYTExeU5vdGlmeSIsInNlYXJjaFRlcm0iLCJzdGF0ZSIsImFkZEZpbHRlciIsImNsYXNzTmFtZSIsImZhY2V0cyIsImxhYmVsIiwicmVtb3ZlRmlsdGVyIiwic2V0RmlsdGVyIiwidmlldyIsImlzRmlsdGVyYWJsZSIsInJlc3QiLCJmYWNldFZhbHVlcyIsIm9wdGlvbnMiLCJkYXRhIiwic2VsZWN0ZWRWYWx1ZXMiLCJsZW5ndGgiLCJ0cmltIiwib3B0aW9uIiwidmFsdWUiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiVmlldyIsIk11bHRpQ2hlY2tib3hGYWNldCIsIm9uTW9yZUNsaWNrIiwiaGFuZGxlQ2xpY2tNb3JlIiwiYmluZCIsIm9uUmVtb3ZlIiwib25DaGFuZ2UiLCJvblNlbGVjdCIsInNsaWNlIiwic2hvd01vcmUiLCJzaG93U2VhcmNoIiwib25TZWFyY2giLCJoYW5kbGVGYWNldFNlYXJjaCIsInNlYXJjaFBsYWNlaG9sZGVyIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsIkZpbHRlclR5cGUiLCJudW1iZXIiLCJmdW5jIiwiYm9vbCIsImFycmF5T2YiLCJGaWx0ZXIiLCJvYmplY3RPZiIsIkZhY2V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7Ozs7OztBQUVBLFNBQVNBLHVCQUFU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TUFBb0JGLFNBQXBCLFNBQW9CQSxTQUFwQjtBQUFBLE1BQStCSSxZQUEvQixTQUErQkEsWUFBL0I7QUFBQSxNQUE2Q0MsU0FBN0MsU0FBNkNBLFNBQTdDO0FBQUEsTUFBd0RSLFVBQXhELFNBQXdEQSxVQUF4RDtBQUFBLFNBQTBFO0FBQ3hFaEIsSUFBQUEsT0FBTyxFQUFQQSxPQUR3RTtBQUV4RXFCLElBQUFBLE1BQU0sRUFBTkEsTUFGd0U7QUFHeEVGLElBQUFBLFNBQVMsRUFBVEEsU0FId0U7QUFJeEVJLElBQUFBLFlBQVksRUFBWkEsWUFKd0U7QUFLeEVDLElBQUFBLFNBQVMsRUFBVEEsU0FMd0U7QUFNeEVSLElBQUFBLFVBQVUsRUFBVkE7QUFOd0UsR0FBMUU7QUFBQSxDQURhLEVBU2JSLGNBVGEsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTXVsdGlDaGVja2JveEZhY2V0IH0gZnJvbSBcIkBlbGFzdGljL3JlYWN0LXNlYXJjaC11aS12aWV3c1wiO1xuXG5pbXBvcnQgeyBGYWNldCwgRmlsdGVyLCBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBhY2NlbnRGb2xkIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcblxuaW1wb3J0IHsgd2l0aFNlYXJjaCB9IGZyb20gXCIuLlwiO1xuXG5mdW5jdGlvbiBmaW5kRmFjZXRWYWx1ZUluRmlsdGVycyhuYW1lLCBmaWx0ZXJzLCBmaWx0ZXJUeXBlKSB7XG4gIGNvbnN0IGZpbHRlciA9IGZpbHRlcnMuZmluZChmID0+IGYuZmllbGQgPT09IG5hbWUgJiYgZi50eXBlID09PSBmaWx0ZXJUeXBlKTtcbiAgaWYgKCFmaWx0ZXIpIHJldHVybjtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZXM7XG59XG5cbmV4cG9ydCBjbGFzcyBGYWNldENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLy8gUHJvcHNcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGZpbHRlclR5cGU6IEZpbHRlclR5cGUsXG4gICAgc2hvdzogUHJvcFR5cGVzLm51bWJlcixcbiAgICB2aWV3OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc0ZpbHRlcmFibGU6IFByb3BUeXBlcy5ib29sLFxuICAgIC8vIFN0YXRlXG4gICAgZmlsdGVyczogUHJvcFR5cGVzLmFycmF5T2YoRmlsdGVyKS5pc1JlcXVpcmVkLFxuICAgIGZhY2V0czogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5hcnJheU9mKEZhY2V0KSkuaXNSZXF1aXJlZCxcbiAgICAvLyBBY3Rpb25zXG4gICAgYWRkRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlbW92ZUZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBzZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgYTExeU5vdGlmeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZmlsdGVyVHlwZTogXCJhbGxcIixcbiAgICBpc0ZpbHRlcmFibGU6IGZhbHNlXG4gIH07XG5cbiAgY29uc3RydWN0b3IoeyBzaG93ID0gNSB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbW9yZTogc2hvdyxcbiAgICAgIHNlYXJjaFRlcm06IFwiXCJcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlQ2xpY2tNb3JlID0gdG90YWxPcHRpb25zID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKCh7IG1vcmUgfSkgPT4ge1xuICAgICAgbGV0IHZpc2libGVPcHRpb25zQ291bnQgPSBtb3JlICsgMTA7XG4gICAgICBjb25zdCBzaG93aW5nQWxsID0gdmlzaWJsZU9wdGlvbnNDb3VudCA+PSB0b3RhbE9wdGlvbnM7XG4gICAgICBpZiAoc2hvd2luZ0FsbCkgdmlzaWJsZU9wdGlvbnNDb3VudCA9IHRvdGFsT3B0aW9ucztcblxuICAgICAgdGhpcy5wcm9wcy5hMTF5Tm90aWZ5KFwibW9yZUZpbHRlcnNcIiwgeyB2aXNpYmxlT3B0aW9uc0NvdW50LCBzaG93aW5nQWxsIH0pO1xuXG4gICAgICByZXR1cm4geyBtb3JlOiB2aXNpYmxlT3B0aW9uc0NvdW50IH07XG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlRmFjZXRTZWFyY2ggPSBzZWFyY2hUZXJtID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoVGVybSB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBtb3JlLCBzZWFyY2hUZXJtIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHtcbiAgICAgIGFkZEZpbHRlcixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGZhY2V0cyxcbiAgICAgIGZpZWxkLFxuICAgICAgZmlsdGVyVHlwZSxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBsYWJlbCxcbiAgICAgIHJlbW92ZUZpbHRlcixcbiAgICAgIHNldEZpbHRlcixcbiAgICAgIHZpZXcsXG4gICAgICBpc0ZpbHRlcmFibGUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIGExMXlOb3RpZnksXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZmFjZXRWYWx1ZXMgPSBmYWNldHNbZmllbGRdO1xuXG4gICAgaWYgKCFmYWNldFZhbHVlcykgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgb3B0aW9ucyA9IGZhY2V0VmFsdWVzWzBdLmRhdGE7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPVxuICAgICAgZmluZEZhY2V0VmFsdWVJbkZpbHRlcnMoZmllbGQsIGZpbHRlcnMsIGZpbHRlclR5cGUpIHx8IFtdO1xuXG4gICAgaWYgKCFvcHRpb25zLmxlbmd0aCAmJiAhc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChzZWFyY2hUZXJtLnRyaW0oKSkge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PlxuICAgICAgICBhY2NlbnRGb2xkKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5pbmNsdWRlcyhhY2NlbnRGb2xkKHNlYXJjaFRlcm0pLnRvTG93ZXJDYXNlKCkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IFZpZXcgPSB2aWV3IHx8IE11bHRpQ2hlY2tib3hGYWNldDtcblxuICAgIHJldHVybiBWaWV3KHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgIG9uTW9yZUNsaWNrOiB0aGlzLmhhbmRsZUNsaWNrTW9yZS5iaW5kKHRoaXMsIG9wdGlvbnMubGVuZ3RoKSxcbiAgICAgIG9uUmVtb3ZlOiB2YWx1ZSA9PiB7XG4gICAgICAgIHJlbW92ZUZpbHRlcihmaWVsZCwgdmFsdWUsIGZpbHRlclR5cGUpO1xuICAgICAgfSxcbiAgICAgIG9uQ2hhbmdlOiB2YWx1ZSA9PiB7XG4gICAgICAgIHNldEZpbHRlcihmaWVsZCwgdmFsdWUsIGZpbHRlclR5cGUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VsZWN0OiB2YWx1ZSA9PiB7XG4gICAgICAgIGFkZEZpbHRlcihmaWVsZCwgdmFsdWUsIGZpbHRlclR5cGUpO1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMuc2xpY2UoMCwgbW9yZSksXG4gICAgICBzaG93TW9yZTogb3B0aW9ucy5sZW5ndGggPiBtb3JlLFxuICAgICAgdmFsdWVzOiBzZWxlY3RlZFZhbHVlcyxcbiAgICAgIHNob3dTZWFyY2g6IGlzRmlsdGVyYWJsZSxcbiAgICAgIG9uU2VhcmNoOiB2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFjZXRTZWFyY2godmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiBgRmlsdGVyICR7ZmllbGR9YCxcbiAgICAgIC4uLnJlc3RcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2VhcmNoKFxuICAoeyBmaWx0ZXJzLCBmYWNldHMsIGFkZEZpbHRlciwgcmVtb3ZlRmlsdGVyLCBzZXRGaWx0ZXIsIGExMXlOb3RpZnkgfSkgPT4gKHtcbiAgICBmaWx0ZXJzLFxuICAgIGZhY2V0cyxcbiAgICBhZGRGaWx0ZXIsXG4gICAgcmVtb3ZlRmlsdGVyLFxuICAgIHNldEZpbHRlcixcbiAgICBhMTF5Tm90aWZ5XG4gIH0pXG4pKEZhY2V0Q29udGFpbmVyKTtcbiJdfQ==