instantsearch.js 4.49.1 → 4.49.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/cjs/components/Answers/Answers.js +6 -16
- package/cjs/components/Breadcrumb/Breadcrumb.js +5 -12
- package/cjs/components/ClearRefinements/ClearRefinements.js +4 -11
- package/cjs/components/CurrentRefinements/CurrentRefinements.js +5 -12
- package/cjs/components/GeoSearchControls/GeoSearchButton.js +4 -6
- package/cjs/components/GeoSearchControls/GeoSearchControls.js +11 -20
- package/cjs/components/GeoSearchControls/GeoSearchToggle.js +4 -6
- package/cjs/components/Highlight/Highlight.js +3 -11
- package/cjs/components/Hits/Hits.js +8 -20
- package/cjs/components/InfiniteHits/InfiniteHits.js +13 -25
- package/cjs/components/InternalHighlight/InternalHighlight.js +0 -3
- package/cjs/components/MenuSelect/MenuSelect.js +9 -19
- package/cjs/components/Pagination/Pagination.js +10 -17
- package/cjs/components/Panel/Panel.js +7 -26
- package/cjs/components/PoweredBy/PoweredBy.js +4 -5
- package/cjs/components/QueryRuleCustomData/QueryRuleCustomData.js +2 -6
- package/cjs/components/RangeInput/RangeInput.js +16 -48
- package/cjs/components/RefinementList/RefinementList.js +19 -73
- package/cjs/components/RefinementList/RefinementListItem.js +8 -14
- package/cjs/components/RelevantSort/RelevantSort.js +4 -8
- package/cjs/components/ReverseHighlight/ReverseHighlight.js +3 -11
- package/cjs/components/ReverseSnippet/ReverseSnippet.js +3 -11
- package/cjs/components/SearchBox/SearchBox.js +25 -69
- package/cjs/components/Selector/Selector.js +3 -6
- package/cjs/components/Slider/Pit.js +3 -10
- package/cjs/components/Slider/Rheostat.js +63 -131
- package/cjs/components/Slider/Slider.js +28 -65
- package/cjs/components/Snippet/Snippet.js +3 -11
- package/cjs/components/Stats/Stats.js +7 -20
- package/cjs/components/Template/Template.js +8 -37
- package/cjs/components/ToggleRefinement/ToggleRefinement.js +4 -10
- package/cjs/components/VoiceSearch/VoiceSearch.js +8 -15
- package/cjs/connectors/answers/connectAnswers.js +21 -36
- package/cjs/connectors/autocomplete/connectAutocomplete.js +8 -25
- package/cjs/connectors/breadcrumb/connectBreadcrumb.js +17 -48
- package/cjs/connectors/clear-refinements/connectClearRefinements.js +27 -45
- package/cjs/connectors/configure/connectConfigure.js +6 -20
- package/cjs/connectors/configure-related-items/connectConfigureRelatedItems.js +11 -36
- package/cjs/connectors/current-refinements/connectCurrentRefinements.js +18 -57
- package/cjs/connectors/dynamic-widgets/connectDynamicWidgets.js +17 -37
- package/cjs/connectors/geo-search/connectGeoSearch.js +17 -47
- package/cjs/connectors/hierarchical-menu/connectHierarchicalMenu.js +38 -74
- package/cjs/connectors/hits/connectHits.js +10 -26
- package/cjs/connectors/hits/connectHitsWithInsights.js +0 -4
- package/cjs/connectors/hits-per-page/connectHitsPerPage.js +15 -38
- package/cjs/connectors/index.js +62 -96
- package/cjs/connectors/infinite-hits/connectInfiniteHits.js +26 -62
- package/cjs/connectors/infinite-hits/connectInfiniteHitsWithInsights.js +0 -4
- package/cjs/connectors/menu/connectMenu.js +28 -66
- package/cjs/connectors/numeric-menu/connectNumericMenu.js +24 -78
- package/cjs/connectors/pagination/Paginator.js +3 -20
- package/cjs/connectors/pagination/connectPagination.js +8 -25
- package/cjs/connectors/powered-by/connectPoweredBy.js +4 -13
- package/cjs/connectors/query-rules/connectQueryRules.js +32 -56
- package/cjs/connectors/range/connectRange.js +41 -101
- package/cjs/connectors/rating-menu/connectRatingMenu.js +23 -79
- package/cjs/connectors/refinement-list/connectRefinementList.js +37 -70
- package/cjs/connectors/relevant-sort/connectRelevantSort.js +4 -14
- package/cjs/connectors/search-box/connectSearchBox.js +7 -23
- package/cjs/connectors/sort-by/connectSortBy.js +11 -21
- package/cjs/connectors/stats/connectStats.js +4 -11
- package/cjs/connectors/toggle-refinement/connectToggleRefinement.js +29 -63
- package/cjs/connectors/voice-search/connectVoiceSearch.js +13 -35
- package/cjs/helpers/components/Highlight.js +4 -12
- package/cjs/helpers/components/ReverseHighlight.js +7 -19
- package/cjs/helpers/components/ReverseSnippet.js +7 -19
- package/cjs/helpers/components/Snippet.js +4 -12
- package/cjs/helpers/components/index.js +0 -8
- package/cjs/helpers/get-insights-anonymous-user-token.js +4 -15
- package/cjs/helpers/highlight.js +10 -16
- package/cjs/helpers/index.js +17 -31
- package/cjs/helpers/insights.js +5 -17
- package/cjs/helpers/reverseHighlight.js +10 -16
- package/cjs/helpers/reverseSnippet.js +10 -16
- package/cjs/helpers/snippet.js +10 -16
- package/cjs/index.js +3 -18
- package/cjs/lib/InstantSearch.js +79 -180
- package/cjs/lib/createHelpers.js +4 -11
- package/cjs/lib/formatNumber.js +0 -1
- package/cjs/lib/infiniteHitsCache/index.js +0 -2
- package/cjs/lib/infiniteHitsCache/sessionStorage.js +9 -18
- package/cjs/lib/insights/client.js +8 -34
- package/cjs/lib/insights/index.js +7 -13
- package/cjs/lib/insights/listener.js +4 -20
- package/cjs/lib/routers/history.js +63 -102
- package/cjs/lib/routers/index.js +0 -2
- package/cjs/lib/stateMappings/index.js +0 -3
- package/cjs/lib/stateMappings/simple.js +6 -13
- package/cjs/lib/stateMappings/singleIndex.js +1 -7
- package/cjs/lib/suit.js +2 -5
- package/cjs/lib/templating/index.js +0 -4
- package/cjs/lib/templating/prepareTemplateProps.js +8 -19
- package/cjs/lib/templating/renderTemplate.js +9 -24
- package/cjs/lib/utils/capitalize.js +0 -1
- package/cjs/lib/utils/checkIndexUiState.js +15 -43
- package/cjs/lib/utils/checkRendering.js +0 -2
- package/cjs/lib/utils/clearRefinements.js +2 -9
- package/cjs/lib/utils/concatHighlightedParts.js +1 -3
- package/cjs/lib/utils/createConcurrentSafePromise.js +0 -3
- package/cjs/lib/utils/createSendEventForFacet.js +7 -14
- package/cjs/lib/utils/createSendEventForHits.js +9 -33
- package/cjs/lib/utils/debounce.js +0 -3
- package/cjs/lib/utils/defer.js +0 -11
- package/cjs/lib/utils/detect-insights-client.js +0 -2
- package/cjs/lib/utils/documentation.js +2 -5
- package/cjs/lib/utils/escape-highlight.js +5 -22
- package/cjs/lib/utils/escape-html.js +9 -7
- package/cjs/lib/utils/escapeFacetValue.js +1 -5
- package/cjs/lib/utils/find.js +2 -5
- package/cjs/lib/utils/findIndex.js +0 -3
- package/cjs/lib/utils/geo-search.js +14 -34
- package/cjs/lib/utils/getAppIdAndApiKey.js +2 -3
- package/cjs/lib/utils/getContainerNode.js +0 -6
- package/cjs/lib/utils/getHighlightFromSiblings.js +0 -6
- package/cjs/lib/utils/getHighlightedParts.js +1 -4
- package/cjs/lib/utils/getObjectType.js +0 -1
- package/cjs/lib/utils/getPropertyByPath.js +0 -1
- package/cjs/lib/utils/getRefinements.js +13 -26
- package/cjs/lib/utils/getWidgetAttribute.js +0 -6
- package/cjs/lib/utils/hits-absolute-position.js +2 -6
- package/cjs/lib/utils/hits-query-id.js +2 -7
- package/cjs/lib/utils/index.js +0 -92
- package/cjs/lib/utils/isDomElement.js +0 -1
- package/cjs/lib/utils/isEqual.js +0 -8
- package/cjs/lib/utils/isFacetRefined.js +0 -1
- package/cjs/lib/utils/isFiniteNumber.js +0 -1
- package/cjs/lib/utils/isIndexWidget.js +0 -1
- package/cjs/lib/utils/isPlainObject.js +3 -11
- package/cjs/lib/utils/isSpecialClick.js +0 -1
- package/cjs/lib/utils/logger.js +3 -13
- package/cjs/lib/utils/mergeSearchParameters.js +16 -40
- package/cjs/lib/utils/noop.js +0 -1
- package/cjs/lib/utils/range.js +8 -14
- package/cjs/lib/utils/render-args.js +0 -2
- package/cjs/lib/utils/resolveSearchParameters.js +0 -3
- package/cjs/lib/utils/reverseHighlightedParts.js +2 -8
- package/cjs/lib/utils/safelyRunOnBrowser.js +7 -9
- package/cjs/lib/utils/serializer.js +1 -3
- package/cjs/lib/utils/setIndexHelperState.js +0 -5
- package/cjs/lib/utils/toArray.js +0 -1
- package/cjs/lib/utils/typedObject.js +0 -1
- package/cjs/lib/utils/uniq.js +0 -1
- package/cjs/lib/version.js +1 -1
- package/cjs/lib/voiceSearchHelper/index.js +8 -36
- package/cjs/middlewares/createInsightsMiddleware.js +15 -44
- package/cjs/middlewares/createMetadataMiddleware.js +4 -12
- package/cjs/middlewares/createRouterMiddleware.js +8 -19
- package/cjs/middlewares/index.js +0 -6
- package/cjs/types/algoliasearch.js +0 -2
- package/cjs/types/index.js +0 -28
- package/cjs/widgets/analytics/analytics.js +12 -47
- package/cjs/widgets/answers/answers.js +19 -39
- package/cjs/widgets/breadcrumb/breadcrumb.js +18 -38
- package/cjs/widgets/clear-refinements/clear-refinements.js +15 -35
- package/cjs/widgets/configure/configure.js +2 -10
- package/cjs/widgets/configure-related-items/configure-related-items.js +2 -10
- package/cjs/widgets/current-refinements/current-refinements.js +12 -30
- package/cjs/widgets/dynamic-widgets/dynamic-widgets.js +6 -25
- package/cjs/widgets/geo-search/GeoSearchRenderer.js +41 -68
- package/cjs/widgets/geo-search/createHTMLMarker.js +30 -60
- package/cjs/widgets/geo-search/defaultTemplates.js +0 -3
- package/cjs/widgets/geo-search/geo-search.js +27 -59
- package/cjs/widgets/hierarchical-menu/defaultTemplates.js +4 -7
- package/cjs/widgets/hierarchical-menu/hierarchical-menu.js +28 -47
- package/cjs/widgets/hits/hits.js +16 -37
- package/cjs/widgets/hits-per-page/hits-per-page.js +13 -31
- package/cjs/widgets/index/index.js +49 -95
- package/cjs/widgets/index.js +12 -50
- package/cjs/widgets/infinite-hits/infinite-hits.js +23 -44
- package/cjs/widgets/menu/defaultTemplates.js +3 -6
- package/cjs/widgets/menu/menu.js +23 -43
- package/cjs/widgets/menu-select/defaultTemplates.js +1 -3
- package/cjs/widgets/menu-select/menu-select.js +18 -38
- package/cjs/widgets/numeric-menu/defaultTemplates.js +3 -4
- package/cjs/widgets/numeric-menu/numeric-menu.js +17 -37
- package/cjs/widgets/pagination/pagination.js +32 -53
- package/cjs/widgets/panel/panel.js +20 -48
- package/cjs/widgets/places/places.js +16 -33
- package/cjs/widgets/powered-by/powered-by.js +10 -27
- package/cjs/widgets/query-rule-context/query-rule-context.js +2 -13
- package/cjs/widgets/query-rule-custom-data/query-rule-custom-data.js +14 -32
- package/cjs/widgets/range-input/range-input.js +23 -50
- package/cjs/widgets/range-slider/range-slider.js +28 -53
- package/cjs/widgets/rating-menu/defaultTemplates.js +8 -14
- package/cjs/widgets/rating-menu/rating-menu.js +17 -38
- package/cjs/widgets/refinement-list/defaultTemplates.js +5 -8
- package/cjs/widgets/refinement-list/refinement-list.js +39 -60
- package/cjs/widgets/relevant-sort/relevant-sort.js +10 -29
- package/cjs/widgets/search-box/defaultTemplates.js +0 -5
- package/cjs/widgets/search-box/search-box.js +31 -49
- package/cjs/widgets/sort-by/sort-by.js +11 -29
- package/cjs/widgets/stats/defaultTemplates.js +0 -1
- package/cjs/widgets/stats/stats.js +27 -57
- package/cjs/widgets/toggle-refinement/toggle-refinement.js +16 -36
- package/cjs/widgets/voice-search/defaultTemplates.js +4 -14
- package/cjs/widgets/voice-search/voice-search.js +17 -36
- package/dist/instantsearch.development.d.ts +8 -6
- package/dist/instantsearch.development.js +1722 -3088
- package/dist/instantsearch.development.js.map +1 -1
- package/dist/instantsearch.production.d.ts +8 -6
- package/dist/instantsearch.production.min.d.ts +8 -6
- package/dist/instantsearch.production.min.js +2 -2
- package/dist/instantsearch.production.min.js.map +1 -1
- package/es/components/Answers/Answers.js +6 -11
- package/es/components/Breadcrumb/Breadcrumb.js +5 -7
- package/es/components/ClearRefinements/ClearRefinements.js +4 -6
- package/es/components/CurrentRefinements/CurrentRefinements.js +7 -10
- package/es/components/GeoSearchControls/GeoSearchButton.js +6 -6
- package/es/components/GeoSearchControls/GeoSearchControls.js +11 -13
- package/es/components/GeoSearchControls/GeoSearchToggle.js +6 -6
- package/es/components/Highlight/Highlight.js +3 -7
- package/es/components/Hits/Hits.js +8 -15
- package/es/components/InfiniteHits/InfiniteHits.js +13 -20
- package/es/components/MenuSelect/MenuSelect.js +9 -13
- package/es/components/Pagination/Pagination.js +12 -15
- package/es/components/Panel/Panel.js +7 -20
- package/es/components/PoweredBy/PoweredBy.js +6 -5
- package/es/components/QueryRuleCustomData/QueryRuleCustomData.js +4 -4
- package/es/components/RangeInput/RangeInput.js +16 -43
- package/es/components/RefinementList/RefinementList.js +19 -64
- package/es/components/RefinementList/RefinementListItem.js +8 -10
- package/es/components/RelevantSort/RelevantSort.js +6 -6
- package/es/components/ReverseHighlight/ReverseHighlight.js +3 -7
- package/es/components/ReverseSnippet/ReverseSnippet.js +3 -7
- package/es/components/SearchBox/SearchBox.js +25 -63
- package/es/components/Selector/Selector.js +5 -5
- package/es/components/Slider/Pit.js +3 -7
- package/es/components/Slider/Rheostat.js +64 -129
- package/es/components/Slider/Slider.js +28 -58
- package/es/components/Snippet/Snippet.js +3 -7
- package/es/components/Stats/Stats.js +7 -15
- package/es/components/Template/Template.js +8 -32
- package/es/components/ToggleRefinement/ToggleRefinement.js +4 -6
- package/es/components/VoiceSearch/VoiceSearch.js +10 -13
- package/es/connectors/answers/connectAnswers.js +21 -35
- package/es/connectors/autocomplete/connectAutocomplete.js +8 -23
- package/es/connectors/breadcrumb/connectBreadcrumb.js +17 -46
- package/es/connectors/clear-refinements/connectClearRefinements.js +27 -43
- package/es/connectors/configure/connectConfigure.js +7 -16
- package/es/connectors/configure-related-items/connectConfigureRelatedItems.js +11 -31
- package/es/connectors/current-refinements/connectCurrentRefinements.js +18 -55
- package/es/connectors/dynamic-widgets/connectDynamicWidgets.js +17 -35
- package/es/connectors/geo-search/connectGeoSearch.js +17 -45
- package/es/connectors/hierarchical-menu/connectHierarchicalMenu.js +38 -72
- package/es/connectors/hits/connectHits.js +10 -24
- package/es/connectors/hits-per-page/connectHitsPerPage.js +15 -36
- package/es/connectors/index.d.ts +2 -1
- package/es/connectors/index.js +6 -3
- package/es/connectors/infinite-hits/connectInfiniteHits.js +26 -60
- package/es/connectors/menu/connectMenu.js +28 -64
- package/es/connectors/numeric-menu/connectNumericMenu.js +24 -76
- package/es/connectors/pagination/Paginator.js +3 -19
- package/es/connectors/pagination/connectPagination.js +8 -21
- package/es/connectors/powered-by/connectPoweredBy.js +4 -11
- package/es/connectors/query-rules/connectQueryRules.js +32 -54
- package/es/connectors/range/connectRange.js +41 -99
- package/es/connectors/rating-menu/connectRatingMenu.js +23 -77
- package/es/connectors/refinement-list/connectRefinementList.js +37 -68
- package/es/connectors/relevant-sort/connectRelevantSort.js +4 -13
- package/es/connectors/search-box/connectSearchBox.js +7 -21
- package/es/connectors/sort-by/connectSortBy.js +11 -19
- package/es/connectors/stats/connectStats.js +4 -9
- package/es/connectors/toggle-refinement/connectToggleRefinement.js +29 -61
- package/es/connectors/voice-search/connectVoiceSearch.js +13 -31
- package/es/helpers/components/Highlight.js +4 -8
- package/es/helpers/components/ReverseHighlight.js +7 -15
- package/es/helpers/components/ReverseSnippet.js +7 -15
- package/es/helpers/components/Snippet.js +4 -8
- package/es/helpers/get-insights-anonymous-user-token.js +2 -10
- package/es/helpers/highlight.js +9 -11
- package/es/helpers/insights.js +3 -10
- package/es/helpers/reverseHighlight.js +9 -11
- package/es/helpers/reverseSnippet.js +9 -11
- package/es/helpers/snippet.js +9 -11
- package/es/index.js +0 -2
- package/es/lib/InstantSearch.js +79 -170
- package/es/lib/createHelpers.js +4 -8
- package/es/lib/infiniteHitsCache/sessionStorage.js +9 -16
- package/es/lib/insights/client.js +8 -32
- package/es/lib/insights/listener.js +6 -18
- package/es/lib/routers/history.js +63 -99
- package/es/lib/stateMappings/simple.js +6 -12
- package/es/lib/stateMappings/singleIndex.js +1 -6
- package/es/lib/suit.js +2 -3
- package/es/lib/templating/prepareTemplateProps.js +8 -18
- package/es/lib/templating/renderTemplate.js +9 -20
- package/es/lib/utils/checkIndexUiState.js +18 -40
- package/es/lib/utils/clearRefinements.js +2 -8
- package/es/lib/utils/concatHighlightedParts.js +1 -1
- package/es/lib/utils/createConcurrentSafePromise.js +0 -2
- package/es/lib/utils/createSendEventForFacet.js +7 -12
- package/es/lib/utils/createSendEventForHits.js +8 -30
- package/es/lib/utils/debounce.js +0 -2
- package/es/lib/utils/defer.js +0 -10
- package/es/lib/utils/documentation.js +2 -3
- package/es/lib/utils/escape-highlight.js +3 -16
- package/es/lib/utils/escape-html.js +9 -5
- package/es/lib/utils/escapeFacetValue.js +0 -2
- package/es/lib/utils/find.js +2 -4
- package/es/lib/utils/findIndex.js +0 -2
- package/es/lib/utils/geo-search.js +14 -32
- package/es/lib/utils/getAppIdAndApiKey.js +2 -2
- package/es/lib/utils/getContainerNode.js +1 -5
- package/es/lib/utils/getHighlightFromSiblings.js +0 -3
- package/es/lib/utils/getHighlightedParts.js +1 -2
- package/es/lib/utils/getRefinements.js +13 -24
- package/es/lib/utils/getWidgetAttribute.js +0 -5
- package/es/lib/utils/hits-absolute-position.js +2 -5
- package/es/lib/utils/hits-query-id.js +2 -6
- package/es/lib/utils/isEqual.js +0 -7
- package/es/lib/utils/isPlainObject.js +3 -10
- package/es/lib/utils/logger.js +2 -12
- package/es/lib/utils/mergeSearchParameters.js +16 -37
- package/es/lib/utils/range.js +8 -13
- package/es/lib/utils/resolveSearchParameters.js +0 -2
- package/es/lib/utils/reverseHighlightedParts.js +2 -6
- package/es/lib/utils/safelyRunOnBrowser.js +7 -8
- package/es/lib/utils/setIndexHelperState.js +0 -2
- package/es/lib/version.d.ts +1 -1
- package/es/lib/version.js +1 -1
- package/es/lib/voiceSearchHelper/index.js +8 -35
- package/es/middlewares/createInsightsMiddleware.js +15 -41
- package/es/middlewares/createMetadataMiddleware.js +3 -9
- package/es/middlewares/createRouterMiddleware.js +8 -13
- package/es/types/index.js +9 -5
- package/es/widgets/analytics/analytics.js +12 -45
- package/es/widgets/answers/answers.js +19 -28
- package/es/widgets/breadcrumb/breadcrumb.js +18 -27
- package/es/widgets/clear-refinements/clear-refinements.js +15 -24
- package/es/widgets/configure/configure.js +3 -6
- package/es/widgets/configure-related-items/configure-related-items.js +2 -7
- package/es/widgets/current-refinements/current-refinements.js +12 -21
- package/es/widgets/dynamic-widgets/dynamic-widgets.js +6 -20
- package/es/widgets/geo-search/GeoSearchRenderer.js +41 -63
- package/es/widgets/geo-search/createHTMLMarker.js +30 -59
- package/es/widgets/geo-search/defaultTemplates.js +2 -2
- package/es/widgets/geo-search/geo-search.js +27 -49
- package/es/widgets/hierarchical-menu/defaultTemplates.js +5 -4
- package/es/widgets/hierarchical-menu/hierarchical-menu.js +28 -36
- package/es/widgets/hits/hits.js +16 -25
- package/es/widgets/hits-per-page/hits-per-page.js +13 -22
- package/es/widgets/index/index.js +49 -91
- package/es/widgets/index.d.ts +2 -1
- package/es/widgets/index.js +4 -3
- package/es/widgets/infinite-hits/infinite-hits.js +23 -32
- package/es/widgets/menu/defaultTemplates.js +4 -3
- package/es/widgets/menu/menu.js +23 -32
- package/es/widgets/menu-select/defaultTemplates.js +1 -1
- package/es/widgets/menu-select/menu-select.js +18 -27
- package/es/widgets/numeric-menu/defaultTemplates.js +4 -3
- package/es/widgets/numeric-menu/numeric-menu.js +17 -26
- package/es/widgets/pagination/pagination.js +32 -44
- package/es/widgets/panel/panel.js +20 -40
- package/es/widgets/places/places.js +16 -32
- package/es/widgets/powered-by/powered-by.js +10 -18
- package/es/widgets/query-rule-context/query-rule-context.js +2 -9
- package/es/widgets/query-rule-custom-data/query-rule-custom-data.js +13 -22
- package/es/widgets/range-input/range-input.js +23 -40
- package/es/widgets/range-slider/range-slider.js +28 -44
- package/es/widgets/rating-menu/defaultTemplates.js +9 -12
- package/es/widgets/rating-menu/rating-menu.js +17 -27
- package/es/widgets/refinement-list/defaultTemplates.js +6 -5
- package/es/widgets/refinement-list/refinement-list.js +39 -48
- package/es/widgets/relevant-sort/relevant-sort.js +10 -19
- package/es/widgets/search-box/defaultTemplates.js +1 -4
- package/es/widgets/search-box/search-box.js +31 -39
- package/es/widgets/sort-by/sort-by.js +11 -20
- package/es/widgets/stats/stats.js +26 -45
- package/es/widgets/toggle-refinement/toggle-refinement.js +16 -25
- package/es/widgets/voice-search/defaultTemplates.js +5 -13
- package/es/widgets/voice-search/voice-search.js +17 -26
- package/package.json +20 -119
- package/scripts/transforms/__testfixtures__/addWidget-to-addWidgets/imported.input.js +0 -1
- package/scripts/transforms/__testfixtures__/addWidget-to-addWidgets/imported.output.js +0 -1
- package/CHANGELOG.md +0 -3693
package/cjs/lib/InstantSearch.js
CHANGED
|
@@ -1,67 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
4
|
-
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var _algoliasearchHelper = _interopRequireDefault(require("algoliasearch-helper"));
|
|
11
|
-
|
|
12
9
|
var _events = _interopRequireDefault(require("@algolia/events"));
|
|
13
|
-
|
|
14
10
|
var _index = _interopRequireDefault(require("../widgets/index/index.js"));
|
|
15
|
-
|
|
16
11
|
var _version = _interopRequireDefault(require("./version.js"));
|
|
17
|
-
|
|
18
12
|
var _createHelpers = _interopRequireDefault(require("./createHelpers.js"));
|
|
19
|
-
|
|
20
13
|
var _index2 = require("./utils/index.js");
|
|
21
|
-
|
|
22
14
|
var _createRouterMiddleware = require("../middlewares/createRouterMiddleware.js");
|
|
23
|
-
|
|
24
15
|
var _createMetadataMiddleware = require("../middlewares/createMetadataMiddleware.js");
|
|
25
|
-
|
|
26
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
|
-
|
|
28
|
-
function
|
|
29
|
-
|
|
30
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
31
|
-
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
19
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
33
|
-
|
|
34
20
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
35
|
-
|
|
36
|
-
function
|
|
37
|
-
|
|
38
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
39
|
-
|
|
40
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
41
|
-
|
|
21
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
22
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
23
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
42
24
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
43
|
-
|
|
44
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
45
|
-
|
|
25
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
46
26
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
47
|
-
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
51
|
-
|
|
27
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
28
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
52
29
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
53
|
-
|
|
54
30
|
var withUsage = (0, _index2.createDocumentationMessageGenerator)({
|
|
55
31
|
name: 'instantsearch'
|
|
56
32
|
});
|
|
57
|
-
|
|
58
33
|
function defaultCreateURL() {
|
|
59
34
|
return '#';
|
|
60
|
-
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// this purposely breaks typescript's type inference to ensure it's not used
|
|
61
38
|
// as it's used for a default parameter for example
|
|
62
39
|
// source: https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-504042546
|
|
63
|
-
|
|
64
|
-
|
|
65
40
|
/**
|
|
66
41
|
* The actual implementation of the InstantSearch. This is
|
|
67
42
|
* created using the `instantsearch` factory function.
|
|
@@ -69,87 +44,56 @@ function defaultCreateURL() {
|
|
|
69
44
|
*/
|
|
70
45
|
var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
71
46
|
_inherits(InstantSearch, _EventEmitter);
|
|
72
|
-
|
|
73
47
|
var _super = _createSuper(InstantSearch);
|
|
74
|
-
|
|
75
48
|
function InstantSearch(options) {
|
|
76
49
|
var _this;
|
|
77
|
-
|
|
78
50
|
_classCallCheck(this, InstantSearch);
|
|
51
|
+
_this = _super.call(this);
|
|
79
52
|
|
|
80
|
-
|
|
81
|
-
|
|
53
|
+
// prevent `render` event listening from causing a warning
|
|
82
54
|
_defineProperty(_assertThisInitialized(_this), "client", void 0);
|
|
83
|
-
|
|
84
55
|
_defineProperty(_assertThisInitialized(_this), "indexName", void 0);
|
|
85
|
-
|
|
86
56
|
_defineProperty(_assertThisInitialized(_this), "insightsClient", void 0);
|
|
87
|
-
|
|
88
57
|
_defineProperty(_assertThisInitialized(_this), "onStateChange", null);
|
|
89
|
-
|
|
90
58
|
_defineProperty(_assertThisInitialized(_this), "helper", void 0);
|
|
91
|
-
|
|
92
59
|
_defineProperty(_assertThisInitialized(_this), "mainHelper", void 0);
|
|
93
|
-
|
|
94
60
|
_defineProperty(_assertThisInitialized(_this), "mainIndex", void 0);
|
|
95
|
-
|
|
96
61
|
_defineProperty(_assertThisInitialized(_this), "started", void 0);
|
|
97
|
-
|
|
98
62
|
_defineProperty(_assertThisInitialized(_this), "templatesConfig", void 0);
|
|
99
|
-
|
|
100
63
|
_defineProperty(_assertThisInitialized(_this), "renderState", {});
|
|
101
|
-
|
|
102
64
|
_defineProperty(_assertThisInitialized(_this), "_stalledSearchDelay", void 0);
|
|
103
|
-
|
|
104
65
|
_defineProperty(_assertThisInitialized(_this), "_searchStalledTimer", void 0);
|
|
105
|
-
|
|
106
66
|
_defineProperty(_assertThisInitialized(_this), "_initialUiState", void 0);
|
|
107
|
-
|
|
108
67
|
_defineProperty(_assertThisInitialized(_this), "_initialResults", void 0);
|
|
109
|
-
|
|
110
68
|
_defineProperty(_assertThisInitialized(_this), "_createURL", void 0);
|
|
111
|
-
|
|
112
69
|
_defineProperty(_assertThisInitialized(_this), "_searchFunction", void 0);
|
|
113
|
-
|
|
114
70
|
_defineProperty(_assertThisInitialized(_this), "_mainHelperSearch", void 0);
|
|
115
|
-
|
|
116
71
|
_defineProperty(_assertThisInitialized(_this), "middleware", []);
|
|
117
|
-
|
|
118
72
|
_defineProperty(_assertThisInitialized(_this), "sendEventToInsights", void 0);
|
|
119
|
-
|
|
120
73
|
_defineProperty(_assertThisInitialized(_this), "status", 'idle');
|
|
121
|
-
|
|
122
74
|
_defineProperty(_assertThisInitialized(_this), "error", undefined);
|
|
123
|
-
|
|
124
75
|
_defineProperty(_assertThisInitialized(_this), "scheduleSearch", (0, _index2.defer)(function () {
|
|
125
76
|
if (_this.started) {
|
|
126
77
|
_this.mainHelper.search();
|
|
127
78
|
}
|
|
128
79
|
}));
|
|
129
|
-
|
|
130
80
|
_defineProperty(_assertThisInitialized(_this), "scheduleRender", (0, _index2.defer)(function () {
|
|
131
81
|
var shouldResetStatus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
132
|
-
|
|
133
82
|
if (!_this.mainHelper.hasPendingRequests()) {
|
|
134
83
|
clearTimeout(_this._searchStalledTimer);
|
|
135
84
|
_this._searchStalledTimer = null;
|
|
136
|
-
|
|
137
85
|
if (shouldResetStatus) {
|
|
138
86
|
_this.status = 'idle';
|
|
139
87
|
_this.error = undefined;
|
|
140
88
|
}
|
|
141
89
|
}
|
|
142
|
-
|
|
143
90
|
_this.mainIndex.render({
|
|
144
91
|
instantSearchInstance: _assertThisInitialized(_this)
|
|
145
92
|
});
|
|
146
|
-
|
|
147
93
|
_this.emit('render');
|
|
148
94
|
}));
|
|
149
|
-
|
|
150
95
|
_defineProperty(_assertThisInitialized(_this), "onInternalStateChange", (0, _index2.defer)(function () {
|
|
151
96
|
var nextUiState = _this.mainIndex.getWidgetUiState({});
|
|
152
|
-
|
|
153
97
|
_this.middleware.forEach(function (_ref) {
|
|
154
98
|
var instance = _ref.instance;
|
|
155
99
|
instance.onStateChange({
|
|
@@ -157,48 +101,39 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
157
101
|
});
|
|
158
102
|
});
|
|
159
103
|
}));
|
|
160
|
-
|
|
161
104
|
_this.setMaxListeners(100);
|
|
162
|
-
|
|
163
105
|
var _options$indexName = options.indexName,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
106
|
+
indexName = _options$indexName === void 0 ? null : _options$indexName,
|
|
107
|
+
numberLocale = options.numberLocale,
|
|
108
|
+
_options$initialUiSta = options.initialUiState,
|
|
109
|
+
initialUiState = _options$initialUiSta === void 0 ? {} : _options$initialUiSta,
|
|
110
|
+
_options$routing = options.routing,
|
|
111
|
+
routing = _options$routing === void 0 ? null : _options$routing,
|
|
112
|
+
searchFunction = options.searchFunction,
|
|
113
|
+
_options$stalledSearc = options.stalledSearchDelay,
|
|
114
|
+
stalledSearchDelay = _options$stalledSearc === void 0 ? 200 : _options$stalledSearc,
|
|
115
|
+
_options$searchClient = options.searchClient,
|
|
116
|
+
searchClient = _options$searchClient === void 0 ? null : _options$searchClient,
|
|
117
|
+
_options$insightsClie = options.insightsClient,
|
|
118
|
+
insightsClient = _options$insightsClie === void 0 ? null : _options$insightsClie,
|
|
119
|
+
_options$onStateChang = options.onStateChange,
|
|
120
|
+
onStateChange = _options$onStateChang === void 0 ? null : _options$onStateChang;
|
|
180
121
|
if (indexName === null) {
|
|
181
122
|
throw new Error(withUsage('The `indexName` option is required.'));
|
|
182
123
|
}
|
|
183
|
-
|
|
184
124
|
if (searchClient === null) {
|
|
185
125
|
throw new Error(withUsage('The `searchClient` option is required.'));
|
|
186
126
|
}
|
|
187
|
-
|
|
188
127
|
if (typeof searchClient.search !== 'function') {
|
|
189
128
|
throw new Error("The `searchClient` must implement a `search` method.\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend-search/in-depth/backend-instantsearch/js/");
|
|
190
129
|
}
|
|
191
|
-
|
|
192
130
|
if (typeof searchClient.addAlgoliaAgent === 'function') {
|
|
193
131
|
searchClient.addAlgoliaAgent("instantsearch.js (".concat(_version.default, ")"));
|
|
194
132
|
}
|
|
195
|
-
|
|
196
133
|
process.env.NODE_ENV === 'development' ? (0, _index2.warning)(insightsClient === null, "`insightsClient` property has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `insights` middleware.\n\nFor more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/") : void 0;
|
|
197
|
-
|
|
198
134
|
if (insightsClient && typeof insightsClient !== 'function') {
|
|
199
135
|
throw new Error(withUsage('The `insightsClient` option should be a function.'));
|
|
200
136
|
}
|
|
201
|
-
|
|
202
137
|
process.env.NODE_ENV === 'development' ? (0, _index2.warning)(!options.searchParameters, "The `searchParameters` option is deprecated and will not be supported in InstantSearch.js 4.x.\n\nYou can replace it with the `configure` widget:\n\n```\nsearch.addWidgets([\n configure(".concat(JSON.stringify(options.searchParameters, null, 2), ")\n]);\n```\n\nSee ").concat((0, _index2.createDocumentationLink)({
|
|
203
138
|
name: 'configure'
|
|
204
139
|
}))) : void 0;
|
|
@@ -223,30 +158,23 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
223
158
|
_this._createURL = defaultCreateURL;
|
|
224
159
|
_this._initialUiState = initialUiState;
|
|
225
160
|
_this._initialResults = null;
|
|
226
|
-
|
|
227
161
|
if (searchFunction) {
|
|
228
162
|
_this._searchFunction = searchFunction;
|
|
229
163
|
}
|
|
230
|
-
|
|
231
164
|
_this.sendEventToInsights = _index2.noop;
|
|
232
|
-
|
|
233
165
|
if (routing) {
|
|
234
166
|
var routerOptions = typeof routing === 'boolean' ? undefined : routing;
|
|
235
|
-
|
|
236
167
|
_this.use((0, _createRouterMiddleware.createRouterMiddleware)(routerOptions));
|
|
237
168
|
}
|
|
238
|
-
|
|
239
169
|
if ((0, _createMetadataMiddleware.isMetadataEnabled)()) {
|
|
240
170
|
_this.use((0, _createMetadataMiddleware.createMetadataMiddleware)());
|
|
241
171
|
}
|
|
242
|
-
|
|
243
172
|
return _this;
|
|
244
173
|
}
|
|
174
|
+
|
|
245
175
|
/**
|
|
246
176
|
* Hooks a middleware into the InstantSearch lifecycle.
|
|
247
177
|
*/
|
|
248
|
-
|
|
249
|
-
|
|
250
178
|
_createClass(InstantSearch, [{
|
|
251
179
|
key: "_isSearchStalled",
|
|
252
180
|
get:
|
|
@@ -270,11 +198,9 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
270
198
|
key: "use",
|
|
271
199
|
value: function use() {
|
|
272
200
|
var _this2 = this;
|
|
273
|
-
|
|
274
201
|
for (var _len = arguments.length, middleware = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
275
202
|
middleware[_key] = arguments[_key];
|
|
276
203
|
}
|
|
277
|
-
|
|
278
204
|
var newMiddlewareList = middleware.map(function (fn) {
|
|
279
205
|
var newMiddleware = _objectSpread({
|
|
280
206
|
subscribe: _index2.noop,
|
|
@@ -284,36 +210,33 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
284
210
|
}, fn({
|
|
285
211
|
instantSearchInstance: _this2
|
|
286
212
|
}));
|
|
287
|
-
|
|
288
213
|
_this2.middleware.push({
|
|
289
214
|
creator: fn,
|
|
290
215
|
instance: newMiddleware
|
|
291
216
|
});
|
|
292
|
-
|
|
293
217
|
return newMiddleware;
|
|
294
|
-
});
|
|
295
|
-
// middleware so they're notified of changes.
|
|
218
|
+
});
|
|
296
219
|
|
|
220
|
+
// If the instance has already started, we directly subscribe the
|
|
221
|
+
// middleware so they're notified of changes.
|
|
297
222
|
if (this.started) {
|
|
298
223
|
newMiddlewareList.forEach(function (m) {
|
|
299
224
|
m.subscribe();
|
|
300
225
|
m.started();
|
|
301
226
|
});
|
|
302
227
|
}
|
|
303
|
-
|
|
304
228
|
return this;
|
|
305
229
|
}
|
|
230
|
+
|
|
306
231
|
/**
|
|
307
232
|
* Removes a middleware from the InstantSearch lifecycle.
|
|
308
233
|
*/
|
|
309
|
-
|
|
310
234
|
}, {
|
|
311
235
|
key: "unuse",
|
|
312
236
|
value: function unuse() {
|
|
313
237
|
for (var _len2 = arguments.length, middlewareToUnuse = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
314
238
|
middlewareToUnuse[_key2] = arguments[_key2];
|
|
315
239
|
}
|
|
316
|
-
|
|
317
240
|
this.middleware.filter(function (m) {
|
|
318
241
|
return middlewareToUnuse.includes(m.creator);
|
|
319
242
|
}).forEach(function (m) {
|
|
@@ -323,14 +246,16 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
323
246
|
return !middlewareToUnuse.includes(m.creator);
|
|
324
247
|
});
|
|
325
248
|
return this;
|
|
326
|
-
}
|
|
249
|
+
}
|
|
327
250
|
|
|
251
|
+
// @major we shipped with EXPERIMENTAL_use, but have changed that to just `use` now
|
|
328
252
|
}, {
|
|
329
253
|
key: "EXPERIMENTAL_use",
|
|
330
254
|
value: function EXPERIMENTAL_use() {
|
|
331
255
|
process.env.NODE_ENV === 'development' ? (0, _index2.warning)(false, 'The middleware API is now considered stable, so we recommend replacing `EXPERIMENTAL_use` with `use` before upgrading to the next major version.') : void 0;
|
|
332
256
|
return this.use.apply(this, arguments);
|
|
333
257
|
}
|
|
258
|
+
|
|
334
259
|
/**
|
|
335
260
|
* Adds a widget to the search instance.
|
|
336
261
|
* A widget can be added either before or after InstantSearch has started.
|
|
@@ -338,35 +263,33 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
338
263
|
*
|
|
339
264
|
* @deprecated This method will still be supported in 4.x releases, but not further. It is replaced by `addWidgets([widget])`.
|
|
340
265
|
*/
|
|
341
|
-
|
|
342
266
|
}, {
|
|
343
267
|
key: "addWidget",
|
|
344
268
|
value: function addWidget(widget) {
|
|
345
269
|
process.env.NODE_ENV === 'development' ? (0, _index2.warning)(false, 'addWidget will still be supported in 4.x releases, but not further. It is replaced by `addWidgets([widget])`') : void 0;
|
|
346
270
|
return this.addWidgets([widget]);
|
|
347
271
|
}
|
|
272
|
+
|
|
348
273
|
/**
|
|
349
274
|
* Adds multiple widgets to the search instance.
|
|
350
275
|
* Widgets can be added either before or after InstantSearch has started.
|
|
351
276
|
* @param widgets The array of widgets to add to InstantSearch.
|
|
352
277
|
*/
|
|
353
|
-
|
|
354
278
|
}, {
|
|
355
279
|
key: "addWidgets",
|
|
356
280
|
value: function addWidgets(widgets) {
|
|
357
281
|
if (!Array.isArray(widgets)) {
|
|
358
282
|
throw new Error(withUsage('The `addWidgets` method expects an array of widgets. Please use `addWidget`.'));
|
|
359
283
|
}
|
|
360
|
-
|
|
361
284
|
if (widgets.some(function (widget) {
|
|
362
285
|
return typeof widget.init !== 'function' && typeof widget.render !== 'function';
|
|
363
286
|
})) {
|
|
364
287
|
throw new Error(withUsage('The widget definition expects a `render` and/or an `init` method.'));
|
|
365
288
|
}
|
|
366
|
-
|
|
367
289
|
this.mainIndex.addWidgets(widgets);
|
|
368
290
|
return this;
|
|
369
291
|
}
|
|
292
|
+
|
|
370
293
|
/**
|
|
371
294
|
* Removes a widget from the search instance.
|
|
372
295
|
* @deprecated This method will still be supported in 4.x releases, but not further. It is replaced by `removeWidgets([widget])`
|
|
@@ -374,75 +297,69 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
374
297
|
*
|
|
375
298
|
* The widget must implement a `dispose()` method to clear its state.
|
|
376
299
|
*/
|
|
377
|
-
|
|
378
300
|
}, {
|
|
379
301
|
key: "removeWidget",
|
|
380
302
|
value: function removeWidget(widget) {
|
|
381
303
|
process.env.NODE_ENV === 'development' ? (0, _index2.warning)(false, 'removeWidget will still be supported in 4.x releases, but not further. It is replaced by `removeWidgets([widget])`') : void 0;
|
|
382
304
|
return this.removeWidgets([widget]);
|
|
383
305
|
}
|
|
306
|
+
|
|
384
307
|
/**
|
|
385
308
|
* Removes multiple widgets from the search instance.
|
|
386
309
|
* @param widgets Array of widgets instances to remove from InstantSearch.
|
|
387
310
|
*
|
|
388
311
|
* The widgets must implement a `dispose()` method to clear their states.
|
|
389
312
|
*/
|
|
390
|
-
|
|
391
313
|
}, {
|
|
392
314
|
key: "removeWidgets",
|
|
393
315
|
value: function removeWidgets(widgets) {
|
|
394
316
|
if (!Array.isArray(widgets)) {
|
|
395
317
|
throw new Error(withUsage('The `removeWidgets` method expects an array of widgets. Please use `removeWidget`.'));
|
|
396
318
|
}
|
|
397
|
-
|
|
398
319
|
if (widgets.some(function (widget) {
|
|
399
320
|
return typeof widget.dispose !== 'function';
|
|
400
321
|
})) {
|
|
401
322
|
throw new Error(withUsage('The widget definition expects a `dispose` method.'));
|
|
402
323
|
}
|
|
403
|
-
|
|
404
324
|
this.mainIndex.removeWidgets(widgets);
|
|
405
325
|
return this;
|
|
406
326
|
}
|
|
327
|
+
|
|
407
328
|
/**
|
|
408
329
|
* Ends the initialization of InstantSearch.js and triggers the
|
|
409
330
|
* first search. This method should be called after all widgets have been added
|
|
410
331
|
* to the instance of InstantSearch.js. InstantSearch.js also supports adding and removing
|
|
411
332
|
* widgets after the start as an **EXPERIMENTAL** feature.
|
|
412
333
|
*/
|
|
413
|
-
|
|
414
334
|
}, {
|
|
415
335
|
key: "start",
|
|
416
336
|
value: function start() {
|
|
417
337
|
var _this3 = this;
|
|
418
|
-
|
|
419
338
|
if (this.started) {
|
|
420
339
|
throw new Error(withUsage('The `start` method has already been called once.'));
|
|
421
|
-
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// This Helper is used for the queries, we don't care about its state. The
|
|
422
343
|
// states are managed at the `index` level. We use this Helper to create
|
|
423
344
|
// DerivedHelper scoped into the `index` widgets.
|
|
424
345
|
// In Vue InstantSearch' hydrate, a main helper gets set before start, so
|
|
425
346
|
// we need to respect this helper as a way to keep all listeners correct.
|
|
426
|
-
|
|
427
|
-
|
|
428
347
|
var mainHelper = this.mainHelper || (0, _algoliasearchHelper.default)(this.client, this.indexName);
|
|
429
|
-
|
|
430
348
|
mainHelper.search = function () {
|
|
431
|
-
_this3.status = 'loading';
|
|
349
|
+
_this3.status = 'loading';
|
|
350
|
+
// @MAJOR: use scheduleRender here
|
|
432
351
|
// For now, widgets don't expect to be rendered at the start of `loading`,
|
|
433
352
|
// so it would be a breaking change to add an extra render. We don't have
|
|
434
353
|
// these guarantees about the render event, thus emitting it once more
|
|
435
354
|
// isn't a breaking change.
|
|
355
|
+
_this3.emit('render');
|
|
436
356
|
|
|
437
|
-
|
|
357
|
+
// This solution allows us to keep the exact same API for the users but
|
|
438
358
|
// under the hood, we have a different implementation. It should be
|
|
439
359
|
// completely transparent for the rest of the codebase. Only this module
|
|
440
360
|
// is impacted.
|
|
441
|
-
|
|
442
|
-
|
|
443
361
|
return mainHelper.searchOnlyWithDerivedHelpers();
|
|
444
362
|
};
|
|
445
|
-
|
|
446
363
|
if (this._searchFunction) {
|
|
447
364
|
// this client isn't used to actually search, but required for the helper
|
|
448
365
|
// to not throw errors
|
|
@@ -452,34 +369,28 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
452
369
|
}
|
|
453
370
|
};
|
|
454
371
|
this._mainHelperSearch = mainHelper.search.bind(mainHelper);
|
|
455
|
-
|
|
456
372
|
mainHelper.search = function () {
|
|
457
373
|
var mainIndexHelper = _this3.mainIndex.getHelper();
|
|
458
|
-
|
|
459
374
|
var searchFunctionHelper = (0, _algoliasearchHelper.default)(fakeClient, mainIndexHelper.state.index, mainIndexHelper.state);
|
|
460
375
|
searchFunctionHelper.once('search', function (_ref2) {
|
|
461
376
|
var state = _ref2.state;
|
|
462
377
|
mainIndexHelper.overrideStateWithoutTriggeringChangeEvent(state);
|
|
463
|
-
|
|
464
378
|
_this3._mainHelperSearch();
|
|
465
|
-
});
|
|
466
|
-
|
|
379
|
+
});
|
|
380
|
+
// Forward state changes from `searchFunctionHelper` to `mainIndexHelper`
|
|
467
381
|
searchFunctionHelper.on('change', function (_ref3) {
|
|
468
382
|
var state = _ref3.state;
|
|
469
383
|
mainIndexHelper.setState(state);
|
|
470
384
|
});
|
|
471
|
-
|
|
472
385
|
_this3._searchFunction(searchFunctionHelper);
|
|
473
|
-
|
|
474
386
|
return mainHelper;
|
|
475
387
|
};
|
|
476
|
-
}
|
|
477
|
-
// and `results` that are also emitted on the derived one.
|
|
478
|
-
|
|
388
|
+
}
|
|
479
389
|
|
|
390
|
+
// Only the "main" Helper emits the `error` event vs the one for `search`
|
|
391
|
+
// and `results` that are also emitted on the derived one.
|
|
480
392
|
mainHelper.on('error', function (_ref4) {
|
|
481
393
|
var error = _ref4.error;
|
|
482
|
-
|
|
483
394
|
if (!(error instanceof Error)) {
|
|
484
395
|
// typescript lies here, error is in some cases { name: string, message: string }
|
|
485
396
|
var err = error;
|
|
@@ -487,21 +398,19 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
487
398
|
acc[key] = err[key];
|
|
488
399
|
return acc;
|
|
489
400
|
}, new Error(err.message));
|
|
490
|
-
}
|
|
401
|
+
}
|
|
402
|
+
// If an error is emitted, it is re-thrown by events. In previous versions
|
|
491
403
|
// we emitted {error}, which is thrown as:
|
|
492
404
|
// "Uncaught, unspecified \"error\" event. ([object Object])"
|
|
493
405
|
// To avoid breaking changes, we make the error available in both
|
|
494
406
|
// `error` and `error.error`
|
|
495
407
|
// @MAJOR emit only error
|
|
496
|
-
|
|
497
|
-
|
|
498
408
|
error.error = error;
|
|
499
409
|
_this3.error = error;
|
|
500
410
|
_this3.status = 'error';
|
|
411
|
+
_this3.scheduleRender(false);
|
|
501
412
|
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
413
|
+
// This needs to execute last because it throws the error.
|
|
505
414
|
_this3.emit('error', error);
|
|
506
415
|
});
|
|
507
416
|
this.mainHelper = mainHelper;
|
|
@@ -514,22 +423,22 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
514
423
|
parent: null,
|
|
515
424
|
uiState: this._initialUiState
|
|
516
425
|
});
|
|
517
|
-
|
|
518
426
|
if (this._initialResults) {
|
|
519
|
-
var originalScheduleSearch = this.scheduleSearch;
|
|
427
|
+
var originalScheduleSearch = this.scheduleSearch;
|
|
428
|
+
// We don't schedule a first search when initial results are provided
|
|
520
429
|
// because we already have the results to render. This skips the initial
|
|
521
430
|
// network request on the browser on `start`.
|
|
522
|
-
|
|
523
|
-
|
|
431
|
+
this.scheduleSearch = (0, _index2.defer)(_index2.noop);
|
|
432
|
+
// We also skip the initial network request when widgets are dynamically
|
|
524
433
|
// added in the first tick (that's the case in all the framework-based flavors).
|
|
525
434
|
// When we add a widget to `index`, it calls `scheduleSearch`. We can rely
|
|
526
435
|
// on our `defer` util to restore the original `scheduleSearch` value once
|
|
527
436
|
// widgets are added to hook back to the regular lifecycle.
|
|
528
|
-
|
|
529
437
|
(0, _index2.defer)(function () {
|
|
530
438
|
_this3.scheduleSearch = originalScheduleSearch;
|
|
531
439
|
})();
|
|
532
|
-
}
|
|
440
|
+
}
|
|
441
|
+
// We only schedule a search when widgets have been added before `start()`
|
|
533
442
|
// because there are listeners that can use these results.
|
|
534
443
|
// This is especially useful in framework-based flavors that wait for
|
|
535
444
|
// dynamically-added widgets to trigger a network request. It avoids
|
|
@@ -538,27 +447,28 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
538
447
|
// Later, we could also skip `index()` widgets and widgets that don't read
|
|
539
448
|
// the results, but this is an optimization that has a very low impact for now.
|
|
540
449
|
else if (this.mainIndex.getWidgets().length > 0) {
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
// the direct Helper access `search.helper` (e.g multi-index).
|
|
450
|
+
this.scheduleSearch();
|
|
451
|
+
}
|
|
544
452
|
|
|
453
|
+
// Keep the previous reference for legacy purpose, some pattern use
|
|
454
|
+
// the direct Helper access `search.helper` (e.g multi-index).
|
|
455
|
+
this.helper = this.mainIndex.getHelper();
|
|
545
456
|
|
|
546
|
-
|
|
457
|
+
// track we started the search if we add more widgets,
|
|
547
458
|
// to init them directly after add
|
|
548
|
-
|
|
549
459
|
this.started = true;
|
|
550
460
|
this.middleware.forEach(function (_ref6) {
|
|
551
461
|
var instance = _ref6.instance;
|
|
552
462
|
instance.started();
|
|
553
463
|
});
|
|
554
464
|
}
|
|
465
|
+
|
|
555
466
|
/**
|
|
556
467
|
* Removes all widgets without triggering a search afterwards. This is an **EXPERIMENTAL** feature,
|
|
557
468
|
* if you find an issue with it, please
|
|
558
469
|
* [open an issue](https://github.com/algolia/instantsearch.js/issues/new?title=Problem%20with%20dispose).
|
|
559
470
|
* @return {undefined} This method does not return anything
|
|
560
471
|
*/
|
|
561
|
-
|
|
562
472
|
}, {
|
|
563
473
|
key: "dispose",
|
|
564
474
|
value: function dispose() {
|
|
@@ -566,13 +476,15 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
566
476
|
this.scheduleRender.cancel();
|
|
567
477
|
clearTimeout(this._searchStalledTimer);
|
|
568
478
|
this.removeWidgets(this.mainIndex.getWidgets());
|
|
569
|
-
this.mainIndex.dispose();
|
|
479
|
+
this.mainIndex.dispose();
|
|
480
|
+
|
|
481
|
+
// You can not start an instance two times, therefore a disposed instance
|
|
570
482
|
// needs to set started as false otherwise this can not be restarted at a
|
|
571
483
|
// later point.
|
|
484
|
+
this.started = false;
|
|
572
485
|
|
|
573
|
-
|
|
486
|
+
// The helper needs to be reset to perform the next search from a fresh state.
|
|
574
487
|
// If not reset, it would use the state stored before calling `dispose()`.
|
|
575
|
-
|
|
576
488
|
this.removeAllListeners();
|
|
577
489
|
this.mainHelper.removeAllListeners();
|
|
578
490
|
this.mainHelper = null;
|
|
@@ -586,45 +498,38 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
586
498
|
key: "scheduleStalledRender",
|
|
587
499
|
value: function scheduleStalledRender() {
|
|
588
500
|
var _this4 = this;
|
|
589
|
-
|
|
590
501
|
if (!this._searchStalledTimer) {
|
|
591
502
|
this._searchStalledTimer = setTimeout(function () {
|
|
592
503
|
_this4.status = 'stalled';
|
|
593
|
-
|
|
594
504
|
_this4.scheduleRender();
|
|
595
505
|
}, this._stalledSearchDelay);
|
|
596
506
|
}
|
|
597
507
|
}
|
|
508
|
+
|
|
598
509
|
/**
|
|
599
510
|
* Set the UI state and trigger a search.
|
|
600
511
|
* @param uiState The next UI state or a function computing it from the current state
|
|
601
512
|
* @param callOnStateChange private parameter used to know if the method is called from a state change
|
|
602
513
|
*/
|
|
603
|
-
|
|
604
514
|
}, {
|
|
605
515
|
key: "setUiState",
|
|
606
516
|
value: function setUiState(uiState) {
|
|
607
517
|
var _this5 = this;
|
|
608
|
-
|
|
609
518
|
var callOnStateChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
610
|
-
|
|
611
519
|
if (!this.mainHelper) {
|
|
612
520
|
throw new Error(withUsage('The `start` method needs to be called before `setUiState`.'));
|
|
613
|
-
}
|
|
614
|
-
// main index passes to the function form of `setUiState`.
|
|
615
|
-
|
|
521
|
+
}
|
|
616
522
|
|
|
523
|
+
// We refresh the index UI state to update the local UI state that the
|
|
524
|
+
// main index passes to the function form of `setUiState`.
|
|
617
525
|
this.mainIndex.refreshUiState();
|
|
618
526
|
var nextUiState = typeof uiState === 'function' ? uiState(this.mainIndex.getWidgetUiState({})) : uiState;
|
|
619
|
-
|
|
620
527
|
if (this.onStateChange && callOnStateChange) {
|
|
621
528
|
this.onStateChange({
|
|
622
529
|
uiState: nextUiState,
|
|
623
530
|
setUiState: function setUiState(finalUiState) {
|
|
624
531
|
(0, _index2.setIndexHelperState)(typeof finalUiState === 'function' ? finalUiState(nextUiState) : finalUiState, _this5.mainIndex);
|
|
625
|
-
|
|
626
532
|
_this5.scheduleSearch();
|
|
627
|
-
|
|
628
533
|
_this5.onInternalStateChange();
|
|
629
534
|
}
|
|
630
535
|
});
|
|
@@ -641,18 +546,15 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
641
546
|
// We refresh the index UI state to make sure changes from `refine` are taken in account
|
|
642
547
|
this.mainIndex.refreshUiState();
|
|
643
548
|
}
|
|
644
|
-
|
|
645
549
|
return this.mainIndex.getWidgetUiState({});
|
|
646
550
|
}
|
|
647
551
|
}, {
|
|
648
552
|
key: "createURL",
|
|
649
553
|
value: function createURL() {
|
|
650
554
|
var nextState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
651
|
-
|
|
652
555
|
if (!this.started) {
|
|
653
556
|
throw new Error(withUsage('The `start` method needs to be called before `createURL`.'));
|
|
654
557
|
}
|
|
655
|
-
|
|
656
558
|
return this._createURL(nextState);
|
|
657
559
|
}
|
|
658
560
|
}, {
|
|
@@ -661,13 +563,10 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
|
|
|
661
563
|
if (!this.mainHelper) {
|
|
662
564
|
throw new Error(withUsage('The `start` method needs to be called before `refresh`.'));
|
|
663
565
|
}
|
|
664
|
-
|
|
665
566
|
this.mainHelper.clearCache().search();
|
|
666
567
|
}
|
|
667
568
|
}]);
|
|
668
|
-
|
|
669
569
|
return InstantSearch;
|
|
670
570
|
}(_events.default);
|
|
671
|
-
|
|
672
571
|
var _default = InstantSearch;
|
|
673
572
|
exports.default = _default;
|