UNPKG

instantsearch.js

Version:

InstantSearch.js is a JavaScript library for building performant and instant search experiences with Algolia.

141 lines (111 loc) 6.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _findIndex = _interopRequireDefault(require("./findIndex.js")); var _uniq = _interopRequireDefault(require("./uniq.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var mergeWithRest = function mergeWithRest(left, right) { var facets = right.facets, disjunctiveFacets = right.disjunctiveFacets, facetsRefinements = right.facetsRefinements, facetsExcludes = right.facetsExcludes, disjunctiveFacetsRefinements = right.disjunctiveFacetsRefinements, numericRefinements = right.numericRefinements, tagRefinements = right.tagRefinements, hierarchicalFacets = right.hierarchicalFacets, hierarchicalFacetsRefinements = right.hierarchicalFacetsRefinements, ruleContexts = right.ruleContexts, rest = _objectWithoutProperties(right, ["facets", "disjunctiveFacets", "facetsRefinements", "facetsExcludes", "disjunctiveFacetsRefinements", "numericRefinements", "tagRefinements", "hierarchicalFacets", "hierarchicalFacetsRefinements", "ruleContexts"]); return left.setQueryParameters(rest); }; // Merge facets var mergeFacets = function mergeFacets(left, right) { return right.facets.reduce(function (_, name) { return _.addFacet(name); }, left); }; var mergeDisjunctiveFacets = function mergeDisjunctiveFacets(left, right) { return right.disjunctiveFacets.reduce(function (_, name) { return _.addDisjunctiveFacet(name); }, left); }; var mergeHierarchicalFacets = function mergeHierarchicalFacets(left, right) { return left.setQueryParameters({ hierarchicalFacets: right.hierarchicalFacets.reduce(function (facets, facet) { var index = (0, _findIndex.default)(facets, function (_) { return _.name === facet.name; }); if (index === -1) { return facets.concat(facet); } var nextFacets = facets.slice(); nextFacets.splice(index, 1, facet); return nextFacets; }, left.hierarchicalFacets) }); }; // Merge facet refinements var mergeTagRefinements = function mergeTagRefinements(left, right) { return right.tagRefinements.reduce(function (_, value) { return _.addTagRefinement(value); }, left); }; var mergeFacetRefinements = function mergeFacetRefinements(left, right) { return left.setQueryParameters({ facetsRefinements: _objectSpread(_objectSpread({}, left.facetsRefinements), right.facetsRefinements) }); }; var mergeFacetsExcludes = function mergeFacetsExcludes(left, right) { return left.setQueryParameters({ facetsExcludes: _objectSpread(_objectSpread({}, left.facetsExcludes), right.facetsExcludes) }); }; var mergeDisjunctiveFacetsRefinements = function mergeDisjunctiveFacetsRefinements(left, right) { return left.setQueryParameters({ disjunctiveFacetsRefinements: _objectSpread(_objectSpread({}, left.disjunctiveFacetsRefinements), right.disjunctiveFacetsRefinements) }); }; var mergeNumericRefinements = function mergeNumericRefinements(left, right) { return left.setQueryParameters({ numericRefinements: _objectSpread(_objectSpread({}, left.numericRefinements), right.numericRefinements) }); }; var mergeHierarchicalFacetsRefinements = function mergeHierarchicalFacetsRefinements(left, right) { return left.setQueryParameters({ hierarchicalFacetsRefinements: _objectSpread(_objectSpread({}, left.hierarchicalFacetsRefinements), right.hierarchicalFacetsRefinements) }); }; var mergeRuleContexts = function mergeRuleContexts(left, right) { var ruleContexts = (0, _uniq.default)([].concat(left.ruleContexts).concat(right.ruleContexts).filter(Boolean)); if (ruleContexts.length > 0) { return left.setQueryParameters({ ruleContexts: ruleContexts }); } return left; }; var merge = function merge() { for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) { parameters[_key] = arguments[_key]; } return parameters.reduce(function (left, right) { var hierarchicalFacetsRefinementsMerged = mergeHierarchicalFacetsRefinements(left, right); var hierarchicalFacetsMerged = mergeHierarchicalFacets(hierarchicalFacetsRefinementsMerged, right); var tagRefinementsMerged = mergeTagRefinements(hierarchicalFacetsMerged, right); var numericRefinementsMerged = mergeNumericRefinements(tagRefinementsMerged, right); var disjunctiveFacetsRefinementsMerged = mergeDisjunctiveFacetsRefinements(numericRefinementsMerged, right); var facetsExcludesMerged = mergeFacetsExcludes(disjunctiveFacetsRefinementsMerged, right); var facetRefinementsMerged = mergeFacetRefinements(facetsExcludesMerged, right); var disjunctiveFacetsMerged = mergeDisjunctiveFacets(facetRefinementsMerged, right); var ruleContextsMerged = mergeRuleContexts(disjunctiveFacetsMerged, right); var facetsMerged = mergeFacets(ruleContextsMerged, right); return mergeWithRest(facetsMerged, right); }); }; var _default = merge; exports.default = _default;