UNPKG

@elastic/react-search-ui

Version:

A React library for building search experiences

180 lines (156 loc) 18.4 kB
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; import _createClass from "@babel/runtime/helpers/createClass"; import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf"; import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized"; import _inherits from "@babel/runtime/helpers/inherits"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; 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) { _defineProperty(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; } import PropTypes from "prop-types"; import { Component } from "react"; import { MultiCheckboxFacet } from "@elastic/react-search-ui-views"; import { Facet, Filter, FilterType } from "../types"; import { accentFold } from "../helpers"; import { withSearch } from ".."; function findFacetValueInFilters(name, filters, filterType) { var filter = filters.find(function (f) { return f.field === name && f.type === filterType; }); if (!filter) return; return filter.values; } export var FacetContainer = /*#__PURE__*/ function (_Component) { _inherits(FacetContainer, _Component); function FacetContainer(_ref) { var _this; var _ref$show = _ref.show, show = _ref$show === void 0 ? 5 : _ref$show; _classCallCheck(this, FacetContainer); _this = _possibleConstructorReturn(this, _getPrototypeOf(FacetContainer).call(this)); _defineProperty(_assertThisInitialized(_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 }; }); }); _defineProperty(_assertThisInitialized(_this), "handleFacetSearch", function (searchTerm) { _this.setState({ searchTerm: searchTerm }); }); _this.state = { more: show, searchTerm: "" }; return _this; } _createClass(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 = _objectWithoutProperties(_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 accentFold(option.value).toLowerCase().includes(accentFold(searchTerm).toLowerCase()); }); } var View = view || 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; }(Component); _defineProperty(FacetContainer, "propTypes", { // Props className: PropTypes.string, field: PropTypes.string.isRequired, label: PropTypes.string.isRequired, filterType: FilterType, show: PropTypes.number, view: PropTypes.func, isFilterable: PropTypes.bool, // State filters: PropTypes.arrayOf(Filter).isRequired, facets: PropTypes.objectOf(PropTypes.arrayOf(Facet)).isRequired, // Actions addFilter: PropTypes.func.isRequired, removeFilter: PropTypes.func.isRequired, setFilter: PropTypes.func.isRequired, a11yNotify: PropTypes.func.isRequired }); _defineProperty(FacetContainer, "defaultProps", { filterType: "all", isFilterable: false }); export default 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); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250YWluZXJzL0ZhY2V0LmpzIl0sIm5hbWVzIjpbIlByb3BUeXBlcyIsIkNvbXBvbmVudCIsIk11bHRpQ2hlY2tib3hGYWNldCIsIkZhY2V0IiwiRmlsdGVyIiwiRmlsdGVyVHlwZSIsImFjY2VudEZvbGQiLCJ3aXRoU2VhcmNoIiwiZmluZEZhY2V0VmFsdWVJbkZpbHRlcnMiLCJuYW1lIiwiZmlsdGVycyIsImZpbHRlclR5cGUiLCJmaWx0ZXIiLCJmaW5kIiwiZiIsImZpZWxkIiwidHlwZSIsInZhbHVlcyIsIkZhY2V0Q29udGFpbmVyIiwic2hvdyIsInRvdGFsT3B0aW9ucyIsInNldFN0YXRlIiwibW9yZSIsInZpc2libGVPcHRpb25zQ291bnQiLCJzaG93aW5nQWxsIiwicHJvcHMiLCJhMTF5Tm90aWZ5Iiwic2VhcmNoVGVybSIsInN0YXRlIiwiYWRkRmlsdGVyIiwiY2xhc3NOYW1lIiwiZmFjZXRzIiwibGFiZWwiLCJyZW1vdmVGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJ2aWV3IiwiaXNGaWx0ZXJhYmxlIiwicmVzdCIsImZhY2V0VmFsdWVzIiwib3B0aW9ucyIsImRhdGEiLCJzZWxlY3RlZFZhbHVlcyIsImxlbmd0aCIsInRyaW0iLCJvcHRpb24iLCJ2YWx1ZSIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJWaWV3Iiwib25Nb3JlQ2xpY2siLCJoYW5kbGVDbGlja01vcmUiLCJiaW5kIiwib25SZW1vdmUiLCJvbkNoYW5nZSIsIm9uU2VsZWN0Iiwic2xpY2UiLCJzaG93TW9yZSIsInNob3dTZWFyY2giLCJvblNlYXJjaCIsImhhbmRsZUZhY2V0U2VhcmNoIiwic2VhcmNoUGxhY2Vob2xkZXIiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwiZnVuYyIsImJvb2wiLCJhcnJheU9mIiwib2JqZWN0T2YiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPQSxTQUFQLE1BQXNCLFlBQXRCO0FBQ0EsU0FBU0MsU0FB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QWNqQjdCLEVBQUFBLFlBQVksRUFBRWpDLFNBQVMsQ0FBQ2dFLElBQVYsQ0FBZUYsVUFkWjtBQWVqQjVCLEVBQUFBLFNBQVMsRUFBRWxDLFNBQVMsQ0FBQ2dFLElBQVYsQ0FBZUYsVUFmVDtBQWdCakJwQyxFQUFBQSxVQUFVLEVBQUUxQixTQUFTLENBQUNnRSxJQUFWLENBQWVGO0FBaEJWLEM7O2dCQURSNUMsYyxrQkFvQlc7QUFDcEJQLEVBQUFBLFVBQVUsRUFBRSxLQURRO0FBRXBCeUIsRUFBQUEsWUFBWSxFQUFFO0FBRk0sQzs7QUE2RnhCLGVBQWU3QixVQUFVLENBQ3ZCO0FBQUEsTUFBR0csT0FBSCxTQUFHQSxPQUFIO0FBQUEsTUFBWXFCLE1BQVosU0FBWUEsTUFBWjtBQUFBLE1BQW9CRixTQUFwQixTQUFvQkEsU0FBcEI7QUFBQSxNQUErQkksWUFBL0IsU0FBK0JBLFlBQS9CO0FBQUEsTUFBNkNDLFNBQTdDLFNBQTZDQSxTQUE3QztBQUFBLE1BQXdEUixVQUF4RCxTQUF3REEsVUFBeEQ7QUFBQSxTQUEwRTtBQUN4RWhCLElBQUFBLE9BQU8sRUFBUEEsT0FEd0U7QUFFeEVxQixJQUFBQSxNQUFNLEVBQU5BLE1BRndFO0FBR3hFRixJQUFBQSxTQUFTLEVBQVRBLFNBSHdFO0FBSXhFSSxJQUFBQSxZQUFZLEVBQVpBLFlBSndFO0FBS3hFQyxJQUFBQSxTQUFTLEVBQVRBLFNBTHdFO0FBTXhFUixJQUFBQSxVQUFVLEVBQVZBO0FBTndFLEdBQTFFO0FBQUEsQ0FEdUIsQ0FBVixDQVNiUixjQVRhLENBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE11bHRpQ2hlY2tib3hGYWNldCB9IGZyb20gXCJAZWxhc3RpYy9yZWFjdC1zZWFyY2gtdWktdmlld3NcIjtcblxuaW1wb3J0IHsgRmFjZXQsIEZpbHRlciwgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgYWNjZW50Rm9sZCB9IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5cbmltcG9ydCB7IHdpdGhTZWFyY2ggfSBmcm9tIFwiLi5cIjtcblxuZnVuY3Rpb24gZmluZEZhY2V0VmFsdWVJbkZpbHRlcnMobmFtZSwgZmlsdGVycywgZmlsdGVyVHlwZSkge1xuICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBuYW1lICYmIGYudHlwZSA9PT0gZmlsdGVyVHlwZSk7XG4gIGlmICghZmlsdGVyKSByZXR1cm47XG4gIHJldHVybiBmaWx0ZXIudmFsdWVzO1xufVxuXG5leHBvcnQgY2xhc3MgRmFjZXRDb250YWluZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIC8vIFByb3BzXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlLFxuICAgIHNob3c6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgdmlldzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNGaWx0ZXJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvLyBTdGF0ZVxuICAgIGZpbHRlcnM6IFByb3BUeXBlcy5hcnJheU9mKEZpbHRlcikuaXNSZXF1aXJlZCxcbiAgICBmYWNldHM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuYXJyYXlPZihGYWNldCkpLmlzUmVxdWlyZWQsXG4gICAgLy8gQWN0aW9uc1xuICAgIGFkZEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZW1vdmVGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGExMXlOb3RpZnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGZpbHRlclR5cGU6IFwiYWxsXCIsXG4gICAgaXNGaWx0ZXJhYmxlOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHsgc2hvdyA9IDUgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG1vcmU6IHNob3csXG4gICAgICBzZWFyY2hUZXJtOiBcIlwiXG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrTW9yZSA9IHRvdGFsT3B0aW9ucyA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSgoeyBtb3JlIH0pID0+IHtcbiAgICAgIGxldCB2aXNpYmxlT3B0aW9uc0NvdW50ID0gbW9yZSArIDEwO1xuICAgICAgY29uc3Qgc2hvd2luZ0FsbCA9IHZpc2libGVPcHRpb25zQ291bnQgPj0gdG90YWxPcHRpb25zO1xuICAgICAgaWYgKHNob3dpbmdBbGwpIHZpc2libGVPcHRpb25zQ291bnQgPSB0b3RhbE9wdGlvbnM7XG5cbiAgICAgIHRoaXMucHJvcHMuYTExeU5vdGlmeShcIm1vcmVGaWx0ZXJzXCIsIHsgdmlzaWJsZU9wdGlvbnNDb3VudCwgc2hvd2luZ0FsbCB9KTtcblxuICAgICAgcmV0dXJuIHsgbW9yZTogdmlzaWJsZU9wdGlvbnNDb3VudCB9O1xuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUZhY2V0U2VhcmNoID0gc2VhcmNoVGVybSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlYXJjaFRlcm0gfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgbW9yZSwgc2VhcmNoVGVybSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7XG4gICAgICBhZGRGaWx0ZXIsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBmYWNldHMsXG4gICAgICBmaWVsZCxcbiAgICAgIGZpbHRlclR5cGUsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgbGFiZWwsXG4gICAgICByZW1vdmVGaWx0ZXIsXG4gICAgICBzZXRGaWx0ZXIsXG4gICAgICB2aWV3LFxuICAgICAgaXNGaWx0ZXJhYmxlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBhMTF5Tm90aWZ5LFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGZhY2V0VmFsdWVzID0gZmFjZXRzW2ZpZWxkXTtcblxuICAgIGlmICghZmFjZXRWYWx1ZXMpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IG9wdGlvbnMgPSBmYWNldFZhbHVlc1swXS5kYXRhO1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID1cbiAgICAgIGZpbmRGYWNldFZhbHVlSW5GaWx0ZXJzKGZpZWxkLCBmaWx0ZXJzLCBmaWx0ZXJUeXBlKSB8fCBbXTtcblxuICAgIGlmICghb3B0aW9ucy5sZW5ndGggJiYgIXNlbGVjdGVkVmFsdWVzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoc2VhcmNoVGVybS50cmltKCkpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihvcHRpb24gPT5cbiAgICAgICAgYWNjZW50Rm9sZChvcHRpb24udmFsdWUpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXMoYWNjZW50Rm9sZChzZWFyY2hUZXJtKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBWaWV3ID0gdmlldyB8fCBNdWx0aUNoZWNrYm94RmFjZXQ7XG5cbiAgICByZXR1cm4gVmlldyh7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBvbk1vcmVDbGljazogdGhpcy5oYW5kbGVDbGlja01vcmUuYmluZCh0aGlzLCBvcHRpb25zLmxlbmd0aCksXG4gICAgICBvblJlbW92ZTogdmFsdWUgPT4ge1xuICAgICAgICByZW1vdmVGaWx0ZXIoZmllbGQsIHZhbHVlLCBmaWx0ZXJUeXBlKTtcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZTogdmFsdWUgPT4ge1xuICAgICAgICBzZXRGaWx0ZXIoZmllbGQsIHZhbHVlLCBmaWx0ZXJUeXBlKTtcbiAgICAgIH0sXG4gICAgICBvblNlbGVjdDogdmFsdWUgPT4ge1xuICAgICAgICBhZGRGaWx0ZXIoZmllbGQsIHZhbHVlLCBmaWx0ZXJUeXBlKTtcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiBvcHRpb25zLnNsaWNlKDAsIG1vcmUpLFxuICAgICAgc2hvd01vcmU6IG9wdGlvbnMubGVuZ3RoID4gbW9yZSxcbiAgICAgIHZhbHVlczogc2VsZWN0ZWRWYWx1ZXMsXG4gICAgICBzaG93U2VhcmNoOiBpc0ZpbHRlcmFibGUsXG4gICAgICBvblNlYXJjaDogdmFsdWUgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUZhY2V0U2VhcmNoKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBzZWFyY2hQbGFjZWhvbGRlcjogYEZpbHRlciAke2ZpZWxkfWAsXG4gICAgICAuLi5yZXN0XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNlYXJjaChcbiAgKHsgZmlsdGVycywgZmFjZXRzLCBhZGRGaWx0ZXIsIHJlbW92ZUZpbHRlciwgc2V0RmlsdGVyLCBhMTF5Tm90aWZ5IH0pID0+ICh7XG4gICAgZmlsdGVycyxcbiAgICBmYWNldHMsXG4gICAgYWRkRmlsdGVyLFxuICAgIHJlbW92ZUZpbHRlcixcbiAgICBzZXRGaWx0ZXIsXG4gICAgYTExeU5vdGlmeVxuICB9KVxuKShGYWNldENvbnRhaW5lcik7XG4iXX0=