@elastic/react-search-ui
Version:
A React library for building search experiences
180 lines (156 loc) • 18.4 kB
JavaScript
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=