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