{"version":3,"file":"ReactInstantSearchCore.js","sources":["../../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../node_modules/@babel/runtime/helpers/esm/objectSpread.js","../../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../../node_modules/@babel/runtime/helpers/esm/inherits.js","../../../../node_modules/react-fast-compare/index.js","../../src/core/utils.ts","../../src/core/context.ts","../../src/core/createConnector.tsx","../../src/core/highlight.js","../../src/core/version.js","../../src/core/translatable.js","../../src/core/indexUtils.js","../../src/connectors/connectConfigure.js","../../src/widgets/Configure.js","../../../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../../../node_modules/algoliasearch-helper/src/functions/merge.js","../../../../node_modules/algoliasearch-helper/src/functions/defaultsPure.js","../../../../node_modules/algoliasearch-helper/src/functions/intersection.js","../../../../node_modules/algoliasearch-helper/src/functions/find.js","../../../../node_modules/algoliasearch-helper/src/functions/valToNumber.js","../../../../node_modules/algoliasearch-helper/src/functions/omit.js","../../../../node_modules/algoliasearch-helper/src/functions/objectHasKeys.js","../../../../node_modules/algoliasearch-helper/src/SearchParameters/RefinementList.js","../../../../node_modules/algoliasearch-helper/src/SearchParameters/index.js","../../../../node_modules/algoliasearch-helper/src/functions/orderBy.js","../../../../node_modules/algoliasearch-helper/src/functions/compact.js","../../../../node_modules/algoliasearch-helper/src/functions/findIndex.js","../../../../node_modules/algoliasearch-helper/src/functions/formatSort.js","../../../../node_modules/algoliasearch-helper/src/SearchResults/generate-hierarchical-tree.js","../../../../node_modules/algoliasearch-helper/src/SearchResults/index.js","../../../../node_modules/events/events.js","../../../../node_modules/algoliasearch-helper/src/functions/inherits.js","../../../../node_modules/algoliasearch-helper/src/DerivedHelper/index.js","../../../../node_modules/algoliasearch-helper/src/requestBuilder.js","../../../../node_modules/algoliasearch-helper/src/version.js","../../../../node_modules/algoliasearch-helper/src/algoliasearch.helper.js","../../../../node_modules/algoliasearch-helper/index.js","../../src/connectors/connectConfigureRelatedItems.ts","../../../../node_modules/rollup-plugin-node-globals/src/global.js","../../../../node_modules/process-es6/browser.js","../../../../node_modules/object-assign/index.js","../../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../../node_modules/prop-types/factoryWithThrowingShims.js","../../../../node_modules/prop-types/index.js","../../src/widgets/ConfigureRelatedItems.tsx","../../src/connectors/connectQueryRules.ts","../../src/widgets/QueryRuleContext.ts","../../src/widgets/Index.tsx","../../src/core/createWidgetsManager.js","../../src/core/createStore.ts","../../src/core/createInstantSearchManager.js","../../src/widgets/InstantSearch.tsx","../../src/connectors/connectAutoComplete.js","../../src/connectors/connectBreadcrumb.js","../../src/connectors/connectCurrentRefinements.js","../../src/connectors/connectGeoSearch.js","../../src/connectors/connectHierarchicalMenu.js","../../src/connectors/connectHighlight.js","../../src/connectors/connectHits.js","../../src/connectors/connectHitsPerPage.js","../../src/connectors/connectInfiniteHits.js","../../src/connectors/connectMenu.js","../../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../src/connectors/connectNumericMenu.js","../../src/connectors/connectPagination.js","../../src/connectors/connectPoweredBy.js","../../src/connectors/connectRange.js","../../src/connectors/connectRefinementList.js","../../src/connectors/connectScrollTo.js","../../src/connectors/connectSearchBox.js","../../src/connectors/connectSortBy.js","../../src/connectors/connectStateResults.js","../../src/connectors/connectStats.js","../../src/connectors/connectToggleRefinement.js","../../src/connectors/connectHitInsights.ts","../../src/connectors/connectVoiceSearch.js"],"sourcesContent":["export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty\";\nexport default function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nexport default function _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function';\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React\n for (i = length; i-- !== 0;) {\n if (keys[i] === '_owner' && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner.\n // _owner contains circular references\n // and is not needed when comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of a react element\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","// From https://github.com/reactjs/react-redux/blob/master/src/utils/shallowEqual.js\nexport const shallowEqual = (objA, objB) => {\n if (objA === objB) {\n return true;\n }\n\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n const hasOwn = Object.prototype.hasOwnProperty;\n for (let i = 0; i < keysA.length; i++) {\n if (!hasOwn.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const getDisplayName = Component =>\n Component.displayName || Component.name || 'UnknownComponent';\n\nconst resolved = Promise.resolve();\nexport const defer = f => {\n resolved.then(f);\n};\n\nconst isPlainObject = (value: unknown): value is object =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const removeEmptyKey = (obj: object) => {\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n\n if (!isPlainObject(value)) {\n return;\n }\n\n if (!objectHasKeys(value)) {\n delete obj[key];\n } else {\n removeEmptyKey(value);\n }\n });\n\n return obj;\n};\n\nexport const removeEmptyArraysFromObject = (obj: object) => {\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n\n if (Array.isArray(value) && value.length === 0) {\n delete obj[key];\n }\n });\n\n return obj;\n};\n\nexport function addAbsolutePositions(hits, hitsPerPage, page) {\n return hits.map((hit, index) => ({\n ...hit,\n __position: hitsPerPage * page + index + 1,\n }));\n}\n\nexport function addQueryID(hits, queryID) {\n if (!queryID) {\n return hits;\n }\n return hits.map(hit => ({\n ...hit,\n __queryID: queryID,\n }));\n}\n\nexport function find(\n array: TItem[],\n comparator: (item: TItem) => boolean\n): TItem | undefined {\n if (!Array.isArray(array)) {\n return undefined;\n }\n\n for (let i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return array[i];\n }\n }\n return undefined;\n}\n\nexport function objectHasKeys(object: object | undefined) {\n return object && Object.keys(object).length > 0;\n}\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nexport function omit(source: { [key: string]: any }, excluded: string[]) {\n if (source === null || source === undefined) {\n return {};\n }\n const target = {};\n const sourceKeys = Object.keys(source);\n for (let i = 0; i < sourceKeys.length; i++) {\n const key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n target[key] = source[key];\n }\n return target;\n}\n\n/**\n * Retrieve the value at a path of the object:\n *\n * @example\n * getPropertyByPath(\n * { test: { this: { function: [{ now: { everyone: true } }] } } },\n * 'test.this.function[0].now.everyone'\n * ); // true\n *\n * getPropertyByPath(\n * { test: { this: { function: [{ now: { everyone: true } }] } } },\n * ['test', 'this', 'function', 0, 'now', 'everyone']\n * ); // true\n *\n * @param object Source object to query\n * @param path either an array of properties, or a string form of the properties, separated by .\n */\nexport const getPropertyByPath = (object: object, path: string[] | string) =>\n (Array.isArray(path)\n ? path\n : path.replace(/\\[(\\d+)]/g, '.$1').split('.')\n ).reduce((current, key) => (current ? current[key] : undefined), object);\n\nexport function getObjectType(object: unknown): string {\n return Object.prototype.toString.call(object).slice(8, -1);\n}\n","import { createContext } from 'react';\nimport { Store } from '../core/createStore';\n\nexport type InstantSearchContext = {\n onInternalStateUpdate: (...args: any[]) => any;\n createHrefForState: (...args: any[]) => string;\n onSearchForFacetValues: (...args: any[]) => any;\n onSearchStateChange: (...args: any[]) => any;\n onSearchParameters: (...args: any[]) => any;\n store: Store;\n widgetsManager: any;\n mainTargetedIndex: string;\n};\n\nexport const {\n Consumer: InstantSearchConsumer,\n Provider: InstantSearchProvider,\n} = createContext({\n onInternalStateUpdate: () => undefined,\n createHrefForState: () => '#',\n onSearchForFacetValues: () => undefined,\n onSearchStateChange: () => undefined,\n onSearchParameters: () => undefined,\n store: {} as Store,\n widgetsManager: {},\n mainTargetedIndex: '',\n});\n\nexport type IndexContext =\n | {\n targetedIndex: string;\n }\n | undefined;\n\nexport const {\n Consumer: IndexConsumer,\n Provider: IndexProvider,\n} = createContext(undefined);\n","import React, { Component, ReactType } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { shallowEqual, getDisplayName, removeEmptyKey } from './utils';\nimport {\n InstantSearchConsumer,\n InstantSearchContext,\n IndexConsumer,\n IndexContext,\n} from './context';\n\nexport type ConnectorDescription = {\n displayName: string;\n /**\n * a function to filter the local state\n */\n refine?: (...args: any[]) => any;\n /**\n * function transforming the local state to a SearchParameters\n */\n getSearchParameters?: (...args: any[]) => any;\n /**\n * metadata of the widget (for current refinements)\n */\n getMetadata?: (...args: any[]) => any;\n /**\n * hook after the state has changed\n */\n transitionState?: (...args: any[]) => any;\n /**\n * transform the state into props passed to the wrapped component.\n * Receives (props, widgetStates, searchState, metadata) and returns the local state.\n */\n getProvidedProps: (...args: any[]) => any;\n /**\n * Receives props and return the id that will be used to identify the widget\n */\n getId?: (...args: any[]) => string;\n /**\n * hook when the widget will unmount. Receives (props, searchState) and return a cleaned state.\n */\n cleanUp?: (...args: any[]) => any;\n searchForFacetValues?: (...args: any[]) => any;\n shouldComponentUpdate?: (...args: any[]) => boolean;\n /**\n * PropTypes forwarded to the wrapped component.\n */\n propTypes?: {}; // I can't find a definition for a propTypes object\n defaultProps?: {};\n};\n\ntype ConnectorProps = {\n contextValue: InstantSearchContext;\n indexContextValue?: IndexContext;\n};\n\nexport type ConnectedProps = TWidgetProps & ConnectorProps;\n\ntype ConnectorState = {\n providedProps: {};\n};\n\n/**\n * Connectors are the HOC used to transform React components\n * into InstantSearch widgets.\n * In order to simplify the construction of such connectors\n * `createConnector` takes a description and transform it into\n * a connector.\n * @param {ConnectorDescription} connectorDesc the description of the connector\n * @return {Connector} a function that wraps a component into\n * an instantsearch connected one.\n */\nexport function createConnectorWithoutContext(\n connectorDesc: ConnectorDescription\n) {\n if (!connectorDesc.displayName) {\n throw new Error(\n '`createConnector` requires you to provide a `displayName` property.'\n );\n }\n\n const isWidget =\n typeof connectorDesc.getSearchParameters === 'function' ||\n typeof connectorDesc.getMetadata === 'function' ||\n typeof connectorDesc.transitionState === 'function';\n\n return (Composed: ReactType) => {\n class Connector extends Component {\n static displayName = `${connectorDesc.displayName}(${getDisplayName(\n Composed\n )})`;\n static propTypes = connectorDesc.propTypes;\n static defaultProps = connectorDesc.defaultProps;\n\n unsubscribe?: () => void;\n unregisterWidget?: () => void;\n\n isUnmounting = false;\n\n state: ConnectorState = {\n providedProps: this.getProvidedProps(this.props),\n };\n\n constructor(props: ConnectorProps) {\n super(props);\n\n if (connectorDesc.getSearchParameters) {\n this.props.contextValue.onSearchParameters(\n connectorDesc.getSearchParameters.bind(this),\n {\n ais: this.props.contextValue,\n multiIndexContext: this.props.indexContextValue,\n },\n this.props\n );\n }\n }\n\n componentDidMount() {\n this.unsubscribe = this.props.contextValue.store.subscribe(() => {\n if (!this.isUnmounting) {\n this.setState({\n providedProps: this.getProvidedProps(this.props),\n });\n }\n });\n\n if (isWidget) {\n this.unregisterWidget = this.props.contextValue.widgetsManager.registerWidget(\n this\n );\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n if (typeof connectorDesc.shouldComponentUpdate === 'function') {\n return connectorDesc.shouldComponentUpdate.call(\n this,\n this.props,\n nextProps,\n this.state,\n nextState\n );\n }\n\n const propsEqual = shallowEqual(this.props, nextProps);\n\n if (\n this.state.providedProps === null ||\n nextState.providedProps === null\n ) {\n if (this.state.providedProps === nextState.providedProps) {\n return !propsEqual;\n }\n return true;\n }\n\n return (\n !propsEqual ||\n !shallowEqual(this.state.providedProps, nextState.providedProps)\n );\n }\n\n componentDidUpdate(prevProps) {\n if (!isEqual(prevProps, this.props)) {\n this.setState({\n providedProps: this.getProvidedProps(this.props),\n });\n\n if (isWidget) {\n this.props.contextValue.widgetsManager.update();\n\n if (typeof connectorDesc.transitionState === 'function') {\n this.props.contextValue.onSearchStateChange(\n connectorDesc.transitionState.call(\n this,\n this.props,\n this.props.contextValue.store.getState().widgets,\n this.props.contextValue.store.getState().widgets\n )\n );\n }\n }\n }\n }\n\n componentWillUnmount() {\n this.isUnmounting = true;\n\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n\n if (this.unregisterWidget) {\n this.unregisterWidget();\n\n if (typeof connectorDesc.cleanUp === 'function') {\n const nextState = connectorDesc.cleanUp.call(\n this,\n this.props,\n this.props.contextValue.store.getState().widgets\n );\n\n this.props.contextValue.store.setState({\n ...this.props.contextValue.store.getState(),\n widgets: nextState,\n });\n\n this.props.contextValue.onSearchStateChange(\n removeEmptyKey(nextState)\n );\n }\n }\n }\n\n getProvidedProps(props) {\n const {\n widgets,\n results,\n resultsFacetValues,\n searching,\n searchingForFacetValues,\n isSearchStalled,\n metadata,\n error,\n } = this.props.contextValue.store.getState();\n\n const searchResults = {\n results,\n searching,\n searchingForFacetValues,\n isSearchStalled,\n error,\n };\n\n return connectorDesc.getProvidedProps.call(\n this,\n props,\n widgets,\n searchResults,\n metadata,\n // @MAJOR: move this attribute on the `searchResults` it doesn't\n // makes sense to have it into a separate argument. The search\n // flags are on the object why not the results?\n resultsFacetValues\n );\n }\n\n getSearchParameters(searchParameters) {\n if (typeof connectorDesc.getSearchParameters === 'function') {\n return connectorDesc.getSearchParameters.call(\n this,\n searchParameters,\n this.props,\n this.props.contextValue.store.getState().widgets\n );\n }\n\n return null;\n }\n\n getMetadata(nextWidgetsState) {\n if (typeof connectorDesc.getMetadata === 'function') {\n return connectorDesc.getMetadata.call(\n this,\n this.props,\n nextWidgetsState\n );\n }\n\n return {};\n }\n\n transitionState(prevWidgetsState, nextWidgetsState) {\n if (typeof connectorDesc.transitionState === 'function') {\n return connectorDesc.transitionState.call(\n this,\n this.props,\n prevWidgetsState,\n nextWidgetsState\n );\n }\n\n return nextWidgetsState;\n }\n\n refine = (...args) => {\n this.props.contextValue.onInternalStateUpdate(\n // refine will always be defined here because the prop is only given conditionally\n connectorDesc.refine!.call(\n this,\n this.props,\n this.props.contextValue.store.getState().widgets,\n ...args\n )\n );\n };\n\n createURL = (...args) =>\n this.props.contextValue.createHrefForState(\n // refine will always be defined here because the prop is only given conditionally\n connectorDesc.refine!.call(\n this,\n this.props,\n this.props.contextValue.store.getState().widgets,\n ...args\n )\n );\n\n searchForFacetValues = (...args) => {\n this.props.contextValue.onSearchForFacetValues(\n // searchForFacetValues will always be defined here because the prop is only given conditionally\n connectorDesc.searchForFacetValues!.call(\n this,\n this.props,\n this.props.contextValue.store.getState().widgets,\n ...args\n )\n );\n };\n\n render() {\n const { contextValue, ...props } = this.props;\n const { providedProps } = this.state;\n\n if (providedProps === null) {\n return null;\n }\n\n const refineProps =\n typeof connectorDesc.refine === 'function'\n ? { refine: this.refine, createURL: this.createURL }\n : {};\n\n const searchForFacetValuesProps =\n typeof connectorDesc.searchForFacetValues === 'function'\n ? { searchForItems: this.searchForFacetValues }\n : {};\n\n return (\n \n );\n }\n }\n\n return Connector;\n };\n}\n\nconst createConnectorWithContext = (connectorDesc: ConnectorDescription) => (\n Composed: ReactType\n) => {\n const Connector = createConnectorWithoutContext(connectorDesc)(Composed);\n\n const ConnectorWrapper: React.FC = props => (\n \n {contextValue => (\n \n {indexContextValue => (\n \n )}\n \n )}\n \n );\n\n return ConnectorWrapper;\n};\n\nexport default createConnectorWithContext;\n","import { getPropertyByPath } from './utils';\n\nexport const HIGHLIGHT_TAGS = {\n highlightPreTag: ``,\n highlightPostTag: ``,\n};\n\n/**\n * Parses an highlighted attribute into an array of objects with the string value, and\n * a boolean that indicated if this part is highlighted.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightedValue - highlighted attribute as returned by Algolia highlight feature\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nfunction parseHighlightedAttribute({ preTag, postTag, highlightedValue = '' }) {\n const splitByPreTag = highlightedValue.split(preTag);\n const firstValue = splitByPreTag.shift();\n const elements =\n firstValue === '' ? [] : [{ value: firstValue, isHighlighted: false }];\n\n if (postTag === preTag) {\n let isHighlighted = true;\n splitByPreTag.forEach(split => {\n elements.push({ value: split, isHighlighted });\n isHighlighted = !isHighlighted;\n });\n } else {\n splitByPreTag.forEach(split => {\n const splitByPostTag = split.split(postTag);\n\n elements.push({\n value: splitByPostTag[0],\n isHighlighted: true,\n });\n\n if (splitByPostTag[1] !== '') {\n elements.push({\n value: splitByPostTag[1],\n isHighlighted: false,\n });\n }\n });\n }\n\n return elements;\n}\n\n/**\n * Find an highlighted attribute given an `attribute` and an `highlightProperty`, parses it,\n * and provided an array of objects with the string value and a boolean if this\n * value is highlighted.\n *\n * In order to use this feature, highlight must be activated in the configuration of\n * the index. The `preTag` and `postTag` attributes are respectively highlightPreTag and\n * highlightPostTag in Algolia configuration.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightProperty - the property that contains the highlight structure in the results\n * @param {string} attribute - the highlighted attribute to look for\n * @param {object} hit - the actual hit returned by Algolia.\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nexport function parseAlgoliaHit({\n preTag = '',\n postTag = '',\n highlightProperty,\n attribute,\n hit,\n}) {\n if (!hit) throw new Error('`hit`, the matching record, must be provided');\n\n const highlightObject =\n getPropertyByPath(hit[highlightProperty], attribute) || {};\n\n if (Array.isArray(highlightObject)) {\n return highlightObject.map(item =>\n parseHighlightedAttribute({\n preTag,\n postTag,\n highlightedValue: item.value,\n })\n );\n }\n\n return parseHighlightedAttribute({\n preTag,\n postTag,\n highlightedValue: highlightObject.value,\n });\n}\n","export default '6.7.0';\n","import React, { Component } from 'react';\n\nconst withKeysPropType = keys => (props, propName, componentName) => {\n const prop = props[propName];\n if (prop) {\n for (const key of Object.keys(prop)) {\n if (keys.indexOf(key) === -1) {\n return new Error(\n `Unknown \\`${propName}\\` key \\`${key}\\`. Check the render method ` +\n `of \\`${componentName}\\`.`\n );\n }\n }\n }\n return undefined;\n};\n\nexport default function translatable(defaultTranslations) {\n return Composed => {\n class Translatable extends Component {\n translate = (key, ...params) => {\n const { translations } = this.props;\n\n const translation =\n translations && translations.hasOwnProperty(key)\n ? translations[key]\n : defaultTranslations[key];\n\n if (typeof translation === 'function') {\n return translation(...params);\n }\n\n return translation;\n };\n\n render() {\n return ;\n }\n }\n\n const name = Composed.displayName || Composed.name || 'UnknownComponent';\n\n Translatable.displayName = `Translatable(${name})`;\n\n Translatable.propTypes = {\n translations: withKeysPropType(Object.keys(defaultTranslations)),\n };\n\n return Translatable;\n };\n}\n","import { omit } from './utils';\n\nexport function getIndexId(context) {\n return hasMultipleIndices(context)\n ? context.multiIndexContext.targetedIndex\n : context.ais.mainTargetedIndex;\n}\n\nexport function getResults(searchResults, context) {\n if (searchResults.results) {\n if (searchResults.results.hits) {\n return searchResults.results;\n }\n\n const indexId = getIndexId(context);\n if (searchResults.results[indexId]) {\n return searchResults.results[indexId];\n }\n }\n\n return null;\n}\n\nexport function hasMultipleIndices(context) {\n return context && context.multiIndexContext;\n}\n\n// eslint-disable-next-line max-params\nexport function refineValue(\n searchState,\n nextRefinement,\n context,\n resetPage,\n namespace\n) {\n if (hasMultipleIndices(context)) {\n const indexId = getIndexId(context);\n return namespace\n ? refineMultiIndexWithNamespace(\n searchState,\n nextRefinement,\n indexId,\n resetPage,\n namespace\n )\n : refineMultiIndex(searchState, nextRefinement, indexId, resetPage);\n } else {\n // When we have a multi index page with shared widgets we should also\n // reset their page to 1 if the resetPage is provided. Otherwise the\n // indices will always be reset\n // see: https://github.com/algolia/react-instantsearch/issues/310\n // see: https://github.com/algolia/react-instantsearch/issues/637\n if (searchState.indices && resetPage) {\n Object.keys(searchState.indices).forEach(targetedIndex => {\n searchState = refineValue(\n searchState,\n { page: 1 },\n { multiIndexContext: { targetedIndex } },\n true,\n namespace\n );\n });\n }\n return namespace\n ? refineSingleIndexWithNamespace(\n searchState,\n nextRefinement,\n resetPage,\n namespace\n )\n : refineSingleIndex(searchState, nextRefinement, resetPage);\n }\n}\n\nfunction refineMultiIndex(searchState, nextRefinement, indexId, resetPage) {\n const page = resetPage ? { page: 1 } : undefined;\n const state =\n searchState.indices && searchState.indices[indexId]\n ? {\n ...searchState.indices,\n [indexId]: {\n ...searchState.indices[indexId],\n ...nextRefinement,\n ...page,\n },\n }\n : {\n ...searchState.indices,\n [indexId]: {\n ...nextRefinement,\n ...page,\n },\n };\n\n return {\n ...searchState,\n indices: state,\n };\n}\n\nfunction refineSingleIndex(searchState, nextRefinement, resetPage) {\n const page = resetPage ? { page: 1 } : undefined;\n return { ...searchState, ...nextRefinement, ...page };\n}\n\n// eslint-disable-next-line max-params\nfunction refineMultiIndexWithNamespace(\n searchState,\n nextRefinement,\n indexId,\n resetPage,\n namespace\n) {\n const page = resetPage ? { page: 1 } : undefined;\n const state =\n searchState.indices && searchState.indices[indexId]\n ? {\n ...searchState.indices,\n [indexId]: {\n ...searchState.indices[indexId],\n [namespace]: {\n ...searchState.indices[indexId][namespace],\n ...nextRefinement,\n },\n page: 1,\n },\n }\n : {\n ...searchState.indices,\n [indexId]: {\n [namespace]: nextRefinement,\n ...page,\n },\n };\n\n return {\n ...searchState,\n indices: state,\n };\n}\n\nfunction refineSingleIndexWithNamespace(\n searchState,\n nextRefinement,\n resetPage,\n namespace\n) {\n const page = resetPage ? { page: 1 } : undefined;\n return {\n ...searchState,\n [namespace]: { ...searchState[namespace], ...nextRefinement },\n ...page,\n };\n}\n\nfunction getNamespaceAndAttributeName(id) {\n const parts = id.match(/^([^.]*)\\.(.*)/);\n const namespace = parts && parts[1];\n const attributeName = parts && parts[2];\n\n return { namespace, attributeName };\n}\n\nfunction hasRefinements({\n multiIndex,\n indexId,\n namespace,\n attributeName,\n id,\n searchState,\n}) {\n if (multiIndex && namespace) {\n return (\n searchState.indices &&\n searchState.indices[indexId] &&\n searchState.indices[indexId][namespace] &&\n Object.hasOwnProperty.call(\n searchState.indices[indexId][namespace],\n attributeName\n )\n );\n }\n\n if (multiIndex) {\n return (\n searchState.indices &&\n searchState.indices[indexId] &&\n Object.hasOwnProperty.call(searchState.indices[indexId], id)\n );\n }\n\n if (namespace) {\n return (\n searchState[namespace] &&\n Object.hasOwnProperty.call(searchState[namespace], attributeName)\n );\n }\n\n return Object.hasOwnProperty.call(searchState, id);\n}\n\nfunction getRefinements({\n multiIndex,\n indexId,\n namespace,\n attributeName,\n id,\n searchState,\n}) {\n if (multiIndex && namespace) {\n return searchState.indices[indexId][namespace][attributeName];\n }\n if (multiIndex) {\n return searchState.indices[indexId][id];\n }\n if (namespace) {\n return searchState[namespace][attributeName];\n }\n\n return searchState[id];\n}\n\nexport function getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n defaultValue\n) {\n const indexId = getIndexId(context);\n const { namespace, attributeName } = getNamespaceAndAttributeName(id);\n const multiIndex = hasMultipleIndices(context);\n const args = {\n multiIndex,\n indexId,\n namespace,\n attributeName,\n id,\n searchState,\n };\n const hasRefinementsValue = hasRefinements(args);\n\n if (hasRefinementsValue) {\n return getRefinements(args);\n }\n\n if (props.defaultRefinement) {\n return props.defaultRefinement;\n }\n\n return defaultValue;\n}\n\nexport function cleanUpValue(searchState, context, id) {\n const indexId = getIndexId(context);\n const { namespace, attributeName } = getNamespaceAndAttributeName(id);\n\n if (hasMultipleIndices(context) && Boolean(searchState.indices)) {\n return cleanUpValueWithMultiIndex({\n attribute: attributeName,\n searchState,\n indexId,\n id,\n namespace,\n });\n }\n\n return cleanUpValueWithSingleIndex({\n attribute: attributeName,\n searchState,\n id,\n namespace,\n });\n}\n\nfunction cleanUpValueWithSingleIndex({\n searchState,\n id,\n namespace,\n attribute,\n}) {\n if (namespace) {\n return {\n ...searchState,\n [namespace]: omit(searchState[namespace], [attribute]),\n };\n }\n\n return omit(searchState, [id]);\n}\n\nfunction cleanUpValueWithMultiIndex({\n searchState,\n indexId,\n id,\n namespace,\n attribute,\n}) {\n const indexSearchState = searchState.indices[indexId];\n\n if (namespace && indexSearchState) {\n return {\n ...searchState,\n indices: {\n ...searchState.indices,\n [indexId]: {\n ...indexSearchState,\n [namespace]: omit(indexSearchState[namespace], [attribute]),\n },\n },\n };\n }\n\n if (indexSearchState) {\n return {\n ...searchState,\n indices: {\n ...searchState.indices,\n [indexId]: omit(indexSearchState, [id]),\n },\n };\n }\n\n return searchState;\n}\n","import { omit } from '../core/utils';\nimport createConnector from '../core/createConnector';\nimport {\n refineValue,\n getIndexId,\n hasMultipleIndices,\n} from '../core/indexUtils';\n\nfunction getId() {\n return 'configure';\n}\n\nexport default createConnector({\n displayName: 'AlgoliaConfigure',\n getProvidedProps() {\n return {};\n },\n getSearchParameters(searchParameters, props) {\n const { children, contextValue, indexContextValue, ...items } = props;\n return searchParameters.setQueryParameters(items);\n },\n transitionState(props, prevSearchState, nextSearchState) {\n const id = getId();\n const { children, contextValue, indexContextValue, ...items } = props;\n const propKeys = Object.keys(props);\n const nonPresentKeys = this._props\n ? Object.keys(this._props).filter(prop => propKeys.indexOf(prop) === -1)\n : [];\n this._props = props;\n const nextValue = {\n [id]: { ...omit(nextSearchState[id], nonPresentKeys), ...items },\n };\n return refineValue(nextSearchState, nextValue, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n cleanUp(props, searchState) {\n const id = getId();\n const indexId = getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const subState =\n hasMultipleIndices({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }) && searchState.indices\n ? searchState.indices[indexId]\n : searchState;\n\n const configureKeys =\n subState && subState[id] ? Object.keys(subState[id]) : [];\n\n const configureState = configureKeys.reduce((acc, item) => {\n if (!props[item]) {\n acc[item] = subState[id][item];\n }\n return acc;\n }, {});\n\n const nextValue = { [id]: configureState };\n\n return refineValue(searchState, nextValue, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n});\n","import connectConfigure from '../connectors/connectConfigure';\n\n/**\n * Configure is a widget that lets you provide raw search parameters\n * to the Algolia API.\n *\n * Any of the props added to this widget will be forwarded to Algolia. For more information\n * on the different parameters that can be set, have a look at the\n * [reference](https://www.algolia.com/doc/api-client/javascript/search#search-parameters).\n *\n * This widget can be used either with react-dom and react-native. It will not render anything\n * on screen, only configure some parameters.\n *\n * Read more in the [Search parameters](guide/Search_parameters.html) guide.\n * @name Configure\n * @kind widget\n * @example\n * import React from 'react';\n * import algoliasearch from 'algoliasearch/lite';\n * import { InstantSearch, Configure, Hits } from 'react-instantsearch-dom';\n *\n * const searchClient = algoliasearch(\n * 'latency',\n * '6be0576ff61c053d5f9a3225e2a90f76'\n * );\n *\n * const App = () => (\n * \n * \n * \n * \n * );\n */\n\nexport default connectConfigure(function Configure() {\n return null;\n});\n","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","'use strict';\n\nfunction clone(value) {\n if (typeof value === 'object' && value !== null) {\n return _merge(Array.isArray(value) ? [] : {}, value);\n }\n return value;\n}\n\nfunction isObjectOrArrayOrFunction(value) {\n return (\n typeof value === 'function' ||\n Array.isArray(value) ||\n Object.prototype.toString.call(value) === '[object Object]'\n );\n}\n\nfunction _merge(target, source) {\n if (target === source) {\n return target;\n }\n\n for (var key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) {\n continue;\n }\n\n var sourceVal = source[key];\n var targetVal = target[key];\n\n if (typeof targetVal !== 'undefined' && typeof sourceVal === 'undefined') {\n continue;\n }\n\n if (isObjectOrArrayOrFunction(targetVal) && isObjectOrArrayOrFunction(sourceVal)) {\n target[key] = _merge(targetVal, sourceVal);\n } else {\n target[key] = clone(sourceVal);\n }\n }\n return target;\n}\n\n/**\n * This method is like Object.assign, but recursively merges own and inherited\n * enumerable keyed properties of source objects into the destination object.\n *\n * NOTE: this behaves like lodash/merge, but:\n * - does mutate functions if they are a source\n * - treats non-plain objects as plain\n * - does not work for circular objects\n * - treats sparse arrays as sparse\n * - does not convert Array-like objects (Arguments, NodeLists, etc.) to arrays\n *\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n */\n\nfunction merge(target) {\n if (!isObjectOrArrayOrFunction(target)) {\n target = {};\n }\n\n for (var i = 1, l = arguments.length; i < l; i++) {\n var source = arguments[i];\n\n if (isObjectOrArrayOrFunction(source)) {\n _merge(target, source);\n }\n }\n return target;\n}\n\nmodule.exports = merge;\n","'use strict';\n\n// NOTE: this behaves like lodash/defaults, but doesn't mutate the target\nmodule.exports = function defaultsPure() {\n var sources = Array.prototype.slice.call(arguments);\n return sources.reduceRight(function(acc, source) {\n Object.keys(Object(source)).forEach(function(key) {\n if (source[key] !== undefined) {\n acc[key] = source[key];\n }\n });\n return acc;\n }, {});\n};\n","'use strict';\n\nfunction intersection(arr1, arr2) {\n return arr1.filter(function(value, index) {\n return (\n arr2.indexOf(value) > -1 &&\n arr1.indexOf(value) === index /* skips duplicates */\n );\n });\n}\n\nmodule.exports = intersection;\n","'use strict';\n\n// @MAJOR can be replaced by native Array#find when we change support\nmodule.exports = function find(array, comparator) {\n if (!Array.isArray(array)) {\n return undefined;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return array[i];\n }\n }\n};\n","'use strict';\n\nfunction valToNumber(v) {\n if (typeof v === 'number') {\n return v;\n } else if (typeof v === 'string') {\n return parseFloat(v);\n } else if (Array.isArray(v)) {\n return v.map(valToNumber);\n }\n\n throw new Error('The value should be a number, a parsable string or an array of those.');\n}\n\nmodule.exports = valToNumber;\n","'use strict';\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source === null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key;\n var i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\n","'use strict';\n\nfunction objectHasKeys(obj) {\n return obj && Object.keys(obj).length > 0;\n}\n\nmodule.exports = objectHasKeys;\n","'use strict';\n\n/**\n * Functions to manipulate refinement lists\n *\n * The RefinementList is not formally defined through a prototype but is based\n * on a specific structure.\n *\n * @module SearchParameters.refinementList\n *\n * @typedef {string[]} SearchParameters.refinementList.Refinements\n * @typedef {Object.} SearchParameters.refinementList.RefinementList\n */\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar omit = require('../functions/omit');\nvar objectHasKeys = require('../functions/objectHasKeys');\n\nvar lib = {\n /**\n * Adds a refinement to a RefinementList\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement, if the value is not a string it will be converted\n * @return {RefinementList} a new and updated refinement list\n */\n addRefinement: function addRefinement(refinementList, attribute, value) {\n if (lib.isRefined(refinementList, attribute, value)) {\n return refinementList;\n }\n\n var valueAsString = '' + value;\n\n var facetRefinement = !refinementList[attribute] ?\n [valueAsString] :\n refinementList[attribute].concat(valueAsString);\n\n var mod = {};\n\n mod[attribute] = facetRefinement;\n\n return defaultsPure({}, mod, refinementList);\n },\n /**\n * Removes refinement(s) for an attribute:\n * - if the value is specified removes the refinement for the value on the attribute\n * - if no value is specified removes all the refinements for this attribute\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} [value] the value of the refinement\n * @return {RefinementList} a new and updated refinement lst\n */\n removeRefinement: function removeRefinement(refinementList, attribute, value) {\n if (value === undefined) {\n // we use the \"filter\" form of clearRefinement, since it leaves empty values as-is\n // the form with a string will remove the attribute completely\n return lib.clearRefinement(refinementList, function(v, f) {\n return attribute === f;\n });\n }\n\n var valueAsString = '' + value;\n\n return lib.clearRefinement(refinementList, function(v, f) {\n return attribute === f && valueAsString === v;\n });\n },\n /**\n * Toggles the refinement value for an attribute.\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement\n * @return {RefinementList} a new and updated list\n */\n toggleRefinement: function toggleRefinement(refinementList, attribute, value) {\n if (value === undefined) throw new Error('toggleRefinement should be used with a value');\n\n if (lib.isRefined(refinementList, attribute, value)) {\n return lib.removeRefinement(refinementList, attribute, value);\n }\n\n return lib.addRefinement(refinementList, attribute, value);\n },\n /**\n * Clear all or parts of a RefinementList. Depending on the arguments, three\n * kinds of behavior can happen:\n * - if no attribute is provided: clears the whole list\n * - if an attribute is provided as a string: clears the list for the specific attribute\n * - if an attribute is provided as a function: discards the elements for which the function returns true\n * @param {RefinementList} refinementList the initial list\n * @param {string} [attribute] the attribute or function to discard\n * @param {string} [refinementType] optional parameter to give more context to the attribute function\n * @return {RefinementList} a new and updated refinement list\n */\n clearRefinement: function clearRefinement(refinementList, attribute, refinementType) {\n if (attribute === undefined) {\n if (!objectHasKeys(refinementList)) {\n return refinementList;\n }\n return {};\n } else if (typeof attribute === 'string') {\n return omit(refinementList, attribute);\n } else if (typeof attribute === 'function') {\n var hasChanged = false;\n\n var newRefinementList = Object.keys(refinementList).reduce(function(memo, key) {\n var values = refinementList[key] || [];\n var facetList = values.filter(function(value) {\n return !attribute(value, key, refinementType);\n });\n\n if (facetList.length !== values.length) {\n hasChanged = true;\n }\n memo[key] = facetList;\n\n return memo;\n }, {});\n\n if (hasChanged) return newRefinementList;\n return refinementList;\n }\n },\n /**\n * Test if the refinement value is used for the attribute. If no refinement value\n * is provided, test if the refinementList contains any refinement for the\n * given attribute.\n * @param {RefinementList} refinementList the list of refinement\n * @param {string} attribute name of the attribute\n * @param {string} [refinementValue] value of the filter/refinement\n * @return {boolean}\n */\n isRefined: function isRefined(refinementList, attribute, refinementValue) {\n var containsRefinements = !!refinementList[attribute] &&\n refinementList[attribute].length > 0;\n\n if (refinementValue === undefined || !containsRefinements) {\n return containsRefinements;\n }\n\n var refinementValueAsString = '' + refinementValue;\n\n return refinementList[attribute].indexOf(refinementValueAsString) !== -1;\n }\n};\n\nmodule.exports = lib;\n","'use strict';\n\nvar merge = require('../functions/merge');\nvar defaultsPure = require('../functions/defaultsPure');\nvar intersection = require('../functions/intersection');\nvar find = require('../functions/find');\nvar valToNumber = require('../functions/valToNumber');\nvar omit = require('../functions/omit');\nvar objectHasKeys = require('../functions/objectHasKeys');\n\nvar RefinementList = require('./RefinementList');\n\n/**\n * isEqual, but only for numeric refinement values, possible values:\n * - 5\n * - [5]\n * - [[5]]\n * - [[5,5],[4]]\n */\nfunction isEqualNumericRefinement(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n return (\n a.length === b.length &&\n a.every(function(el, i) {\n return isEqualNumericRefinement(b[i], el);\n })\n );\n }\n return a === b;\n}\n\n/**\n * like _.find but using deep equality to be able to use it\n * to find arrays.\n * @private\n * @param {any[]} array array to search into (elements are base or array of base)\n * @param {any} searchedValue the value we're looking for (base or array of base)\n * @return {any} the searched value or undefined\n */\nfunction findArray(array, searchedValue) {\n return find(array, function(currentValue) {\n return isEqualNumericRefinement(currentValue, searchedValue);\n });\n}\n\n/**\n * The facet list is the structure used to store the list of values used to\n * filter a single attribute.\n * @typedef {string[]} SearchParameters.FacetList\n */\n\n/**\n * Structure to store numeric filters with the operator as the key. The supported operators\n * are `=`, `>`, `<`, `>=`, `<=` and `!=`.\n * @typedef {Object.>} SearchParameters.OperatorList\n */\n\n/**\n * SearchParameters is the data structure that contains all the information\n * usable for making a search to Algolia API. It doesn't do the search itself,\n * nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It will\n * be provided when needed. This object is documented for reference as you'll\n * get it from events generated by the {@link AlgoliaSearchHelper}.\n * If need be, instantiate the Helper from the factory function {@link SearchParameters.make}\n * @constructor\n * @classdesc contains all the parameters of a search\n * @param {object|SearchParameters} newParameters existing parameters or partial object\n * for the properties of a new SearchParameters\n * @see SearchParameters.make\n * @example SearchParameters of the first query in\n * the instant search demo\n{\n \"query\": \"\",\n \"disjunctiveFacets\": [\n \"customerReviewCount\",\n \"category\",\n \"salePrice_range\",\n \"manufacturer\"\n ],\n \"maxValuesPerFacet\": 30,\n \"page\": 0,\n \"hitsPerPage\": 10,\n \"facets\": [\n \"type\",\n \"shipping\"\n ]\n}\n */\nfunction SearchParameters(newParameters) {\n var params = newParameters ? SearchParameters._parseNumbers(newParameters) : {};\n\n /**\n * This attribute contains the list of all the conjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.facets = params.facets || [];\n /**\n * This attribute contains the list of all the disjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.disjunctiveFacets = params.disjunctiveFacets || [];\n /**\n * This attribute contains the list of all the hierarchical facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * Hierarchical facets are a sub type of disjunctive facets that\n * let you filter faceted attributes hierarchically.\n * @member {string[]|object[]}\n */\n this.hierarchicalFacets = params.hierarchicalFacets || [];\n\n // Refinements\n /**\n * This attribute contains all the filters that need to be\n * applied on the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsRefinements = params.facetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * excluded from the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters excluded for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsExcludes = params.facetsExcludes || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the disjunctive facets. Each facet must be properly\n * defined in the `disjunctiveFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.disjunctiveFacetsRefinements = params.disjunctiveFacetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the numeric attributes.\n *\n * The key is the name of the attribute, and the value is the\n * filters to apply to this attribute.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `numericFilters` attribute.\n * @member {Object.}\n */\n this.numericRefinements = params.numericRefinements || {};\n /**\n * This attribute contains all the tags used to refine the query.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `tagFilters` attribute.\n * @member {string[]}\n */\n this.tagRefinements = params.tagRefinements || [];\n /**\n * This attribute contains all the filters that need to be\n * applied on the hierarchical facets. Each facet must be properly\n * defined in the `hierarchicalFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name. The FacetList values\n * are structured as a string that contain the values for each level\n * separated by the configured separator.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.hierarchicalFacetsRefinements = params.hierarchicalFacetsRefinements || {};\n\n var self = this;\n Object.keys(params).forEach(function(paramName) {\n var isKeyKnown = SearchParameters.PARAMETERS.indexOf(paramName) !== -1;\n var isValueDefined = params[paramName] !== undefined;\n\n if (!isKeyKnown && isValueDefined) {\n self[paramName] = params[paramName];\n }\n });\n}\n\n/**\n * List all the properties in SearchParameters and therefore all the known Algolia properties\n * This doesn't contain any beta/hidden features.\n * @private\n */\nSearchParameters.PARAMETERS = Object.keys(new SearchParameters());\n\n/**\n * @private\n * @param {object} partialState full or part of a state\n * @return {object} a new object with the number keys as number\n */\nSearchParameters._parseNumbers = function(partialState) {\n // Do not reparse numbers in SearchParameters, they ought to be parsed already\n if (partialState instanceof SearchParameters) return partialState;\n\n var numbers = {};\n\n var numberKeys = [\n 'aroundPrecision',\n 'aroundRadius',\n 'getRankingInfo',\n 'minWordSizefor2Typos',\n 'minWordSizefor1Typo',\n 'page',\n 'maxValuesPerFacet',\n 'distinct',\n 'minimumAroundRadius',\n 'hitsPerPage',\n 'minProximity'\n ];\n\n numberKeys.forEach(function(k) {\n var value = partialState[k];\n if (typeof value === 'string') {\n var parsedValue = parseFloat(value);\n // global isNaN is ok to use here, value is only number or NaN\n numbers[k] = isNaN(parsedValue) ? value : parsedValue;\n }\n });\n\n // there's two formats of insideBoundingBox, we need to parse\n // the one which is an array of float geo rectangles\n if (Array.isArray(partialState.insideBoundingBox)) {\n numbers.insideBoundingBox = partialState.insideBoundingBox.map(function(geoRect) {\n return geoRect.map(function(value) {\n return parseFloat(value);\n });\n });\n }\n\n if (partialState.numericRefinements) {\n var numericRefinements = {};\n Object.keys(partialState.numericRefinements).forEach(function(attribute) {\n var operators = partialState.numericRefinements[attribute] || {};\n numericRefinements[attribute] = {};\n Object.keys(operators).forEach(function(operator) {\n var values = operators[operator];\n var parsedValues = values.map(function(v) {\n if (Array.isArray(v)) {\n return v.map(function(vPrime) {\n if (typeof vPrime === 'string') {\n return parseFloat(vPrime);\n }\n return vPrime;\n });\n } else if (typeof v === 'string') {\n return parseFloat(v);\n }\n return v;\n });\n numericRefinements[attribute][operator] = parsedValues;\n });\n });\n numbers.numericRefinements = numericRefinements;\n }\n\n return merge({}, partialState, numbers);\n};\n\n/**\n * Factory for SearchParameters\n * @param {object|SearchParameters} newParameters existing parameters or partial\n * object for the properties of a new SearchParameters\n * @return {SearchParameters} frozen instance of SearchParameters\n */\nSearchParameters.make = function makeSearchParameters(newParameters) {\n var instance = new SearchParameters(newParameters);\n\n var hierarchicalFacets = newParameters.hierarchicalFacets || [];\n hierarchicalFacets.forEach(function(facet) {\n if (facet.rootPath) {\n var currentRefinement = instance.getHierarchicalRefinement(facet.name);\n\n if (currentRefinement.length > 0 && currentRefinement[0].indexOf(facet.rootPath) !== 0) {\n instance = instance.clearRefinements(facet.name);\n }\n\n // get it again in case it has been cleared\n currentRefinement = instance.getHierarchicalRefinement(facet.name);\n if (currentRefinement.length === 0) {\n instance = instance.toggleHierarchicalFacetRefinement(facet.name, facet.rootPath);\n }\n }\n });\n\n return instance;\n};\n\n/**\n * Validates the new parameters based on the previous state\n * @param {SearchParameters} currentState the current state\n * @param {object|SearchParameters} parameters the new parameters to set\n * @return {Error|null} Error if the modification is invalid, null otherwise\n */\nSearchParameters.validate = function(currentState, parameters) {\n var params = parameters || {};\n\n if (currentState.tagFilters && params.tagRefinements && params.tagRefinements.length > 0) {\n return new Error(\n '[Tags] Cannot switch from the managed tag API to the advanced API. It is probably ' +\n 'an error, if it is really what you want, you should first clear the tags with clearTags method.');\n }\n\n if (currentState.tagRefinements.length > 0 && params.tagFilters) {\n return new Error(\n '[Tags] Cannot switch from the advanced tag API to the managed API. It is probably ' +\n 'an error, if it is not, you should first clear the tags with clearTags method.');\n }\n\n if (\n currentState.numericFilters &&\n params.numericRefinements &&\n objectHasKeys(params.numericRefinements)\n ) {\n return new Error(\n \"[Numeric filters] Can't switch from the advanced to the managed API. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.'\n );\n }\n\n if (objectHasKeys(currentState.numericRefinements) && params.numericFilters) {\n return new Error(\n \"[Numeric filters] Can't switch from the managed API to the advanced. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.');\n }\n\n return null;\n};\n\nSearchParameters.prototype = {\n constructor: SearchParameters,\n\n /**\n * Remove all refinements (disjunctive + conjunctive + excludes + numeric filters)\n * @method\n * @param {undefined|string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {SearchParameters}\n */\n clearRefinements: function clearRefinements(attribute) {\n var patch = {\n numericRefinements: this._clearNumericRefinements(attribute),\n facetsRefinements: RefinementList.clearRefinement(\n this.facetsRefinements,\n attribute,\n 'conjunctiveFacet'\n ),\n facetsExcludes: RefinementList.clearRefinement(\n this.facetsExcludes,\n attribute,\n 'exclude'\n ),\n disjunctiveFacetsRefinements: RefinementList.clearRefinement(\n this.disjunctiveFacetsRefinements,\n attribute,\n 'disjunctiveFacet'\n ),\n hierarchicalFacetsRefinements: RefinementList.clearRefinement(\n this.hierarchicalFacetsRefinements,\n attribute,\n 'hierarchicalFacet'\n )\n };\n if (\n patch.numericRefinements === this.numericRefinements &&\n patch.facetsRefinements === this.facetsRefinements &&\n patch.facetsExcludes === this.facetsExcludes &&\n patch.disjunctiveFacetsRefinements === this.disjunctiveFacetsRefinements &&\n patch.hierarchicalFacetsRefinements === this.hierarchicalFacetsRefinements\n ) {\n return this;\n }\n return this.setQueryParameters(patch);\n },\n /**\n * Remove all the refined tags from the SearchParameters\n * @method\n * @return {SearchParameters}\n */\n clearTags: function clearTags() {\n if (this.tagFilters === undefined && this.tagRefinements.length === 0) return this;\n\n return this.setQueryParameters({\n tagFilters: undefined,\n tagRefinements: []\n });\n },\n /**\n * Set the index.\n * @method\n * @param {string} index the index name\n * @return {SearchParameters}\n */\n setIndex: function setIndex(index) {\n if (index === this.index) return this;\n\n return this.setQueryParameters({\n index: index\n });\n },\n /**\n * Query setter\n * @method\n * @param {string} newQuery value for the new query\n * @return {SearchParameters}\n */\n setQuery: function setQuery(newQuery) {\n if (newQuery === this.query) return this;\n\n return this.setQueryParameters({\n query: newQuery\n });\n },\n /**\n * Page setter\n * @method\n * @param {number} newPage new page number\n * @return {SearchParameters}\n */\n setPage: function setPage(newPage) {\n if (newPage === this.page) return this;\n\n return this.setQueryParameters({\n page: newPage\n });\n },\n /**\n * Facets setter\n * The facets are the simple facets, used for conjunctive (and) faceting.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for conjunctive faceting\n * @return {SearchParameters}\n */\n setFacets: function setFacets(facets) {\n return this.setQueryParameters({\n facets: facets\n });\n },\n /**\n * Disjunctive facets setter\n * Change the list of disjunctive (or) facets the helper chan handle.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for disjunctive faceting\n * @return {SearchParameters}\n */\n setDisjunctiveFacets: function setDisjunctiveFacets(facets) {\n return this.setQueryParameters({\n disjunctiveFacets: facets\n });\n },\n /**\n * HitsPerPage setter\n * Hits per page represents the number of hits retrieved for this query\n * @method\n * @param {number} n number of hits retrieved per page of results\n * @return {SearchParameters}\n */\n setHitsPerPage: function setHitsPerPage(n) {\n if (this.hitsPerPage === n) return this;\n\n return this.setQueryParameters({\n hitsPerPage: n\n });\n },\n /**\n * typoTolerance setter\n * Set the value of typoTolerance\n * @method\n * @param {string} typoTolerance new value of typoTolerance (\"true\", \"false\", \"min\" or \"strict\")\n * @return {SearchParameters}\n */\n setTypoTolerance: function setTypoTolerance(typoTolerance) {\n if (this.typoTolerance === typoTolerance) return this;\n\n return this.setQueryParameters({\n typoTolerance: typoTolerance\n });\n },\n /**\n * Add a numeric filter for a given attribute\n * When value is an array, they are combined with OR\n * When value is a single value, it will combined with AND\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} operator operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number | number[]} value value of the filter\n * @return {SearchParameters}\n * @example\n * // for price = 50 or 40\n * searchparameter.addNumericRefinement('price', '=', [50, 40]);\n * @example\n * // for size = 38 and 40\n * searchparameter.addNumericRefinement('size', '=', 38);\n * searchparameter.addNumericRefinement('size', '=', 40);\n */\n addNumericRefinement: function(attribute, operator, v) {\n var value = valToNumber(v);\n\n if (this.isNumericRefined(attribute, operator, value)) return this;\n\n var mod = merge({}, this.numericRefinements);\n\n mod[attribute] = merge({}, mod[attribute]);\n\n if (mod[attribute][operator]) {\n // Array copy\n mod[attribute][operator] = mod[attribute][operator].slice();\n // Add the element. Concat can't be used here because value can be an array.\n mod[attribute][operator].push(value);\n } else {\n mod[attribute][operator] = [value];\n }\n\n return this.setQueryParameters({\n numericRefinements: mod\n });\n },\n /**\n * Get the list of conjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getConjunctiveRefinements: function(facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n return [];\n }\n return this.facetsRefinements[facetName] || [];\n },\n /**\n * Get the list of disjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getDisjunctiveRefinements: function(facetName) {\n if (!this.isDisjunctiveFacet(facetName)) {\n return [];\n }\n return this.disjunctiveFacetsRefinements[facetName] || [];\n },\n /**\n * Get the list of hierarchical refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getHierarchicalRefinement: function(facetName) {\n // we send an array but we currently do not support multiple\n // hierarchicalRefinements for a hierarchicalFacet\n return this.hierarchicalFacetsRefinements[facetName] || [];\n },\n /**\n * Get the list of exclude refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getExcludeRefinements: function(facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n return [];\n }\n return this.facetsExcludes[facetName] || [];\n },\n\n /**\n * Remove all the numeric filter for a given (attribute, operator)\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} [operator] operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number} [number] the value to be removed\n * @return {SearchParameters}\n */\n removeNumericRefinement: function(attribute, operator, paramValue) {\n if (paramValue !== undefined) {\n if (!this.isNumericRefined(attribute, operator, paramValue)) {\n return this;\n }\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return (\n key === attribute &&\n value.op === operator &&\n isEqualNumericRefinement(value.val, valToNumber(paramValue))\n );\n })\n });\n } else if (operator !== undefined) {\n if (!this.isNumericRefined(attribute, operator)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return key === attribute && value.op === operator;\n })\n });\n }\n\n if (!this.isNumericRefined(attribute)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return key === attribute;\n })\n });\n },\n /**\n * Get the list of numeric refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {SearchParameters.OperatorList[]} list of refinements\n */\n getNumericRefinements: function(facetName) {\n return this.numericRefinements[facetName] || {};\n },\n /**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\n getNumericRefinement: function(attribute, operator) {\n return this.numericRefinements[attribute] && this.numericRefinements[attribute][operator];\n },\n /**\n * Clear numeric filters.\n * @method\n * @private\n * @param {string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {Object.}\n */\n _clearNumericRefinements: function _clearNumericRefinements(attribute) {\n if (attribute === undefined) {\n if (!objectHasKeys(this.numericRefinements)) {\n return this.numericRefinements;\n }\n return {};\n } else if (typeof attribute === 'string') {\n if (!objectHasKeys(this.numericRefinements[attribute])) {\n return this.numericRefinements;\n }\n return omit(this.numericRefinements, attribute);\n } else if (typeof attribute === 'function') {\n var hasChanged = false;\n var numericRefinements = this.numericRefinements;\n var newNumericRefinements = Object.keys(numericRefinements).reduce(function(memo, key) {\n var operators = numericRefinements[key];\n var operatorList = {};\n\n operators = operators || {};\n Object.keys(operators).forEach(function(operator) {\n var values = operators[operator] || [];\n var outValues = [];\n values.forEach(function(value) {\n var predicateResult = attribute({val: value, op: operator}, key, 'numeric');\n if (!predicateResult) outValues.push(value);\n });\n if (outValues.length !== values.length) {\n hasChanged = true;\n }\n operatorList[operator] = outValues;\n });\n\n memo[key] = operatorList;\n\n return memo;\n }, {});\n\n if (hasChanged) return newNumericRefinements;\n return this.numericRefinements;\n }\n },\n /**\n * Add a facet to the facets attribute of the helper configuration, if it\n * isn't already present.\n * @method\n * @param {string} facet facet name to add\n * @return {SearchParameters}\n */\n addFacet: function addFacet(facet) {\n if (this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n facets: this.facets.concat([facet])\n });\n },\n /**\n * Add a disjunctive facet to the disjunctiveFacets attribute of the helper\n * configuration, if it isn't already present.\n * @method\n * @param {string} facet disjunctive facet name to add\n * @return {SearchParameters}\n */\n addDisjunctiveFacet: function addDisjunctiveFacet(facet) {\n if (this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.concat([facet])\n });\n },\n /**\n * Add a hierarchical facet to the hierarchicalFacets attribute of the helper\n * configuration.\n * @method\n * @param {object} hierarchicalFacet hierarchical facet to add\n * @return {SearchParameters}\n * @throws will throw an error if a hierarchical facet with the same name was already declared\n */\n addHierarchicalFacet: function addHierarchicalFacet(hierarchicalFacet) {\n if (this.isHierarchicalFacet(hierarchicalFacet.name)) {\n throw new Error(\n 'Cannot declare two hierarchical facets with the same name: `' + hierarchicalFacet.name + '`');\n }\n\n return this.setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.concat([hierarchicalFacet])\n });\n },\n /**\n * Add a refinement on a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addFacetRefinement: function addFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (RefinementList.isRefined(this.facetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.addRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Exclude a value from a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the exclusion on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addExcludeRefinement: function addExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (RefinementList.isRefined(this.facetsExcludes, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.addRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Adds a refinement on a disjunctive facet.\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n\n if (RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.addRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * addTagRefinement adds a tag to the list used to filter the results\n * @param {string} tag tag to be added\n * @return {SearchParameters}\n */\n addTagRefinement: function addTagRefinement(tag) {\n if (this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.concat(tag)\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Remove a facet from the facets attribute of the helper configuration, if it\n * is present.\n * @method\n * @param {string} facet facet name to remove\n * @return {SearchParameters}\n */\n removeFacet: function removeFacet(facet) {\n if (!this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n facets: this.facets.filter(function(f) {\n return f !== facet;\n })\n });\n },\n /**\n * Remove a disjunctive facet from the disjunctiveFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet disjunctive facet name to remove\n * @return {SearchParameters}\n */\n removeDisjunctiveFacet: function removeDisjunctiveFacet(facet) {\n if (!this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.filter(function(f) {\n return f !== facet;\n })\n });\n },\n /**\n * Remove a hierarchical facet from the hierarchicalFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet hierarchical facet name to remove\n * @return {SearchParameters}\n */\n removeHierarchicalFacet: function removeHierarchicalFacet(facet) {\n if (!this.isHierarchicalFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.filter(function(f) {\n return f.name !== facet;\n })\n });\n },\n /**\n * Remove a refinement set on facet. If a value is provided, it will clear the\n * refinement for the given value, otherwise it will clear all the refinement\n * values for the faceted attribute.\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} [value] value used to filter\n * @return {SearchParameters}\n */\n removeFacetRefinement: function removeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.facetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.removeRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Remove a negative refinement on a facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters}\n */\n removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.facetsExcludes, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.removeRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Remove a refinement on a disjunctive facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters}\n */\n removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * Remove a tag from the list of tag refinements\n * @method\n * @param {string} tag the tag to remove\n * @return {SearchParameters}\n */\n removeTagRefinement: function removeTagRefinement(tag) {\n if (!this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.filter(function(t) {\n return t !== tag;\n })\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters}\n * @throws will throw an error if the facet is not declared in the settings of the helper\n * @deprecated since version 2.19.0, see {@link SearchParameters#toggleFacetRefinement}\n */\n toggleRefinement: function toggleRefinement(facet, value) {\n return this.toggleFacetRefinement(facet, value);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters}\n * @throws will throw an error if the facet is not declared in the settings of the helper\n */\n toggleFacetRefinement: function toggleFacetRefinement(facet, value) {\n if (this.isHierarchicalFacet(facet)) {\n return this.toggleHierarchicalFacetRefinement(facet, value);\n } else if (this.isConjunctiveFacet(facet)) {\n return this.toggleConjunctiveFacetRefinement(facet, value);\n } else if (this.isDisjunctiveFacet(facet)) {\n return this.toggleDisjunctiveFacetRefinement(facet, value);\n }\n\n throw new Error('Cannot refine the undeclared facet ' + facet +\n '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets');\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.toggleRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.toggleRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(facet, value) {\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the hierarchicalFacets attribute of the helper configuration');\n }\n\n var separator = this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(facet));\n\n var mod = {};\n\n var upOneOrMultipleLevel = this.hierarchicalFacetsRefinements[facet] !== undefined &&\n this.hierarchicalFacetsRefinements[facet].length > 0 && (\n // remove current refinement:\n // refinement was 'beer > IPA', call is toggleRefine('beer > IPA'), refinement should be `beer`\n this.hierarchicalFacetsRefinements[facet][0] === value ||\n // remove a parent refinement of the current refinement:\n // - refinement was 'beer > IPA > Flying dog'\n // - call is toggleRefine('beer > IPA')\n // - refinement should be `beer`\n this.hierarchicalFacetsRefinements[facet][0].indexOf(value + separator) === 0\n );\n\n if (upOneOrMultipleLevel) {\n if (value.indexOf(separator) === -1) {\n // go back to root level\n mod[facet] = [];\n } else {\n mod[facet] = [value.slice(0, value.lastIndexOf(separator))];\n }\n } else {\n mod[facet] = [value];\n }\n\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n\n /**\n * Adds a refinement on a hierarchical facet.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is refined\n */\n addHierarchicalFacetRefinement: function(facet, path) {\n if (this.isHierarchicalFacetRefined(facet)) {\n throw new Error(facet + ' is already refined.');\n }\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(facet + ' is not defined in the hierarchicalFacets attribute of the helper configuration.');\n }\n var mod = {};\n mod[facet] = [path];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n\n /**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is not refined\n */\n removeHierarchicalFacetRefinement: function(facet) {\n if (!this.isHierarchicalFacetRefined(facet)) {\n return this;\n }\n var mod = {};\n mod[facet] = [];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n /**\n * Switch the tag refinement\n * @method\n * @param {string} tag the tag to remove or add\n * @return {SearchParameters}\n */\n toggleTagRefinement: function toggleTagRefinement(tag) {\n if (this.isTagRefined(tag)) {\n return this.removeTagRefinement(tag);\n }\n\n return this.addTagRefinement(tag);\n },\n /**\n * Test if the facet name is from one of the disjunctive facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean}\n */\n isDisjunctiveFacet: function(facet) {\n return this.disjunctiveFacets.indexOf(facet) > -1;\n },\n /**\n * Test if the facet name is from one of the hierarchical facets\n * @method\n * @param {string} facetName facet name to test\n * @return {boolean}\n */\n isHierarchicalFacet: function(facetName) {\n return this.getHierarchicalFacetByName(facetName) !== undefined;\n },\n /**\n * Test if the facet name is from one of the conjunctive/normal facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean}\n */\n isConjunctiveFacet: function(facet) {\n return this.facets.indexOf(facet) > -1;\n },\n /**\n * Returns true if the facet is refined, either for a specific value or in\n * general.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value, optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} returns true if refined\n */\n isFacetRefined: function isFacetRefined(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.facetsRefinements, facet, value);\n },\n /**\n * Returns true if the facet contains exclusions or if a specific value is\n * excluded.\n *\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} returns true if refined\n */\n isExcludeRefined: function isExcludeRefined(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.facetsExcludes, facet, value);\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean}\n */\n isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value);\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean}\n */\n isHierarchicalFacetRefined: function isHierarchicalFacetRefined(facet, value) {\n if (!this.isHierarchicalFacet(facet)) {\n return false;\n }\n\n var refinements = this.getHierarchicalRefinement(facet);\n\n if (!value) {\n return refinements.length > 0;\n }\n\n return refinements.indexOf(value) !== -1;\n },\n /**\n * Test if the triple (attribute, operator, value) is already refined.\n * If only the attribute and the operator are provided, it tests if the\n * contains any refinement value.\n * @method\n * @param {string} attribute attribute for which the refinement is applied\n * @param {string} [operator] operator of the refinement\n * @param {string} [value] value of the refinement\n * @return {boolean} true if it is refined\n */\n isNumericRefined: function isNumericRefined(attribute, operator, value) {\n if (value === undefined && operator === undefined) {\n return !!this.numericRefinements[attribute];\n }\n\n var isOperatorDefined =\n this.numericRefinements[attribute] &&\n this.numericRefinements[attribute][operator] !== undefined;\n\n if (value === undefined || !isOperatorDefined) {\n return isOperatorDefined;\n }\n\n var parsedValue = valToNumber(value);\n var isAttributeValueDefined =\n findArray(this.numericRefinements[attribute][operator], parsedValue) !==\n undefined;\n\n return isOperatorDefined && isAttributeValueDefined;\n },\n /**\n * Returns true if the tag refined, false otherwise\n * @method\n * @param {string} tag the tag to check\n * @return {boolean}\n */\n isTagRefined: function isTagRefined(tag) {\n return this.tagRefinements.indexOf(tag) !== -1;\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]}\n */\n getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\n var self = this;\n\n // attributes used for numeric filter can also be disjunctive\n var disjunctiveNumericRefinedFacets = intersection(\n Object.keys(this.numericRefinements).filter(function(facet) {\n return Object.keys(self.numericRefinements[facet]).length > 0;\n }),\n this.disjunctiveFacets\n );\n\n return Object.keys(this.disjunctiveFacetsRefinements).filter(function(facet) {\n return self.disjunctiveFacetsRefinements[facet].length > 0;\n })\n .concat(disjunctiveNumericRefinedFacets)\n .concat(this.getRefinedHierarchicalFacets());\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]}\n */\n getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\n var self = this;\n return intersection(\n // enforce the order between the two arrays,\n // so that refinement name index === hierarchical facet index\n this.hierarchicalFacets.map(function(facet) { return facet.name; }),\n Object.keys(this.hierarchicalFacetsRefinements).filter(function(facet) {\n return self.hierarchicalFacetsRefinements[facet].length > 0;\n })\n );\n },\n /**\n * Returned the list of all disjunctive facets not refined\n * @method\n * @return {string[]}\n */\n getUnrefinedDisjunctiveFacets: function() {\n var refinedFacets = this.getRefinedDisjunctiveFacets();\n\n return this.disjunctiveFacets.filter(function(f) {\n return refinedFacets.indexOf(f) === -1;\n });\n },\n\n managedParameters: [\n 'index',\n 'facets', 'disjunctiveFacets', 'facetsRefinements',\n 'facetsExcludes', 'disjunctiveFacetsRefinements',\n 'numericRefinements', 'tagRefinements', 'hierarchicalFacets', 'hierarchicalFacetsRefinements'\n ],\n getQueryParams: function getQueryParams() {\n var managedParameters = this.managedParameters;\n\n var queryParams = {};\n\n var self = this;\n Object.keys(this).forEach(function(paramName) {\n var paramValue = self[paramName];\n if (managedParameters.indexOf(paramName) === -1 && paramValue !== undefined) {\n queryParams[paramName] = paramValue;\n }\n });\n\n return queryParams;\n },\n /**\n * Let the user set a specific value for a given parameter. Will return the\n * same instance if the parameter is invalid or if the value is the same as the\n * previous one.\n * @method\n * @param {string} parameter the parameter name\n * @param {any} value the value to be set, must be compliant with the definition\n * of the attribute on the object\n * @return {SearchParameters} the updated state\n */\n setQueryParameter: function setParameter(parameter, value) {\n if (this[parameter] === value) return this;\n\n var modification = {};\n\n modification[parameter] = value;\n\n return this.setQueryParameters(modification);\n },\n /**\n * Let the user set any of the parameters with a plain object.\n * @method\n * @param {object} params all the keys and the values to be updated\n * @return {SearchParameters} a new updated instance\n */\n setQueryParameters: function setQueryParameters(params) {\n if (!params) return this;\n\n var error = SearchParameters.validate(this, params);\n\n if (error) {\n throw error;\n }\n\n var self = this;\n var nextWithNumbers = SearchParameters._parseNumbers(params);\n var previousPlainObject = Object.keys(this).reduce(function(acc, key) {\n acc[key] = self[key];\n return acc;\n }, {});\n\n var nextPlainObject = Object.keys(nextWithNumbers).reduce(\n function(previous, key) {\n var isPreviousValueDefined = previous[key] !== undefined;\n var isNextValueDefined = nextWithNumbers[key] !== undefined;\n\n if (isPreviousValueDefined && !isNextValueDefined) {\n return omit(previous, [key]);\n }\n\n if (isNextValueDefined) {\n previous[key] = nextWithNumbers[key];\n }\n\n return previous;\n },\n previousPlainObject\n );\n\n return new this.constructor(nextPlainObject);\n },\n\n /**\n * Returns a new instance with the page reset. Two scenarios possible:\n * the page is omitted -> return the given instance\n * the page is set -> return a new instance with a page of 0\n * @return {SearchParameters} a new updated instance\n */\n resetPage: function() {\n if (this.page === undefined) {\n return this;\n }\n\n return this.setPage(0);\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSortBy: function(hierarchicalFacet) {\n return hierarchicalFacet.sortBy || ['isRefined:desc', 'name:asc'];\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSeparator: function(hierarchicalFacet) {\n return hierarchicalFacet.separator || ' > ';\n },\n\n /**\n * Helper function to get the hierarchicalFacet prefix path or null\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.rootPath or null as default\n */\n _getHierarchicalRootPath: function(hierarchicalFacet) {\n return hierarchicalFacet.rootPath || null;\n },\n\n /**\n * Helper function to check if we show the parent level of the hierarchicalFacet\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.showParentLevel or true as default\n */\n _getHierarchicalShowParentLevel: function(hierarchicalFacet) {\n if (typeof hierarchicalFacet.showParentLevel === 'boolean') {\n return hierarchicalFacet.showParentLevel;\n }\n return true;\n },\n\n /**\n * Helper function to get the hierarchicalFacet by it's name\n * @param {string} hierarchicalFacetName\n * @return {object} a hierarchicalFacet\n */\n getHierarchicalFacetByName: function(hierarchicalFacetName) {\n return find(\n this.hierarchicalFacets,\n function(f) {\n return f.name === hierarchicalFacetName;\n }\n );\n },\n\n /**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param {string} facetName Hierarchical facet name\n * @return {array.} the path as an array of string\n */\n getHierarchicalFacetBreadcrumb: function(facetName) {\n if (!this.isHierarchicalFacet(facetName)) {\n return [];\n }\n\n var refinement = this.getHierarchicalRefinement(facetName)[0];\n if (!refinement) return [];\n\n var separator = this._getHierarchicalFacetSeparator(\n this.getHierarchicalFacetByName(facetName)\n );\n var path = refinement.split(separator);\n return path.map(function(part) {\n return part.trim();\n });\n },\n\n toString: function() {\n return JSON.stringify(this, null, 2);\n }\n};\n\n/**\n * Callback used for clearRefinement method\n * @callback SearchParameters.clearCallback\n * @param {OperatorList|FacetList} value the value of the filter\n * @param {string} key the current attribute name\n * @param {string} type `numeric`, `disjunctiveFacet`, `conjunctiveFacet`, `hierarchicalFacet` or `exclude`\n * depending on the type of facet\n * @return {boolean} `true` if the element should be removed. `false` otherwise.\n */\nmodule.exports = SearchParameters;\n","'use strict';\n\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined;\n var valIsNull = value === null;\n\n var othIsDefined = other !== undefined;\n var othIsNull = other === null;\n\n if (\n (!othIsNull && value > other) ||\n (valIsNull && othIsDefined) ||\n !valIsDefined\n ) {\n return 1;\n }\n if (\n (!valIsNull && value < other) ||\n (othIsNull && valIsDefined) ||\n !othIsDefined\n ) {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * @param {Array} collection object with keys in attributes\n * @param {Array} iteratees attributes\n * @param {Array} orders asc | desc\n */\nfunction orderBy(collection, iteratees, orders) {\n if (!Array.isArray(collection)) {\n return [];\n }\n\n if (!Array.isArray(orders)) {\n orders = [];\n }\n\n var result = collection.map(function(value, index) {\n return {\n criteria: iteratees.map(function(iteratee) {\n return value[iteratee];\n }),\n index: index,\n value: value\n };\n });\n\n result.sort(function comparer(object, other) {\n var index = -1;\n\n while (++index < object.criteria.length) {\n var res = compareAscending(object.criteria[index], other.criteria[index]);\n if (res) {\n if (index >= orders.length) {\n return res;\n }\n if (orders[index] === 'desc') {\n return -res;\n }\n return res;\n }\n }\n\n // This ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n });\n\n return result.map(function(res) {\n return res.value;\n });\n}\n\nmodule.exports = orderBy;\n","'use strict';\n\nmodule.exports = function compact(array) {\n if (!Array.isArray(array)) {\n return [];\n }\n\n return array.filter(Boolean);\n};\n","'use strict';\n\n// @MAJOR can be replaced by native Array#findIndex when we change support\nmodule.exports = function find(array, comparator) {\n if (!Array.isArray(array)) {\n return -1;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return i;\n }\n }\n return -1;\n};\n","'use strict';\n\nvar find = require('./find');\n\n/**\n * Transform sort format from user friendly notation to lodash format\n * @param {string[]} sortBy array of predicate of the form \"attribute:order\"\n * @param {string[]} [defaults] array of predicate of the form \"attribute:order\"\n * @return {array.} array containing 2 elements : attributes, orders\n */\nmodule.exports = function formatSort(sortBy, defaults) {\n var defaultInstructions = (defaults || []).map(function(sort) {\n return sort.split(':');\n });\n\n return sortBy.reduce(\n function preparePredicate(out, sort) {\n var sortInstruction = sort.split(':');\n\n var matchingDefault = find(defaultInstructions, function(\n defaultInstruction\n ) {\n return defaultInstruction[0] === sortInstruction[0];\n });\n\n if (sortInstruction.length > 1 || !matchingDefault) {\n out[0].push(sortInstruction[0]);\n out[1].push(sortInstruction[1]);\n return out;\n }\n\n out[0].push(matchingDefault[0]);\n out[1].push(matchingDefault[1]);\n return out;\n },\n [[], []]\n );\n};\n","'use strict';\n\nmodule.exports = generateTrees;\n\nvar orderBy = require('../functions/orderBy');\nvar find = require('../functions/find');\nvar prepareHierarchicalFacetSortBy = require('../functions/formatSort');\n\nfunction generateTrees(state) {\n return function generate(hierarchicalFacetResult, hierarchicalFacetIndex) {\n var hierarchicalFacet = state.hierarchicalFacets[hierarchicalFacetIndex];\n var hierarchicalFacetRefinement =\n (state.hierarchicalFacetsRefinements[hierarchicalFacet.name] &&\n state.hierarchicalFacetsRefinements[hierarchicalFacet.name][0]) ||\n '';\n var hierarchicalSeparator = state._getHierarchicalFacetSeparator(\n hierarchicalFacet\n );\n var hierarchicalRootPath = state._getHierarchicalRootPath(\n hierarchicalFacet\n );\n var hierarchicalShowParentLevel = state._getHierarchicalShowParentLevel(\n hierarchicalFacet\n );\n var sortBy = prepareHierarchicalFacetSortBy(\n state._getHierarchicalFacetSortBy(hierarchicalFacet)\n );\n\n var rootExhaustive = hierarchicalFacetResult.every(function(facetResult) {\n return facetResult.exhaustive;\n });\n\n var generateTreeFn = generateHierarchicalTree(\n sortBy,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel,\n hierarchicalFacetRefinement\n );\n\n var results = hierarchicalFacetResult;\n\n if (hierarchicalRootPath) {\n results = hierarchicalFacetResult.slice(\n hierarchicalRootPath.split(hierarchicalSeparator).length\n );\n }\n\n return results.reduce(generateTreeFn, {\n name: state.hierarchicalFacets[hierarchicalFacetIndex].name,\n count: null, // root level, no count\n isRefined: true, // root level, always refined\n path: null, // root level, no path\n exhaustive: rootExhaustive,\n data: null\n });\n };\n}\n\nfunction generateHierarchicalTree(\n sortBy,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel,\n currentRefinement\n) {\n return function generateTree(\n hierarchicalTree,\n hierarchicalFacetResult,\n currentHierarchicalLevel\n ) {\n var parent = hierarchicalTree;\n\n if (currentHierarchicalLevel > 0) {\n var level = 0;\n\n parent = hierarchicalTree;\n\n while (level < currentHierarchicalLevel) {\n /**\n * @type {object[]]} hierarchical data\n */\n var data = parent && Array.isArray(parent.data) ? parent.data : [];\n parent = find(data, function(subtree) {\n return subtree.isRefined;\n });\n level++;\n }\n }\n\n // we found a refined parent, let's add current level data under it\n if (parent) {\n // filter values in case an object has multiple categories:\n // {\n // categories: {\n // level0: ['beers', 'bières'],\n // level1: ['beers > IPA', 'bières > Belges']\n // }\n // }\n //\n // If parent refinement is `beers`, then we do not want to have `bières > Belges`\n // showing up\n\n var picked = Object.keys(hierarchicalFacetResult.data)\n .map(function(facetValue) {\n return [facetValue, hierarchicalFacetResult.data[facetValue]];\n })\n .filter(function(tuple) {\n var facetValue = tuple[0];\n return onlyMatchingTree(\n facetValue,\n parent.path || hierarchicalRootPath,\n currentRefinement,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel\n );\n });\n\n parent.data = orderBy(\n picked.map(function(tuple) {\n var facetValue = tuple[0];\n var facetCount = tuple[1];\n\n return format(\n facetCount,\n facetValue,\n hierarchicalSeparator,\n currentRefinement,\n hierarchicalFacetResult.exhaustive\n );\n }),\n sortBy[0],\n sortBy[1]\n );\n }\n\n return hierarchicalTree;\n };\n}\n\nfunction onlyMatchingTree(\n facetValue,\n parentPath,\n currentRefinement,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel\n) {\n // we want the facetValue is a child of hierarchicalRootPath\n if (\n hierarchicalRootPath &&\n (facetValue.indexOf(hierarchicalRootPath) !== 0 ||\n hierarchicalRootPath === facetValue)\n ) {\n return false;\n }\n\n // we always want root levels (only when there is no prefix path)\n return (\n (!hierarchicalRootPath &&\n facetValue.indexOf(hierarchicalSeparator) === -1) ||\n // if there is a rootPath, being root level mean 1 level under rootPath\n (hierarchicalRootPath &&\n facetValue.split(hierarchicalSeparator).length -\n hierarchicalRootPath.split(hierarchicalSeparator).length ===\n 1) ||\n // if current refinement is a root level and current facetValue is a root level,\n // keep the facetValue\n (facetValue.indexOf(hierarchicalSeparator) === -1 &&\n currentRefinement.indexOf(hierarchicalSeparator) === -1) ||\n // currentRefinement is a child of the facet value\n currentRefinement.indexOf(facetValue) === 0 ||\n // facetValue is a child of the current parent, add it\n (facetValue.indexOf(parentPath + hierarchicalSeparator) === 0 &&\n (hierarchicalShowParentLevel ||\n facetValue.indexOf(currentRefinement) === 0))\n );\n}\n\nfunction format(\n facetCount,\n facetValue,\n hierarchicalSeparator,\n currentRefinement,\n exhaustive\n) {\n var parts = facetValue.split(hierarchicalSeparator);\n return {\n name: parts[parts.length - 1].trim(),\n path: facetValue,\n count: facetCount,\n isRefined:\n currentRefinement === facetValue ||\n currentRefinement.indexOf(facetValue + hierarchicalSeparator) === 0,\n exhaustive: exhaustive,\n data: null\n };\n}\n","'use strict';\n\nvar merge = require('../functions/merge');\nvar defaultsPure = require('../functions/defaultsPure');\nvar orderBy = require('../functions/orderBy');\nvar compact = require('../functions/compact');\nvar find = require('../functions/find');\nvar findIndex = require('../functions/findIndex');\nvar formatSort = require('../functions/formatSort');\n\nvar generateHierarchicalTree = require('./generate-hierarchical-tree');\n\n/**\n * @typedef SearchResults.Facet\n * @type {object}\n * @property {string} name name of the attribute in the record\n * @property {object} data the faceting data: value, number of entries\n * @property {object} stats undefined unless facet_stats is retrieved from algolia\n */\n\n/**\n * @typedef SearchResults.HierarchicalFacet\n * @type {object}\n * @property {string} name name of the current value given the hierarchical level, trimmed.\n * If root node, you get the facet name\n * @property {number} count number of objects matching this hierarchical value\n * @property {string} path the current hierarchical value full path\n * @property {boolean} isRefined `true` if the current value was refined, `false` otherwise\n * @property {HierarchicalFacet[]} data sub values for the current level\n */\n\n/**\n * @typedef SearchResults.FacetValue\n * @type {object}\n * @property {string} name the facet value itself\n * @property {number} count times this facet appears in the results\n * @property {boolean} isRefined is the facet currently selected\n * @property {boolean} isExcluded is the facet currently excluded (only for conjunctive facets)\n */\n\n/**\n * @typedef Refinement\n * @type {object}\n * @property {string} type the type of filter used:\n * `numeric`, `facet`, `exclude`, `disjunctive`, `hierarchical`\n * @property {string} attributeName name of the attribute used for filtering\n * @property {string} name the value of the filter\n * @property {number} numericValue the value as a number. Only for numeric filters.\n * @property {string} operator the operator used. Only for numeric filters.\n * @property {number} count the number of computed hits for this filter. Only on facets.\n * @property {boolean} exhaustive if the count is exhaustive\n */\n\n/**\n * @param {string[]} attributes\n */\nfunction getIndices(attributes) {\n var indices = {};\n\n attributes.forEach(function(val, idx) {\n indices[val] = idx;\n });\n\n return indices;\n}\n\nfunction assignFacetStats(dest, facetStats, key) {\n if (facetStats && facetStats[key]) {\n dest.stats = facetStats[key];\n }\n}\n\n/**\n * @typedef {Object} HierarchicalFacet\n * @property {string} name\n * @property {string[]} attributes\n */\n\n/**\n * @param {HierarchicalFacet[]} hierarchicalFacets\n * @param {string} hierarchicalAttributeName\n */\nfunction findMatchingHierarchicalFacetFromAttributeName(\n hierarchicalFacets,\n hierarchicalAttributeName\n) {\n return find(hierarchicalFacets, function facetKeyMatchesAttribute(\n hierarchicalFacet\n ) {\n var facetNames = hierarchicalFacet.attributes || [];\n return facetNames.indexOf(hierarchicalAttributeName) > -1;\n });\n}\n\n/*eslint-disable */\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {SearchParameters} state state that led to the response\n * @param {array.} results the results from algolia client\n * @example SearchResults of the first query in\n * the instant search demo\n{\n \"hitsPerPage\": 10,\n \"processingTimeMS\": 2,\n \"facets\": [\n {\n \"name\": \"type\",\n \"data\": {\n \"HardGood\": 6627,\n \"BlackTie\": 550,\n \"Music\": 665,\n \"Software\": 131,\n \"Game\": 456,\n \"Movie\": 1571\n },\n \"exhaustive\": false\n },\n {\n \"exhaustive\": false,\n \"data\": {\n \"Free shipping\": 5507\n },\n \"name\": \"shipping\"\n }\n ],\n \"hits\": [\n {\n \"thumbnailImage\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_54x108_s.gif\",\n \"_highlightResult\": {\n \"shortDescription\": {\n \"matchLevel\": \"none\",\n \"value\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n \"matchedWords\": []\n },\n \"category\": {\n \"matchLevel\": \"none\",\n \"value\": \"Computer Security Software\",\n \"matchedWords\": []\n },\n \"manufacturer\": {\n \"matchedWords\": [],\n \"value\": \"Webroot\",\n \"matchLevel\": \"none\"\n },\n \"name\": {\n \"value\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n \"matchedWords\": [],\n \"matchLevel\": \"none\"\n }\n },\n \"image\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_105x210_sc.jpg\",\n \"shipping\": \"Free shipping\",\n \"bestSellingRank\": 4,\n \"shortDescription\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n \"url\": \"http://www.bestbuy.com/site/webroot-secureanywhere-internet-security-3-devi…d=1219060687969&skuId=1688832&cmp=RMX&ky=2d3GfEmNIzjA0vkzveHdZEBgpPCyMnLTJ\",\n \"name\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n \"category\": \"Computer Security Software\",\n \"salePrice_range\": \"1 - 50\",\n \"objectID\": \"1688832\",\n \"type\": \"Software\",\n \"customerReviewCount\": 5980,\n \"salePrice\": 49.99,\n \"manufacturer\": \"Webroot\"\n },\n ....\n ],\n \"nbHits\": 10000,\n \"disjunctiveFacets\": [\n {\n \"exhaustive\": false,\n \"data\": {\n \"5\": 183,\n \"12\": 112,\n \"7\": 149,\n ...\n },\n \"name\": \"customerReviewCount\",\n \"stats\": {\n \"max\": 7461,\n \"avg\": 157.939,\n \"min\": 1\n }\n },\n {\n \"data\": {\n \"Printer Ink\": 142,\n \"Wireless Speakers\": 60,\n \"Point & Shoot Cameras\": 48,\n ...\n },\n \"name\": \"category\",\n \"exhaustive\": false\n },\n {\n \"exhaustive\": false,\n \"data\": {\n \"> 5000\": 2,\n \"1 - 50\": 6524,\n \"501 - 2000\": 566,\n \"201 - 500\": 1501,\n \"101 - 200\": 1360,\n \"2001 - 5000\": 47\n },\n \"name\": \"salePrice_range\"\n },\n {\n \"data\": {\n \"Dynex™\": 202,\n \"Insignia™\": 230,\n \"PNY\": 72,\n ...\n },\n \"name\": \"manufacturer\",\n \"exhaustive\": false\n }\n ],\n \"query\": \"\",\n \"nbPages\": 100,\n \"page\": 0,\n \"index\": \"bestbuy\"\n}\n **/\n/*eslint-enable */\nfunction SearchResults(state, results) {\n var mainSubResponse = results[0];\n\n this._rawResults = results;\n\n /**\n * query used to generate the results\n * @member {string}\n */\n this.query = mainSubResponse.query;\n /**\n * The query as parsed by the engine given all the rules.\n * @member {string}\n */\n this.parsedQuery = mainSubResponse.parsedQuery;\n /**\n * all the records that match the search parameters. Each record is\n * augmented with a new attribute `_highlightResult`\n * which is an object keyed by attribute and with the following properties:\n * - `value` : the value of the facet highlighted (html)\n * - `matchLevel`: full, partial or none depending on how the query terms match\n * @member {object[]}\n */\n this.hits = mainSubResponse.hits;\n /**\n * index where the results come from\n * @member {string}\n */\n this.index = mainSubResponse.index;\n /**\n * number of hits per page requested\n * @member {number}\n */\n this.hitsPerPage = mainSubResponse.hitsPerPage;\n /**\n * total number of hits of this query on the index\n * @member {number}\n */\n this.nbHits = mainSubResponse.nbHits;\n /**\n * total number of pages with respect to the number of hits per page and the total number of hits\n * @member {number}\n */\n this.nbPages = mainSubResponse.nbPages;\n /**\n * current page\n * @member {number}\n */\n this.page = mainSubResponse.page;\n /**\n * sum of the processing time of all the queries\n * @member {number}\n */\n this.processingTimeMS = results.reduce(function(sum, result) {\n return result.processingTimeMS === undefined\n ? sum\n : sum + result.processingTimeMS;\n }, 0);\n /**\n * The position if the position was guessed by IP.\n * @member {string}\n * @example \"48.8637,2.3615\",\n */\n this.aroundLatLng = mainSubResponse.aroundLatLng;\n /**\n * The radius computed by Algolia.\n * @member {string}\n * @example \"126792922\",\n */\n this.automaticRadius = mainSubResponse.automaticRadius;\n /**\n * String identifying the server used to serve this request.\n *\n * getRankingInfo needs to be set to `true` for this to be returned\n *\n * @member {string}\n * @example \"c7-use-2.algolia.net\",\n */\n this.serverUsed = mainSubResponse.serverUsed;\n /**\n * Boolean that indicates if the computation of the counts did time out.\n * @deprecated\n * @member {boolean}\n */\n this.timeoutCounts = mainSubResponse.timeoutCounts;\n /**\n * Boolean that indicates if the computation of the hits did time out.\n * @deprecated\n * @member {boolean}\n */\n this.timeoutHits = mainSubResponse.timeoutHits;\n\n /**\n * True if the counts of the facets is exhaustive\n * @member {boolean}\n */\n this.exhaustiveFacetsCount = mainSubResponse.exhaustiveFacetsCount;\n\n /**\n * True if the number of hits is exhaustive\n * @member {boolean}\n */\n this.exhaustiveNbHits = mainSubResponse.exhaustiveNbHits;\n\n\n /**\n * Contains the userData if they are set by a [query rule](https://www.algolia.com/doc/guides/query-rules/query-rules-overview/).\n * @member {object[]}\n */\n this.userData = mainSubResponse.userData;\n\n /**\n * queryID is the unique identifier of the query used to generate the current search results.\n * This value is only available if the `clickAnalytics` search parameter is set to `true`.\n * @member {string}\n */\n this.queryID = mainSubResponse.queryID;\n\n /**\n * disjunctive facets results\n * @member {SearchResults.Facet[]}\n */\n this.disjunctiveFacets = [];\n /**\n * disjunctive facets results\n * @member {SearchResults.HierarchicalFacet[]}\n */\n this.hierarchicalFacets = state.hierarchicalFacets.map(function initFutureTree() {\n return [];\n });\n /**\n * other facets results\n * @member {SearchResults.Facet[]}\n */\n this.facets = [];\n\n var disjunctiveFacets = state.getRefinedDisjunctiveFacets();\n\n var facetsIndices = getIndices(state.facets);\n var disjunctiveFacetsIndices = getIndices(state.disjunctiveFacets);\n var nextDisjunctiveResult = 1;\n\n var self = this;\n // Since we send request only for disjunctive facets that have been refined,\n // we get the facets information from the first, general, response.\n\n var mainFacets = mainSubResponse.facets || {};\n\n Object.keys(mainFacets).forEach(function(facetKey) {\n var facetValueObject = mainFacets[facetKey];\n\n var hierarchicalFacet = findMatchingHierarchicalFacetFromAttributeName(\n state.hierarchicalFacets,\n facetKey\n );\n\n if (hierarchicalFacet) {\n // Place the hierarchicalFacet data at the correct index depending on\n // the attributes order that was defined at the helper initialization\n var facetIndex = hierarchicalFacet.attributes.indexOf(facetKey);\n var idxAttributeName = findIndex(state.hierarchicalFacets, function(f) {\n return f.name === hierarchicalFacet.name;\n });\n self.hierarchicalFacets[idxAttributeName][facetIndex] = {\n attribute: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount\n };\n } else {\n var isFacetDisjunctive = state.disjunctiveFacets.indexOf(facetKey) !== -1;\n var isFacetConjunctive = state.facets.indexOf(facetKey) !== -1;\n var position;\n\n if (isFacetDisjunctive) {\n position = disjunctiveFacetsIndices[facetKey];\n self.disjunctiveFacets[position] = {\n name: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount\n };\n assignFacetStats(self.disjunctiveFacets[position], mainSubResponse.facets_stats, facetKey);\n }\n if (isFacetConjunctive) {\n position = facetsIndices[facetKey];\n self.facets[position] = {\n name: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount\n };\n assignFacetStats(self.facets[position], mainSubResponse.facets_stats, facetKey);\n }\n }\n });\n\n // Make sure we do not keep holes within the hierarchical facets\n this.hierarchicalFacets = compact(this.hierarchicalFacets);\n\n // aggregate the refined disjunctive facets\n disjunctiveFacets.forEach(function(disjunctiveFacet) {\n var result = results[nextDisjunctiveResult];\n var facets = result && result.facets ? result.facets : {};\n var hierarchicalFacet = state.getHierarchicalFacetByName(disjunctiveFacet);\n\n // There should be only item in facets.\n Object.keys(facets).forEach(function(dfacet) {\n var facetResults = facets[dfacet];\n\n var position;\n\n if (hierarchicalFacet) {\n position = findIndex(state.hierarchicalFacets, function(f) {\n return f.name === hierarchicalFacet.name;\n });\n var attributeIndex = findIndex(self.hierarchicalFacets[position], function(f) {\n return f.attribute === dfacet;\n });\n\n // previous refinements and no results so not able to find it\n if (attributeIndex === -1) {\n return;\n }\n\n self.hierarchicalFacets[position][attributeIndex].data = merge(\n {},\n self.hierarchicalFacets[position][attributeIndex].data,\n facetResults\n );\n } else {\n position = disjunctiveFacetsIndices[dfacet];\n\n var dataFromMainRequest = mainSubResponse.facets && mainSubResponse.facets[dfacet] || {};\n\n self.disjunctiveFacets[position] = {\n name: dfacet,\n data: defaultsPure({}, facetResults, dataFromMainRequest),\n exhaustive: result.exhaustiveFacetsCount\n };\n assignFacetStats(self.disjunctiveFacets[position], result.facets_stats, dfacet);\n\n if (state.disjunctiveFacetsRefinements[dfacet]) {\n state.disjunctiveFacetsRefinements[dfacet].forEach(function(refinementValue) {\n // add the disjunctive refinements if it is no more retrieved\n if (!self.disjunctiveFacets[position].data[refinementValue] &&\n state.disjunctiveFacetsRefinements[dfacet].indexOf(refinementValue) > -1) {\n self.disjunctiveFacets[position].data[refinementValue] = 0;\n }\n });\n }\n }\n });\n nextDisjunctiveResult++;\n });\n\n // if we have some root level values for hierarchical facets, merge them\n state.getRefinedHierarchicalFacets().forEach(function(refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n // if we are already at a root refinement (or no refinement at all), there is no\n // root level values request\n if (currentRefinement.length === 0 || currentRefinement[0].split(separator).length < 2) {\n return;\n }\n\n var result = results[nextDisjunctiveResult];\n var facets = result && result.facets\n ? result.facets\n : {};\n Object.keys(facets).forEach(function(dfacet) {\n var facetResults = facets[dfacet];\n var position = findIndex(state.hierarchicalFacets, function(f) {\n return f.name === hierarchicalFacet.name;\n });\n var attributeIndex = findIndex(self.hierarchicalFacets[position], function(f) {\n return f.attribute === dfacet;\n });\n\n // previous refinements and no results so not able to find it\n if (attributeIndex === -1) {\n return;\n }\n\n // when we always get root levels, if the hits refinement is `beers > IPA` (count: 5),\n // then the disjunctive values will be `beers` (count: 100),\n // but we do not want to display\n // | beers (100)\n // > IPA (5)\n // We want\n // | beers (5)\n // > IPA (5)\n var defaultData = {};\n\n if (currentRefinement.length > 0) {\n var root = currentRefinement[0].split(separator)[0];\n defaultData[root] = self.hierarchicalFacets[position][attributeIndex].data[root];\n }\n\n self.hierarchicalFacets[position][attributeIndex].data = defaultsPure(\n defaultData,\n facetResults,\n self.hierarchicalFacets[position][attributeIndex].data\n );\n });\n\n nextDisjunctiveResult++;\n });\n\n // add the excludes\n Object.keys(state.facetsExcludes).forEach(function(facetName) {\n var excludes = state.facetsExcludes[facetName];\n var position = facetsIndices[facetName];\n\n self.facets[position] = {\n name: facetName,\n data: mainSubResponse.facets[facetName],\n exhaustive: mainSubResponse.exhaustiveFacetsCount\n };\n excludes.forEach(function(facetValue) {\n self.facets[position] = self.facets[position] || {name: facetName};\n self.facets[position].data = self.facets[position].data || {};\n self.facets[position].data[facetValue] = 0;\n });\n });\n\n /**\n * @type {Array}\n */\n this.hierarchicalFacets = this.hierarchicalFacets.map(generateHierarchicalTree(state));\n\n /**\n * @type {Array}\n */\n this.facets = compact(this.facets);\n /**\n * @type {Array}\n */\n this.disjunctiveFacets = compact(this.disjunctiveFacets);\n\n this._state = state;\n}\n\n/**\n * Get a facet object with its name\n * @deprecated\n * @param {string} name name of the faceted attribute\n * @return {SearchResults.Facet} the facet object\n */\nSearchResults.prototype.getFacetByName = function(name) {\n function predicate(facet) {\n return facet.name === name;\n }\n\n return find(this.facets, predicate) ||\n find(this.disjunctiveFacets, predicate) ||\n find(this.hierarchicalFacets, predicate);\n};\n\n/**\n * Get the facet values of a specified attribute from a SearchResults object.\n * @private\n * @param {SearchResults} results the search results to search in\n * @param {string} attribute name of the faceted attribute to search for\n * @return {array|object} facet values. For the hierarchical facets it is an object.\n */\nfunction extractNormalizedFacetValues(results, attribute) {\n function predicate(facet) {\n return facet.name === attribute;\n }\n\n if (results._state.isConjunctiveFacet(attribute)) {\n var facet = find(results.facets, predicate);\n if (!facet) return [];\n\n return Object.keys(facet.data).map(function(name) {\n return {\n name: name,\n count: facet.data[name],\n isRefined: results._state.isFacetRefined(attribute, name),\n isExcluded: results._state.isExcludeRefined(attribute, name)\n };\n });\n } else if (results._state.isDisjunctiveFacet(attribute)) {\n var disjunctiveFacet = find(results.disjunctiveFacets, predicate);\n if (!disjunctiveFacet) return [];\n\n return Object.keys(disjunctiveFacet.data).map(function(name) {\n return {\n name: name,\n count: disjunctiveFacet.data[name],\n isRefined: results._state.isDisjunctiveFacetRefined(attribute, name)\n };\n });\n } else if (results._state.isHierarchicalFacet(attribute)) {\n return find(results.hierarchicalFacets, predicate);\n }\n}\n\n/**\n * Sort nodes of a hierarchical facet results\n * @private\n * @param {HierarchicalFacet} node node to upon which we want to apply the sort\n */\nfunction recSort(sortFn, node) {\n if (!node.data || node.data.length === 0) {\n return node;\n }\n\n var children = node.data.map(function(childNode) {\n return recSort(sortFn, childNode);\n });\n var sortedChildren = sortFn(children);\n var newNode = merge({}, node, {data: sortedChildren});\n return newNode;\n}\n\nSearchResults.DEFAULT_SORT = ['isRefined:desc', 'count:desc', 'name:asc'];\n\nfunction vanillaSortFn(order, data) {\n return data.sort(order);\n}\n\n/**\n * Get a the list of values for a given facet attribute. Those values are sorted\n * refinement first, descending count (bigger value on top), and name ascending\n * (alphabetical order). The sort formula can overridden using either string based\n * predicates or a function.\n *\n * This method will return all the values returned by the Algolia engine plus all\n * the values already refined. This means that it can happen that the\n * `maxValuesPerFacet` [configuration](https://www.algolia.com/doc/rest-api/search#param-maxValuesPerFacet)\n * might not be respected if you have facet values that are already refined.\n * @param {string} attribute attribute name\n * @param {object} opts configuration options.\n * @param {Array. | function} opts.sortBy\n * When using strings, it consists of\n * the name of the [FacetValue](#SearchResults.FacetValue) or the\n * [HierarchicalFacet](#SearchResults.HierarchicalFacet) attributes with the\n * order (`asc` or `desc`). For example to order the value by count, the\n * argument would be `['count:asc']`.\n *\n * If only the attribute name is specified, the ordering defaults to the one\n * specified in the default value for this attribute.\n *\n * When not specified, the order is\n * ascending. This parameter can also be a function which takes two facet\n * values and should return a number, 0 if equal, 1 if the first argument is\n * bigger or -1 otherwise.\n *\n * The default value for this attribute `['isRefined:desc', 'count:desc', 'name:asc']`\n * @return {FacetValue[]|HierarchicalFacet|undefined} depending on the type of facet of\n * the attribute requested (hierarchical, disjunctive or conjunctive)\n * @example\n * helper.on('result', function(event){\n * //get values ordered only by name ascending using the string predicate\n * event.results.getFacetValues('city', {sortBy: ['name:asc']});\n * //get values ordered only by count ascending using a function\n * event.results.getFacetValues('city', {\n * // this is equivalent to ['count:asc']\n * sortBy: function(a, b) {\n * if (a.count === b.count) return 0;\n * if (a.count > b.count) return 1;\n * if (b.count > a.count) return -1;\n * }\n * });\n * });\n */\nSearchResults.prototype.getFacetValues = function(attribute, opts) {\n var facetValues = extractNormalizedFacetValues(this, attribute);\n if (!facetValues) {\n return undefined;\n }\n\n var options = defaultsPure({}, opts, {sortBy: SearchResults.DEFAULT_SORT});\n\n if (Array.isArray(options.sortBy)) {\n var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);\n if (Array.isArray(facetValues)) {\n return orderBy(facetValues, order[0], order[1]);\n }\n // If facetValues is not an array, it's an object thus a hierarchical facet object\n return recSort(function(hierarchicalFacetValues) {\n return orderBy(hierarchicalFacetValues, order[0], order[1]);\n }, facetValues);\n } else if (typeof options.sortBy === 'function') {\n if (Array.isArray(facetValues)) {\n return facetValues.sort(options.sortBy);\n }\n // If facetValues is not an array, it's an object thus a hierarchical facet object\n return recSort(function(data) {\n return vanillaSortFn(options.sortBy, data);\n }, facetValues);\n }\n throw new Error(\n 'options.sortBy is optional but if defined it must be ' +\n 'either an array of string (predicates) or a sorting function'\n );\n};\n\n/**\n * Returns the facet stats if attribute is defined and the facet contains some.\n * Otherwise returns undefined.\n * @param {string} attribute name of the faceted attribute\n * @return {object} The stats of the facet\n */\nSearchResults.prototype.getFacetStats = function(attribute) {\n if (this._state.isConjunctiveFacet(attribute)) {\n return getFacetStatsIfAvailable(this.facets, attribute);\n } else if (this._state.isDisjunctiveFacet(attribute)) {\n return getFacetStatsIfAvailable(this.disjunctiveFacets, attribute);\n }\n\n return undefined;\n};\n\n/**\n * @typedef {Object} FacetListItem\n * @property {string} name\n */\n\n/**\n * @param {FacetListItem[]} facetList (has more items, but enough for here)\n * @param {string} facetName\n */\nfunction getFacetStatsIfAvailable(facetList, facetName) {\n var data = find(facetList, function(facet) {\n return facet.name === facetName;\n });\n return data && data.stats;\n}\n\n/**\n * Returns all refinements for all filters + tags. It also provides\n * additional information: count and exhaustiveness for each filter.\n *\n * See the [refinement type](#Refinement) for an exhaustive view of the available\n * data.\n *\n * Note that for a numeric refinement, results are grouped per operator, this\n * means that it will return responses for operators which are empty.\n *\n * @return {Array.} all the refinements\n */\nSearchResults.prototype.getRefinements = function() {\n var state = this._state;\n var results = this;\n var res = [];\n\n Object.keys(state.facetsRefinements).forEach(function(attributeName) {\n state.facetsRefinements[attributeName].forEach(function(name) {\n res.push(getRefinement(state, 'facet', attributeName, name, results.facets));\n });\n });\n\n Object.keys(state.facetsExcludes).forEach(function(attributeName) {\n state.facetsExcludes[attributeName].forEach(function(name) {\n res.push(getRefinement(state, 'exclude', attributeName, name, results.facets));\n });\n });\n\n Object.keys(state.disjunctiveFacetsRefinements).forEach(function(attributeName) {\n state.disjunctiveFacetsRefinements[attributeName].forEach(function(name) {\n res.push(getRefinement(state, 'disjunctive', attributeName, name, results.disjunctiveFacets));\n });\n });\n\n Object.keys(state.hierarchicalFacetsRefinements).forEach(function(attributeName) {\n state.hierarchicalFacetsRefinements[attributeName].forEach(function(name) {\n res.push(getHierarchicalRefinement(state, attributeName, name, results.hierarchicalFacets));\n });\n });\n\n\n Object.keys(state.numericRefinements).forEach(function(attributeName) {\n var operators = state.numericRefinements[attributeName];\n Object.keys(operators).forEach(function(operator) {\n operators[operator].forEach(function(value) {\n res.push({\n type: 'numeric',\n attributeName: attributeName,\n name: value,\n numericValue: value,\n operator: operator\n });\n });\n });\n });\n\n state.tagRefinements.forEach(function(name) {\n res.push({type: 'tag', attributeName: '_tags', name: name});\n });\n\n return res;\n};\n\n/**\n * @typedef {Object} Facet\n * @property {string} name\n * @property {Object} data\n * @property {boolean} exhaustive\n */\n\n/**\n * @param {*} state\n * @param {*} type\n * @param {string} attributeName\n * @param {*} name\n * @param {Facet[]} resultsFacets\n */\nfunction getRefinement(state, type, attributeName, name, resultsFacets) {\n var facet = find(resultsFacets, function(f) {\n return f.name === attributeName;\n });\n var count = facet && facet.data && facet.data[name] ? facet.data[name] : 0;\n var exhaustive = (facet && facet.exhaustive) || false;\n\n return {\n type: type,\n attributeName: attributeName,\n name: name,\n count: count,\n exhaustive: exhaustive\n };\n}\n\n/**\n * @param {*} state\n * @param {string} attributeName\n * @param {*} name\n * @param {Facet[]} resultsFacets\n */\nfunction getHierarchicalRefinement(state, attributeName, name, resultsFacets) {\n var facetDeclaration = state.getHierarchicalFacetByName(attributeName);\n var separator = state._getHierarchicalFacetSeparator(facetDeclaration);\n var split = name.split(separator);\n var rootFacet = find(resultsFacets, function(facet) {\n return facet.name === attributeName;\n });\n\n var facet = split.reduce(function(intermediateFacet, part) {\n var newFacet =\n intermediateFacet && find(intermediateFacet.data, function(f) {\n return f.name === part;\n });\n return newFacet !== undefined ? newFacet : intermediateFacet;\n }, rootFacet);\n\n var count = (facet && facet.count) || 0;\n var exhaustive = (facet && facet.exhaustive) || false;\n var path = (facet && facet.path) || '';\n\n return {\n type: 'hierarchical',\n attributeName: attributeName,\n name: path,\n count: count,\n exhaustive: exhaustive\n };\n}\n\nmodule.exports = SearchResults;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","'use strict';\n\nfunction inherits(ctor, superCtor) {\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n}\n\nmodule.exports = inherits;\n","'use strict';\n\nvar events = require('events');\nvar inherits = require('../functions/inherits');\n\n/**\n * A DerivedHelper is a way to create sub requests to\n * Algolia from a main helper.\n * @class\n * @classdesc The DerivedHelper provides an event based interface for search callbacks:\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n */\nfunction DerivedHelper(mainHelper, fn) {\n this.main = mainHelper;\n this.fn = fn;\n this.lastResults = null;\n}\n\ninherits(DerivedHelper, events.EventEmitter);\n\n/**\n * Detach this helper from the main helper\n * @return {undefined}\n * @throws Error if the derived helper is already detached\n */\nDerivedHelper.prototype.detach = function() {\n this.removeAllListeners();\n this.main.detachDerivedHelper(this);\n};\n\nDerivedHelper.prototype.getModifiedState = function(parameters) {\n return this.fn(parameters);\n};\n\nmodule.exports = DerivedHelper;\n","'use strict';\n\nvar merge = require('./functions/merge');\n\nvar requestBuilder = {\n /**\n * Get all the queries to send to the client, those queries can used directly\n * with the Algolia client.\n * @private\n * @return {object[]} The queries\n */\n _getQueries: function getQueries(index, state) {\n var queries = [];\n\n // One query for the hits\n queries.push({\n indexName: index,\n params: requestBuilder._getHitsSearchParams(state)\n });\n\n // One for each disjunctive facets\n state.getRefinedDisjunctiveFacets().forEach(function(refinedFacet) {\n queries.push({\n indexName: index,\n params: requestBuilder._getDisjunctiveFacetSearchParams(state, refinedFacet)\n });\n });\n\n // maybe more to get the root level of hierarchical facets when activated\n state.getRefinedHierarchicalFacets().forEach(function(refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n // if we are deeper than level 0 (starting from `beer > IPA`)\n // we want to get the root values\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n if (currentRefinement.length > 0 && currentRefinement[0].split(separator).length > 1) {\n queries.push({\n indexName: index,\n params: requestBuilder._getDisjunctiveFacetSearchParams(state, refinedFacet, true)\n });\n }\n });\n\n return queries;\n },\n\n /**\n * Build search parameters used to fetch hits\n * @private\n * @return {object.}\n */\n _getHitsSearchParams: function(state) {\n var facets = state.facets\n .concat(state.disjunctiveFacets)\n .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state));\n\n\n var facetFilters = requestBuilder._getFacetFilters(state);\n var numericFilters = requestBuilder._getNumericFilters(state);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {\n facets: facets,\n tagFilters: tagFilters\n };\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n return merge({}, state.getQueryParams(), additionalParams);\n },\n\n /**\n * Build search parameters used to fetch a disjunctive facet\n * @private\n * @param {string} facet the associated facet name\n * @param {boolean} hierarchicalRootLevel ?? FIXME\n * @return {object}\n */\n _getDisjunctiveFacetSearchParams: function(state, facet, hierarchicalRootLevel) {\n var facetFilters = requestBuilder._getFacetFilters(state, facet, hierarchicalRootLevel);\n var numericFilters = requestBuilder._getNumericFilters(state, facet);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {\n hitsPerPage: 1,\n page: 0,\n attributesToRetrieve: [],\n attributesToHighlight: [],\n attributesToSnippet: [],\n tagFilters: tagFilters,\n analytics: false,\n clickAnalytics: false\n };\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facet);\n\n if (hierarchicalFacet) {\n additionalParams.facets = requestBuilder._getDisjunctiveHierarchicalFacetAttribute(\n state,\n hierarchicalFacet,\n hierarchicalRootLevel\n );\n } else {\n additionalParams.facets = facet;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n return merge({}, state.getQueryParams(), additionalParams);\n },\n\n /**\n * Return the numeric filters in an algolia request fashion\n * @private\n * @param {string} [facetName] the name of the attribute for which the filters should be excluded\n * @return {string[]} the numeric filters in the algolia format\n */\n _getNumericFilters: function(state, facetName) {\n if (state.numericFilters) {\n return state.numericFilters;\n }\n\n var numericFilters = [];\n\n Object.keys(state.numericRefinements).forEach(function(attribute) {\n var operators = state.numericRefinements[attribute] || {};\n Object.keys(operators).forEach(function(operator) {\n var values = operators[operator] || [];\n if (facetName !== attribute) {\n values.forEach(function(value) {\n if (Array.isArray(value)) {\n var vs = value.map(function(v) {\n return attribute + operator + v;\n });\n numericFilters.push(vs);\n } else {\n numericFilters.push(attribute + operator + value);\n }\n });\n }\n });\n });\n\n return numericFilters;\n },\n\n /**\n * Return the tags filters depending\n * @private\n * @return {string}\n */\n _getTagFilters: function(state) {\n if (state.tagFilters) {\n return state.tagFilters;\n }\n\n return state.tagRefinements.join(',');\n },\n\n\n /**\n * Build facetFilters parameter based on current refinements. The array returned\n * contains strings representing the facet filters in the algolia format.\n * @private\n * @param {string} [facet] if set, the current disjunctive facet\n * @return {array.}\n */\n _getFacetFilters: function(state, facet, hierarchicalRootLevel) {\n var facetFilters = [];\n\n var facetsRefinements = state.facetsRefinements || {};\n Object.keys(facetsRefinements).forEach(function(facetName) {\n var facetValues = facetsRefinements[facetName] || [];\n facetValues.forEach(function(facetValue) {\n facetFilters.push(facetName + ':' + facetValue);\n });\n });\n\n var facetsExcludes = state.facetsExcludes || {};\n Object.keys(facetsExcludes).forEach(function(facetName) {\n var facetValues = facetsExcludes[facetName] || [];\n facetValues.forEach(function(facetValue) {\n facetFilters.push(facetName + ':-' + facetValue);\n });\n });\n\n var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};\n Object.keys(disjunctiveFacetsRefinements).forEach(function(facetName) {\n var facetValues = disjunctiveFacetsRefinements[facetName] || [];\n if (facetName === facet || !facetValues || facetValues.length === 0) {\n return;\n }\n var orFilters = [];\n\n facetValues.forEach(function(facetValue) {\n orFilters.push(facetName + ':' + facetValue);\n });\n\n facetFilters.push(orFilters);\n });\n\n var hierarchicalFacetsRefinements = state.hierarchicalFacetsRefinements || {};\n Object.keys(hierarchicalFacetsRefinements).forEach(function(facetName) {\n var facetValues = hierarchicalFacetsRefinements[facetName] || [];\n var facetValue = facetValues[0];\n\n if (facetValue === undefined) {\n return;\n }\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facetName);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n var attributeToRefine;\n var attributesIndex;\n\n // we ask for parent facet values only when the `facet` is the current hierarchical facet\n if (facet === facetName) {\n // if we are at the root level already, no need to ask for facet values, we get them from\n // the hits query\n if (facetValue.indexOf(separator) === -1 || (!rootPath && hierarchicalRootLevel === true) ||\n (rootPath && rootPath.split(separator).length === facetValue.split(separator).length)) {\n return;\n }\n\n if (!rootPath) {\n attributesIndex = facetValue.split(separator).length - 2;\n facetValue = facetValue.slice(0, facetValue.lastIndexOf(separator));\n } else {\n attributesIndex = rootPath.split(separator).length - 1;\n facetValue = rootPath;\n }\n\n attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n } else {\n attributesIndex = facetValue.split(separator).length - 1;\n\n attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n }\n\n if (attributeToRefine) {\n facetFilters.push([attributeToRefine + ':' + facetValue]);\n }\n });\n\n return facetFilters;\n },\n\n _getHitsHierarchicalFacetsAttributes: function(state) {\n var out = [];\n\n return state.hierarchicalFacets.reduce(\n // ask for as much levels as there's hierarchical refinements\n function getHitsAttributesForHierarchicalFacet(allAttributes, hierarchicalFacet) {\n var hierarchicalRefinement = state.getHierarchicalRefinement(hierarchicalFacet.name)[0];\n\n // if no refinement, ask for root level\n if (!hierarchicalRefinement) {\n allAttributes.push(hierarchicalFacet.attributes[0]);\n return allAttributes;\n }\n\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var level = hierarchicalRefinement.split(separator).length;\n var newAttributes = hierarchicalFacet.attributes.slice(0, level + 1);\n\n return allAttributes.concat(newAttributes);\n }, out);\n },\n\n _getDisjunctiveHierarchicalFacetAttribute: function(state, hierarchicalFacet, rootLevel) {\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n if (rootLevel === true) {\n var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n var attributeIndex = 0;\n\n if (rootPath) {\n attributeIndex = rootPath.split(separator).length;\n }\n return [hierarchicalFacet.attributes[attributeIndex]];\n }\n\n var hierarchicalRefinement = state.getHierarchicalRefinement(hierarchicalFacet.name)[0] || '';\n // if refinement is 'beers > IPA > Flying dog',\n // then we want `facets: ['beers > IPA']` as disjunctive facet (parent level values)\n\n var parentLevel = hierarchicalRefinement.split(separator).length - 1;\n return hierarchicalFacet.attributes.slice(0, parentLevel + 1);\n },\n\n getSearchForFacetQuery: function(facetName, query, maxFacetHits, state) {\n var stateForSearchForFacetValues = state.isDisjunctiveFacet(facetName) ?\n state.clearRefinements(facetName) :\n state;\n var searchForFacetSearchParameters = {\n facetQuery: query,\n facetName: facetName\n };\n if (typeof maxFacetHits === 'number') {\n searchForFacetSearchParameters.maxFacetHits = maxFacetHits;\n }\n return merge(\n {},\n requestBuilder._getHitsSearchParams(stateForSearchForFacetValues),\n searchForFacetSearchParameters\n );\n }\n};\n\nmodule.exports = requestBuilder;\n","'use strict';\n\nmodule.exports = '3.1.0';\n","'use strict';\n\nvar SearchParameters = require('./SearchParameters');\nvar SearchResults = require('./SearchResults');\nvar DerivedHelper = require('./DerivedHelper');\nvar requestBuilder = require('./requestBuilder');\n\nvar events = require('events');\nvar inherits = require('./functions/inherits');\nvar objectHasKeys = require('./functions/objectHasKeys');\n\nvar version = require('./version');\n\n/**\n * Event triggered when a parameter is set or updated\n * @event AlgoliaSearchHelper#event:change\n * @property {object} event\n * @property {SearchParameters} event.state the current parameters with the latest changes applied\n * @property {SearchResults} event.results the previous results received from Algolia. `null` before the first request\n * @example\n * helper.on('change', function(event) {\n * console.log('The parameters have changed');\n * });\n */\n\n/**\n * Event triggered when a main search is sent to Algolia\n * @event AlgoliaSearchHelper#event:search\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search\n * @property {SearchResults} event.results the results from the previous search. `null` if it is the first search.\n * @example\n * helper.on('search', function(event) {\n * console.log('Search sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchForFacetValues` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchForFacetValues\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @property {string} event.facet the facet searched into\n * @property {string} event.query the query used to search in the facets\n * @example\n * helper.on('searchForFacetValues', function(event) {\n * console.log('searchForFacetValues sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchOnce` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchOnce\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @example\n * helper.on('searchOnce', function(event) {\n * console.log('searchOnce sent');\n * });\n */\n\n/**\n * Event triggered when the results are retrieved from Algolia\n * @event AlgoliaSearchHelper#event:result\n * @property {object} event\n * @property {SearchResults} event.results the results received from Algolia\n * @property {SearchParameters} event.state the parameters used to query Algolia. Those might be different from the one in the helper instance (for example if the network is unreliable).\n * @example\n * helper.on('result', function(event) {\n * console.log('Search results received');\n * });\n */\n\n/**\n * Event triggered when Algolia sends back an error. For example, if an unknown parameter is\n * used, the error can be caught using this event.\n * @event AlgoliaSearchHelper#event:error\n * @property {object} event\n * @property {Error} event.error the error returned by the Algolia.\n * @example\n * helper.on('error', function(event) {\n * console.log('Houston we got a problem.');\n * });\n */\n\n/**\n * Event triggered when the queue of queries have been depleted (with any result or outdated queries)\n * @event AlgoliaSearchHelper#event:searchQueueEmpty\n * @example\n * helper.on('searchQueueEmpty', function() {\n * console.log('No more search pending');\n * // This is received before the result event if we're not expecting new results\n * });\n *\n * helper.search();\n */\n\n/**\n * Initialize a new AlgoliaSearchHelper\n * @class\n * @classdesc The AlgoliaSearchHelper is a class that ease the management of the\n * search. It provides an event based interface for search callbacks:\n * - change: when the internal search state is changed.\n * This event contains a {@link SearchParameters} object and the\n * {@link SearchResults} of the last result if any.\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n * - error: when the response is an error. This event contains the error returned by the server.\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the index name to query\n * @param {SearchParameters | object} options an object defining the initial\n * config of the search. It doesn't have to be a {SearchParameters},\n * just an object containing the properties you need from it.\n */\nfunction AlgoliaSearchHelper(client, index, options) {\n if (typeof client.addAlgoliaAgent === 'function') {\n client.addAlgoliaAgent('JS Helper (' + version + ')');\n }\n\n this.setClient(client);\n var opts = options || {};\n opts.index = index;\n this.state = SearchParameters.make(opts);\n this.lastResults = null;\n this._queryId = 0;\n this._lastQueryIdReceived = -1;\n this.derivedHelpers = [];\n this._currentNbQueries = 0;\n}\n\ninherits(AlgoliaSearchHelper, events.EventEmitter);\n\n/**\n * Start the search with the parameters set in the state. When the\n * method is called, it triggers a `search` event. The results will\n * be available through the `result` event. If an error occurs, an\n * `error` will be fired instead.\n * @return {AlgoliaSearchHelper}\n * @fires search\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.search = function() {\n this._search({onlyWithDerivedHelpers: false});\n return this;\n};\n\nAlgoliaSearchHelper.prototype.searchOnlyWithDerivedHelpers = function() {\n this._search({onlyWithDerivedHelpers: true});\n return this;\n};\n\n/**\n * Gets the search query parameters that would be sent to the Algolia Client\n * for the hits\n * @return {object} Query Parameters\n */\nAlgoliaSearchHelper.prototype.getQuery = function() {\n var state = this.state;\n return requestBuilder._getHitsSearchParams(state);\n};\n\n/**\n * Start a search using a modified version of the current state. This method does\n * not trigger the helper lifecycle and does not modify the state kept internally\n * by the helper. This second aspect means that the next search call will be the\n * same as a search call before calling searchOnce.\n * @param {object} options can contain all the parameters that can be set to SearchParameters\n * plus the index\n * @param {function} [callback] optional callback executed when the response from the\n * server is back.\n * @return {promise|undefined} if a callback is passed the method returns undefined\n * otherwise it returns a promise containing an object with two keys :\n * - content with a SearchResults\n * - state with the state used for the query as a SearchParameters\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the callback API\n * var state = helper.searchOnce({hitsPerPage: 1},\n * function(error, content, state) {\n * // if an error occurred it will be passed in error, otherwise its value is null\n * // content contains the results formatted as a SearchResults\n * // state is the instance of SearchParameters used for this search\n * });\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the promise API\n * var state1 = helper.searchOnce({hitsPerPage: 1})\n * .then(promiseHandler);\n *\n * function promiseHandler(res) {\n * // res contains\n * // {\n * // content : SearchResults\n * // state : SearchParameters (the one used for this specific search)\n * // }\n * }\n */\nAlgoliaSearchHelper.prototype.searchOnce = function(options, cb) {\n var tempState = !options ? this.state : this.state.setQueryParameters(options);\n var queries = requestBuilder._getQueries(tempState.index, tempState);\n var self = this;\n\n this._currentNbQueries++;\n\n this.emit('searchOnce', {\n state: tempState\n });\n\n if (cb) {\n this.client\n .search(queries)\n .then(function(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) {\n self.emit('searchQueueEmpty');\n }\n\n cb(null, new SearchResults(tempState, content.results), tempState);\n })\n .catch(function(err) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) {\n self.emit('searchQueueEmpty');\n }\n\n cb(err, null, tempState);\n });\n\n return undefined;\n }\n\n return this.client.search(queries).then(function(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n return {\n content: new SearchResults(tempState, content.results),\n state: tempState,\n _originalResponse: content\n };\n }, function(e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n });\n};\n\n/**\n * Structure of each result when using\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * @typedef FacetSearchHit\n * @type {object}\n * @property {string} value the facet value\n * @property {string} highlighted the facet value highlighted with the query string\n * @property {number} count number of occurrence of this facet value\n * @property {boolean} isRefined true if the value is already refined\n */\n\n/**\n * Structure of the data resolved by the\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * promise.\n * @typedef FacetSearchResult\n * @type {object}\n * @property {FacetSearchHit} facetHits the results for this search for facet values\n * @property {number} processingTimeMS time taken by the query inside the engine\n */\n\n/**\n * Search for facet values based on an query and the name of a faceted attribute. This\n * triggers a search and will return a promise. On top of using the query, it also sends\n * the parameters from the state so that the search is narrowed down to only the possible values.\n *\n * See the description of [FacetSearchResult](reference.html#FacetSearchResult)\n * @param {string} facet the name of the faceted attribute\n * @param {string} query the string query for the search\n * @param {number} [maxFacetHits] the maximum number values returned. Should be > 0 and <= 100\n * @param {object} [userState] the set of custom parameters to use on top of the current state. Setting a property to `undefined` removes\n * it in the generated query.\n * @return {promise.} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForFacetValues = function(facet, query, maxFacetHits, userState) {\n var clientHasSFFV = typeof this.client.searchForFacetValues === 'function';\n if (\n !clientHasSFFV &&\n typeof this.client.initIndex !== 'function'\n ) {\n throw new Error(\n 'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues'\n );\n }\n var state = this.state.setQueryParameters(userState || {});\n var isDisjunctive = state.isDisjunctiveFacet(facet);\n var algoliaQuery = requestBuilder.getSearchForFacetQuery(facet, query, maxFacetHits, state);\n\n this._currentNbQueries++;\n var self = this;\n\n this.emit('searchForFacetValues', {\n state: state,\n facet: facet,\n query: query\n });\n\n var searchForFacetValuesPromise = clientHasSFFV\n ? this.client.searchForFacetValues([{indexName: state.index, params: algoliaQuery}])\n : this.client.initIndex(state.index).searchForFacetValues(algoliaQuery);\n\n return searchForFacetValuesPromise.then(function addIsRefined(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n\n content = Array.isArray(content) ? content[0] : content;\n\n content.facetHits.forEach(function(f) {\n f.isRefined = isDisjunctive\n ? state.isDisjunctiveFacetRefined(facet, f.value)\n : state.isFacetRefined(facet, f.value);\n });\n\n return content;\n }, function(e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n });\n};\n\n/**\n * Sets the text query used for the search.\n *\n * This method resets the current page to 0.\n * @param {string} q the user query\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setQuery = function(q) {\n this._change({\n state: this.state.resetPage().setQuery(q),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Remove all the types of refinements except tags. A string can be provided to remove\n * only the refinements of a specific attribute. For more advanced use case, you can\n * provide a function instead. This function should follow the\n * [clearCallback definition](#SearchParameters.clearCallback).\n *\n * This method resets the current page to 0.\n * @param {string} [name] optional name of the facet / attribute on which we want to remove all refinements\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n * @example\n * // Removing all the refinements\n * helper.clearRefinements().search();\n * @example\n * // Removing all the filters on a the category attribute.\n * helper.clearRefinements('category').search();\n * @example\n * // Removing only the exclude filters on the category facet.\n * helper.clearRefinements(function(value, attribute, type) {\n * return type === 'exclude' && attribute === 'category';\n * }).search();\n */\nAlgoliaSearchHelper.prototype.clearRefinements = function(name) {\n this._change({\n state: this.state.resetPage().clearRefinements(name),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Remove all the tag filters.\n *\n * This method resets the current page to 0.\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.clearTags = function() {\n this._change({\n state: this.state.resetPage().clearTags(),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Adds a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().addDisjunctiveFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveRefine = function() {\n return this.addDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a refinement on a hierarchical facet. It will throw\n * an exception if the facet is not defined or if the facet\n * is already refined.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {AlgoliaSearchHelper}\n * @throws Error if the facet is not defined or if the facet is refined\n * @chainable\n * @fires change\n */\nAlgoliaSearchHelper.prototype.addHierarchicalFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().addHierarchicalFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Adds a an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} attribute the attribute on which the numeric filter applies\n * @param {string} operator the operator of the filter\n * @param {number} value the value of the filter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addNumericRefinement = function(attribute, operator, value) {\n this._change({\n state: this.state.resetPage().addNumericRefinement(attribute, operator, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Adds a filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().addFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addRefine = function() {\n return this.addFacetRefinement.apply(this, arguments);\n};\n\n\n/**\n * Adds a an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetExclusion = function(facet, value) {\n this._change({\n state: this.state.resetPage().addExcludeRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.addExclude = function() {\n return this.addFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds a tag filter with the `tag` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag the tag to add to the filter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTag = function(tag) {\n this._change({\n state: this.state.resetPage().addTagRefinement(tag),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Removes an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * Some parameters are optional, triggering different behavior:\n * - if the value is not provided, then all the numeric value will be removed for the\n * specified attribute/operator couple.\n * - if the operator is not provided either, then all the numeric filter on this attribute\n * will be removed.\n *\n * This method resets the current page to 0.\n * @param {string} attribute the attribute on which the numeric filter applies\n * @param {string} [operator] the operator of the filter\n * @param {number} [value] the value of the filter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeNumericRefinement = function(attribute, operator, value) {\n this._change({\n state: this.state.resetPage().removeNumericRefinement(attribute, operator, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Removes a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().removeDisjunctiveFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveRefine = function() {\n return this.removeDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {AlgoliaSearchHelper}\n * @throws Error if the facet is not defined or if the facet is not refined\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeHierarchicalFacetRefinement = function(facet) {\n this._change({\n state: this.state.resetPage().removeHierarchicalFacetRefinement(facet),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Removes a filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().removeFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeRefine = function() {\n return this.removeFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetExclusion = function(facet, value) {\n this._change({\n state: this.state.resetPage().removeExcludeRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.removeExclude = function() {\n return this.removeFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Removes a tag filter with the `tag` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove from the filter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTag = function(tag) {\n this._change({\n state: this.state.resetPage().removeTagRefinement(tag),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Adds or removes an exclusion filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetExclusion = function(facet, value) {\n this._change({\n state: this.state.resetPage().toggleExcludeFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.toggleExclude = function() {\n return this.toggleFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper}\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n * @deprecated since version 2.19.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefinement = function(facet, value) {\n return this.toggleFacetRefinement(facet, value);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper}\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().toggleFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefine = function() {\n return this.toggleFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds or removes a tag filter with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove or add\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleTag = function(tag) {\n this._change({\n state: this.state.resetPage().toggleTagRefinement(tag),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Increments the page number by one.\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n * @example\n * helper.setPage(0).nextPage().getPage();\n * // returns 1\n */\nAlgoliaSearchHelper.prototype.nextPage = function() {\n var page = this.state.page || 0;\n return this.setPage(page + 1);\n};\n\n/**\n * Decrements the page number by one.\n * @fires change\n * @return {AlgoliaSearchHelper}\n * @chainable\n * @example\n * helper.setPage(1).previousPage().getPage();\n * // returns 0\n */\nAlgoliaSearchHelper.prototype.previousPage = function() {\n var page = this.state.page || 0;\n return this.setPage(page - 1);\n};\n\n/**\n * @private\n */\nfunction setCurrentPage(page) {\n if (page < 0) throw new Error('Page requested below 0.');\n\n this._change({\n state: this.state.setPage(page),\n isPageReset: false\n });\n\n return this;\n}\n\n/**\n * Change the current page\n * @deprecated\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setCurrentPage = setCurrentPage;\n\n/**\n * Updates the current page.\n * @function\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setPage = setCurrentPage;\n\n/**\n * Updates the name of the index that will be targeted by the query.\n *\n * This method resets the current page to 0.\n * @param {string} name the index name\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setIndex = function(name) {\n this._change({\n state: this.state.resetPage().setIndex(name),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Update a parameter of the search. This method reset the page\n *\n * The complete list of parameters is available on the\n * [Algolia website](https://www.algolia.com/doc/rest#query-an-index).\n * The most commonly used parameters have their own [shortcuts](#query-parameters-shortcuts)\n * or benefit from higher-level APIs (all the kind of filters and facets have their own API)\n *\n * This method resets the current page to 0.\n * @param {string} parameter name of the parameter to update\n * @param {any} value new value of the parameter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n * @example\n * helper.setQueryParameter('hitsPerPage', 20).search();\n */\nAlgoliaSearchHelper.prototype.setQueryParameter = function(parameter, value) {\n this._change({\n state: this.state.resetPage().setQueryParameter(parameter, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Set the whole state (warning: will erase previous state)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setState = function(newState) {\n this._change({\n state: SearchParameters.make(newState),\n isPageReset: false\n });\n\n return this;\n};\n\n/**\n * Override the current state without triggering a change event.\n * Do not use this method unless you know what you are doing. (see the example\n * for a legit use case)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper}\n * @example\n * helper.on('change', function(state){\n * // In this function you might want to find a way to store the state in the url/history\n * updateYourURL(state)\n * })\n * window.onpopstate = function(event){\n * // This is naive though as you should check if the state is really defined etc.\n * helper.overrideStateWithoutTriggeringChangeEvent(event.state).search()\n * }\n * @chainable\n */\nAlgoliaSearchHelper.prototype.overrideStateWithoutTriggeringChangeEvent = function(newState) {\n this.state = new SearchParameters(newState);\n return this;\n};\n\n/**\n * Check if an attribute has any numeric, conjunctive, disjunctive or hierarchical filters.\n * @param {string} attribute the name of the attribute\n * @return {boolean} true if the attribute is filtered by at least one value\n * @example\n * // hasRefinements works with numeric, conjunctive, disjunctive and hierarchical filters\n * helper.hasRefinements('price'); // false\n * helper.addNumericRefinement('price', '>', 100);\n * helper.hasRefinements('price'); // true\n *\n * helper.hasRefinements('color'); // false\n * helper.addFacetRefinement('color', 'blue');\n * helper.hasRefinements('color'); // true\n *\n * helper.hasRefinements('material'); // false\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * helper.hasRefinements('material'); // true\n *\n * helper.hasRefinements('categories'); // false\n * helper.toggleFacetRefinement('categories', 'kitchen > knife');\n * helper.hasRefinements('categories'); // true\n *\n */\nAlgoliaSearchHelper.prototype.hasRefinements = function(attribute) {\n if (objectHasKeys(this.state.getNumericRefinements(attribute))) {\n return true;\n } else if (this.state.isConjunctiveFacet(attribute)) {\n return this.state.isFacetRefined(attribute);\n } else if (this.state.isDisjunctiveFacet(attribute)) {\n return this.state.isDisjunctiveFacetRefined(attribute);\n } else if (this.state.isHierarchicalFacet(attribute)) {\n return this.state.isHierarchicalFacetRefined(attribute);\n }\n\n // there's currently no way to know that the user did call `addNumericRefinement` at some point\n // thus we cannot distinguish if there once was a numeric refinement that was cleared\n // so we will return false in every other situations to be consistent\n // while what we should do here is throw because we did not find the attribute in any type\n // of refinement\n return false;\n};\n\n/**\n * Check if a value is excluded for a specific faceted attribute. If the value\n * is omitted then the function checks if there is any excluding refinements.\n *\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} true if refined\n * @example\n * helper.isExcludeRefined('color'); // false\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // false\n *\n * helper.addFacetExclusion('color', 'red');\n *\n * helper.isExcludeRefined('color'); // true\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // true\n */\nAlgoliaSearchHelper.prototype.isExcluded = function(facet, value) {\n return this.state.isExcludeRefined(facet, value);\n};\n\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasRefinements}\n */\nAlgoliaSearchHelper.prototype.isDisjunctiveRefined = function(facet, value) {\n return this.state.isDisjunctiveFacetRefined(facet, value);\n};\n\n/**\n * Check if the string is a currently filtering tag.\n * @param {string} tag tag to check\n * @return {boolean}\n */\nAlgoliaSearchHelper.prototype.hasTag = function(tag) {\n return this.state.isTagRefined(tag);\n};\n\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasTag}\n */\nAlgoliaSearchHelper.prototype.isTagRefined = function() {\n return this.hasTagRefinements.apply(this, arguments);\n};\n\n\n/**\n * Get the name of the currently used index.\n * @return {string}\n * @example\n * helper.setIndex('highestPrice_products').getIndex();\n * // returns 'highestPrice_products'\n */\nAlgoliaSearchHelper.prototype.getIndex = function() {\n return this.state.index;\n};\n\nfunction getCurrentPage() {\n return this.state.page;\n}\n\n/**\n * Get the currently selected page\n * @deprecated\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getCurrentPage = getCurrentPage;\n/**\n * Get the currently selected page\n * @function\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getPage = getCurrentPage;\n\n/**\n * Get all the tags currently set to filters the results.\n *\n * @return {string[]} The list of tags currently set.\n */\nAlgoliaSearchHelper.prototype.getTags = function() {\n return this.state.tagRefinements;\n};\n\n/**\n * Get the list of refinements for a given attribute. This method works with\n * conjunctive, disjunctive, excluding and numerical filters.\n *\n * See also SearchResults#getRefinements\n *\n * @param {string} facetName attribute name used for faceting\n * @return {Array.} All Refinement are objects that contain a value, and\n * a type. Numeric also contains an operator.\n * @example\n * helper.addNumericRefinement('price', '>', 100);\n * helper.getRefinements('price');\n * // [\n * // {\n * // \"value\": [\n * // 100\n * // ],\n * // \"operator\": \">\",\n * // \"type\": \"numeric\"\n * // }\n * // ]\n * @example\n * helper.addFacetRefinement('color', 'blue');\n * helper.addFacetExclusion('color', 'red');\n * helper.getRefinements('color');\n * // [\n * // {\n * // \"value\": \"blue\",\n * // \"type\": \"conjunctive\"\n * // },\n * // {\n * // \"value\": \"red\",\n * // \"type\": \"exclude\"\n * // }\n * // ]\n * @example\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * // [\n * // {\n * // \"value\": \"plastic\",\n * // \"type\": \"disjunctive\"\n * // }\n * // ]\n */\nAlgoliaSearchHelper.prototype.getRefinements = function(facetName) {\n var refinements = [];\n\n if (this.state.isConjunctiveFacet(facetName)) {\n var conjRefinements = this.state.getConjunctiveRefinements(facetName);\n\n conjRefinements.forEach(function(r) {\n refinements.push({\n value: r,\n type: 'conjunctive'\n });\n });\n\n var excludeRefinements = this.state.getExcludeRefinements(facetName);\n\n excludeRefinements.forEach(function(r) {\n refinements.push({\n value: r,\n type: 'exclude'\n });\n });\n } else if (this.state.isDisjunctiveFacet(facetName)) {\n var disjRefinements = this.state.getDisjunctiveRefinements(facetName);\n\n disjRefinements.forEach(function(r) {\n refinements.push({\n value: r,\n type: 'disjunctive'\n });\n });\n }\n\n var numericRefinements = this.state.getNumericRefinements(facetName);\n\n Object.keys(numericRefinements).forEach(function(operator) {\n var value = numericRefinements[operator];\n\n refinements.push({\n value: value,\n operator: operator,\n type: 'numeric'\n });\n });\n\n return refinements;\n};\n\n/**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\nAlgoliaSearchHelper.prototype.getNumericRefinement = function(attribute, operator) {\n return this.state.getNumericRefinement(attribute, operator);\n};\n\n/**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param {string} facetName Hierarchical facet name\n * @return {array.} the path as an array of string\n */\nAlgoliaSearchHelper.prototype.getHierarchicalFacetBreadcrumb = function(facetName) {\n return this.state.getHierarchicalFacetBreadcrumb(facetName);\n};\n\n// /////////// PRIVATE\n\n/**\n * Perform the underlying queries\n * @private\n * @return {undefined}\n * @fires search\n * @fires result\n * @fires error\n */\nAlgoliaSearchHelper.prototype._search = function(options) {\n var state = this.state;\n var states = [];\n var mainQueries = [];\n\n if (!options.onlyWithDerivedHelpers) {\n mainQueries = requestBuilder._getQueries(state.index, state);\n\n states.push({\n state: state,\n queriesCount: mainQueries.length,\n helper: this\n });\n\n this.emit('search', {\n state: state,\n results: this.lastResults\n });\n }\n\n var derivedQueries = this.derivedHelpers.map(function(derivedHelper) {\n var derivedState = derivedHelper.getModifiedState(state);\n var derivedStateQueries = requestBuilder._getQueries(derivedState.index, derivedState);\n\n states.push({\n state: derivedState,\n queriesCount: derivedStateQueries.length,\n helper: derivedHelper\n });\n\n derivedHelper.emit('search', {\n state: derivedState,\n results: derivedHelper.lastResults\n });\n\n return derivedStateQueries;\n });\n\n var queries = Array.prototype.concat.apply(mainQueries, derivedQueries);\n var queryId = this._queryId++;\n\n this._currentNbQueries++;\n\n try {\n this.client.search(queries)\n .then(this._dispatchAlgoliaResponse.bind(this, states, queryId))\n .catch(this._dispatchAlgoliaError.bind(this, queryId));\n } catch (error) {\n // If we reach this part, we're in an internal error state\n this.emit('error', {\n error: error\n });\n }\n};\n\n/**\n * Transform the responses as sent by the server and transform them into a user\n * usable object that merge the results of all the batch requests. It will dispatch\n * over the different helper + derived helpers (when there are some).\n * @private\n * @param {array.<{SearchParameters, AlgoliaQueries, AlgoliaSearchHelper}>}\n * state state used for to generate the request\n * @param {number} queryId id of the current request\n * @param {object} content content of the response\n * @return {undefined}\n */\nAlgoliaSearchHelper.prototype._dispatchAlgoliaResponse = function(states, queryId, content) {\n // FIXME remove the number of outdated queries discarded instead of just one\n\n if (queryId < this._lastQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbQueries -= (queryId - this._lastQueryIdReceived);\n this._lastQueryIdReceived = queryId;\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n\n var results = content.results.slice();\n\n states.forEach(function(s) {\n var state = s.state;\n var queriesCount = s.queriesCount;\n var helper = s.helper;\n var specificResults = results.splice(0, queriesCount);\n\n var formattedResponse = helper.lastResults = new SearchResults(state, specificResults);\n\n helper.emit('result', {\n results: formattedResponse,\n state: state\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchAlgoliaError = function(queryId, error) {\n if (queryId < this._lastQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n this._lastQueryIdReceived = queryId;\n\n this.emit('error', {\n error: error\n });\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype.containsRefinement = function(query, facetFilters, numericFilters, tagFilters) {\n return query ||\n facetFilters.length !== 0 ||\n numericFilters.length !== 0 ||\n tagFilters.length !== 0;\n};\n\n/**\n * Test if there are some disjunctive refinements on the facet\n * @private\n * @param {string} facet the attribute to test\n * @return {boolean}\n */\nAlgoliaSearchHelper.prototype._hasDisjunctiveRefinements = function(facet) {\n return this.state.disjunctiveRefinements[facet] &&\n this.state.disjunctiveRefinements[facet].length > 0;\n};\n\nAlgoliaSearchHelper.prototype._change = function(event) {\n var state = event.state;\n var isPageReset = event.isPageReset;\n\n if (state !== this.state) {\n this.state = state;\n\n this.emit('change', {\n state: this.state,\n results: this.lastResults,\n isPageReset: isPageReset\n });\n }\n};\n\n/**\n * Clears the cache of the underlying Algolia client.\n * @return {AlgoliaSearchHelper}\n */\nAlgoliaSearchHelper.prototype.clearCache = function() {\n this.client.clearCache && this.client.clearCache();\n return this;\n};\n\n/**\n * Updates the internal client instance. If the reference of the clients\n * are equal then no update is actually done.\n * @param {AlgoliaSearch} newClient an AlgoliaSearch client\n * @return {AlgoliaSearchHelper}\n */\nAlgoliaSearchHelper.prototype.setClient = function(newClient) {\n if (this.client === newClient) return this;\n\n if (typeof newClient.addAlgoliaAgent === 'function') {\n newClient.addAlgoliaAgent('JS Helper (' + version + ')');\n }\n this.client = newClient;\n\n return this;\n};\n\n/**\n * Gets the instance of the currently used client.\n * @return {AlgoliaSearch}\n */\nAlgoliaSearchHelper.prototype.getClient = function() {\n return this.client;\n};\n\n/**\n * Creates an derived instance of the Helper. A derived helper\n * is a way to request other indices synchronised with the lifecycle\n * of the main Helper. This mechanism uses the multiqueries feature\n * of Algolia to aggregate all the requests in a single network call.\n *\n * This method takes a function that is used to create a new SearchParameter\n * that will be used to create requests to Algolia. Those new requests\n * are created just before the `search` event. The signature of the function\n * is `SearchParameters -> SearchParameters`.\n *\n * This method returns a new DerivedHelper which is an EventEmitter\n * that fires the same `search`, `result` and `error` events. Those\n * events, however, will receive data specific to this DerivedHelper\n * and the SearchParameters that is returned by the call of the\n * parameter function.\n * @param {function} fn SearchParameters -> SearchParameters\n * @return {DerivedHelper}\n */\nAlgoliaSearchHelper.prototype.derive = function(fn) {\n var derivedHelper = new DerivedHelper(this, fn);\n this.derivedHelpers.push(derivedHelper);\n return derivedHelper;\n};\n\n/**\n * This method detaches a derived Helper from the main one. Prefer using the one from the\n * derived helper itself, to remove the event listeners too.\n * @private\n * @return {undefined}\n * @throws Error\n */\nAlgoliaSearchHelper.prototype.detachDerivedHelper = function(derivedHelper) {\n var pos = this.derivedHelpers.indexOf(derivedHelper);\n if (pos === -1) throw new Error('Derived helper already detached');\n this.derivedHelpers.splice(pos, 1);\n};\n\n/**\n * This method returns true if there is currently at least one on-going search.\n * @return {boolean} true if there is a search pending\n */\nAlgoliaSearchHelper.prototype.hasPendingRequests = function() {\n return this._currentNbQueries > 0;\n};\n\n/**\n * @typedef AlgoliaSearchHelper.NumericRefinement\n * @type {object}\n * @property {number[]} value the numbers that are used for filtering this attribute with\n * the operator specified.\n * @property {string} operator the faceting data: value, number of entries\n * @property {string} type will be 'numeric'\n */\n\n/**\n * @typedef AlgoliaSearchHelper.FacetRefinement\n * @type {object}\n * @property {string} value the string use to filter the attribute\n * @property {string} type the type of filter: 'conjunctive', 'disjunctive', 'exclude'\n */\n\nmodule.exports = AlgoliaSearchHelper;\n","'use strict';\n\nvar AlgoliaSearchHelper = require('./src/algoliasearch.helper');\n\nvar SearchParameters = require('./src/SearchParameters');\nvar SearchResults = require('./src/SearchResults');\n\n/**\n * The algoliasearchHelper module is the function that will let its\n * contains everything needed to use the Algoliasearch\n * Helper. It is a also a function that instanciate the helper.\n * To use the helper, you also need the Algolia JS client v3.\n * @example\n * //using the UMD build\n * var client = algoliasearch('latency', '6be0576ff61c053d5f9a3225e2a90f76');\n * var helper = algoliasearchHelper(client, 'bestbuy', {\n * facets: ['shipping'],\n * disjunctiveFacets: ['category']\n * });\n * helper.on('result', function(event) {\n * console.log(event.results);\n * });\n * helper\n * .toggleFacetRefinement('category', 'Movies & TV Shows')\n * .toggleFacetRefinement('shipping', 'Free shipping')\n * .search();\n * @example\n * // The helper is an event emitter using the node API\n * helper.on('result', updateTheResults);\n * helper.once('result', updateTheResults);\n * helper.removeListener('result', updateTheResults);\n * helper.removeAllListeners('result');\n * @module algoliasearchHelper\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the name of the index to query\n * @param {SearchParameters|object} opts an object defining the initial config of the search. It doesn't have to be a {SearchParameters}, just an object containing the properties you need from it.\n * @return {AlgoliaSearchHelper}\n */\nfunction algoliasearchHelper(client, index, opts) {\n return new AlgoliaSearchHelper(client, index, opts);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = require('./src/version.js');\n\n/**\n * Constructor for the Helper.\n * @member module:algoliasearchHelper.AlgoliaSearchHelper\n * @type {AlgoliaSearchHelper}\n */\nalgoliasearchHelper.AlgoliaSearchHelper = AlgoliaSearchHelper;\n\n/**\n * Constructor for the object containing all the parameters of the search.\n * @member module:algoliasearchHelper.SearchParameters\n * @type {SearchParameters}\n */\nalgoliasearchHelper.SearchParameters = SearchParameters;\n\n/**\n * Constructor for the object containing the results of the search.\n * @member module:algoliasearchHelper.SearchResults\n * @type {SearchResults}\n */\nalgoliasearchHelper.SearchResults = SearchResults;\n\nmodule.exports = algoliasearchHelper;\n","import algoliasearchHelper, {\n PlainSearchParameters,\n SearchParameters,\n} from 'algoliasearch-helper';\nimport createConnector, { ConnectedProps } from '../core/createConnector';\nimport {\n omit,\n getObjectType,\n removeEmptyKey,\n removeEmptyArraysFromObject,\n} from '../core/utils';\nimport {\n refineValue,\n getIndexId,\n hasMultipleIndices,\n} from '../core/indexUtils';\n\ntype Hit = any;\n\nexport type MatchingPatterns = {\n [attribute: string]: {\n /**\n * The score of the optional filter.\n *\n * @see https://www.algolia.com/doc/guides/managing-results/rules/merchandising-and-promoting/in-depth/optional-filters/\n */\n score: number;\n };\n};\n\ninterface ConfigureRelatedItemsProps {\n /**\n * The reference hit to extract the filters from.\n */\n hit: Hit;\n /**\n * The schema to create the optional filters.\n * Each key represents an attribute from the hit.\n */\n matchingPatterns: MatchingPatterns;\n /**\n * Function to transform the generated search parameters.\n */\n transformSearchParameters?(\n searchParameters: SearchParameters\n ): PlainSearchParameters;\n}\n\nfunction createOptionalFilter({\n attributeName,\n attributeValue,\n attributeScore,\n}) {\n return `${attributeName}:${attributeValue}`;\n}\n\nconst defaultProps: Partial = {\n transformSearchParameters: x => ({ ...x }),\n};\n\nfunction getId(): string {\n // We store the search state of this widget in `configure`.\n return 'configure';\n}\n\ntype InternalConfigureRelatedItemsProps = ConfigureRelatedItemsProps &\n Required;\n\nfunction getSearchParametersFromProps(\n props: ConnectedProps\n): PlainSearchParameters {\n const optionalFilters = Object.keys(props.matchingPatterns).reduce<\n Array\n >((acc, attributeName) => {\n const attributePattern = props.matchingPatterns[attributeName];\n const attributeValue = props.hit[attributeName];\n const attributeScore = attributePattern.score;\n\n if (Array.isArray(attributeValue)) {\n return [\n ...acc,\n attributeValue.map(attributeSubValue => {\n return createOptionalFilter({\n attributeName,\n attributeValue: attributeSubValue,\n attributeScore,\n });\n }),\n ];\n }\n\n if (typeof attributeValue === 'string') {\n return [\n ...acc,\n createOptionalFilter({\n attributeName,\n attributeValue,\n attributeScore,\n }),\n ];\n }\n\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n `The \\`matchingPatterns\\` option returned a value of type ${getObjectType(\n attributeValue\n )} for the \"${attributeName}\" key. This value was not sent to Algolia because \\`optionalFilters\\` only supports strings and array of strings.\n\nYou can remove the \"${attributeName}\" key from the \\`matchingPatterns\\` option.\n\nSee https://www.algolia.com/doc/api-reference/api-parameters/optionalFilters/`\n );\n }\n\n return acc;\n }, []);\n\n return props.transformSearchParameters(\n new algoliasearchHelper.SearchParameters({\n // @ts-ignore @TODO algoliasearch-helper@3.0.1 will contain the type\n // `sumOrFiltersScores`.\n // See https://github.com/algolia/algoliasearch-helper-js/pull/753\n sumOrFiltersScores: true,\n facetFilters: [`objectID:-${props.hit.objectID}`],\n optionalFilters,\n })\n );\n}\n\ninterface ConnectorState {\n _searchParameters: PlainSearchParameters;\n}\n\nexport default createConnector({\n displayName: 'AlgoliaConfigureRelatedItems',\n\n defaultProps,\n\n getProvidedProps() {\n return {};\n },\n\n getSearchParameters(\n searchParameters: SearchParameters,\n props: ConnectedProps\n ) {\n return searchParameters.setQueryParameters(\n getSearchParametersFromProps(props)\n );\n },\n\n transitionState(\n this: ConnectorState,\n props,\n _prevSearchState,\n nextSearchState\n ) {\n const id = getId();\n // We need to transform the exhaustive search parameters back to clean\n // search parameters without the empty default keys so we don't pollute the\n // `configure` search state.\n const searchParameters = removeEmptyArraysFromObject(\n removeEmptyKey(getSearchParametersFromProps(props))\n );\n\n const searchParametersKeys = Object.keys(searchParameters);\n const nonPresentKeys = this._searchParameters\n ? Object.keys(this._searchParameters).filter(\n prop => searchParametersKeys.indexOf(prop) === -1\n )\n : [];\n this._searchParameters = searchParameters;\n const nextValue = {\n [id]: {\n ...omit(nextSearchState[id], nonPresentKeys),\n ...searchParameters,\n },\n };\n\n return refineValue(nextSearchState, nextValue, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(this: ConnectorState, props, searchState) {\n const id = getId();\n const indexId = getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const subState =\n hasMultipleIndices({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }) && searchState.indices\n ? searchState.indices[indexId]\n : searchState;\n\n const configureKeys =\n subState && subState[id] ? Object.keys(subState[id]) : [];\n\n const configureState = configureKeys.reduce((acc, item) => {\n if (!this._searchParameters[item]) {\n acc[item] = subState[id][item];\n }\n\n return acc;\n }, {});\n\n const nextValue = { [id]: configureState };\n\n return refineValue(searchState, nextValue, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n});\n","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nexport function nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nexport var title = 'browser';\nexport var platform = 'browser';\nexport var browser = true;\nexport var env = {};\nexport var argv = [];\nexport var version = ''; // empty string to avoid regexp issues\nexport var versions = {};\nexport var release = {};\nexport var config = {};\n\nfunction noop() {}\n\nexport var on = noop;\nexport var addListener = noop;\nexport var once = noop;\nexport var off = noop;\nexport var removeListener = noop;\nexport var removeAllListeners = noop;\nexport var emit = noop;\n\nexport function binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nexport function cwd () { return '/' }\nexport function chdir (dir) {\n throw new Error('process.chdir is not supported');\n};\nexport function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nexport function hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nexport function uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nexport default {\n nextTick: nextTick,\n title: title,\n browser: browser,\n env: env,\n argv: argv,\n version: version,\n versions: versions,\n on: on,\n addListener: addListener,\n once: once,\n off: off,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners,\n emit: emit,\n binding: binding,\n cwd: cwd,\n chdir: chdir,\n umask: umask,\n hrtime: hrtime,\n platform: platform,\n release: release,\n config: config,\n uptime: uptime\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import connectConfigureRelatedItems from '../connectors/connectConfigureRelatedItems';\nimport PropTypes from 'prop-types';\n\nfunction ConfigureRelatedItems() {\n return null;\n}\n\nConfigureRelatedItems.propTypes = {\n hit: PropTypes.object.isRequired,\n matchingPatterns: PropTypes.object.isRequired,\n transformSearchParameters: PropTypes.func,\n};\n\nexport default connectConfigureRelatedItems(ConfigureRelatedItems);\n","import createConnector, { ConnectedProps } from '../core/createConnector';\nimport { getResults, getIndexId, hasMultipleIndices } from '../core/indexUtils';\n\ntype SearchState = any;\n\ntype SearchParameters = any;\n\nexport type CustomUserData = {\n [key: string]: any;\n};\n\ntype TrackedFilterRefinement = string | number | boolean;\n\nexport type QueryRulesProps = {\n trackedFilters: {\n [facetName: string]: (\n facetValues: TrackedFilterRefinement[]\n ) => TrackedFilterRefinement[];\n };\n transformRuleContexts: (ruleContexts: string[]) => string[];\n transformItems: (items: TItem[]) => TItem[];\n};\n\n// A context rule must consist only of alphanumeric characters, hyphens, and underscores.\n// See https://www.algolia.com/doc/guides/managing-results/refine-results/merchandising-and-promoting/in-depth/implementing-query-rules/#context\nfunction escapeRuleContext(ruleName: string): string {\n return ruleName.replace(/[^a-z0-9-_]+/gi, '_');\n}\n\nfunction getWidgetRefinements(\n attribute: string,\n widgetKey: string,\n searchState: SearchState\n): TrackedFilterRefinement[] {\n const widgetState = searchState[widgetKey];\n\n switch (widgetKey) {\n case 'range':\n return Object.keys(widgetState[attribute]).map(\n rangeKey => widgetState[attribute][rangeKey]\n );\n\n case 'refinementList':\n return widgetState[attribute];\n\n case 'hierarchicalMenu':\n return [widgetState[attribute]];\n\n case 'menu':\n return [widgetState[attribute]];\n\n case 'multiRange':\n return widgetState[attribute].split(':');\n\n case 'toggle':\n return [widgetState[attribute]];\n\n default:\n return [];\n }\n}\n\nfunction getRefinements(\n attribute: string,\n searchState: SearchState = {}\n): TrackedFilterRefinement[] {\n const refinements = Object.keys(searchState)\n .filter(\n widgetKey =>\n searchState[widgetKey] !== undefined &&\n searchState[widgetKey][attribute] !== undefined\n )\n .map(widgetKey => getWidgetRefinements(attribute, widgetKey, searchState))\n .reduce((acc, current) => acc.concat(current), []); // flatten the refinements\n\n return refinements;\n}\n\nfunction getRuleContextsFromTrackedFilters({\n searchState,\n trackedFilters,\n}: {\n searchState: SearchState;\n trackedFilters: QueryRulesProps['trackedFilters'];\n}) {\n const ruleContexts = Object.keys(trackedFilters).reduce(\n (facets, facetName) => {\n const facetRefinements: TrackedFilterRefinement[] = getRefinements(\n facetName,\n searchState\n );\n\n const getTrackedFacetValues = trackedFilters[facetName];\n const trackedFacetValues = getTrackedFacetValues(facetRefinements);\n\n return [\n ...facets,\n ...facetRefinements\n .filter(facetRefinement =>\n trackedFacetValues.includes(facetRefinement)\n )\n .map(facetValue =>\n escapeRuleContext(`ais-${facetName}-${facetValue}`)\n ),\n ];\n },\n []\n );\n\n return ruleContexts;\n}\n\nconst defaultProps: QueryRulesProps = {\n transformItems: items => items,\n transformRuleContexts: ruleContexts => ruleContexts,\n trackedFilters: {},\n};\n\nexport default createConnector({\n displayName: 'AlgoliaQueryRules',\n\n defaultProps,\n\n getProvidedProps(\n props: ConnectedProps,\n _1: any,\n searchResults: any\n ) {\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n if (results === null) {\n return {\n items: [],\n canRefine: false,\n };\n }\n\n const { userData = [] } = results;\n const { transformItems } = props;\n const transformedItems = transformItems(userData);\n\n return {\n items: transformedItems,\n canRefine: transformedItems.length > 0,\n };\n },\n\n getSearchParameters(\n searchParameters: SearchParameters,\n props: ConnectedProps,\n searchState: SearchState\n ) {\n if (Object.keys(props.trackedFilters).length === 0) {\n return searchParameters;\n }\n\n const indexSearchState =\n hasMultipleIndices({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }) && searchState.indices\n ? searchState.indices[\n getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n })\n ]\n : searchState;\n\n const newRuleContexts = getRuleContextsFromTrackedFilters({\n searchState: indexSearchState,\n trackedFilters: props.trackedFilters,\n });\n\n const initialRuleContexts = searchParameters.ruleContexts || [];\n const nextRuleContexts = [...initialRuleContexts, ...newRuleContexts];\n\n if (process.env.NODE_ENV === 'development') {\n if (nextRuleContexts.length > 10) {\n // eslint-disable-next-line no-console\n console.warn(\n `The maximum number of \\`ruleContexts\\` is 10. They have been sliced to that limit.\nConsider using \\`transformRuleContexts\\` to minimize the number of rules sent to Algolia.`\n );\n }\n }\n\n const ruleContexts = props\n .transformRuleContexts(nextRuleContexts)\n .slice(0, 10);\n\n return searchParameters.setQueryParameter('ruleContexts', ruleContexts);\n },\n});\n","import connectQueryRules from '../connectors/connectQueryRules';\n\nexport default connectQueryRules(function QueryRuleContext() {\n return null;\n});\n","import React, { Component, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n InstantSearchConsumer,\n InstantSearchContext,\n IndexProvider,\n IndexContext,\n} from '../core/context';\n\nfunction getIndexContext(props: Props): IndexContext {\n return {\n targetedIndex: props.indexId,\n };\n}\n\ntype Props = {\n indexName: string;\n indexId: string;\n};\n\ntype InnerProps = Props & { contextValue: InstantSearchContext };\n\ntype State = {\n indexContext: IndexContext;\n};\n\n/**\n * The component that allows you to apply widgets to a dedicated index. It's\n * useful if you want to build an interface that targets multiple indices.\n *\n * @example\n * import React from 'react';\n * import algoliasearch from 'algoliasearch/lite';\n * import { InstantSearch, Index, SearchBox, Hits, Configure } from 'react-instantsearch-dom';\n *\n * const searchClient = algoliasearch(\n * 'latency',\n * '6be0576ff61c053d5f9a3225e2a90f76'\n * );\n *\n * const App = () => (\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * );\n */\nclass Index extends Component {\n static propTypes = {\n indexName: PropTypes.string.isRequired,\n indexId: PropTypes.string.isRequired,\n children: PropTypes.node,\n };\n\n static getDerivedStateFromProps(props: InnerProps) {\n return {\n indexContext: getIndexContext(props),\n };\n }\n\n state = {\n indexContext: getIndexContext(this.props),\n };\n\n unregisterWidget?: () => void;\n\n constructor(props: InnerProps) {\n super(props);\n\n this.props.contextValue.onSearchParameters(\n this.getSearchParameters.bind(this),\n {\n ais: this.props.contextValue,\n multiIndexContext: this.state.indexContext,\n },\n this.props\n );\n }\n\n componentDidMount() {\n this.unregisterWidget = this.props.contextValue.widgetsManager.registerWidget(\n this\n );\n }\n\n componentDidUpdate(prevProps: InnerProps) {\n if (this.props.indexName !== prevProps.indexName) {\n this.props.contextValue.widgetsManager.update();\n }\n }\n\n componentWillUnmount() {\n if (typeof this.unregisterWidget === 'function') {\n this.unregisterWidget();\n }\n }\n\n getSearchParameters(searchParameters, props: InnerProps) {\n return searchParameters.setIndex(\n this.props ? this.props.indexName : props.indexName\n );\n }\n\n render() {\n const childrenCount = Children.count(this.props.children);\n if (childrenCount === 0) {\n return null;\n }\n return (\n \n {this.props.children}\n \n );\n }\n}\n\ntype IndexWrapperProps = {\n indexName: string;\n indexId?: string;\n};\n\nconst IndexWrapper: React.FC = props => {\n const inferredIndexId = props.indexName;\n return (\n \n {contextValue => (\n \n )}\n \n );\n};\n\nIndexWrapper.propTypes = {\n indexName: PropTypes.string.isRequired,\n indexId: PropTypes.string,\n};\n\nexport const IndexComponentWithoutContext = Index;\nexport default IndexWrapper;\n","import { defer } from './utils';\n\nexport default function createWidgetsManager(onWidgetsUpdate) {\n const widgets = [];\n // Is an update scheduled?\n let scheduled = false;\n\n // The state manager's updates need to be batched since more than one\n // component can register or unregister widgets during the same tick.\n function scheduleUpdate() {\n if (scheduled) {\n return;\n }\n scheduled = true;\n defer(() => {\n scheduled = false;\n onWidgetsUpdate();\n });\n }\n\n return {\n registerWidget(widget) {\n widgets.push(widget);\n scheduleUpdate();\n return function unregisterWidget() {\n widgets.splice(widgets.indexOf(widget), 1);\n scheduleUpdate();\n };\n },\n update: scheduleUpdate,\n getWidgets() {\n return widgets;\n },\n };\n}\n","type SearchState = any;\ntype ResultsState = any;\ntype ResultsFacetsValues = any;\ntype Listener = () => void;\ntype State = {\n widgets: SearchState;\n metadata: any[];\n results: ResultsState | null;\n resultsFacetValues: ResultsFacetsValues | null;\n error: Error | null;\n searching: boolean;\n isSearchStalled: boolean;\n searchingForFacetValues: boolean;\n};\nexport default function createStore(initialState: State) {\n let state = initialState;\n const listeners: Listener[] = [];\n return {\n getState() {\n return state;\n },\n setState(nextState: State) {\n state = nextState;\n listeners.forEach(listener => listener());\n },\n subscribe(listener: Listener) {\n listeners.push(listener);\n return function unsubscribe() {\n listeners.splice(listeners.indexOf(listener), 1);\n };\n },\n };\n}\n\nexport type Store = ReturnType;\n","import algoliasearchHelper from 'algoliasearch-helper';\nimport createWidgetsManager from './createWidgetsManager';\nimport createStore from './createStore';\nimport { HIGHLIGHT_TAGS } from './highlight';\nimport { hasMultipleIndices } from './indexUtils';\nimport { version as ReactVersion } from 'react';\nimport version from './version';\n\nfunction addAlgoliaAgents(searchClient) {\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n searchClient.addAlgoliaAgent(`react (${ReactVersion})`);\n searchClient.addAlgoliaAgent(`react-instantsearch (${version})`);\n }\n}\n\nconst isMultiIndexContext = widget =>\n hasMultipleIndices({\n ais: widget.props.contextValue,\n multiIndexContext: widget.props.indexContextValue,\n });\nconst isTargetedIndexEqualIndex = (widget, indexId) =>\n widget.props.indexContextValue.targetedIndex === indexId;\n\n// Relying on the `indexId` is a bit brittle to detect the `Index` widget.\n// Since it's a class we could rely on `instanceof` or similar. We never\n// had an issue though. Works for now.\nconst isIndexWidget = widget => Boolean(widget.props.indexId);\nconst isIndexWidgetEqualIndex = (widget, indexId) =>\n widget.props.indexId === indexId;\n\nconst sortIndexWidgetsFirst = (firstWidget, secondWidget) => {\n const isFirstWidgetIndex = isIndexWidget(firstWidget);\n const isSecondWidgetIndex = isIndexWidget(secondWidget);\n\n if (isFirstWidgetIndex && !isSecondWidgetIndex) {\n return -1;\n }\n if (!isFirstWidgetIndex && isSecondWidgetIndex) {\n return 1;\n }\n return 0;\n};\n\n// This function is copied from the algoliasearch v4 API Client. If modified,\n// consider updating it also in `serializeQueryParameters` from `@algolia/transporter`.\nfunction serializeQueryParameters(parameters) {\n const isObjectOrArray = value =>\n Object.prototype.toString.call(value) === '[object Object]' ||\n Object.prototype.toString.call(value) === '[object Array]';\n\n const encode = (format, ...args) => {\n let i = 0;\n return format.replace(/%s/g, () => encodeURIComponent(args[i++]));\n };\n\n return Object.keys(parameters)\n .map(key =>\n encode(\n '%s=%s',\n key,\n isObjectOrArray(parameters[key])\n ? JSON.stringify(parameters[key])\n : parameters[key]\n )\n )\n .join('&');\n}\n\n/**\n * Creates a new instance of the InstantSearchManager which controls the widgets and\n * trigger the search when the widgets are updated.\n * @param {string} indexName - the main index name\n * @param {object} initialState - initial widget state\n * @param {object} SearchParameters - optional additional parameters to send to the algolia API\n * @param {number} stalledSearchDelay - time (in ms) after the search is stalled\n * @return {InstantSearchManager} a new instance of InstantSearchManager\n */\nexport default function createInstantSearchManager({\n indexName,\n initialState = {},\n searchClient,\n resultsState,\n stalledSearchDelay,\n}) {\n const helper = algoliasearchHelper(searchClient, indexName, {\n ...HIGHLIGHT_TAGS,\n });\n\n addAlgoliaAgents(searchClient);\n\n helper\n .on('search', handleNewSearch)\n .on('result', handleSearchSuccess({ indexId: indexName }))\n .on('error', handleSearchError);\n\n let skip = false;\n let stalledSearchTimer = null;\n let initialSearchParameters = helper.state;\n\n const widgetsManager = createWidgetsManager(onWidgetsUpdate);\n\n hydrateSearchClient(searchClient, resultsState);\n\n const store = createStore({\n widgets: initialState,\n metadata: [],\n results: hydrateResultsState(resultsState),\n error: null,\n searching: false,\n isSearchStalled: true,\n searchingForFacetValues: false,\n });\n\n function skipSearch() {\n skip = true;\n }\n\n function updateClient(client) {\n addAlgoliaAgents(client);\n helper.setClient(client);\n search();\n }\n\n function clearCache() {\n helper.clearCache();\n search();\n }\n\n function getMetadata(state) {\n return widgetsManager\n .getWidgets()\n .filter(widget => Boolean(widget.getMetadata))\n .map(widget => widget.getMetadata(state));\n }\n\n function getSearchParameters() {\n const sharedParameters = widgetsManager\n .getWidgets()\n .filter(widget => Boolean(widget.getSearchParameters))\n .filter(widget => !isMultiIndexContext(widget) && !isIndexWidget(widget))\n .reduce(\n (res, widget) => widget.getSearchParameters(res),\n initialSearchParameters\n );\n\n const mainParameters = widgetsManager\n .getWidgets()\n .filter(widget => Boolean(widget.getSearchParameters))\n .filter(widget => {\n const targetedIndexEqualMainIndex =\n isMultiIndexContext(widget) &&\n isTargetedIndexEqualIndex(widget, indexName);\n\n const subIndexEqualMainIndex =\n isIndexWidget(widget) && isIndexWidgetEqualIndex(widget, indexName);\n\n return targetedIndexEqualMainIndex || subIndexEqualMainIndex;\n })\n // We have to sort the `Index` widgets first so the `index` parameter\n // is correctly set in the `reduce` function for the following widgets\n .sort(sortIndexWidgetsFirst)\n .reduce(\n (res, widget) => widget.getSearchParameters(res),\n sharedParameters\n );\n\n const derivedIndices = widgetsManager\n .getWidgets()\n .filter(widget => Boolean(widget.getSearchParameters))\n .filter(widget => {\n const targetedIndexNotEqualMainIndex =\n isMultiIndexContext(widget) &&\n !isTargetedIndexEqualIndex(widget, indexName);\n\n const subIndexNotEqualMainIndex =\n isIndexWidget(widget) && !isIndexWidgetEqualIndex(widget, indexName);\n\n return targetedIndexNotEqualMainIndex || subIndexNotEqualMainIndex;\n })\n // We have to sort the `Index` widgets first so the `index` parameter\n // is correctly set in the `reduce` function for the following widgets\n .sort(sortIndexWidgetsFirst)\n .reduce((indices, widget) => {\n const indexId = isMultiIndexContext(widget)\n ? widget.props.indexContextValue.targetedIndex\n : widget.props.indexId;\n\n const widgets = indices[indexId] || [];\n\n return {\n ...indices,\n [indexId]: widgets.concat(widget),\n };\n }, {});\n\n const derivedParameters = Object.keys(derivedIndices).map(indexId => ({\n parameters: derivedIndices[indexId].reduce(\n (res, widget) => widget.getSearchParameters(res),\n sharedParameters\n ),\n indexId,\n }));\n\n return {\n mainParameters,\n derivedParameters,\n };\n }\n\n function search() {\n if (!skip) {\n const { mainParameters, derivedParameters } = getSearchParameters(\n helper.state\n );\n\n // We have to call `slice` because the method `detach` on the derived\n // helpers mutates the value `derivedHelpers`. The `forEach` loop does\n // not iterate on each value and we're not able to correctly clear the\n // previous derived helpers (memory leak + useless requests).\n helper.derivedHelpers.slice().forEach(derivedHelper => {\n // Since we detach the derived helpers on **every** new search they\n // won't receive intermediate results in case of a stalled search.\n // Only the last result is dispatched by the derived helper because\n // they are not detached yet:\n //\n // - a -> main helper receives results\n // - ap -> main helper receives results\n // - app -> main helper + derived helpers receive results\n //\n // The quick fix is to avoid to detach them on search but only once they\n // received the results. But it means that in case of a stalled search\n // all the derived helpers not detached yet register a new search inside\n // the helper. The number grows fast in case of a bad network and it's\n // not deterministic.\n derivedHelper.detach();\n });\n\n derivedParameters.forEach(({ indexId, parameters }) => {\n const derivedHelper = helper.derive(() => parameters);\n\n derivedHelper\n .on('result', handleSearchSuccess({ indexId }))\n .on('error', handleSearchError);\n });\n\n helper.setState(mainParameters);\n\n helper.search();\n }\n }\n\n function handleSearchSuccess({ indexId }) {\n return event => {\n const state = store.getState();\n const isDerivedHelpersEmpty = !helper.derivedHelpers.length;\n\n let results = state.results ? state.results : {};\n\n // Switching from mono index to multi index and vice versa must reset the\n // results to an empty object, otherwise we keep reference of stalled and\n // unused results.\n results = !isDerivedHelpersEmpty && results.getFacetByName ? {} : results;\n\n if (!isDerivedHelpersEmpty) {\n results = { ...results, [indexId]: event.results };\n } else {\n results = event.results;\n }\n\n const currentState = store.getState();\n let nextIsSearchStalled = currentState.isSearchStalled;\n if (!helper.hasPendingRequests()) {\n clearTimeout(stalledSearchTimer);\n stalledSearchTimer = null;\n nextIsSearchStalled = false;\n }\n\n const { resultsFacetValues, ...partialState } = currentState;\n\n store.setState({\n ...partialState,\n results,\n isSearchStalled: nextIsSearchStalled,\n searching: false,\n error: null,\n });\n };\n }\n\n function handleSearchError({ error }) {\n const currentState = store.getState();\n\n let nextIsSearchStalled = currentState.isSearchStalled;\n if (!helper.hasPendingRequests()) {\n clearTimeout(stalledSearchTimer);\n nextIsSearchStalled = false;\n }\n\n const { resultsFacetValues, ...partialState } = currentState;\n\n store.setState({\n ...partialState,\n isSearchStalled: nextIsSearchStalled,\n error,\n searching: false,\n });\n }\n\n function handleNewSearch() {\n if (!stalledSearchTimer) {\n stalledSearchTimer = setTimeout(() => {\n const { resultsFacetValues, ...partialState } = store.getState();\n\n store.setState({\n ...partialState,\n isSearchStalled: true,\n });\n }, stalledSearchDelay);\n }\n }\n\n function hydrateSearchClient(client, results) {\n if (!results) {\n return;\n }\n\n // Disable cache hydration on:\n // - Algoliasearch API Client < v4 with cache disabled\n // - Third party clients (detected by the `addAlgoliaAgent` function missing)\n\n if (\n (!client.transporter || client._cacheHydrated) &&\n (!client._useCache || typeof client.addAlgoliaAgent !== 'function')\n ) {\n return;\n }\n\n // Algoliasearch API Client >= v4\n // To hydrate the client we need to populate the cache with the data from\n // the server (done in `hydrateSearchClientWithMultiIndexRequest` or\n // `hydrateSearchClientWithSingleIndexRequest`). But since there is no way\n // for us to compute the key the same way as `algoliasearch-client` we need\n // to populate it on a custom key and override the `search` method to\n // search on it first.\n if (client.transporter && !client._cacheHydrated) {\n client._cacheHydrated = true;\n\n const baseMethod = client.search;\n client.search = (requests, ...methodArgs) => {\n const requestsWithSerializedParams = requests.map(request => ({\n ...request,\n params: serializeQueryParameters(request.params),\n }));\n\n return client.transporter.responsesCache.get(\n {\n method: 'search',\n args: [requestsWithSerializedParams, ...methodArgs],\n },\n () => {\n return baseMethod(requests, ...methodArgs);\n }\n );\n };\n }\n\n if (Array.isArray(results)) {\n hydrateSearchClientWithMultiIndexRequest(client, results);\n return;\n }\n\n hydrateSearchClientWithSingleIndexRequest(client, results);\n }\n\n function hydrateSearchClientWithMultiIndexRequest(client, results) {\n // Algoliasearch API Client >= v4\n // Populate the cache with the data from the server\n if (client.transporter) {\n client.transporter.responsesCache.set(\n {\n method: 'search',\n args: [\n results.reduce(\n (acc, result) =>\n acc.concat(\n result.rawResults.map(request => ({\n indexName: request.index,\n params: request.params,\n }))\n ),\n []\n ),\n ],\n },\n {\n results: results.reduce(\n (acc, result) => acc.concat(result.rawResults),\n []\n ),\n }\n );\n return;\n }\n\n // Algoliasearch API Client < v4\n // Prior to client v4 we didn't have a proper API to hydrate the client\n // cache from the outside. The following code populates the cache with\n // a single-index result. You can find more information about the\n // computation of the key inside the client (see link below).\n // https://github.com/algolia/algoliasearch-client-javascript/blob/c27e89ff92b2a854ae6f40dc524bffe0f0cbc169/src/AlgoliaSearchCore.js#L232-L240\n const key = `/1/indexes/*/queries_body_${JSON.stringify({\n requests: results.reduce(\n (acc, result) =>\n acc.concat(\n result.rawResults.map(request => ({\n indexName: request.index,\n params: request.params,\n }))\n ),\n []\n ),\n })}`;\n\n client.cache = {\n ...client.cache,\n [key]: JSON.stringify({\n results: results.reduce(\n (acc, result) => acc.concat(result.rawResults),\n []\n ),\n }),\n };\n }\n\n function hydrateSearchClientWithSingleIndexRequest(client, results) {\n // Algoliasearch API Client >= v4\n // Populate the cache with the data from the server\n if (client.transporter) {\n client.transporter.responsesCache.set(\n {\n method: 'search',\n args: [\n results.rawResults.map(request => ({\n indexName: request.index,\n params: request.params,\n })),\n ],\n },\n {\n results: results.rawResults,\n }\n );\n return;\n }\n // Algoliasearch API Client < v4\n // Prior to client v4 we didn't have a proper API to hydrate the client\n // cache from the outside. The following code populates the cache with\n // a single-index result. You can find more information about the\n // computation of the key inside the client (see link below).\n // https://github.com/algolia/algoliasearch-client-javascript/blob/c27e89ff92b2a854ae6f40dc524bffe0f0cbc169/src/AlgoliaSearchCore.js#L232-L240\n const key = `/1/indexes/*/queries_body_${JSON.stringify({\n requests: results.rawResults.map(request => ({\n indexName: request.index,\n params: request.params,\n })),\n })}`;\n\n client.cache = {\n ...client.cache,\n [key]: JSON.stringify({\n results: results.rawResults,\n }),\n };\n }\n\n function hydrateResultsState(results) {\n if (!results) {\n return null;\n }\n\n if (Array.isArray(results)) {\n return results.reduce(\n (acc, result) => ({\n ...acc,\n [result._internalIndexId]: new algoliasearchHelper.SearchResults(\n new algoliasearchHelper.SearchParameters(result.state),\n result.rawResults\n ),\n }),\n {}\n );\n }\n\n return new algoliasearchHelper.SearchResults(\n new algoliasearchHelper.SearchParameters(results.state),\n results.rawResults\n );\n }\n\n // Called whenever a widget has been rendered with new props.\n function onWidgetsUpdate() {\n const metadata = getMetadata(store.getState().widgets);\n\n store.setState({\n ...store.getState(),\n metadata,\n searching: true,\n });\n\n // Since the `getSearchParameters` method of widgets also depends on props,\n // the result search parameters might have changed.\n search();\n }\n\n function transitionState(nextSearchState) {\n const searchState = store.getState().widgets;\n\n return widgetsManager\n .getWidgets()\n .filter(widget => Boolean(widget.transitionState))\n .reduce(\n (res, widget) => widget.transitionState(searchState, res),\n nextSearchState\n );\n }\n\n function onExternalStateUpdate(nextSearchState) {\n const metadata = getMetadata(nextSearchState);\n\n store.setState({\n ...store.getState(),\n widgets: nextSearchState,\n metadata,\n searching: true,\n });\n\n search();\n }\n\n function onSearchForFacetValues({ facetName, query, maxFacetHits = 10 }) {\n // The values 1, 100 are the min / max values that the engine accepts.\n // see: https://www.algolia.com/doc/api-reference/api-parameters/maxFacetHits\n const maxFacetHitsWithinRange = Math.max(1, Math.min(maxFacetHits, 100));\n\n store.setState({\n ...store.getState(),\n searchingForFacetValues: true,\n });\n\n helper\n .searchForFacetValues(facetName, query, maxFacetHitsWithinRange)\n .then(\n content => {\n store.setState({\n ...store.getState(),\n error: null,\n searchingForFacetValues: false,\n resultsFacetValues: {\n ...store.getState().resultsFacetValues,\n [facetName]: content.facetHits,\n query,\n },\n });\n },\n error => {\n store.setState({\n ...store.getState(),\n searchingForFacetValues: false,\n error,\n });\n }\n )\n .catch(error => {\n // Since setState is synchronous, any error that occurs in the render of a\n // component will be swallowed by this promise.\n // This is a trick to make the error show up correctly in the console.\n // See http://stackoverflow.com/a/30741722/969302\n setTimeout(() => {\n throw error;\n });\n });\n }\n\n function updateIndex(newIndex) {\n initialSearchParameters = initialSearchParameters.setIndex(newIndex);\n // No need to trigger a new search here as the widgets will also update and trigger it if needed.\n }\n\n function getWidgetsIds() {\n return store\n .getState()\n .metadata.reduce(\n (res, meta) =>\n typeof meta.id !== 'undefined' ? res.concat(meta.id) : res,\n []\n );\n }\n\n return {\n store,\n widgetsManager,\n getWidgetsIds,\n getSearchParameters,\n onSearchForFacetValues,\n onExternalStateUpdate,\n transitionState,\n updateClient,\n updateIndex,\n clearCache,\n skipSearch,\n };\n}\n","import React, { Component, Children } from 'react';\nimport isEqual from 'react-fast-compare';\nimport PropTypes from 'prop-types';\nimport createInstantSearchManager from '../core/createInstantSearchManager';\nimport { InstantSearchProvider, InstantSearchContext } from '../core/context';\nimport { Store } from '../core/createStore';\nimport { PlainSearchParameters, SearchParameters } from 'algoliasearch-helper';\nimport { MultiResponse } from '../types/algoliasearch';\n\ntype ResultsState = {\n state: PlainSearchParameters;\n rawResults: MultiResponse;\n};\n\n// @TODO: move to createInstantSearchManager when it's TS\ntype InstantSearchManager = {\n store: Store;\n widgetsManager: any;\n getWidgetsIds: any;\n getSearchParameters: (\n ...args: any[]\n ) => {\n mainParameters: SearchParameters;\n derivedParameters: SearchParameters;\n };\n onSearchForFacetValues: (...args: any[]) => any;\n onExternalStateUpdate: (...args: any[]) => any;\n transitionState: any;\n updateClient: any;\n updateIndex: any;\n clearCache: () => void;\n skipSearch: any;\n};\n\ntype SearchClient = {\n search: (requests: Array<{}>) => Promise<{}>;\n searchForFacetValues: (requests: Array<{}>) => Promise<{}>;\n};\n\ntype SearchState = any;\n\ntype Props = {\n refresh: boolean;\n indexName: string;\n searchClient: SearchClient;\n createURL?: (searchState: SearchState, knownKeys: any) => string;\n onSearchStateChange?: (searchState: SearchState) => void;\n searchState?: SearchState;\n onSearchParameters?: (\n getSearchParameters: (...args: any) => any,\n context: any,\n props: any,\n searchState: SearchState\n ) => void;\n stalledSearchDelay?: number;\n resultsState: ResultsState | { [indexId: string]: ResultsState };\n};\n\ntype State = {\n isControlled: boolean;\n instantSearchManager: InstantSearchManager;\n contextValue: InstantSearchContext;\n};\n\nfunction isControlled(props: Props) {\n return Boolean(props.searchState);\n}\n\n/**\n * @description\n * `` is the root component of all React InstantSearch implementations.\n * It provides all the connected components (aka widgets) a means to interact\n * with the searchState.\n * @kind widget\n * @name \n * @requirements You will need to have an Algolia account to be able to use this widget.\n * [Create one now](https://www.algolia.com/users/sign_up).\n * @propType {string} indexName - Main index in which to search.\n * @propType {boolean} [refresh=false] - Flag to activate when the cache needs to be cleared so that the front-end is updated when a change occurs in the index.\n * @propType {object} [searchClient] - Provide a custom search client.\n * @propType {func} [onSearchStateChange] - Function to be called everytime a new search is done. Useful for [URL Routing](guide/Routing.html).\n * @propType {object} [searchState] - Object to inject some search state. Switches the InstantSearch component in controlled mode. Useful for [URL Routing](guide/Routing.html).\n * @propType {func} [createURL] - Function to call when creating links, useful for [URL Routing](guide/Routing.html).\n * @propType {SearchResults|SearchResults[]} [resultsState] - Use this to inject the results that will be used at first rendering. Those results are found by using the `findResultsState` function. Useful for [Server Side Rendering](guide/Server-side_rendering.html).\n * @propType {number} [stalledSearchDelay=200] - The amount of time before considering that the search takes too much time. The time is expressed in milliseconds.\n * @propType {{ Root: string|function, props: object }} [root] - Use this to customize the root element. Default value: `{ Root: 'div' }`\n * @example\n * import React from 'react';\n * import algoliasearch from 'algoliasearch/lite';\n * import { InstantSearch, SearchBox, Hits } from 'react-instantsearch-dom';\n *\n * const searchClient = algoliasearch(\n * 'latency',\n * '6be0576ff61c053d5f9a3225e2a90f76'\n * );\n *\n * const App = () => (\n * \n * \n * \n * \n * );\n */\nclass InstantSearch extends Component {\n static defaultProps = {\n stalledSearchDelay: 200,\n refresh: false,\n };\n\n static propTypes = {\n // @TODO: These props are currently constant.\n indexName: PropTypes.string.isRequired,\n\n searchClient: PropTypes.shape({\n search: PropTypes.func.isRequired,\n searchForFacetValues: PropTypes.func,\n addAlgoliaAgent: PropTypes.func,\n clearCache: PropTypes.func,\n }).isRequired,\n\n createURL: PropTypes.func,\n\n refresh: PropTypes.bool,\n\n searchState: PropTypes.object,\n onSearchStateChange: PropTypes.func,\n\n onSearchParameters: PropTypes.func,\n resultsState: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n\n children: PropTypes.node,\n stalledSearchDelay: PropTypes.number,\n };\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): Partial {\n const nextIsControlled = isControlled(nextProps);\n const previousSearchState = prevState.instantSearchManager.store.getState()\n .widgets;\n const nextSearchState = nextProps.searchState;\n\n if (nextIsControlled && !isEqual(previousSearchState, nextSearchState)) {\n prevState.instantSearchManager.onExternalStateUpdate(\n nextProps.searchState\n );\n }\n\n return {\n isControlled: nextIsControlled,\n contextValue: {\n ...prevState.contextValue,\n mainTargetedIndex: nextProps.indexName,\n },\n };\n }\n\n isUnmounting: boolean = false;\n\n constructor(props: Props) {\n super(props);\n\n const instantSearchManager = createInstantSearchManager({\n indexName: this.props.indexName,\n searchClient: this.props.searchClient,\n initialState: this.props.searchState || {},\n resultsState: this.props.resultsState,\n stalledSearchDelay: this.props.stalledSearchDelay,\n });\n\n const contextValue = {\n store: instantSearchManager.store,\n widgetsManager: instantSearchManager.widgetsManager,\n mainTargetedIndex: this.props.indexName,\n onInternalStateUpdate: this.onWidgetsInternalStateUpdate.bind(this),\n createHrefForState: this.createHrefForState.bind(this),\n onSearchForFacetValues: this.onSearchForFacetValues.bind(this),\n onSearchStateChange: this.onSearchStateChange.bind(this),\n onSearchParameters: this.onSearchParameters.bind(this),\n };\n\n this.state = {\n isControlled: isControlled(this.props),\n instantSearchManager,\n contextValue,\n };\n }\n\n componentDidUpdate(prevProps: Props) {\n const prevIsControlled = isControlled(prevProps);\n\n if (prevIsControlled && !this.state.isControlled) {\n throw new Error(\n \"You can't switch from being controlled to uncontrolled\"\n );\n }\n\n if (!prevIsControlled && this.state.isControlled) {\n throw new Error(\n \"You can't switch from being uncontrolled to controlled\"\n );\n }\n\n if (this.props.refresh !== prevProps.refresh && this.props.refresh) {\n this.state.instantSearchManager.clearCache();\n }\n\n if (prevProps.indexName !== this.props.indexName) {\n this.state.instantSearchManager.updateIndex(this.props.indexName);\n }\n\n if (prevProps.searchClient !== this.props.searchClient) {\n this.state.instantSearchManager.updateClient(this.props.searchClient);\n }\n }\n\n componentWillUnmount() {\n this.isUnmounting = true;\n this.state.instantSearchManager.skipSearch();\n }\n\n createHrefForState(searchState: SearchState) {\n searchState = this.state.instantSearchManager.transitionState(searchState);\n return this.state.isControlled && this.props.createURL\n ? this.props.createURL(searchState, this.getKnownKeys())\n : '#';\n }\n\n onWidgetsInternalStateUpdate(searchState: SearchState) {\n searchState = this.state.instantSearchManager.transitionState(searchState);\n\n this.onSearchStateChange(searchState);\n\n if (!this.state.isControlled) {\n this.state.instantSearchManager.onExternalStateUpdate(searchState);\n }\n }\n\n onSearchStateChange(searchState) {\n if (this.props.onSearchStateChange && !this.isUnmounting) {\n this.props.onSearchStateChange(searchState);\n }\n }\n\n onSearchParameters(getSearchParameters, context, props) {\n if (this.props.onSearchParameters) {\n const searchState = this.props.searchState ? this.props.searchState : {};\n this.props.onSearchParameters(\n getSearchParameters,\n context,\n props,\n searchState\n );\n }\n }\n\n onSearchForFacetValues(searchState) {\n this.state.instantSearchManager.onSearchForFacetValues(searchState);\n }\n\n getKnownKeys() {\n return this.state.instantSearchManager.getWidgetsIds();\n }\n\n render() {\n if (Children.count(this.props.children) === 0) {\n return null;\n }\n\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nexport default InstantSearch;\n","import createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n refineValue,\n getCurrentRefinementValue,\n} from '../core/indexUtils';\nimport { addQueryID, addAbsolutePositions } from '../core/utils';\n\nconst getId = () => 'query';\n\nfunction getCurrentRefinement(props, searchState, context) {\n const id = getId();\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n ''\n );\n\n if (currentRefinement) {\n return currentRefinement;\n }\n return '';\n}\n\nfunction getHits(searchResults) {\n if (searchResults.results) {\n if (\n searchResults.results.hits &&\n Array.isArray(searchResults.results.hits)\n ) {\n return addAbsolutePositions(\n addQueryID(searchResults.results.hits, searchResults.results.queryID),\n searchResults.results.hitsPerPage,\n searchResults.results.page\n );\n } else {\n return Object.keys(searchResults.results).reduce(\n (hits, index) => [\n ...hits,\n {\n index,\n hits: addAbsolutePositions(\n addQueryID(\n searchResults.results[index].hits,\n searchResults.results[index].queryID\n ),\n searchResults.results[index].hitsPerPage,\n searchResults.results[index].page\n ),\n },\n ],\n []\n );\n }\n } else {\n return [];\n }\n}\n\nfunction refine(props, searchState, nextRefinement, context) {\n const id = getId();\n const nextValue = { [id]: nextRefinement };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage);\n}\n\nfunction cleanUp(props, searchState, context) {\n return cleanUpValue(searchState, context, getId());\n}\n\n/**\n * connectAutoComplete connector provides the logic to create connected\n * components that will render the results retrieved from\n * Algolia.\n *\n * To configure the number of hits retrieved, use [HitsPerPage widget](widgets/HitsPerPage.html),\n * [connectHitsPerPage connector](connectors/connectHitsPerPage.html) or pass the hitsPerPage\n * prop to a [Configure](guide/Search_parameters.html) widget.\n * @name connectAutoComplete\n * @kind connector\n * @propType {string} [defaultRefinement] - Provide a default value for the query\n * @providedPropType {array.} hits - the records that matched the search state\n * @providedPropType {function} refine - a function to change the query\n * @providedPropType {string} currentRefinement - the query to search for\n */\nexport default createConnector({\n displayName: 'AlgoliaAutoComplete',\n\n getProvidedProps(props, searchState, searchResults) {\n return {\n hits: getHits(searchResults),\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n /**\n * AutoComplete needs to be considered as a widget to trigger a search,\n * even if no other widgets are used.\n *\n * To be considered as a widget you need either:\n * - getSearchParameters\n * - getMetadata\n * - transitionState\n *\n * See: createConnector.tsx\n */\n getSearchParameters(searchParameters, props, searchState) {\n return searchParameters.setQuery(\n getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n })\n );\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport { refineValue, getResults } from '../core/indexUtils';\n\nexport const getId = props => props.attributes[0];\n\nconst namespace = 'hierarchicalMenu';\n\nfunction refine(props, searchState, nextRefinement, context) {\n const id = getId(props);\n const nextValue = { [id]: nextRefinement || '' };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage, namespace);\n}\n\nfunction transformValue(values) {\n return values.reduce((acc, item) => {\n if (item.isRefined) {\n acc.push({\n label: item.name,\n // If dealing with a nested \"items\", \"value\" is equal to the previous value concatenated with the current label\n // If dealing with the first level, \"value\" is equal to the current label\n value: item.path,\n });\n // Create a variable in order to keep the same acc for the recursion, otherwise \"reduce\" returns a new one\n if (item.data) {\n acc = acc.concat(transformValue(item.data, acc));\n }\n }\n return acc;\n }, []);\n}\n\n/**\n * The breadcrumb component is s a type of secondary navigation scheme that\n * reveals the user’s location in a website or web application.\n *\n * @name connectBreadcrumb\n * @requirements To use this widget, your attributes must be formatted in a specific way.\n * If you want for example to have a Breadcrumb of categories, objects in your index\n * should be formatted this way:\n *\n * ```json\n * {\n * \"categories.lvl0\": \"products\",\n * \"categories.lvl1\": \"products > fruits\",\n * \"categories.lvl2\": \"products > fruits > citrus\"\n * }\n * ```\n *\n * It's also possible to provide more than one path for each level:\n *\n * ```json\n * {\n * \"categories.lvl0\": [\"products\", \"goods\"],\n * \"categories.lvl1\": [\"products > fruits\", \"goods > to eat\"]\n * }\n * ```\n *\n * All attributes passed to the `attributes` prop must be present in \"attributes for faceting\"\n * on the Algolia dashboard or configured as `attributesForFaceting` via a set settings call to the Algolia API.\n *\n * @kind connector\n * @propType {array.} attributes - List of attributes to use to generate the hierarchy of the menu. See the example for the convention to follow.\n * @propType {function} [transformItems] - Function to modify the items being displayed, e.g. for filtering or sorting them. Takes an items as parameter and expects it back in return.\n * @providedPropType {function} refine - a function to toggle a refinement\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {array.<{items: object, count: number, isRefined: boolean, label: string, value: string}>} items - the list of items the Breadcrumb can display.\n */\n\nexport default createConnector({\n displayName: 'AlgoliaBreadcrumb',\n\n propTypes: {\n attributes: (props, propName, componentName) => {\n const isNotString = val => typeof val !== 'string';\n if (\n !Array.isArray(props[propName]) ||\n props[propName].some(isNotString) ||\n props[propName].length < 1\n ) {\n return new Error(\n `Invalid prop ${propName} supplied to ${componentName}. Expected an Array of Strings`\n );\n }\n return undefined;\n },\n transformItems: PropTypes.func,\n },\n\n getProvidedProps(props, searchState, searchResults) {\n const id = getId(props);\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const isFacetPresent =\n Boolean(results) && Boolean(results.getFacetByName(id));\n\n if (!isFacetPresent) {\n return {\n items: [],\n canRefine: false,\n };\n }\n\n const values = results.getFacetValues(id);\n\n const items = values.data ? transformValue(values.data) : [];\n\n const transformedItems = props.transformItems\n ? props.transformItems(items)\n : items;\n\n return {\n canRefine: transformedItems.length > 0,\n items: transformedItems,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\n\n/**\n * connectCurrentRefinements connector provides the logic to build a widget that will\n * give the user the ability to remove all or some of the filters that were\n * set.\n * @name connectCurrentRefinements\n * @kind connector\n * @propType {function} [transformItems] - Function to modify the items being displayed, e.g. for filtering or sorting them. Takes an items as parameter and expects it back in return.\n * @propType {function} [clearsQuery=false] - Pass true to also clear the search query\n * @providedPropType {function} refine - a function to remove a single filter\n * @providedPropType {array.<{label: string, attribute: string, currentRefinement: string || object, items: array, value: function}>} items - all the filters, the `value` is to pass to the `refine` function for removing all currentrefinements, `label` is for the display. When existing several refinements for the same atribute name, then you get a nested `items` object that contains a `label` and a `value` function to use to remove a single filter. `attribute` and `currentRefinement` are metadata containing row values.\n * @providedPropType {string} query - the search query\n */\nexport default createConnector({\n displayName: 'AlgoliaCurrentRefinements',\n\n propTypes: {\n transformItems: PropTypes.func,\n },\n\n getProvidedProps(props, searchState, searchResults, metadata) {\n const items = metadata.reduce((res, meta) => {\n if (typeof meta.items !== 'undefined') {\n if (!props.clearsQuery && meta.id === 'query') {\n return res;\n } else {\n if (\n props.clearsQuery &&\n meta.id === 'query' &&\n meta.items[0].currentRefinement === ''\n ) {\n return res;\n }\n return res.concat(\n meta.items.map(item => ({\n ...item,\n id: meta.id,\n index: meta.index,\n }))\n );\n }\n }\n return res;\n }, []);\n\n const transformedItems = props.transformItems\n ? props.transformItems(items)\n : items;\n\n return {\n items: transformedItems,\n canRefine: transformedItems.length > 0,\n };\n },\n\n refine(props, searchState, items) {\n // `value` corresponds to our internal clear function computed in each connector metadata.\n const refinementsToClear =\n items instanceof Array ? items.map(item => item.value) : [items];\n return refinementsToClear.reduce((res, clear) => clear(res), searchState);\n },\n});\n","import { objectHasKeys } from '../core/utils';\nimport createConnector from '../core/createConnector';\nimport {\n getResults,\n getCurrentRefinementValue,\n getIndexId,\n refineValue,\n cleanUpValue,\n} from '../core/indexUtils';\n\n/**\n * The GeoSearch connector provides the logic to build a widget that will display the results on a map.\n * It also provides a way to search for results based on their position. The connector provides function to manage the search experience (search on map interaction).\n * @name connectGeoSearch\n * @kind connector\n * @requirements Note that the GeoSearch connector uses the [geosearch](https://www.algolia.com/doc/guides/searching/geo-search) capabilities of Algolia.\n * Your hits **must** have a `_geoloc` attribute in order to be passed to the rendering function. Currently, the feature is not compatible with multiple values in the `_geoloc` attribute\n * (e.g. a restaurant with multiple locations). In that case you can duplicate your records and use the [distinct](https://www.algolia.com/doc/guides/ranking/distinct) feature of Algolia to only retrieve unique results.\n * @propType {{ northEast: { lat: number, lng: number }, southWest: { lat: number, lng: number } }} [defaultRefinement] - Default search state of the widget containing the bounds for the map\n * @providedPropType {function({ northEast: { lat: number, lng: number }, southWest: { lat: number, lng: number } })} refine - a function to toggle the refinement\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {array.} hits - the records that matched the search\n * @providedPropType {boolean} isRefinedWithMap - true if the current refinement is set with the map bounds\n * @providedPropType {{ northEast: { lat: number, lng: number }, southWest: { lat: number, lng: number } }} [currentRefinement] - the refinement currently applied\n * @providedPropType {{ lat: number, lng: number }} [position] - the position of the search\n */\n\n// To control the map with an external widget the other widget\n// **must** write the value in the attribute `aroundLatLng`\nconst getBoundingBoxId = () => 'boundingBox';\nconst getAroundLatLngId = () => 'aroundLatLng';\nconst getConfigureAroundLatLngId = () => 'configure.aroundLatLng';\n\nconst currentRefinementToString = currentRefinement =>\n [\n currentRefinement.northEast.lat,\n currentRefinement.northEast.lng,\n currentRefinement.southWest.lat,\n currentRefinement.southWest.lng,\n ].join();\n\nconst stringToCurrentRefinement = value => {\n const values = value.split(',');\n\n return {\n northEast: {\n lat: parseFloat(values[0]),\n lng: parseFloat(values[1]),\n },\n southWest: {\n lat: parseFloat(values[2]),\n lng: parseFloat(values[3]),\n },\n };\n};\n\nconst latLngRegExp = /^(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)$/;\nconst stringToPosition = value => {\n const pattern = value.match(latLngRegExp);\n\n return {\n lat: parseFloat(pattern[1]),\n lng: parseFloat(pattern[2]),\n };\n};\n\nconst getCurrentRefinement = (props, searchState, context) => {\n const refinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n getBoundingBoxId(),\n {}\n );\n\n if (!objectHasKeys(refinement)) {\n return;\n }\n\n // eslint-disable-next-line consistent-return\n return {\n northEast: {\n lat: parseFloat(refinement.northEast.lat),\n lng: parseFloat(refinement.northEast.lng),\n },\n southWest: {\n lat: parseFloat(refinement.southWest.lat),\n lng: parseFloat(refinement.southWest.lng),\n },\n };\n};\n\nconst getCurrentPosition = (props, searchState, context) => {\n const { defaultRefinement, ...propsWithoutDefaultRefinement } = props;\n\n const aroundLatLng = getCurrentRefinementValue(\n propsWithoutDefaultRefinement,\n searchState,\n context,\n getAroundLatLngId()\n );\n\n if (!aroundLatLng) {\n // Fallback on `configure.aroundLatLng`\n const configureAroundLatLng = getCurrentRefinementValue(\n propsWithoutDefaultRefinement,\n searchState,\n context,\n getConfigureAroundLatLngId()\n );\n\n return configureAroundLatLng && stringToPosition(configureAroundLatLng);\n }\n\n return aroundLatLng;\n};\n\nconst refine = (searchState, nextValue, context) => {\n const resetPage = true;\n const nextRefinement = {\n [getBoundingBoxId()]: nextValue,\n };\n\n return refineValue(searchState, nextRefinement, context, resetPage);\n};\n\nexport default createConnector({\n displayName: 'AlgoliaGeoSearch',\n\n getProvidedProps(props, searchState, searchResults) {\n const context = {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n };\n\n const results = getResults(searchResults, context);\n\n // We read it from both because the SearchParameters & the searchState are not always\n // in sync. When we set the refinement the searchState is used but when we clear the refinement\n // the SearchParameters is used. In the first case when we render, the results are not there\n // so we can't find the value from the results. The most up to date value is the searchState.\n // But when we clear the refinement the searchState is immediately cleared even when the items\n // retrieved are still the one from the previous query with the bounding box. It leads to some\n // issue with the position of the map. We should rely on 1 source of truth or at least always\n // be sync.\n\n const currentRefinementFromSearchState = getCurrentRefinement(\n props,\n searchState,\n context\n );\n\n const currentRefinementFromSearchParameters =\n (results &&\n results._state.insideBoundingBox &&\n stringToCurrentRefinement(results._state.insideBoundingBox)) ||\n undefined;\n\n const currentPositionFromSearchState = getCurrentPosition(\n props,\n searchState,\n context\n );\n\n const currentPositionFromSearchParameters =\n (results &&\n results._state.aroundLatLng &&\n stringToPosition(results._state.aroundLatLng)) ||\n undefined;\n\n const currentRefinement =\n currentRefinementFromSearchState || currentRefinementFromSearchParameters;\n\n const position =\n currentPositionFromSearchState || currentPositionFromSearchParameters;\n\n return {\n hits: !results ? [] : results.hits.filter(_ => Boolean(_._geoloc)),\n isRefinedWithMap: Boolean(currentRefinement),\n currentRefinement,\n position,\n };\n },\n\n refine(props, searchState, nextValue) {\n return refine(searchState, nextValue, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n if (!currentRefinement) {\n return searchParameters;\n }\n\n return searchParameters.setQueryParameter(\n 'insideBoundingBox',\n currentRefinementToString(currentRefinement)\n );\n },\n\n cleanUp(props, searchState) {\n return cleanUpValue(\n searchState,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue },\n getBoundingBoxId()\n );\n },\n\n getMetadata(props, searchState) {\n const items = [];\n const id = getBoundingBoxId();\n const context = {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n };\n const index = getIndexId(context);\n const nextRefinement = {};\n const currentRefinement = getCurrentRefinement(props, searchState, context);\n\n if (currentRefinement) {\n items.push({\n label: `${id}: ${currentRefinementToString(currentRefinement)}`,\n value: nextState => refine(nextState, nextRefinement, context),\n currentRefinement,\n });\n }\n\n return {\n id,\n index,\n items,\n };\n },\n\n shouldComponentUpdate() {\n return true;\n },\n});\n","import PropTypes from 'prop-types';\nimport algoliasearchHelper from 'algoliasearch-helper';\nimport createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n getIndexId,\n refineValue,\n getCurrentRefinementValue,\n getResults,\n} from '../core/indexUtils';\n\nexport const getId = props => props.attributes[0];\n\nconst namespace = 'hierarchicalMenu';\n\nfunction getCurrentRefinement(props, searchState, context) {\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n `${namespace}.${getId(props)}`,\n null\n );\n\n if (currentRefinement === '') {\n return null;\n }\n return currentRefinement;\n}\n\nfunction getValue(path, props, searchState, context) {\n const { id, attributes, separator, rootPath, showParentLevel } = props;\n\n const currentRefinement = getCurrentRefinement(props, searchState, context);\n let nextRefinement;\n\n if (currentRefinement === null) {\n nextRefinement = path;\n } else {\n const tmpSearchParameters = new algoliasearchHelper.SearchParameters({\n hierarchicalFacets: [\n {\n name: id,\n attributes,\n separator,\n rootPath,\n showParentLevel,\n },\n ],\n });\n\n nextRefinement = tmpSearchParameters\n .toggleHierarchicalFacetRefinement(id, currentRefinement)\n .toggleHierarchicalFacetRefinement(id, path)\n .getHierarchicalRefinement(id)[0];\n }\n\n return nextRefinement;\n}\n\nfunction transformValue(value, props, searchState, context) {\n return value.map(v => ({\n label: v.name,\n value: getValue(v.path, props, searchState, context),\n count: v.count,\n isRefined: v.isRefined,\n items: v.data && transformValue(v.data, props, searchState, context),\n }));\n}\n\nconst truncate = (items = [], limit = 10) =>\n items.slice(0, limit).map((item = {}) =>\n Array.isArray(item.items)\n ? {\n ...item,\n items: truncate(item.items, limit),\n }\n : item\n );\n\nfunction refine(props, searchState, nextRefinement, context) {\n const id = getId(props);\n const nextValue = { [id]: nextRefinement || '' };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage, namespace);\n}\n\nfunction cleanUp(props, searchState, context) {\n return cleanUpValue(searchState, context, `${namespace}.${getId(props)}`);\n}\n\nconst sortBy = ['name:asc'];\n\n/**\n * connectHierarchicalMenu connector provides the logic to build a widget that will\n * give the user the ability to explore a tree-like structure.\n * This is commonly used for multi-level categorization of products on e-commerce\n * websites. From a UX point of view, we suggest not displaying more than two levels deep.\n * @name connectHierarchicalMenu\n * @requirements To use this widget, your attributes must be formatted in a specific way.\n * If you want for example to have a hiearchical menu of categories, objects in your index\n * should be formatted this way:\n *\n * ```json\n * {\n * \"categories.lvl0\": \"products\",\n * \"categories.lvl1\": \"products > fruits\",\n * \"categories.lvl2\": \"products > fruits > citrus\"\n * }\n * ```\n *\n * It's also possible to provide more than one path for each level:\n *\n * ```json\n * {\n * \"categories.lvl0\": [\"products\", \"goods\"],\n * \"categories.lvl1\": [\"products > fruits\", \"goods > to eat\"]\n * }\n * ```\n *\n * All attributes passed to the `attributes` prop must be present in \"attributes for faceting\"\n * on the Algolia dashboard or configured as `attributesForFaceting` via a set settings call to the Algolia API.\n *\n * @kind connector\n * @propType {array.} attributes - List of attributes to use to generate the hierarchy of the menu. See the example for the convention to follow.\n * @propType {string} [defaultRefinement] - the item value selected by default\n * @propType {boolean} [showMore=false] - Flag to activate the show more button, for toggling the number of items between limit and showMoreLimit.\n * @propType {number} [limit=10] - The maximum number of items displayed.\n * @propType {number} [showMoreLimit=20] - The maximum number of items displayed when the user triggers the show more. Not considered if `showMore` is false.\n * @propType {string} [separator='>'] - Specifies the level separator used in the data.\n * @propType {string} [rootPath=null] - The path to use if the first level is not the root level.\n * @propType {boolean} [showParentLevel=true] - Flag to set if the parent level should be displayed.\n * @propType {function} [transformItems] - Function to modify the items being displayed, e.g. for filtering or sorting them. Takes an items as parameter and expects it back in return.\n * @providedPropType {function} refine - a function to toggle a refinement\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {string} currentRefinement - the refinement currently applied\n * @providedPropType {array.<{items: object, count: number, isRefined: boolean, label: string, value: string}>} items - the list of items the HierarchicalMenu can display. items has the same shape as parent items.\n */\nexport default createConnector({\n displayName: 'AlgoliaHierarchicalMenu',\n\n propTypes: {\n attributes: (props, propName, componentName) => {\n const isNotString = val => typeof val !== 'string';\n if (\n !Array.isArray(props[propName]) ||\n props[propName].some(isNotString) ||\n props[propName].length < 1\n ) {\n return new Error(\n `Invalid prop ${propName} supplied to ${componentName}. Expected an Array of Strings`\n );\n }\n return undefined;\n },\n separator: PropTypes.string,\n rootPath: PropTypes.string,\n showParentLevel: PropTypes.bool,\n defaultRefinement: PropTypes.string,\n showMore: PropTypes.bool,\n limit: PropTypes.number,\n showMoreLimit: PropTypes.number,\n transformItems: PropTypes.func,\n },\n\n defaultProps: {\n showMore: false,\n limit: 10,\n showMoreLimit: 20,\n separator: ' > ',\n rootPath: null,\n showParentLevel: true,\n },\n\n getProvidedProps(props, searchState, searchResults) {\n const { showMore, limit, showMoreLimit } = props;\n const id = getId(props);\n\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const isFacetPresent =\n Boolean(results) && Boolean(results.getFacetByName(id));\n\n if (!isFacetPresent) {\n return {\n items: [],\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n canRefine: false,\n };\n }\n const itemsLimit = showMore ? showMoreLimit : limit;\n const value = results.getFacetValues(id, { sortBy });\n const items = value.data\n ? transformValue(value.data, props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n })\n : [];\n const transformedItems = props.transformItems\n ? props.transformItems(items)\n : items;\n return {\n items: truncate(transformedItems, itemsLimit),\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n canRefine: transformedItems.length > 0,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n const {\n attributes,\n separator,\n rootPath,\n showParentLevel,\n showMore,\n limit,\n showMoreLimit,\n contextValue,\n } = props;\n\n const id = getId(props);\n const itemsLimit = showMore ? showMoreLimit : limit;\n\n searchParameters = searchParameters\n .addHierarchicalFacet({\n name: id,\n attributes,\n separator,\n rootPath,\n showParentLevel,\n })\n .setQueryParameters({\n maxValuesPerFacet: Math.max(\n searchParameters.maxValuesPerFacet || 0,\n itemsLimit\n ),\n });\n\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: contextValue,\n multiIndexContext: props.indexContextValue,\n });\n if (currentRefinement !== null) {\n searchParameters = searchParameters.toggleHierarchicalFacetRefinement(\n id,\n currentRefinement\n );\n }\n\n return searchParameters;\n },\n\n getMetadata(props, searchState) {\n const rootAttribute = props.attributes[0];\n const id = getId(props);\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const items = !currentRefinement\n ? []\n : [\n {\n label: `${rootAttribute}: ${currentRefinement}`,\n attribute: rootAttribute,\n value: nextState =>\n refine(props, nextState, '', {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n currentRefinement,\n },\n ];\n\n return {\n id,\n index: getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n items,\n };\n },\n});\n","import createConnector from '../core/createConnector';\nimport { HIGHLIGHT_TAGS, parseAlgoliaHit } from '../core/highlight';\n\nconst highlight = ({\n attribute,\n hit,\n highlightProperty,\n preTag = HIGHLIGHT_TAGS.highlightPreTag,\n postTag = HIGHLIGHT_TAGS.highlightPostTag,\n}) =>\n parseAlgoliaHit({\n attribute,\n highlightProperty,\n hit,\n preTag,\n postTag,\n });\n\n/**\n * connectHighlight connector provides the logic to create an highlighter\n * component that will retrieve, parse and render an highlighted attribute\n * from an Algolia hit.\n * @name connectHighlight\n * @kind connector\n * @category connector\n * @providedPropType {function} highlight - function to retrieve and parse an attribute from a hit. It takes a configuration object with 3 attributes: `highlightProperty` which is the property that contains the highlight structure from the records, `attribute` which is the name of the attribute (it can be either a string or an array of strings) to look for and `hit` which is the hit from Algolia. It returns an array of objects `{value: string, isHighlighted: boolean}`. If the element that corresponds to the attribute is an array of strings, it will return a nested array of objects.\n * @example\n * import React from 'react';\n * import algoliasearch from 'algoliasearch/lite';\n * import { InstantSearch, SearchBox, Hits, connectHighlight } from 'react-instantsearch-dom';\n *\n * const searchClient = algoliasearch(\n * 'latency',\n * '6be0576ff61c053d5f9a3225e2a90f76'\n * );\n *\n * const CustomHighlight = connectHighlight(\n * ({ highlight, attribute, hit, highlightProperty }) => {\n * const highlights = highlight({\n * highlightProperty: '_highlightResult',\n * attribute,\n * hit\n * });\n *\n * return highlights.map(part => part.isHighlighted ? (\n * {part.value}\n * ) : (\n * {part.value}\n * ));\n * }\n * );\n *\n * const Hit = ({ hit }) => (\n *

\n * \n *

\n * );\n *\n * const App = () => (\n * \n * \n * \n * \n * );\n */\nexport default createConnector({\n displayName: 'AlgoliaHighlighter',\n\n propTypes: {},\n\n getProvidedProps() {\n return { highlight };\n },\n});\n","import createConnector from '../core/createConnector';\nimport { getResults } from '../core/indexUtils';\nimport { addAbsolutePositions, addQueryID } from '../core/utils';\n\n/**\n * connectHits connector provides the logic to create connected\n * components that will render the results retrieved from\n * Algolia.\n *\n * To configure the number of hits retrieved, use [HitsPerPage widget](widgets/HitsPerPage.html),\n * [connectHitsPerPage connector](connectors/connectHitsPerPage.html) or pass the hitsPerPage\n * prop to a [Configure](guide/Search_parameters.html) widget.\n *\n * **Warning:** you will need to use the **objectID** property available on every hit as a key\n * when iterating over them. This will ensure you have the best possible UI experience\n * especially on slow networks.\n * @name connectHits\n * @kind connector\n * @providedPropType {array.} hits - the records that matched the search state\n * @example\n * import React from 'react';\n * import algoliasearch from 'algoliasearch/lite';\n * import { InstantSearch, Highlight, connectHits } from 'react-instantsearch-dom';\n *\n * const searchClient = algoliasearch(\n * 'latency',\n * '6be0576ff61c053d5f9a3225e2a90f76'\n * );\n * const CustomHits = connectHits(({ hits }) => (\n *
\n * {hits.map(hit =>\n *

\n * \n *

\n * )}\n *
\n * ));\n *\n * const App = () => (\n * \n * \n * \n * );\n */\nexport default createConnector({\n displayName: 'AlgoliaHits',\n\n getProvidedProps(props, searchState, searchResults) {\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n if (!results) {\n return { hits: [] };\n }\n const hitsWithPositions = addAbsolutePositions(\n results.hits,\n results.hitsPerPage,\n results.page\n );\n const hitsWithPositionsAndQueryID = addQueryID(\n hitsWithPositions,\n results.queryID\n );\n return { hits: hitsWithPositionsAndQueryID };\n },\n\n /**\n * Hits needs to be considered as a widget to trigger a search,\n * even if no other widgets are used.\n *\n * To be considered as a widget you need either:\n * - getSearchParameters\n * - getMetadata\n * - transitionState\n *\n * See: createConnector.tsx\n */\n getSearchParameters(searchParameters) {\n return searchParameters;\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n refineValue,\n getCurrentRefinementValue,\n} from '../core/indexUtils';\n\nfunction getId() {\n return 'hitsPerPage';\n}\n\nfunction getCurrentRefinement(props, searchState, context) {\n const id = getId();\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n null\n );\n\n if (typeof currentRefinement === 'string') {\n return parseInt(currentRefinement, 10);\n }\n return currentRefinement;\n}\n\n/**\n * connectHitsPerPage connector provides the logic to create connected\n * components that will allow a user to choose to display more or less results from Algolia.\n * @name connectHitsPerPage\n * @kind connector\n * @propType {number} defaultRefinement - The number of items selected by default\n * @propType {{value: number, label: string}[]} items - List of hits per page options.\n * @propType {function} [transformItems] - Function to modify the items being displayed, e.g. for filtering or sorting them. Takes an items as parameter and expects it back in return.\n * @providedPropType {function} refine - a function to remove a single filter\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {string} currentRefinement - the refinement currently applied\n * @providedPropType {array.<{isRefined: boolean, label?: string, value: number}>} items - the list of items the HitsPerPage can display. If no label provided, the value will be displayed.\n */\nexport default createConnector({\n displayName: 'AlgoliaHitsPerPage',\n\n propTypes: {\n defaultRefinement: PropTypes.number.isRequired,\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.number.isRequired,\n })\n ).isRequired,\n transformItems: PropTypes.func,\n },\n\n getProvidedProps(props, searchState) {\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const items = props.items.map(item =>\n item.value === currentRefinement\n ? { ...item, isRefined: true }\n : { ...item, isRefined: false }\n );\n return {\n items: props.transformItems ? props.transformItems(items) : items,\n currentRefinement,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n const id = getId();\n const nextValue = { [id]: nextRefinement };\n const resetPage = true;\n return refineValue(\n searchState,\n nextValue,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue },\n resetPage\n );\n },\n\n cleanUp(props, searchState) {\n return cleanUpValue(\n searchState,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue },\n getId()\n );\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n return searchParameters.setHitsPerPage(\n getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n })\n );\n },\n\n getMetadata() {\n return { id: getId() };\n },\n});\n","import isEqual from 'react-fast-compare';\n\nimport createConnector from '../core/createConnector';\nimport {\n getCurrentRefinementValue,\n refineValue,\n getResults,\n} from '../core/indexUtils';\nimport { addAbsolutePositions, addQueryID } from '../core/utils';\n\nfunction getId() {\n return 'page';\n}\n\nfunction getCurrentRefinement(props, searchState, context) {\n const id = getId();\n const page = 1;\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n page\n );\n\n if (typeof currentRefinement === 'string') {\n return parseInt(currentRefinement, 10);\n }\n return currentRefinement;\n}\n\nfunction getStateWithoutPage(state) {\n const { page, ...rest } = state || {};\n return rest;\n}\n\nfunction getInMemoryCache() {\n let cachedHits = undefined;\n let cachedState = undefined;\n return {\n read({ state }) {\n return isEqual(cachedState, getStateWithoutPage(state))\n ? cachedHits\n : null;\n },\n write({ state, hits }) {\n cachedState = getStateWithoutPage(state);\n cachedHits = hits;\n },\n };\n}\n\nfunction extractHitsFromCachedHits(cachedHits) {\n return Object.keys(cachedHits)\n .map(Number)\n .sort((a, b) => a - b)\n .reduce((acc, page) => {\n return acc.concat(cachedHits[page]);\n }, []);\n}\n\n/**\n * InfiniteHits connector provides the logic to create connected\n * components that will render an continuous list of results retrieved from\n * Algolia. This connector provides a function to load more results.\n * @name connectInfiniteHits\n * @kind connector\n * @providedPropType {array.} hits - the records that matched the search state\n * @providedPropType {boolean} hasMore - indicates if there are more pages to load\n * @providedPropType {function} refine - call to load more results\n */\nexport default createConnector({\n displayName: 'AlgoliaInfiniteHits',\n\n getProvidedProps(props, searchState, searchResults) {\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n this._prevState = this._prevState || {};\n\n const cache = props.cache || getInMemoryCache();\n if (this._cachedHits === undefined) {\n this._cachedHits = cache.read({ state: searchState }) || {};\n }\n\n if (!results) {\n return {\n hits: extractHitsFromCachedHits(this._cachedHits),\n hasPrevious: false,\n hasMore: false,\n refine: () => {},\n refinePrevious: () => {},\n refineNext: () => {},\n };\n }\n\n const {\n page,\n hits,\n hitsPerPage,\n nbPages,\n _state: { page: p, ...currentState } = {},\n } = results;\n\n const hitsWithPositions = addAbsolutePositions(hits, hitsPerPage, page);\n const hitsWithPositionsAndQueryID = addQueryID(\n hitsWithPositions,\n results.queryID\n );\n\n if (!isEqual(currentState, this._prevState)) {\n this._cachedHits = cache.read({ state: searchState }) || {};\n }\n if (this._cachedHits[page] === undefined) {\n this._cachedHits[page] = hitsWithPositionsAndQueryID;\n cache.write({ state: searchState, hits: this._cachedHits });\n }\n\n this._prevState = currentState;\n /*\n Math.min() and Math.max() returns Infinity or -Infinity when no argument is given.\n But there is always something in this point because of `this._cachedHits[page]`.\n */\n const firstReceivedPage = Math.min(\n ...Object.keys(this._cachedHits).map(Number)\n );\n const lastReceivedPage = Math.max(\n ...Object.keys(this._cachedHits).map(Number)\n );\n\n const hasPrevious = firstReceivedPage > 0;\n const lastPageIndex = nbPages - 1;\n const hasMore = lastReceivedPage < lastPageIndex;\n const refinePrevious = event => this.refine(event, firstReceivedPage - 1);\n const refineNext = event => this.refine(event, lastReceivedPage + 1);\n\n return {\n hits: extractHitsFromCachedHits(this._cachedHits),\n hasPrevious,\n hasMore,\n refinePrevious,\n refineNext,\n };\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n return searchParameters.setQueryParameters({\n page:\n getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }) - 1,\n });\n },\n\n refine(props, searchState, event, index) {\n const pages = Object.keys(this._cachedHits || {}).map(Number);\n const lastReceivedPage =\n pages.length === 0 ? undefined : Math.max(...pages);\n // If there is no key in `this._cachedHits`,\n // then `lastReceivedPage` should be `undefined`.\n if (index === undefined && lastReceivedPage !== undefined) {\n index = lastReceivedPage + 1;\n } else if (index === undefined) {\n index = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n }\n\n const id = getId();\n const nextValue = { [id]: index + 1 };\n const resetPage = false;\n return refineValue(\n searchState,\n nextValue,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue },\n resetPage\n );\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport {\n getIndexId,\n cleanUpValue,\n refineValue,\n getCurrentRefinementValue,\n getResults,\n} from '../core/indexUtils';\n\nconst namespace = 'menu';\n\nfunction getId(props) {\n return props.attribute;\n}\n\nfunction getCurrentRefinement(props, searchState, context) {\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n `${namespace}.${getId(props)}`,\n null\n );\n\n if (currentRefinement === '') {\n return null;\n }\n return currentRefinement;\n}\n\nfunction getValue(name, props, searchState, context) {\n const currentRefinement = getCurrentRefinement(props, searchState, context);\n return name === currentRefinement ? '' : name;\n}\n\nfunction getLimit({ showMore, limit, showMoreLimit }) {\n return showMore ? showMoreLimit : limit;\n}\n\nfunction refine(props, searchState, nextRefinement, context) {\n const id = getId(props);\n const nextValue = { [id]: nextRefinement ? nextRefinement : '' };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage, namespace);\n}\n\nfunction cleanUp(props, searchState, context) {\n return cleanUpValue(searchState, context, `${namespace}.${getId(props)}`);\n}\n\nconst defaultSortBy = ['count:desc', 'name:asc'];\n\n/**\n * connectMenu connector provides the logic to build a widget that will\n * give the user the ability to choose a single value for a specific facet.\n * @name connectMenu\n * @requirements The attribute passed to the `attribute` prop must be present in \"attributes for faceting\"\n * on the Algolia dashboard or configured as `attributesForFaceting` via a set settings call to the Algolia API.\n * @kind connector\n * @propType {string} attribute - the name of the attribute in the record\n * @propType {boolean} [showMore=false] - true if the component should display a button that will expand the number of items\n * @propType {number} [limit=10] - the minimum number of diplayed items\n * @propType {number} [showMoreLimit=20] - the maximun number of displayed items. Only used when showMore is set to `true`\n * @propType {string} [defaultRefinement] - the value of the item selected by default\n * @propType {boolean} [searchable=false] - allow search inside values\n * @providedPropType {function} refine - a function to toggle a refinement\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {string} currentRefinement - the refinement currently applied\n * @providedPropType {array.<{count: number, isRefined: boolean, label: string, value: string}>} items - the list of items the Menu can display.\n * @providedPropType {function} searchForItems - a function to toggle a search inside items values\n * @providedPropType {boolean} isFromSearch - a boolean that says if the `items` props contains facet values from the global search or from the search inside items.\n */\nexport default createConnector({\n displayName: 'AlgoliaMenu',\n\n propTypes: {\n attribute: PropTypes.string.isRequired,\n showMore: PropTypes.bool,\n limit: PropTypes.number,\n showMoreLimit: PropTypes.number,\n defaultRefinement: PropTypes.string,\n transformItems: PropTypes.func,\n searchable: PropTypes.bool,\n },\n\n defaultProps: {\n showMore: false,\n limit: 10,\n showMoreLimit: 20,\n },\n\n getProvidedProps(\n props,\n searchState,\n searchResults,\n meta,\n searchForFacetValuesResults\n ) {\n const { attribute, searchable, indexContextValue } = props;\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const canRefine =\n Boolean(results) && Boolean(results.getFacetByName(attribute));\n\n const isFromSearch = Boolean(\n searchForFacetValuesResults &&\n searchForFacetValuesResults[attribute] &&\n searchForFacetValuesResults.query !== ''\n );\n\n // Search For Facet Values is not available with derived helper (used for multi index search)\n if (searchable && indexContextValue) {\n throw new Error(\n 'react-instantsearch: searching in *List is not available when used inside a' +\n ' multi index context'\n );\n }\n\n if (!canRefine) {\n return {\n items: [],\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n isFromSearch,\n searchable,\n canRefine,\n };\n }\n\n let items;\n if (isFromSearch) {\n items = searchForFacetValuesResults[attribute].map(v => ({\n label: v.value,\n value: getValue(v.value, props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n _highlightResult: { label: { value: v.highlighted } },\n count: v.count,\n isRefined: v.isRefined,\n }));\n } else {\n items = results\n .getFacetValues(attribute, {\n sortBy: searchable ? undefined : defaultSortBy,\n })\n .map(v => ({\n label: v.name,\n value: getValue(v.name, props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n count: v.count,\n isRefined: v.isRefined,\n }));\n }\n\n const transformedItems = props.transformItems\n ? props.transformItems(items)\n : items;\n\n return {\n items: transformedItems.slice(0, getLimit(props)),\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n isFromSearch,\n searchable,\n canRefine: transformedItems.length > 0,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n searchForFacetValues(props, searchState, nextRefinement) {\n return {\n facetName: props.attribute,\n query: nextRefinement,\n maxFacetHits: getLimit(props),\n };\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n const { attribute } = props;\n\n searchParameters = searchParameters.setQueryParameters({\n maxValuesPerFacet: Math.max(\n searchParameters.maxValuesPerFacet || 0,\n getLimit(props)\n ),\n });\n\n searchParameters = searchParameters.addDisjunctiveFacet(attribute);\n\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n if (currentRefinement !== null) {\n searchParameters = searchParameters.addDisjunctiveFacetRefinement(\n attribute,\n currentRefinement\n );\n }\n\n return searchParameters;\n },\n\n getMetadata(props, searchState) {\n const id = getId(props);\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n return {\n id,\n index: getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n items:\n currentRefinement === null\n ? []\n : [\n {\n label: `${props.attribute}: ${currentRefinement}`,\n attribute: props.attribute,\n value: nextState =>\n refine(props, nextState, '', {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n currentRefinement,\n },\n ],\n };\n },\n});\n","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport { find } from '../core/utils';\nimport {\n cleanUpValue,\n refineValue,\n getCurrentRefinementValue,\n getResults,\n getIndexId,\n} from '../core/indexUtils';\n\nfunction stringifyItem(item) {\n if (typeof item.start === 'undefined' && typeof item.end === 'undefined') {\n return '';\n }\n const start = typeof item.start !== 'undefined' ? item.start : '';\n const end = typeof item.end !== 'undefined' ? item.end : '';\n return `${start}:${end}`;\n}\n\nfunction parseItem(value) {\n if (value.length === 0) {\n return { start: null, end: null };\n }\n const [startStr, endStr] = value.split(':');\n return {\n start: startStr.length > 0 ? parseInt(startStr, 10) : null,\n end: endStr.length > 0 ? parseInt(endStr, 10) : null,\n };\n}\n\nconst namespace = 'multiRange';\n\nfunction getId(props) {\n return props.attribute;\n}\n\nfunction getCurrentRefinement(props, searchState, context) {\n return getCurrentRefinementValue(\n props,\n searchState,\n context,\n `${namespace}.${getId(props)}`,\n '',\n currentRefinement => {\n if (currentRefinement === '') {\n return '';\n }\n return currentRefinement;\n }\n );\n}\n\nfunction isRefinementsRangeIncludesInsideItemRange(stats, start, end) {\n return (\n (stats.min > start && stats.min < end) ||\n (stats.max > start && stats.max < end)\n );\n}\n\nfunction isItemRangeIncludedInsideRefinementsRange(stats, start, end) {\n return (\n (start > stats.min && start < stats.max) ||\n (end > stats.min && end < stats.max)\n );\n}\n\nfunction itemHasRefinement(attribute, results, value) {\n const stats = results.getFacetByName(attribute)\n ? results.getFacetStats(attribute)\n : null;\n const range = value.split(':');\n const start =\n Number(range[0]) === 0 || value === ''\n ? Number.NEGATIVE_INFINITY\n : Number(range[0]);\n const end =\n Number(range[1]) === 0 || value === ''\n ? Number.POSITIVE_INFINITY\n : Number(range[1]);\n return !(\n Boolean(stats) &&\n (isRefinementsRangeIncludesInsideItemRange(stats, start, end) ||\n isItemRangeIncludedInsideRefinementsRange(stats, start, end))\n );\n}\n\nfunction refine(props, searchState, nextRefinement, context) {\n const nextValue = { [getId(props, searchState)]: nextRefinement };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage, namespace);\n}\n\nfunction cleanUp(props, searchState, context) {\n return cleanUpValue(searchState, context, `${namespace}.${getId(props)}`);\n}\n\n/**\n * connectNumericMenu connector provides the logic to build a widget that will\n * give the user the ability to select a range value for a numeric attribute.\n * Ranges are defined statically.\n * @name connectNumericMenu\n * @requirements The attribute passed to the `attribute` prop must be holding numerical values.\n * @kind connector\n * @propType {string} attribute - the name of the attribute in the records\n * @propType {{label: string, start: number, end: number}[]} items - List of options. With a text label, and upper and lower bounds.\n * @propType {string} [defaultRefinement] - the value of the item selected by default, follow the shape of a `string` with a pattern of `'{start}:{end}'`.\n * @propType {function} [transformItems] - Function to modify the items being displayed, e.g. for filtering or sorting them. Takes an items as parameter and expects it back in return.\n * @providedPropType {function} refine - a function to select a range.\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {string} currentRefinement - the refinement currently applied. follow the shape of a `string` with a pattern of `'{start}:{end}'` which corresponds to the current selected item. For instance, when the selected item is `{start: 10, end: 20}`, the searchState of the widget is `'10:20'`. When `start` isn't defined, the searchState of the widget is `':{end}'`, and the same way around when `end` isn't defined. However, when neither `start` nor `end` are defined, the searchState is an empty string.\n * @providedPropType {array.<{isRefined: boolean, label: string, value: string, isRefined: boolean, noRefinement: boolean}>} items - the list of ranges the NumericMenu can display.\n */\nexport default createConnector({\n displayName: 'AlgoliaNumericMenu',\n\n propTypes: {\n id: PropTypes.string,\n attribute: PropTypes.string.isRequired,\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.node,\n start: PropTypes.number,\n end: PropTypes.number,\n })\n ).isRequired,\n transformItems: PropTypes.func,\n },\n\n getProvidedProps(props, searchState, searchResults) {\n const attribute = props.attribute;\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const items = props.items.map(item => {\n const value = stringifyItem(item);\n return {\n label: item.label,\n value,\n isRefined: value === currentRefinement,\n noRefinement: results\n ? itemHasRefinement(getId(props), results, value)\n : false,\n };\n });\n\n const stats =\n results && results.getFacetByName(attribute)\n ? results.getFacetStats(attribute)\n : null;\n const refinedItem = find(items, item => item.isRefined === true);\n if (!items.some(item => item.value === '')) {\n items.push({\n value: '',\n isRefined: refinedItem === undefined,\n noRefinement: !stats,\n label: 'All',\n });\n }\n\n const transformedItems = props.transformItems\n ? props.transformItems(items)\n : items;\n\n return {\n items: transformedItems,\n currentRefinement,\n canRefine:\n transformedItems.length > 0 &&\n transformedItems.some(item => item.noRefinement === false),\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n const { attribute } = props;\n const { start, end } = parseItem(\n getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n })\n );\n searchParameters = searchParameters.addDisjunctiveFacet(attribute);\n\n if (typeof start === 'number') {\n searchParameters = searchParameters.addNumericRefinement(\n attribute,\n '>=',\n start\n );\n }\n if (typeof end === 'number') {\n searchParameters = searchParameters.addNumericRefinement(\n attribute,\n '<=',\n end\n );\n }\n return searchParameters;\n },\n\n getMetadata(props, searchState) {\n const id = getId(props);\n const value = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const items = [];\n const index = getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n if (value !== '') {\n const { label } = find(\n props.items,\n item => stringifyItem(item) === value\n );\n items.push({\n label: `${props.attribute}: ${label}`,\n attribute: props.attribute,\n currentRefinement: label,\n value: nextState =>\n refine(props, nextState, '', {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n });\n }\n return { id, index, items };\n },\n});\n","import createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n refineValue,\n getCurrentRefinementValue,\n getResults,\n} from '../core/indexUtils';\n\nfunction getId() {\n return 'page';\n}\n\nfunction getCurrentRefinement(props, searchState, context) {\n const id = getId();\n const page = 1;\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n page\n );\n\n if (typeof currentRefinement === 'string') {\n return parseInt(currentRefinement, 10);\n }\n return currentRefinement;\n}\n\nfunction refine(props, searchState, nextPage, context) {\n const id = getId();\n const nextValue = { [id]: nextPage };\n const resetPage = false;\n return refineValue(searchState, nextValue, context, resetPage);\n}\n\n/**\n * connectPagination connector provides the logic to build a widget that will\n * let the user displays hits corresponding to a certain page.\n * @name connectPagination\n * @kind connector\n * @propType {boolean} [showFirst=true] - Display the first page link.\n * @propType {boolean} [showLast=false] - Display the last page link.\n * @propType {boolean} [showPrevious=true] - Display the previous page link.\n * @propType {boolean} [showNext=true] - Display the next page link.\n * @propType {number} [padding=3] - How many page links to display around the current page.\n * @propType {number} [totalPages=Infinity] - Maximum number of pages to display.\n * @providedPropType {function} refine - a function to remove a single filter\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {number} nbPages - the total of existing pages\n * @providedPropType {number} currentRefinement - the page refinement currently applied\n */\nexport default createConnector({\n displayName: 'AlgoliaPagination',\n\n getProvidedProps(props, searchState, searchResults) {\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n if (!results) {\n return null;\n }\n\n const nbPages = results.nbPages;\n return {\n nbPages,\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n canRefine: nbPages > 1,\n };\n },\n\n refine(props, searchState, nextPage) {\n return refine(props, searchState, nextPage, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(props, searchState) {\n return cleanUpValue(\n searchState,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue },\n getId()\n );\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n return searchParameters.setPage(\n getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }) - 1\n );\n },\n\n getMetadata() {\n return { id: getId() };\n },\n});\n","import createConnector from '../core/createConnector';\n\n/**\n * connectPoweredBy connector provides the logic to build a widget that\n * will display a link to algolia.\n * @name connectPoweredBy\n * @kind connector\n * @providedPropType {string} url - the url to redirect to algolia\n */\nexport default createConnector({\n displayName: 'AlgoliaPoweredBy',\n\n getProvidedProps() {\n const hostname =\n typeof window === 'undefined' ? '' : window.location.hostname;\n\n const url =\n 'https://www.algolia.com/?' +\n 'utm_source=react-instantsearch&' +\n 'utm_medium=website&' +\n `utm_content=${hostname}&` +\n 'utm_campaign=poweredby';\n\n return {\n url,\n };\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n getIndexId,\n refineValue,\n getCurrentRefinementValue,\n getResults,\n} from '../core/indexUtils';\n\n/**\n * connectRange connector provides the logic to create connected\n * components that will give the ability for a user to refine results using\n * a numeric range.\n * @name connectRange\n * @kind connector\n * @requirements The attribute passed to the `attribute` prop must be present in “attributes for faceting”\n * on the Algolia dashboard or configured as `attributesForFaceting` via a set settings call to the Algolia API.\n * The values inside the attribute must be JavaScript numbers (not strings).\n * @propType {string} attribute - Name of the attribute for faceting\n * @propType {{min?: number, max?: number}} [defaultRefinement] - Default searchState of the widget containing the start and the end of the range.\n * @propType {number} [min] - Minimum value. When this isn't set, the minimum value will be automatically computed by Algolia using the data in the index.\n * @propType {number} [max] - Maximum value. When this isn't set, the maximum value will be automatically computed by Algolia using the data in the index.\n * @propType {number} [precision=0] - Number of digits after decimal point to use.\n * @providedPropType {function} refine - a function to select a range.\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {string} currentRefinement - the refinement currently applied\n * @providedPropType {number} min - the minimum value available.\n * @providedPropType {number} max - the maximum value available.\n * @providedPropType {number} precision - Number of digits after decimal point to use.\n */\n\nfunction getId(props) {\n return props.attribute;\n}\n\nconst namespace = 'range';\n\nfunction getCurrentRange(boundaries, stats, precision) {\n const pow = Math.pow(10, precision);\n\n let min;\n if (typeof boundaries.min === 'number' && isFinite(boundaries.min)) {\n min = boundaries.min;\n } else if (typeof stats.min === 'number' && isFinite(stats.min)) {\n min = stats.min;\n } else {\n min = undefined;\n }\n\n let max;\n if (typeof boundaries.max === 'number' && isFinite(boundaries.max)) {\n max = boundaries.max;\n } else if (typeof stats.max === 'number' && isFinite(stats.max)) {\n max = stats.max;\n } else {\n max = undefined;\n }\n\n return {\n min: min !== undefined ? Math.floor(min * pow) / pow : min,\n max: max !== undefined ? Math.ceil(max * pow) / pow : max,\n };\n}\n\nfunction getCurrentRefinement(props, searchState, currentRange, context) {\n const { min, max } = getCurrentRefinementValue(\n props,\n searchState,\n context,\n `${namespace}.${getId(props)}`,\n {}\n );\n\n const isFloatPrecision = Boolean(props.precision);\n\n let nextMin = min;\n if (typeof nextMin === 'string') {\n nextMin = isFloatPrecision ? parseFloat(nextMin) : parseInt(nextMin, 10);\n }\n\n let nextMax = max;\n if (typeof nextMax === 'string') {\n nextMax = isFloatPrecision ? parseFloat(nextMax) : parseInt(nextMax, 10);\n }\n\n const refinement = {\n min: nextMin,\n max: nextMax,\n };\n\n const hasMinBound = props.min !== undefined;\n const hasMaxBound = props.max !== undefined;\n\n const hasMinRefinment = refinement.min !== undefined;\n const hasMaxRefinment = refinement.max !== undefined;\n\n if (hasMinBound && hasMinRefinment && refinement.min < currentRange.min) {\n throw Error(\"You can't provide min value lower than range.\");\n }\n\n if (hasMaxBound && hasMaxRefinment && refinement.max > currentRange.max) {\n throw Error(\"You can't provide max value greater than range.\");\n }\n\n if (hasMinBound && !hasMinRefinment) {\n refinement.min = currentRange.min;\n }\n\n if (hasMaxBound && !hasMaxRefinment) {\n refinement.max = currentRange.max;\n }\n\n return refinement;\n}\n\nfunction getCurrentRefinementWithRange(refinement, range) {\n return {\n min: refinement.min !== undefined ? refinement.min : range.min,\n max: refinement.max !== undefined ? refinement.max : range.max,\n };\n}\n\nfunction nextValueForRefinement(hasBound, isReset, range, value) {\n let next;\n if (!hasBound && range === value) {\n next = undefined;\n } else if (hasBound && isReset) {\n next = range;\n } else {\n next = value;\n }\n\n return next;\n}\n\nfunction refine(props, searchState, nextRefinement, currentRange, context) {\n const { min: nextMin, max: nextMax } = nextRefinement;\n const { min: currentMinRange, max: currentMaxRange } = currentRange;\n\n const isMinReset = nextMin === undefined || nextMin === '';\n const isMaxReset = nextMax === undefined || nextMax === '';\n\n const nextMinAsNumber = !isMinReset ? parseFloat(nextMin) : undefined;\n const nextMaxAsNumber = !isMaxReset ? parseFloat(nextMax) : undefined;\n\n const isNextMinValid = isMinReset || isFinite(nextMinAsNumber);\n const isNextMaxValid = isMaxReset || isFinite(nextMaxAsNumber);\n\n if (!isNextMinValid || !isNextMaxValid) {\n throw Error(\"You can't provide non finite values to the range connector.\");\n }\n\n if (nextMinAsNumber < currentMinRange) {\n throw Error(\"You can't provide min value lower than range.\");\n }\n\n if (nextMaxAsNumber > currentMaxRange) {\n throw Error(\"You can't provide max value greater than range.\");\n }\n\n const id = getId(props);\n const resetPage = true;\n const nextValue = {\n [id]: {\n min: nextValueForRefinement(\n props.min !== undefined,\n isMinReset,\n currentMinRange,\n nextMinAsNumber\n ),\n max: nextValueForRefinement(\n props.max !== undefined,\n isMaxReset,\n currentMaxRange,\n nextMaxAsNumber\n ),\n },\n };\n\n return refineValue(searchState, nextValue, context, resetPage, namespace);\n}\n\nfunction cleanUp(props, searchState, context) {\n return cleanUpValue(searchState, context, `${namespace}.${getId(props)}`);\n}\n\nexport default createConnector({\n displayName: 'AlgoliaRange',\n\n propTypes: {\n id: PropTypes.string,\n attribute: PropTypes.string.isRequired,\n defaultRefinement: PropTypes.shape({\n min: PropTypes.number,\n max: PropTypes.number,\n }),\n min: PropTypes.number,\n max: PropTypes.number,\n precision: PropTypes.number,\n header: PropTypes.node,\n footer: PropTypes.node,\n },\n\n defaultProps: {\n precision: 0,\n },\n\n getProvidedProps(props, searchState, searchResults) {\n const { attribute, precision, min: minBound, max: maxBound } = props;\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const hasFacet = results && results.getFacetByName(attribute);\n const stats = hasFacet ? results.getFacetStats(attribute) || {} : {};\n const facetValues = hasFacet ? results.getFacetValues(attribute) : [];\n\n const count = facetValues.map(v => ({\n value: v.name,\n count: v.count,\n }));\n\n const { min: rangeMin, max: rangeMax } = getCurrentRange(\n { min: minBound, max: maxBound },\n stats,\n precision\n );\n\n // The searchState is not always in sync with the helper state. For example\n // when we set boundaries on the first render the searchState don't have\n // the correct refinement. If this behavior change in the upcoming version\n // we could store the range inside the searchState instead of rely on `this`.\n this._currentRange = {\n min: rangeMin,\n max: rangeMax,\n };\n\n const currentRefinement = getCurrentRefinement(\n props,\n searchState,\n this._currentRange,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue }\n );\n\n return {\n min: rangeMin,\n max: rangeMax,\n canRefine: count.length > 0,\n currentRefinement: getCurrentRefinementWithRange(\n currentRefinement,\n this._currentRange\n ),\n count,\n precision,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, this._currentRange, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(params, props, searchState) {\n const { attribute } = props;\n const { min, max } = getCurrentRefinement(\n props,\n searchState,\n this._currentRange,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue }\n );\n\n params = params.addDisjunctiveFacet(attribute);\n\n if (min !== undefined) {\n params = params.addNumericRefinement(attribute, '>=', min);\n }\n\n if (max !== undefined) {\n params = params.addNumericRefinement(attribute, '<=', max);\n }\n\n return params;\n },\n\n getMetadata(props, searchState) {\n const { min: minRange, max: maxRange } = this._currentRange;\n const { min: minValue, max: maxValue } = getCurrentRefinement(\n props,\n searchState,\n this._currentRange,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue }\n );\n\n const items = [];\n const hasMin = minValue !== undefined;\n const hasMax = maxValue !== undefined;\n const shouldDisplayMinLabel = hasMin && minValue !== minRange;\n const shouldDisplayMaxLabel = hasMax && maxValue !== maxRange;\n\n if (shouldDisplayMinLabel || shouldDisplayMaxLabel) {\n const fragments = [\n hasMin ? `${minValue} <= ` : '',\n props.attribute,\n hasMax ? ` <= ${maxValue}` : '',\n ];\n\n items.push({\n label: fragments.join(''),\n attribute: props.attribute,\n value: nextState =>\n refine(props, nextState, {}, this._currentRange, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n currentRefinement: getCurrentRefinementWithRange(\n { min: minValue, max: maxValue },\n { min: minRange, max: maxRange }\n ),\n });\n }\n\n return {\n id: getId(props),\n index: getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n items,\n };\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n getIndexId,\n refineValue,\n getCurrentRefinementValue,\n getResults,\n} from '../core/indexUtils';\n\nconst namespace = 'refinementList';\n\nfunction getId(props) {\n return props.attribute;\n}\n\nfunction getCurrentRefinement(props, searchState, context) {\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n `${namespace}.${getId(props)}`,\n []\n );\n\n if (typeof currentRefinement !== 'string') {\n return currentRefinement;\n }\n\n if (currentRefinement) {\n return [currentRefinement];\n }\n\n return [];\n}\n\nfunction getValue(name, props, searchState, context) {\n const currentRefinement = getCurrentRefinement(props, searchState, context);\n const isAnewValue = currentRefinement.indexOf(name) === -1;\n const nextRefinement = isAnewValue\n ? currentRefinement.concat([name]) // cannot use .push(), it mutates\n : currentRefinement.filter(selectedValue => selectedValue !== name); // cannot use .splice(), it mutates\n return nextRefinement;\n}\n\nfunction getLimit({ showMore, limit, showMoreLimit }) {\n return showMore ? showMoreLimit : limit;\n}\n\nfunction refine(props, searchState, nextRefinement, context) {\n const id = getId(props);\n // Setting the value to an empty string ensures that it is persisted in\n // the URL as an empty value.\n // This is necessary in the case where `defaultRefinement` contains one\n // item and we try to deselect it. `nextSelected` would be an empty array,\n // which would not be persisted to the URL.\n // {foo: ['bar']} => \"foo[0]=bar\"\n // {foo: []} => \"\"\n const nextValue = { [id]: nextRefinement.length > 0 ? nextRefinement : '' };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage, namespace);\n}\n\nfunction cleanUp(props, searchState, context) {\n return cleanUpValue(searchState, context, `${namespace}.${getId(props)}`);\n}\n/**\n * connectRefinementList connector provides the logic to build a widget that will\n * give the user the ability to choose multiple values for a specific facet.\n * @name connectRefinementList\n * @kind connector\n * @requirements The attribute passed to the `attribute` prop must be present in \"attributes for faceting\"\n * on the Algolia dashboard or configured as `attributesForFaceting` via a set settings call to the Algolia API.\n * @propType {string} attribute - the name of the attribute in the record\n * @propType {boolean} [searchable=false] - allow search inside values\n * @propType {string} [operator=or] - How to apply the refinements. Possible values: 'or' or 'and'.\n * @propType {boolean} [showMore=false] - true if the component should display a button that will expand the number of items\n * @propType {number} [limit=10] - the minimum number of displayed items\n * @propType {number} [showMoreLimit=20] - the maximun number of displayed items. Only used when showMore is set to `true`\n * @propType {string[]} defaultRefinement - the values of the items selected by default. The searchState of this widget takes the form of a list of `string`s, which correspond to the values of all selected refinements. However, when there are no refinements selected, the value of the searchState is an empty string.\n * @propType {function} [transformItems] - Function to modify the items being displayed, e.g. for filtering or sorting them. Takes an items as parameter and expects it back in return.\n * @providedPropType {function} refine - a function to toggle a refinement\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {string[]} currentRefinement - the refinement currently applied\n * @providedPropType {array.<{count: number, isRefined: boolean, label: string, value: string}>} items - the list of items the RefinementList can display.\n * @providedPropType {function} searchForItems - a function to toggle a search inside items values\n * @providedPropType {boolean} isFromSearch - a boolean that says if the `items` props contains facet values from the global search or from the search inside items.\n * @providedPropType {boolean} canRefine - a boolean that says whether you can refine\n */\n\nconst sortBy = ['isRefined', 'count:desc', 'name:asc'];\nexport default createConnector({\n displayName: 'AlgoliaRefinementList',\n\n propTypes: {\n id: PropTypes.string,\n attribute: PropTypes.string.isRequired,\n operator: PropTypes.oneOf(['and', 'or']),\n showMore: PropTypes.bool,\n limit: PropTypes.number,\n showMoreLimit: PropTypes.number,\n defaultRefinement: PropTypes.arrayOf(\n PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n ),\n searchable: PropTypes.bool,\n transformItems: PropTypes.func,\n },\n\n defaultProps: {\n operator: 'or',\n showMore: false,\n limit: 10,\n showMoreLimit: 20,\n },\n\n getProvidedProps(\n props,\n searchState,\n searchResults,\n metadata,\n searchForFacetValuesResults\n ) {\n const { attribute, searchable, indexContextValue } = props;\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const canRefine =\n Boolean(results) && Boolean(results.getFacetByName(attribute));\n\n const isFromSearch = Boolean(\n searchForFacetValuesResults &&\n searchForFacetValuesResults[attribute] &&\n searchForFacetValuesResults.query !== ''\n );\n\n // Search For Facet Values is not available with derived helper (used for multi index search)\n if (searchable && indexContextValue) {\n throw new Error(\n 'react-instantsearch: searching in *List is not available when used inside a' +\n ' multi index context'\n );\n }\n\n if (!canRefine) {\n return {\n items: [],\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n canRefine,\n isFromSearch,\n searchable,\n };\n }\n\n const items = isFromSearch\n ? searchForFacetValuesResults[attribute].map(v => ({\n label: v.value,\n value: getValue(v.value, props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n _highlightResult: { label: { value: v.highlighted } },\n count: v.count,\n isRefined: v.isRefined,\n }))\n : results.getFacetValues(attribute, { sortBy }).map(v => ({\n label: v.name,\n value: getValue(v.name, props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n count: v.count,\n isRefined: v.isRefined,\n }));\n\n const transformedItems = props.transformItems\n ? props.transformItems(items)\n : items;\n\n return {\n items: transformedItems.slice(0, getLimit(props)),\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n isFromSearch,\n searchable,\n canRefine: transformedItems.length > 0,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n searchForFacetValues(props, searchState, nextRefinement) {\n return {\n facetName: props.attribute,\n query: nextRefinement,\n maxFacetHits: getLimit(props),\n };\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n const { attribute, operator } = props;\n\n const addKey = operator === 'and' ? 'addFacet' : 'addDisjunctiveFacet';\n const addRefinementKey = `${addKey}Refinement`;\n\n searchParameters = searchParameters.setQueryParameters({\n maxValuesPerFacet: Math.max(\n searchParameters.maxValuesPerFacet || 0,\n getLimit(props)\n ),\n });\n\n searchParameters = searchParameters[addKey](attribute);\n\n return getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }).reduce(\n (res, val) => res[addRefinementKey](attribute, val),\n searchParameters\n );\n },\n\n getMetadata(props, searchState) {\n const id = getId(props);\n const context = {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n };\n return {\n id,\n index: getIndexId(context),\n items:\n getCurrentRefinement(props, searchState, context).length > 0\n ? [\n {\n attribute: props.attribute,\n label: `${props.attribute}: `,\n currentRefinement: getCurrentRefinement(\n props,\n searchState,\n context\n ),\n value: nextState => refine(props, nextState, [], context),\n items: getCurrentRefinement(props, searchState, context).map(\n item => ({\n label: `${item}`,\n value: nextState => {\n const nextSelectedItems = getCurrentRefinement(\n props,\n nextState,\n context\n ).filter(other => other !== item);\n return refine(\n props,\n searchState,\n nextSelectedItems,\n context\n );\n },\n })\n ),\n },\n ]\n : [],\n };\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport {\n getCurrentRefinementValue,\n hasMultipleIndices,\n getIndexId,\n} from '../core/indexUtils';\nimport { shallowEqual, omit } from '../core/utils';\n\n/**\n * connectScrollTo connector provides the logic to build a widget that will\n * let the page scroll to a certain point.\n * @name connectScrollTo\n * @kind connector\n * @propType {string} [scrollOn=\"page\"] - Widget searchState key on which to listen for changes, default to the pagination widget.\n * @providedPropType {any} value - the current refinement applied to the widget listened by scrollTo\n * @providedPropType {boolean} hasNotChanged - indicates whether the refinement came from the scrollOn argument (for instance page by default)\n */\nexport default createConnector({\n displayName: 'AlgoliaScrollTo',\n\n propTypes: {\n scrollOn: PropTypes.string,\n },\n\n defaultProps: {\n scrollOn: 'page',\n },\n\n getProvidedProps(props, searchState) {\n const id = props.scrollOn;\n const value = getCurrentRefinementValue(\n props,\n searchState,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue },\n id,\n null\n );\n\n if (!this._prevSearchState) {\n this._prevSearchState = {};\n }\n\n // Get the subpart of the state that interest us\n if (\n hasMultipleIndices({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n })\n ) {\n searchState = searchState.indices\n ? searchState.indices[\n getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n })\n ]\n : {};\n }\n\n // if there is a change in the app that has been triggered by another element\n // than \"props.scrollOn (id) or the Configure widget, we need to keep track of\n // the search state to know if there's a change in the app that was not triggered\n // by the props.scrollOn (id) or the Configure widget. This is useful when\n // using ScrollTo in combination of Pagination. As pagination can be change\n // by every widget, we want to scroll only if it cames from the pagination\n // widget itself. We also remove the configure key from the search state to\n // do this comparison because for now configure values are not present in the\n // search state before a first refinement has been made and will false the results.\n // See: https://github.com/algolia/react-instantsearch/issues/164\n const cleanedSearchState = omit(searchState, ['configure', id]);\n\n const hasNotChanged = shallowEqual(\n this._prevSearchState,\n cleanedSearchState\n );\n\n this._prevSearchState = cleanedSearchState;\n\n return { value, hasNotChanged };\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n refineValue,\n getCurrentRefinementValue,\n getIndexId,\n} from '../core/indexUtils';\n\nfunction getId() {\n return 'query';\n}\n\nfunction getCurrentRefinement(props, searchState, context) {\n const id = getId(props);\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n ''\n );\n\n if (currentRefinement) {\n return currentRefinement;\n }\n return '';\n}\n\nfunction refine(props, searchState, nextRefinement, context) {\n const id = getId();\n const nextValue = { [id]: nextRefinement };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage);\n}\n\nfunction cleanUp(props, searchState, context) {\n return cleanUpValue(searchState, context, getId());\n}\n\n/**\n * connectSearchBox connector provides the logic to build a widget that will\n * let the user search for a query\n * @name connectSearchBox\n * @kind connector\n * @propType {string} [defaultRefinement] - Provide a default value for the query\n * @providedPropType {function} refine - a function to change the current query\n * @providedPropType {string} currentRefinement - the current query used\n * @providedPropType {boolean} isSearchStalled - a flag that indicates if InstantSearch has detected that searches are stalled\n */\nexport default createConnector({\n displayName: 'AlgoliaSearchBox',\n\n propTypes: {\n defaultRefinement: PropTypes.string,\n },\n\n getProvidedProps(props, searchState, searchResults) {\n return {\n currentRefinement: getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n isSearchStalled: searchResults.isSearchStalled,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n return searchParameters.setQuery(\n getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n })\n );\n },\n\n getMetadata(props, searchState) {\n const id = getId(props);\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n return {\n id,\n index: getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n items:\n currentRefinement === null\n ? []\n : [\n {\n label: `${id}: ${currentRefinement}`,\n value: nextState =>\n refine(props, nextState, '', {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n currentRefinement,\n },\n ],\n };\n },\n});\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n refineValue,\n getCurrentRefinementValue,\n} from '../core/indexUtils';\n\nfunction getId() {\n return 'sortBy';\n}\n\nfunction getCurrentRefinement(props, searchState, context) {\n const id = getId(props);\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n null\n );\n\n if (currentRefinement) {\n return currentRefinement;\n }\n return null;\n}\n\n/**\n * The connectSortBy connector provides the logic to build a widget that will\n * display a list of indices. This allows a user to change how the hits are being sorted.\n * @name connectSortBy\n * @requirements Algolia handles sorting by creating replica indices. [Read more about sorting](https://www.algolia.com/doc/guides/relevance/sorting/) on\n * the Algolia website.\n * @kind connector\n * @propType {string} defaultRefinement - The default selected index.\n * @propType {{value: string, label: string}[]} items - The list of indexes to search in.\n * @propType {function} [transformItems] - Function to modify the items being displayed, e.g. for filtering or sorting them. Takes an items as parameter and expects it back in return.\n * @providedPropType {function} refine - a function to remove a single filter\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n * @providedPropType {string[]} currentRefinement - the refinement currently applied\n * @providedPropType {array.<{isRefined: boolean, label?: string, value: string}>} items - the list of items the HitsPerPage can display. If no label provided, the value will be displayed.\n */\nexport default createConnector({\n displayName: 'AlgoliaSortBy',\n\n propTypes: {\n defaultRefinement: PropTypes.string,\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n transformItems: PropTypes.func,\n },\n\n getProvidedProps(props, searchState) {\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const items = props.items.map(item =>\n item.value === currentRefinement\n ? { ...item, isRefined: true }\n : { ...item, isRefined: false }\n );\n return {\n items: props.transformItems ? props.transformItems(items) : items,\n currentRefinement,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n const id = getId();\n const nextValue = { [id]: nextRefinement };\n const resetPage = true;\n return refineValue(\n searchState,\n nextValue,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue },\n resetPage\n );\n },\n\n cleanUp(props, searchState) {\n return cleanUpValue(\n searchState,\n { ais: props.contextValue, multiIndexContext: props.indexContextValue },\n getId()\n );\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n const selectedIndex = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n return searchParameters.setIndex(selectedIndex);\n },\n\n getMetadata() {\n return { id: getId() };\n },\n});\n","import createConnector from '../core/createConnector';\nimport { getResults } from '../core/indexUtils';\n\n/**\n * The `connectStateResults` connector provides a way to access the `searchState` and the `searchResults`\n * of InstantSearch.\n * For instance this connector allows you to create results/noResults or query/noQuery pages.\n * @name connectStateResults\n * @kind connector\n * @providedPropType {object} searchState - The search state of the instant search component.

See: [Search state structure](https://community.algolia.com/react-instantsearch/guide/Search_state.html)\n * @providedPropType {object} searchResults - The search results.

In case of multiple indices: if used under ``, results will be those of the corresponding index otherwise it'll be those of the root index See: [Search results structure](https://community.algolia.com/algoliasearch-helper-js/reference.html#searchresults)\n * @providedPropType {object} allSearchResults - In case of multiple indices you can retrieve all the results\n * @providedPropType {string} error - If the search failed, the error will be logged here.\n * @providedPropType {boolean} searching - If there is a search in progress.\n * @providedPropType {boolean} isSearchStalled - Flag that indicates if React InstantSearch has detected that searches are stalled.\n * @providedPropType {boolean} searchingForFacetValues - If there is a search in a list in progress.\n * @providedPropType {object} props - component props.\n * @example\n * import React from 'react';\n * import algoliasearch from 'algoliasearch/lite';\n * import { InstantSearch, SearchBox, Hits, connectStateResults } from 'react-instantsearch-dom';\n *\n * const searchClient = algoliasearch(\n * 'latency',\n * '6be0576ff61c053d5f9a3225e2a90f76'\n * );\n *\n * const Content = connectStateResults(({ searchState, searchResults }) => {\n * const hasResults = searchResults && searchResults.nbHits !== 0;\n *\n * return (\n *
\n * \n * \n *
\n * );\n * });\n *\n * const App = () => (\n * \n * \n * \n * \n * );\n */\nexport default createConnector({\n displayName: 'AlgoliaStateResults',\n\n getProvidedProps(props, searchState, searchResults) {\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n return {\n searchState,\n searchResults: results,\n allSearchResults: searchResults.results,\n searching: searchResults.searching,\n isSearchStalled: searchResults.isSearchStalled,\n error: searchResults.error,\n searchingForFacetValues: searchResults.searchingForFacetValues,\n props,\n };\n },\n});\n","import createConnector from '../core/createConnector';\nimport { getResults } from '../core/indexUtils';\n\n/**\n * connectStats connector provides the logic to build a widget that will\n * displays algolia search statistics (hits number and processing time).\n * @name connectStats\n * @kind connector\n * @providedPropType {number} nbHits - number of hits returned by Algolia.\n * @providedPropType {number} processingTimeMS - the time in ms took by Algolia to search for results.\n */\nexport default createConnector({\n displayName: 'AlgoliaStats',\n\n getProvidedProps(props, searchState, searchResults) {\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n if (!results) {\n return null;\n }\n return {\n nbHits: results.nbHits,\n processingTimeMS: results.processingTimeMS,\n };\n },\n});\n","import PropTypes from 'prop-types';\nimport { find } from '../core/utils';\nimport createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n getIndexId,\n getResults,\n refineValue,\n getCurrentRefinementValue,\n} from '../core/indexUtils';\n\nfunction getId(props) {\n return props.attribute;\n}\n\nconst namespace = 'toggle';\n\nconst falsyStrings = ['0', 'false', 'null', 'undefined'];\n\nfunction getCurrentRefinement(props, searchState, context) {\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n `${namespace}.${getId(props)}`,\n false\n );\n\n if (falsyStrings.indexOf(currentRefinement) !== -1) {\n return false;\n }\n\n return Boolean(currentRefinement);\n}\n\nfunction refine(props, searchState, nextRefinement, context) {\n const id = getId(props);\n const nextValue = { [id]: nextRefinement ? nextRefinement : false };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage, namespace);\n}\n\nfunction cleanUp(props, searchState, context) {\n return cleanUpValue(searchState, context, `${namespace}.${getId(props)}`);\n}\n\n/**\n * connectToggleRefinement connector provides the logic to build a widget that will\n * provides an on/off filtering feature based on an attribute value.\n * @name connectToggleRefinement\n * @kind connector\n * @requirements To use this widget, you'll need an attribute to toggle on.\n *\n * You can't toggle on null or not-null values. If you want to address this particular use-case you'll need to compute an\n * extra boolean attribute saying if the value exists or not. See this [thread](https://discourse.algolia.com/t/how-to-create-a-toggle-for-the-absence-of-a-string-attribute/2460) for more details.\n *\n * @propType {string} attribute - Name of the attribute on which to apply the `value` refinement. Required when `value` is present.\n * @propType {string} label - Label for the toggle.\n * @propType {string} value - Value of the refinement to apply on `attribute`.\n * @propType {boolean} [defaultRefinement=false] - Default searchState of the widget. Should the toggle be checked by default?\n * @providedPropType {boolean} currentRefinement - `true` when the refinement is applied, `false` otherwise\n * @providedPropType {object} count - an object that contains the count for `checked` and `unchecked` state\n * @providedPropType {function} refine - a function to toggle a refinement\n * @providedPropType {function} createURL - a function to generate a URL for the corresponding search state\n */\nexport default createConnector({\n displayName: 'AlgoliaToggle',\n\n propTypes: {\n label: PropTypes.string.isRequired,\n attribute: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n filter: PropTypes.func,\n defaultRefinement: PropTypes.bool,\n },\n\n getProvidedProps(props, searchState, searchResults) {\n const { attribute, value } = props;\n const results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const currentRefinement = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const allFacetValues =\n results && results.getFacetByName(attribute)\n ? results.getFacetValues(attribute)\n : null;\n\n const facetValue =\n // Use null to always be consistent with type of the value\n // count: number | null\n allFacetValues && allFacetValues.length\n ? find(allFacetValues, item => item.name === value.toString())\n : null;\n\n const facetValueCount = facetValue && facetValue.count;\n const allFacetValuesCount =\n // Use null to always be consistent with type of the value\n // count: number | null\n allFacetValues && allFacetValues.length\n ? allFacetValues.reduce((acc, item) => acc + item.count, 0)\n : null;\n\n const canRefine = currentRefinement\n ? allFacetValuesCount !== null && allFacetValuesCount > 0\n : facetValueCount !== null && facetValueCount > 0;\n\n const count = {\n checked: allFacetValuesCount,\n unchecked: facetValueCount,\n };\n\n return {\n currentRefinement,\n canRefine,\n count,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n const { attribute, value, filter } = props;\n const checked = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n let nextSearchParameters = searchParameters.addDisjunctiveFacet(attribute);\n\n if (checked) {\n nextSearchParameters = nextSearchParameters.addDisjunctiveFacetRefinement(\n attribute,\n value\n );\n\n if (filter) {\n nextSearchParameters = filter(nextSearchParameters);\n }\n }\n\n return nextSearchParameters;\n },\n\n getMetadata(props, searchState) {\n const id = getId(props);\n const checked = getCurrentRefinement(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const items = [];\n const index = getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n if (checked) {\n items.push({\n label: props.label,\n currentRefinement: checked,\n attribute: props.attribute,\n value: nextState =>\n refine(props, nextState, false, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n });\n }\n\n return { id, index, items };\n },\n});\n","import createConnector from '../core/createConnector';\nimport { getResults } from '../core/indexUtils';\n\ntype Results = { index: string };\ntype Hit = { objectID: string; __position: number; __queryID: string };\n\ntype InsightsClient = (\n method: InsightsClientMethod,\n payload: InsightsClientPayload\n) => void;\n\ntype InsightsClientMethod =\n | 'clickedObjectIDsAfterSearch'\n | 'convertedObjectIDsAfterSearch';\n\ntype InsightsClientPayload = {\n index: string;\n queryID: string;\n eventName: string;\n objectIDs: string[];\n positions?: number[];\n};\n\nfunction inferPayload({\n method,\n results,\n currentHit,\n}: {\n method: InsightsClientMethod;\n results: Results;\n currentHit: Hit;\n}): Omit {\n const { index } = results;\n const queryID = currentHit.__queryID;\n const objectIDs = [currentHit.objectID];\n\n if (!queryID) {\n throw new Error(`Could not infer \\`queryID\\`. Ensure \\`clickAnalytics: true\\` was added with the Configure widget.\nSee: https://alg.li/VpPpLt`);\n }\n\n switch (method) {\n case 'clickedObjectIDsAfterSearch': {\n const positions = [currentHit.__position];\n return { index, queryID, objectIDs, positions };\n }\n\n case 'convertedObjectIDsAfterSearch':\n return { index, queryID, objectIDs };\n\n default:\n throw new Error(\n `Unsupported method \"${method}\" passed to the insights function. The supported methods are: \"clickedObjectIDsAfterSearch\", \"convertedObjectIDsAfterSearch\".`\n );\n }\n}\n\nconst wrapInsightsClient = (\n aa: InsightsClient,\n results: Results,\n currentHit: Hit\n) => (\n method: InsightsClientMethod,\n payload: Partial\n) => {\n if (typeof aa !== 'function') {\n throw new TypeError(`Expected insightsClient to be a Function`);\n }\n const inferredPayload = inferPayload({ method, results, currentHit });\n aa(method, { ...inferredPayload, ...payload } as any);\n};\n\nexport default (insightsClient: InsightsClient) =>\n createConnector({\n displayName: 'AlgoliaInsights',\n\n getProvidedProps(props, _, searchResults) {\n const results: Results = getResults(searchResults, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n\n const insights = wrapInsightsClient(insightsClient, results, props.hit);\n return { insights };\n },\n });\n","import PropTypes from 'prop-types';\nimport createConnector from '../core/createConnector';\nimport {\n cleanUpValue,\n refineValue,\n getCurrentRefinementValue,\n getIndexId,\n} from '../core/indexUtils';\n\nfunction getId() {\n return 'query';\n}\n\nfunction getAdditionalId() {\n return 'additionalVoiceParameters';\n}\n\nfunction getCurrentRefinementQuery(props, searchState, context) {\n const id = getId();\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n ''\n );\n\n if (currentRefinement) {\n return currentRefinement;\n }\n return '';\n}\n\nfunction getCurrentRefinementAdditional(props, searchState, context) {\n const id = getAdditionalId();\n const currentRefinement = getCurrentRefinementValue(\n props,\n searchState,\n context,\n id,\n ''\n );\n\n if (currentRefinement) {\n return currentRefinement;\n }\n return {};\n}\n\nfunction refine(props, searchState, nextRefinement, context) {\n const id = getId();\n const voiceParams = getAdditionalId();\n const queryLanguages = props.language\n ? { queryLanguages: [props.language.split('-')[0]] }\n : {};\n const additionalQueryParameters =\n typeof props.additionalQueryParameters === 'function'\n ? {\n ignorePlurals: true,\n removeStopWords: true,\n optionalWords: nextRefinement,\n ...props.additionalQueryParameters({ query: nextRefinement }),\n }\n : {};\n const nextValue = {\n [id]: nextRefinement,\n [voiceParams]: {\n ...queryLanguages,\n ...additionalQueryParameters,\n },\n };\n const resetPage = true;\n return refineValue(searchState, nextValue, context, resetPage);\n}\n\nfunction cleanUp(props, searchState, context) {\n const interimState = cleanUpValue(searchState, context, getId());\n return cleanUpValue(interimState, context, getAdditionalId());\n}\n\nexport default createConnector({\n displayName: 'AlgoliaVoiceSearch',\n\n propTypes: {\n defaultRefinement: PropTypes.string,\n },\n\n getProvidedProps(props, searchState, searchResults) {\n return {\n currentRefinement: getCurrentRefinementQuery(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n isSearchStalled: searchResults.isSearchStalled,\n };\n },\n\n refine(props, searchState, nextRefinement) {\n return refine(props, searchState, nextRefinement, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n cleanUp(props, searchState) {\n return cleanUp(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n },\n\n getSearchParameters(searchParameters, props, searchState) {\n const query = getCurrentRefinementQuery(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n const additionalParams = getCurrentRefinementAdditional(\n props,\n searchState,\n {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }\n );\n\n return searchParameters\n .setQuery(query)\n .setQueryParameters(additionalParams);\n },\n\n getMetadata(props, searchState) {\n const id = getId();\n const currentRefinement = getCurrentRefinementQuery(props, searchState, {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n });\n return {\n id,\n index: getIndexId({\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n items:\n currentRefinement === null\n ? []\n : [\n {\n label: `${id}: ${currentRefinement}`,\n value: nextState =>\n refine(props, nextState, '', {\n ais: props.contextValue,\n multiIndexContext: props.indexContextValue,\n }),\n currentRefinement,\n },\n ],\n };\n },\n});\n"],"names":["objectWithoutPropertiesLoose","defineProperty","assertThisInitialized","setPrototypeOf","shallowEqual","objA","objB","keysA","Object","keys","keysB","length","hasOwn","prototype","hasOwnProperty","i","call","getDisplayName","Component","displayName","name","resolved","Promise","resolve","defer","f","then","isPlainObject","value","Array","isArray","removeEmptyKey","obj","forEach","key","objectHasKeys","removeEmptyArraysFromObject","addAbsolutePositions","hits","hitsPerPage","page","map","hit","index","__position","addQueryID","queryID","__queryID","find","array","comparator","undefined","object","omit","source","excluded","target","sourceKeys","indexOf","getPropertyByPath","path","replace","split","reduce","current","createContext","onInternalStateUpdate","createHrefForState","onSearchForFacetValues","onSearchStateChange","onSearchParameters","store","widgetsManager","mainTargetedIndex","InstantSearchConsumer","Consumer","InstantSearchProvider","Provider","IndexConsumer","IndexProvider","createConnectorWithoutContext","connectorDesc","Error","isWidget","getSearchParameters","getMetadata","transitionState","Composed","Connector","props","providedProps","getProvidedProps","args","contextValue","refine","getState","widgets","searchForFacetValues","bind","ais","multiIndexContext","indexContextValue","unsubscribe","subscribe","isUnmounting","setState","unregisterWidget","registerWidget","nextProps","nextState","shouldComponentUpdate","state","propsEqual","prevProps","isEqual","update","cleanUp","results","resultsFacetValues","searching","searchingForFacetValues","isSearchStalled","metadata","error","searchResults","searchParameters","nextWidgetsState","prevWidgetsState","refineProps","createURL","searchForFacetValuesProps","searchForItems","React","defaultProps","createConnectorWithContext","ConnectorWrapper","HIGHLIGHT_TAGS","highlightPreTag","highlightPostTag","parseHighlightedAttribute","preTag","postTag","highlightedValue","splitByPreTag","firstValue","shift","elements","isHighlighted","push","splitByPostTag","parseAlgoliaHit","highlightProperty","attribute","highlightObject","item","translatable","defaultTranslations","Translatable","translations","translation","params","translate","getIndexId","context","hasMultipleIndices","targetedIndex","getResults","indexId","refineValue","searchState","nextRefinement","resetPage","namespace","refineMultiIndexWithNamespace","refineMultiIndex","indices","refineSingleIndexWithNamespace","refineSingleIndex","getNamespaceAndAttributeName","id","parts","match","attributeName","hasRefinements","multiIndex","getRefinements","getCurrentRefinementValue","defaultValue","hasRefinementsValue","defaultRefinement","cleanUpValue","Boolean","cleanUpValueWithMultiIndex","cleanUpValueWithSingleIndex","indexSearchState","getId","createConnector","children","items","setQueryParameters","prevSearchState","nextSearchState","propKeys","nonPresentKeys","_props","filter","prop","nextValue","subState","configureKeys","configureState","acc","connectConfigure","Configure","arrayWithoutHoles","iterableToArray","nonIterableSpread","_objectWithoutPropertiesLoose","merge","valToNumber","intersection","prepareHierarchicalFacetSortBy","orderBy","generateHierarchicalTree","inherits","version","SearchParameters","requestBuilder","SearchResults","DerivedHelper","AlgoliaSearchHelper","require$$0","createOptionalFilter","attributeValue","attributeScore","transformSearchParameters","x","getSearchParametersFromProps","optionalFilters","matchingPatterns","attributePattern","score","attributeSubValue","algoliasearchHelper","sumOrFiltersScores","facetFilters","objectID","_prevSearchState","searchParametersKeys","_searchParameters","global","ReactPropTypesSecret","require$$1","ConfigureRelatedItems","propTypes","PropTypes","isRequired","func","connectConfigureRelatedItems","escapeRuleContext","ruleName","getWidgetRefinements","widgetKey","widgetState","rangeKey","refinements","concat","getRuleContextsFromTrackedFilters","trackedFilters","ruleContexts","facets","facetName","facetRefinements","getTrackedFacetValues","trackedFacetValues","facetRefinement","includes","facetValue","transformItems","transformRuleContexts","_1","canRefine","userData","transformedItems","newRuleContexts","initialRuleContexts","nextRuleContexts","slice","setQueryParameter","connectQueryRules","QueryRuleContext","getIndexContext","Index","indexContext","indexName","setIndex","childrenCount","Children","count","IndexWrapper","inferredIndexId","createWidgetsManager","onWidgetsUpdate","scheduled","scheduleUpdate","widget","splice","getWidgets","createStore","initialState","listeners","listener","addAlgoliaAgents","searchClient","addAlgoliaAgent","ReactVersion","isMultiIndexContext","isTargetedIndexEqualIndex","isIndexWidget","isIndexWidgetEqualIndex","sortIndexWidgetsFirst","firstWidget","secondWidget","isFirstWidgetIndex","isSecondWidgetIndex","serializeQueryParameters","parameters","isObjectOrArray","toString","encode","format","encodeURIComponent","JSON","stringify","join","createInstantSearchManager","resultsState","stalledSearchDelay","helper","on","handleNewSearch","handleSearchSuccess","handleSearchError","skip","stalledSearchTimer","initialSearchParameters","hydrateSearchClient","hydrateResultsState","skipSearch","updateClient","client","setClient","search","clearCache","sharedParameters","res","mainParameters","targetedIndexEqualMainIndex","subIndexEqualMainIndex","sort","derivedIndices","targetedIndexNotEqualMainIndex","subIndexNotEqualMainIndex","derivedParameters","derivedHelpers","derivedHelper","detach","derive","event","isDerivedHelpersEmpty","getFacetByName","currentState","nextIsSearchStalled","hasPendingRequests","clearTimeout","partialState","setTimeout","transporter","_cacheHydrated","_useCache","baseMethod","requests","methodArgs","requestsWithSerializedParams","request","responsesCache","get","method","hydrateSearchClientWithMultiIndexRequest","hydrateSearchClientWithSingleIndexRequest","set","result","rawResults","cache","_internalIndexId","onExternalStateUpdate","query","maxFacetHits","maxFacetHitsWithinRange","Math","max","min","content","facetHits","catch","updateIndex","newIndex","getWidgetsIds","meta","isControlled","InstantSearch","prevState","nextIsControlled","previousSearchState","instantSearchManager","onWidgetsInternalStateUpdate","prevIsControlled","refresh","getKnownKeys","getCurrentRefinement","currentRefinement","getHits","setQuery","attributes","transformValue","values","isRefined","label","data","propName","componentName","isNotString","val","some","isFacetPresent","getFacetValues","clearsQuery","refinementsToClear","clear","getBoundingBoxId","getAroundLatLngId","getConfigureAroundLatLngId","currentRefinementToString","northEast","lat","lng","southWest","stringToCurrentRefinement","parseFloat","latLngRegExp","stringToPosition","pattern","refinement","getCurrentPosition","propsWithoutDefaultRefinement","aroundLatLng","configureAroundLatLng","currentRefinementFromSearchState","currentRefinementFromSearchParameters","_state","insideBoundingBox","currentPositionFromSearchState","currentPositionFromSearchParameters","position","_","_geoloc","isRefinedWithMap","getValue","separator","rootPath","showParentLevel","tmpSearchParameters","hierarchicalFacets","toggleHierarchicalFacetRefinement","getHierarchicalRefinement","v","truncate","limit","sortBy","string","bool","showMore","number","showMoreLimit","itemsLimit","addHierarchicalFacet","maxValuesPerFacet","rootAttribute","highlight","hitsWithPositions","hitsWithPositionsAndQueryID","parseInt","arrayOf","shape","setHitsPerPage","getStateWithoutPage","rest","getInMemoryCache","cachedHits","cachedState","read","write","extractHitsFromCachedHits","Number","a","b","_prevState","_cachedHits","hasPrevious","hasMore","refinePrevious","refineNext","nbPages","p","firstReceivedPage","lastReceivedPage","lastPageIndex","pages","getLimit","defaultSortBy","searchable","searchForFacetValuesResults","isFromSearch","_highlightResult","highlighted","addDisjunctiveFacet","addDisjunctiveFacetRefinement","arrayWithHoles","iterableToArrayLimit","nonIterableRest","stringifyItem","start","end","parseItem","startStr","endStr","isRefinementsRangeIncludesInsideItemRange","stats","isItemRangeIncludedInsideRefinementsRange","itemHasRefinement","getFacetStats","range","NEGATIVE_INFINITY","POSITIVE_INFINITY","node","noRefinement","refinedItem","addNumericRefinement","nextPage","setPage","hostname","window","location","url","getCurrentRange","boundaries","precision","pow","isFinite","floor","ceil","currentRange","isFloatPrecision","nextMin","nextMax","hasMinBound","hasMaxBound","hasMinRefinment","hasMaxRefinment","getCurrentRefinementWithRange","nextValueForRefinement","hasBound","isReset","next","currentMinRange","currentMaxRange","isMinReset","isMaxReset","nextMinAsNumber","nextMaxAsNumber","isNextMinValid","isNextMaxValid","header","footer","minBound","maxBound","hasFacet","facetValues","rangeMin","rangeMax","_currentRange","minRange","maxRange","minValue","maxValue","hasMin","hasMax","shouldDisplayMinLabel","shouldDisplayMaxLabel","fragments","isAnewValue","selectedValue","operator","oneOf","oneOfType","addKey","addRefinementKey","nextSelectedItems","other","scrollOn","cleanedSearchState","hasNotChanged","selectedIndex","allSearchResults","nbHits","processingTimeMS","falsyStrings","any","allFacetValues","facetValueCount","allFacetValuesCount","checked","unchecked","nextSearchParameters","inferPayload","currentHit","objectIDs","positions","wrapInsightsClient","aa","payload","TypeError","inferredPayload","insightsClient","insights","getAdditionalId","getCurrentRefinementQuery","getCurrentRefinementAdditional","voiceParams","queryLanguages","language","additionalQueryParameters","ignorePlurals","removeStopWords","optionalWords","interimState","additionalParams"],"mappings":"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"}