instantsearch.js 4.49.1 → 4.49.3
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 +14 -8
- package/cjs/components/Answers/Answers.js +11 -18
- package/cjs/components/Breadcrumb/Breadcrumb.js +6 -13
- package/cjs/components/ClearRefinements/ClearRefinements.js +5 -12
- package/cjs/components/CurrentRefinements/CurrentRefinements.js +8 -16
- package/cjs/components/GeoSearchControls/GeoSearchButton.js +4 -7
- package/cjs/components/GeoSearchControls/GeoSearchControls.js +14 -23
- package/cjs/components/GeoSearchControls/GeoSearchToggle.js +4 -7
- package/cjs/components/Highlight/Highlight.js +5 -12
- package/cjs/components/Hits/Hits.js +13 -22
- package/cjs/components/InfiniteHits/InfiniteHits.js +18 -27
- package/cjs/components/InternalHighlight/InternalHighlight.js +0 -3
- package/cjs/components/MenuSelect/MenuSelect.js +12 -22
- package/cjs/components/Pagination/Pagination.js +12 -20
- package/cjs/components/Panel/Panel.js +9 -28
- package/cjs/components/PoweredBy/PoweredBy.js +4 -6
- package/cjs/components/QueryRuleCustomData/QueryRuleCustomData.js +3 -8
- package/cjs/components/RangeInput/RangeInput.js +21 -51
- package/cjs/components/RefinementList/RefinementList.js +30 -81
- package/cjs/components/RefinementList/RefinementListItem.js +9 -15
- package/cjs/components/RelevantSort/RelevantSort.js +5 -10
- package/cjs/components/ReverseHighlight/ReverseHighlight.js +5 -12
- package/cjs/components/ReverseSnippet/ReverseSnippet.js +5 -12
- package/cjs/components/SearchBox/SearchBox.js +35 -77
- package/cjs/components/Selector/Selector.js +3 -7
- package/cjs/components/Slider/Pit.js +7 -11
- package/cjs/components/Slider/Rheostat.js +69 -133
- package/cjs/components/Slider/Slider.js +39 -72
- package/cjs/components/Snippet/Snippet.js +5 -12
- package/cjs/components/Stats/Stats.js +13 -22
- package/cjs/components/Template/Template.js +17 -44
- package/cjs/components/ToggleRefinement/ToggleRefinement.js +5 -11
- package/cjs/components/VoiceSearch/VoiceSearch.js +9 -17
- package/cjs/connectors/answers/connectAnswers.js +36 -46
- package/cjs/connectors/autocomplete/connectAutocomplete.js +21 -35
- package/cjs/connectors/breadcrumb/connectBreadcrumb.js +27 -55
- package/cjs/connectors/clear-refinements/connectClearRefinements.js +41 -56
- package/cjs/connectors/configure/connectConfigure.js +17 -28
- package/cjs/connectors/configure-related-items/connectConfigureRelatedItems.js +21 -43
- package/cjs/connectors/current-refinements/connectCurrentRefinements.js +29 -65
- package/cjs/connectors/dynamic-widgets/connectDynamicWidgets.js +27 -45
- package/cjs/connectors/geo-search/connectGeoSearch.js +32 -59
- package/cjs/connectors/hierarchical-menu/connectHierarchicalMenu.js +50 -82
- package/cjs/connectors/hits/connectHits.js +25 -38
- package/cjs/connectors/hits/connectHitsWithInsights.js +3 -7
- package/cjs/connectors/hits-per-page/connectHitsPerPage.js +26 -46
- package/cjs/connectors/index.js +92 -126
- package/cjs/connectors/infinite-hits/connectInfiniteHits.js +43 -75
- package/cjs/connectors/infinite-hits/connectInfiniteHitsWithInsights.js +3 -7
- package/cjs/connectors/menu/connectMenu.js +39 -73
- package/cjs/connectors/numeric-menu/connectNumericMenu.js +37 -86
- package/cjs/connectors/pagination/Paginator.js +11 -25
- package/cjs/connectors/pagination/connectPagination.js +17 -31
- package/cjs/connectors/powered-by/connectPoweredBy.js +13 -19
- package/cjs/connectors/query-rules/connectQueryRules.js +44 -65
- package/cjs/connectors/range/connectRange.js +72 -129
- package/cjs/connectors/rating-menu/connectRatingMenu.js +34 -87
- package/cjs/connectors/refinement-list/connectRefinementList.js +51 -79
- package/cjs/connectors/relevant-sort/connectRelevantSort.js +11 -18
- package/cjs/connectors/search-box/connectSearchBox.js +15 -28
- package/cjs/connectors/sort-by/connectSortBy.js +21 -28
- package/cjs/connectors/stats/connectStats.js +12 -16
- package/cjs/connectors/toggle-refinement/connectToggleRefinement.js +44 -75
- package/cjs/connectors/voice-search/connectVoiceSearch.js +22 -41
- package/cjs/helpers/components/Highlight.js +11 -18
- package/cjs/helpers/components/ReverseHighlight.js +19 -26
- package/cjs/helpers/components/ReverseSnippet.js +19 -26
- package/cjs/helpers/components/Snippet.js +11 -18
- package/cjs/helpers/components/index.js +4 -12
- package/cjs/helpers/get-insights-anonymous-user-token.js +6 -17
- package/cjs/helpers/highlight.js +15 -19
- package/cjs/helpers/index.js +23 -37
- package/cjs/helpers/insights.js +9 -21
- package/cjs/helpers/reverseHighlight.js +16 -20
- package/cjs/helpers/reverseSnippet.js +16 -20
- package/cjs/helpers/snippet.js +15 -19
- package/cjs/index.js +12 -27
- package/cjs/lib/InstantSearch.js +108 -207
- package/cjs/lib/createHelpers.js +15 -19
- package/cjs/lib/formatNumber.js +0 -1
- package/cjs/lib/infiniteHitsCache/index.js +1 -3
- package/cjs/lib/infiniteHitsCache/sessionStorage.js +14 -22
- package/cjs/lib/insights/client.js +17 -40
- package/cjs/lib/insights/index.js +9 -15
- package/cjs/lib/insights/listener.js +7 -24
- package/cjs/lib/routers/history.js +75 -117
- package/cjs/lib/routers/index.js +1 -3
- package/cjs/lib/stateMappings/index.js +2 -5
- package/cjs/lib/stateMappings/simple.js +11 -14
- package/cjs/lib/stateMappings/singleIndex.js +6 -8
- package/cjs/lib/suit.js +2 -5
- package/cjs/lib/templating/index.js +2 -6
- package/cjs/lib/templating/prepareTemplateProps.js +14 -22
- package/cjs/lib/templating/renderTemplate.js +17 -30
- package/cjs/lib/utils/capitalize.js +0 -1
- package/cjs/lib/utils/checkIndexUiState.js +19 -47
- package/cjs/lib/utils/checkRendering.js +1 -3
- package/cjs/lib/utils/clearRefinements.js +2 -9
- package/cjs/lib/utils/concatHighlightedParts.js +2 -4
- package/cjs/lib/utils/createConcurrentSafePromise.js +0 -3
- package/cjs/lib/utils/createSendEventForFacet.js +8 -15
- package/cjs/lib/utils/createSendEventForHits.js +10 -34
- package/cjs/lib/utils/debounce.js +0 -3
- package/cjs/lib/utils/defer.js +0 -11
- package/cjs/lib/utils/detect-insights-client.js +1 -3
- package/cjs/lib/utils/documentation.js +2 -5
- package/cjs/lib/utils/escape-highlight.js +13 -26
- 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 +21 -37
- package/cjs/lib/utils/getAppIdAndApiKey.js +2 -3
- package/cjs/lib/utils/getContainerNode.js +1 -7
- package/cjs/lib/utils/getHighlightFromSiblings.js +1 -7
- package/cjs/lib/utils/getHighlightedParts.js +2 -5
- package/cjs/lib/utils/getObjectType.js +0 -1
- package/cjs/lib/utils/getPropertyByPath.js +0 -1
- package/cjs/lib/utils/getRefinements.js +30 -45
- package/cjs/lib/utils/getWidgetAttribute.js +0 -6
- package/cjs/lib/utils/hits-absolute-position.js +6 -7
- package/cjs/lib/utils/hits-query-id.js +6 -8
- package/cjs/lib/utils/index.js +46 -138
- package/cjs/lib/utils/isDomElement.js +0 -1
- package/cjs/lib/utils/isEqual.js +2 -7
- 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 +6 -16
- package/cjs/lib/utils/mergeSearchParameters.js +23 -43
- package/cjs/lib/utils/noop.js +0 -1
- package/cjs/lib/utils/range.js +9 -15
- package/cjs/lib/utils/render-args.js +0 -2
- package/cjs/lib/utils/resolveSearchParameters.js +0 -3
- package/cjs/lib/utils/reverseHighlightedParts.js +7 -10
- package/cjs/lib/utils/safelyRunOnBrowser.js +7 -9
- package/cjs/lib/utils/serializer.js +1 -3
- package/cjs/lib/utils/setIndexHelperState.js +2 -7
- 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 +12 -37
- package/cjs/middlewares/createInsightsMiddleware.js +30 -54
- package/cjs/middlewares/createMetadataMiddleware.js +7 -15
- package/cjs/middlewares/createRouterMiddleware.js +16 -24
- package/cjs/middlewares/index.js +3 -9
- package/cjs/types/algoliasearch.js +0 -2
- package/cjs/types/index.js +14 -42
- package/cjs/widgets/analytics/analytics.js +22 -48
- package/cjs/widgets/answers/answers.js +32 -49
- package/cjs/widgets/breadcrumb/breadcrumb.js +31 -48
- package/cjs/widgets/clear-refinements/clear-refinements.js +28 -45
- package/cjs/widgets/configure/configure.js +9 -14
- package/cjs/widgets/configure-related-items/configure-related-items.js +9 -14
- package/cjs/widgets/current-refinements/current-refinements.js +22 -37
- package/cjs/widgets/dynamic-widgets/dynamic-widgets.js +17 -32
- package/cjs/widgets/geo-search/GeoSearchRenderer.js +50 -72
- package/cjs/widgets/geo-search/createHTMLMarker.js +34 -62
- package/cjs/widgets/geo-search/defaultTemplates.js +0 -3
- package/cjs/widgets/geo-search/geo-search.js +44 -70
- package/cjs/widgets/hierarchical-menu/defaultTemplates.js +5 -9
- package/cjs/widgets/hierarchical-menu/hierarchical-menu.js +41 -57
- package/cjs/widgets/hits/hits.js +32 -50
- package/cjs/widgets/hits-per-page/hits-per-page.js +24 -39
- package/cjs/widgets/index/index.js +71 -113
- package/cjs/widgets/index.js +47 -85
- package/cjs/widgets/infinite-hits/infinite-hits.js +39 -57
- package/cjs/widgets/menu/defaultTemplates.js +4 -8
- package/cjs/widgets/menu/menu.js +36 -53
- package/cjs/widgets/menu-select/defaultTemplates.js +2 -4
- package/cjs/widgets/menu-select/menu-select.js +31 -48
- package/cjs/widgets/numeric-menu/defaultTemplates.js +3 -5
- package/cjs/widgets/numeric-menu/numeric-menu.js +30 -47
- package/cjs/widgets/pagination/pagination.js +43 -61
- package/cjs/widgets/panel/panel.js +31 -56
- package/cjs/widgets/places/places.js +22 -34
- package/cjs/widgets/powered-by/powered-by.js +20 -34
- package/cjs/widgets/query-rule-context/query-rule-context.js +10 -18
- package/cjs/widgets/query-rule-custom-data/query-rule-custom-data.js +24 -39
- package/cjs/widgets/range-input/range-input.js +36 -60
- package/cjs/widgets/range-slider/range-slider.js +39 -61
- package/cjs/widgets/rating-menu/defaultTemplates.js +9 -16
- package/cjs/widgets/rating-menu/rating-menu.js +30 -48
- package/cjs/widgets/refinement-list/defaultTemplates.js +6 -10
- package/cjs/widgets/refinement-list/refinement-list.js +54 -72
- package/cjs/widgets/relevant-sort/relevant-sort.js +21 -37
- package/cjs/widgets/search-box/defaultTemplates.js +0 -5
- package/cjs/widgets/search-box/search-box.js +42 -57
- package/cjs/widgets/sort-by/sort-by.js +21 -36
- package/cjs/widgets/stats/defaultTemplates.js +1 -2
- package/cjs/widgets/stats/stats.js +40 -67
- package/cjs/widgets/toggle-refinement/toggle-refinement.js +29 -46
- package/cjs/widgets/voice-search/defaultTemplates.js +4 -14
- package/cjs/widgets/voice-search/voice-search.js +28 -44
- package/dist/instantsearch.development.d.ts +9 -6
- package/dist/instantsearch.development.js +1840 -3142
- package/dist/instantsearch.development.js.map +1 -1
- package/dist/instantsearch.production.d.ts +9 -6
- package/dist/instantsearch.production.min.d.ts +9 -6
- package/dist/instantsearch.production.min.js +2 -2
- package/dist/instantsearch.production.min.js.map +1 -1
- package/es/components/Answers/Answers.js +10 -13
- package/es/components/Breadcrumb/Breadcrumb.js +5 -8
- package/es/components/ClearRefinements/ClearRefinements.js +4 -7
- package/es/components/CurrentRefinements/CurrentRefinements.js +5 -10
- package/es/components/GeoSearchControls/GeoSearchButton.js +4 -6
- package/es/components/GeoSearchControls/GeoSearchControls.js +11 -14
- package/es/components/GeoSearchControls/GeoSearchToggle.js +4 -6
- package/es/components/Highlight/Highlight.js +4 -7
- package/es/components/Hits/Hits.js +12 -17
- package/es/components/InfiniteHits/InfiniteHits.js +17 -22
- package/es/components/MenuSelect/MenuSelect.js +9 -14
- package/es/components/Pagination/Pagination.js +10 -15
- package/es/components/Panel/Panel.js +8 -22
- package/es/components/PoweredBy/PoweredBy.js +4 -5
- package/es/components/QueryRuleCustomData/QueryRuleCustomData.js +2 -4
- package/es/components/RangeInput/RangeInput.js +20 -46
- package/es/components/RefinementList/RefinementList.js +24 -67
- package/es/components/RefinementList/RefinementListItem.js +8 -11
- package/es/components/RelevantSort/RelevantSort.js +4 -6
- package/es/components/ReverseHighlight/ReverseHighlight.js +4 -7
- package/es/components/ReverseSnippet/ReverseSnippet.js +4 -7
- package/es/components/SearchBox/SearchBox.js +29 -66
- package/es/components/Selector/Selector.js +3 -5
- package/es/components/Slider/Pit.js +7 -9
- package/es/components/Slider/Rheostat.js +70 -133
- package/es/components/Slider/Slider.js +34 -61
- package/es/components/Snippet/Snippet.js +4 -7
- package/es/components/Stats/Stats.js +12 -17
- package/es/components/Template/Template.js +12 -35
- package/es/components/ToggleRefinement/ToggleRefinement.js +4 -7
- package/es/components/VoiceSearch/VoiceSearch.js +8 -13
- package/es/connectors/answers/connectAnswers.js +27 -36
- package/es/connectors/autocomplete/connectAutocomplete.js +12 -24
- package/es/connectors/breadcrumb/connectBreadcrumb.js +22 -48
- package/es/connectors/clear-refinements/connectClearRefinements.js +32 -45
- package/es/connectors/configure/connectConfigure.js +11 -17
- package/es/connectors/configure-related-items/connectConfigureRelatedItems.js +16 -33
- package/es/connectors/current-refinements/connectCurrentRefinements.js +23 -57
- package/es/connectors/dynamic-widgets/connectDynamicWidgets.js +20 -36
- package/es/connectors/geo-search/connectGeoSearch.js +21 -46
- package/es/connectors/hierarchical-menu/connectHierarchicalMenu.js +44 -74
- package/es/connectors/hits/connectHits.js +14 -25
- package/es/connectors/hits-per-page/connectHitsPerPage.js +20 -38
- package/es/connectors/index.d.ts +2 -1
- package/es/connectors/index.js +6 -3
- package/es/connectors/infinite-hits/connectInfiniteHits.js +32 -62
- package/es/connectors/menu/connectMenu.js +34 -66
- package/es/connectors/numeric-menu/connectNumericMenu.js +31 -78
- package/es/connectors/pagination/Paginator.js +8 -21
- package/es/connectors/pagination/connectPagination.js +12 -22
- package/es/connectors/powered-by/connectPoweredBy.js +8 -12
- package/es/connectors/query-rules/connectQueryRules.js +37 -56
- package/es/connectors/range/connectRange.js +46 -101
- package/es/connectors/rating-menu/connectRatingMenu.js +28 -79
- package/es/connectors/refinement-list/connectRefinementList.js +43 -69
- package/es/connectors/relevant-sort/connectRelevantSort.js +8 -14
- package/es/connectors/search-box/connectSearchBox.js +11 -22
- package/es/connectors/sort-by/connectSortBy.js +15 -20
- package/es/connectors/stats/connectStats.js +8 -10
- package/es/connectors/toggle-refinement/connectToggleRefinement.js +33 -62
- package/es/connectors/toggle-refinement/types.js +1 -0
- package/es/connectors/voice-search/connectVoiceSearch.js +17 -32
- package/es/helpers/components/Highlight.js +5 -8
- package/es/helpers/components/ReverseHighlight.js +13 -16
- package/es/helpers/components/ReverseSnippet.js +13 -16
- package/es/helpers/components/Snippet.js +5 -8
- package/es/helpers/get-insights-anonymous-user-token.js +2 -10
- package/es/helpers/highlight.js +10 -10
- package/es/helpers/insights.js +3 -10
- package/es/helpers/reverseHighlight.js +10 -10
- package/es/helpers/reverseSnippet.js +10 -10
- package/es/helpers/snippet.js +10 -10
- package/es/index.js +0 -2
- package/es/lib/InstantSearch.js +83 -172
- package/es/lib/createHelpers.js +8 -9
- package/es/lib/infiniteHitsCache/sessionStorage.js +10 -16
- package/es/lib/insights/client.js +12 -33
- package/es/lib/insights/listener.js +4 -18
- package/es/lib/routers/history.js +69 -108
- package/es/lib/stateMappings/simple.js +11 -13
- package/es/lib/stateMappings/singleIndex.js +6 -7
- package/es/lib/suit.js +2 -3
- package/es/lib/templating/prepareTemplateProps.js +13 -20
- package/es/lib/templating/renderTemplate.js +12 -21
- package/es/lib/utils/checkIndexUiState.js +19 -41
- 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 +9 -18
- 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 +21 -35
- 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 +28 -41
- package/es/lib/utils/getWidgetAttribute.js +0 -5
- package/es/lib/utils/hits-absolute-position.js +6 -6
- package/es/lib/utils/hits-query-id.js +6 -7
- package/es/lib/utils/isEqual.js +2 -6
- package/es/lib/utils/isPlainObject.js +3 -10
- package/es/lib/utils/logger.js +4 -14
- package/es/lib/utils/mergeSearchParameters.js +21 -38
- package/es/lib/utils/range.js +9 -14
- package/es/lib/utils/resolveSearchParameters.js +0 -2
- package/es/lib/utils/reverseHighlightedParts.js +6 -7
- 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 +12 -36
- package/es/lib/voiceSearchHelper/types.js +1 -0
- package/es/middlewares/createInsightsMiddleware.js +21 -42
- package/es/middlewares/createMetadataMiddleware.js +3 -9
- package/es/middlewares/createRouterMiddleware.js +12 -14
- package/es/types/algoliasearch.js +1 -0
- package/es/types/component.js +1 -0
- package/es/types/connector.js +1 -0
- package/es/types/index.js +9 -5
- package/es/types/insights.js +1 -0
- package/es/types/instantsearch.js +1 -0
- package/es/types/middleware.js +1 -0
- package/es/types/render-state.js +1 -0
- package/es/types/results.js +1 -0
- package/es/types/router.js +1 -0
- package/es/types/templates.js +1 -0
- package/es/types/ui-state.js +1 -0
- package/es/types/utils.js +1 -0
- package/es/types/widget-factory.js +1 -0
- package/es/types/widget.js +1 -0
- package/es/widgets/analytics/analytics.js +19 -43
- package/es/widgets/answers/answers.js +23 -30
- package/es/widgets/breadcrumb/breadcrumb.js +22 -29
- package/es/widgets/clear-refinements/clear-refinements.js +19 -26
- package/es/widgets/configure/configure.js +7 -7
- package/es/widgets/configure-related-items/configure-related-items.js +6 -8
- package/es/widgets/current-refinements/current-refinements.js +16 -23
- package/es/widgets/dynamic-widgets/dynamic-widgets.js +11 -21
- package/es/widgets/geo-search/GeoSearchRenderer.d.js +1 -0
- package/es/widgets/geo-search/GeoSearchRenderer.js +47 -65
- package/es/widgets/geo-search/createHTMLMarker.d.ts +1 -0
- package/es/widgets/geo-search/createHTMLMarker.js +34 -61
- package/es/widgets/geo-search/defaultTemplates.js +0 -2
- package/es/widgets/geo-search/geo-search.d.ts +1 -0
- package/es/widgets/geo-search/geo-search.js +34 -50
- package/es/widgets/hierarchical-menu/defaultTemplates.js +4 -4
- package/es/widgets/hierarchical-menu/hierarchical-menu.js +32 -38
- package/es/widgets/hits/hits.js +20 -27
- package/es/widgets/hits-per-page/hits-per-page.js +17 -24
- package/es/widgets/index/index.js +55 -93
- package/es/widgets/index.d.ts +2 -1
- package/es/widgets/index.js +4 -3
- package/es/widgets/infinite-hits/infinite-hits.js +27 -34
- package/es/widgets/menu/defaultTemplates.js +3 -3
- package/es/widgets/menu/menu.js +27 -34
- package/es/widgets/menu-select/defaultTemplates.js +1 -1
- package/es/widgets/menu-select/menu-select.js +22 -29
- package/es/widgets/numeric-menu/defaultTemplates.js +3 -3
- package/es/widgets/numeric-menu/numeric-menu.js +21 -28
- package/es/widgets/pagination/pagination.js +36 -46
- package/es/widgets/panel/panel.js +24 -42
- package/es/widgets/places/places.js +22 -33
- package/es/widgets/powered-by/powered-by.js +14 -20
- package/es/widgets/query-rule-context/query-rule-context.js +6 -10
- package/es/widgets/query-rule-custom-data/query-rule-custom-data.js +17 -24
- package/es/widgets/range-input/range-input.js +28 -43
- package/es/widgets/range-slider/range-slider.js +33 -47
- package/es/widgets/rating-menu/defaultTemplates.js +8 -12
- package/es/widgets/rating-menu/rating-menu.js +21 -29
- package/es/widgets/refinement-list/defaultTemplates.js +5 -5
- package/es/widgets/refinement-list/refinement-list.js +43 -50
- package/es/widgets/relevant-sort/relevant-sort.js +14 -21
- package/es/widgets/search-box/defaultTemplates.js +0 -4
- package/es/widgets/search-box/search-box.js +35 -41
- package/es/widgets/sort-by/sort-by.js +15 -22
- package/es/widgets/stats/stats.js +30 -47
- package/es/widgets/toggle-refinement/toggle-refinement.js +20 -27
- package/es/widgets/voice-search/defaultTemplates.js +4 -13
- package/es/widgets/voice-search/voice-search.js +21 -28
- 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/scripts/transforms/__tests__/addWidget-to-addWidgets.test.js +1 -0
- package/CHANGELOG.md +0 -3693
|
@@ -1,72 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
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); }
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _index = require("../../lib/utils/index.js");
|
|
9
|
-
|
|
8
|
+
var _utils = require("../../lib/utils");
|
|
10
9
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
11
|
-
|
|
12
10
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
|
-
|
|
14
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
|
15
|
-
|
|
11
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
16
12
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
17
|
-
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
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; }
|
|
23
|
-
|
|
13
|
+
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; }
|
|
14
|
+
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; }
|
|
15
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
16
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
17
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
24
18
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
25
|
-
|
|
26
19
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
27
|
-
|
|
28
20
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
29
|
-
|
|
30
|
-
function
|
|
31
|
-
|
|
32
|
-
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
33
|
-
|
|
21
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
22
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
34
23
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
35
|
-
|
|
36
|
-
var withUsage = (0, _index.createDocumentationMessageGenerator)({
|
|
24
|
+
var withUsage = (0, _utils.createDocumentationMessageGenerator)({
|
|
37
25
|
name: 'rating-menu',
|
|
38
26
|
connector: true
|
|
39
27
|
});
|
|
40
28
|
var $$type = 'ais.ratingMenu';
|
|
41
29
|
var MAX_VALUES_PER_FACET_API_LIMIT = 1000;
|
|
42
30
|
var STEP = 1;
|
|
43
|
-
|
|
44
31
|
var createSendEvent = function createSendEvent(_ref) {
|
|
45
32
|
var instantSearchInstance = _ref.instantSearchInstance,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
33
|
+
helper = _ref.helper,
|
|
34
|
+
getRefinedStar = _ref.getRefinedStar,
|
|
35
|
+
attribute = _ref.attribute;
|
|
49
36
|
return function () {
|
|
50
37
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
51
38
|
args[_key] = arguments[_key];
|
|
52
39
|
}
|
|
53
|
-
|
|
54
40
|
if (args.length === 1) {
|
|
55
41
|
instantSearchInstance.sendEventToInsights(args[0]);
|
|
56
42
|
return;
|
|
57
43
|
}
|
|
58
|
-
|
|
59
44
|
var eventType = args[0],
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
facetValue = args[1],
|
|
46
|
+
_args$ = args[2],
|
|
47
|
+
eventName = _args$ === void 0 ? 'Filter Applied' : _args$;
|
|
64
48
|
if (eventType !== 'click') {
|
|
65
49
|
return;
|
|
66
50
|
}
|
|
67
|
-
|
|
68
51
|
var isRefined = getRefinedStar() === Number(facetValue);
|
|
69
|
-
|
|
70
52
|
if (!isRefined) {
|
|
71
53
|
instantSearchInstance.sendEventToInsights({
|
|
72
54
|
insightsMethod: 'clickedFilters',
|
|
@@ -82,7 +64,6 @@ var createSendEvent = function createSendEvent(_ref) {
|
|
|
82
64
|
}
|
|
83
65
|
};
|
|
84
66
|
};
|
|
85
|
-
|
|
86
67
|
/**
|
|
87
68
|
* **StarRating** connector provides the logic to build a custom widget that will let
|
|
88
69
|
* the user refine search results based on ratings.
|
|
@@ -92,89 +73,72 @@ var createSendEvent = function createSendEvent(_ref) {
|
|
|
92
73
|
* with `items.value`.
|
|
93
74
|
*/
|
|
94
75
|
var connectRatingMenu = function connectRatingMenu(renderFn) {
|
|
95
|
-
var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
96
|
-
(0,
|
|
76
|
+
var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.noop;
|
|
77
|
+
(0, _utils.checkRendering)(renderFn, withUsage());
|
|
97
78
|
return function (widgetParams) {
|
|
98
79
|
var _ref2 = widgetParams || {},
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
80
|
+
attribute = _ref2.attribute,
|
|
81
|
+
_ref2$max = _ref2.max,
|
|
82
|
+
max = _ref2$max === void 0 ? 5 : _ref2$max;
|
|
103
83
|
var sendEvent;
|
|
104
|
-
|
|
105
84
|
if (!attribute) {
|
|
106
85
|
throw new Error(withUsage('The `attribute` option is required.'));
|
|
107
86
|
}
|
|
108
|
-
|
|
109
87
|
var _getRefinedStar = function getRefinedStar(state) {
|
|
110
88
|
var _values$;
|
|
111
|
-
|
|
112
89
|
var values = state.getNumericRefinements(attribute);
|
|
113
|
-
|
|
114
90
|
if (!((_values$ = values['>=']) !== null && _values$ !== void 0 && _values$.length)) {
|
|
115
91
|
return undefined;
|
|
116
92
|
}
|
|
117
|
-
|
|
118
93
|
return values['>='][0];
|
|
119
94
|
};
|
|
120
|
-
|
|
121
95
|
var getFacetsMaxDecimalPlaces = function getFacetsMaxDecimalPlaces(facetResults) {
|
|
122
96
|
var maxDecimalPlaces = 0;
|
|
123
97
|
facetResults.forEach(function (facetResult) {
|
|
124
98
|
var _facetResult$name$spl = facetResult.name.split('.'),
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
99
|
+
_facetResult$name$spl2 = _slicedToArray(_facetResult$name$spl, 2),
|
|
100
|
+
_facetResult$name$spl3 = _facetResult$name$spl2[1],
|
|
101
|
+
decimal = _facetResult$name$spl3 === void 0 ? '' : _facetResult$name$spl3;
|
|
129
102
|
maxDecimalPlaces = Math.max(maxDecimalPlaces, decimal.length);
|
|
130
103
|
});
|
|
131
104
|
return maxDecimalPlaces;
|
|
132
105
|
};
|
|
133
|
-
|
|
134
106
|
var getFacetValuesWarningMessage = function getFacetValuesWarningMessage(_ref3) {
|
|
135
107
|
var maxDecimalPlaces = _ref3.maxDecimalPlaces,
|
|
136
|
-
|
|
137
|
-
|
|
108
|
+
maxFacets = _ref3.maxFacets,
|
|
109
|
+
maxValuesPerFacet = _ref3.maxValuesPerFacet;
|
|
138
110
|
var maxDecimalPlacesInRange = Math.max(0, Math.floor(Math.log10(MAX_VALUES_PER_FACET_API_LIMIT / max)));
|
|
139
111
|
var maxFacetsInRange = Math.min(MAX_VALUES_PER_FACET_API_LIMIT, Math.pow(10, maxDecimalPlacesInRange) * max);
|
|
140
112
|
var solutions = [];
|
|
141
|
-
|
|
142
113
|
if (maxFacets > MAX_VALUES_PER_FACET_API_LIMIT) {
|
|
143
114
|
solutions.push("- Update your records to lower the precision of the values in the \"".concat(attribute, "\" attribute (for example: ").concat(5.123456789.toPrecision(maxDecimalPlaces + 1), " to ").concat(5.123456789.toPrecision(maxDecimalPlacesInRange + 1), ")"));
|
|
144
115
|
}
|
|
145
|
-
|
|
146
116
|
if (maxValuesPerFacet < maxFacetsInRange) {
|
|
147
|
-
solutions.push("- Increase the maximum number of facet values to ".concat(maxFacetsInRange, " using the \"configure\" widget ").concat((0,
|
|
117
|
+
solutions.push("- Increase the maximum number of facet values to ".concat(maxFacetsInRange, " using the \"configure\" widget ").concat((0, _utils.createDocumentationLink)({
|
|
148
118
|
name: 'configure'
|
|
149
119
|
}), " and the \"maxValuesPerFacet\" parameter https://www.algolia.com/doc/api-reference/api-parameters/maxValuesPerFacet/"));
|
|
150
120
|
}
|
|
151
|
-
|
|
152
121
|
return "The ".concat(attribute, " attribute can have ").concat(maxFacets, " different values (0 to ").concat(max, " with a maximum of ").concat(maxDecimalPlaces, " decimals = ").concat(maxFacets, ") but you retrieved only ").concat(maxValuesPerFacet, " facet values. Therefore the number of results that match the refinements can be incorrect.\n ").concat(solutions.length ? "To resolve this problem you can:\n".concat(solutions.join('\n')) : "");
|
|
153
122
|
};
|
|
154
|
-
|
|
155
123
|
function getRefinedState(state, facetValue) {
|
|
156
124
|
var isRefined = _getRefinedStar(state) === Number(facetValue);
|
|
157
125
|
var emptyState = state.resetPage().removeNumericRefinement(attribute);
|
|
158
|
-
|
|
159
126
|
if (!isRefined) {
|
|
160
127
|
return emptyState.addNumericRefinement(attribute, '<=', max).addNumericRefinement(attribute, '>=', Number(facetValue));
|
|
161
128
|
}
|
|
162
|
-
|
|
163
129
|
return emptyState;
|
|
164
130
|
}
|
|
165
|
-
|
|
166
131
|
var toggleRefinement = function toggleRefinement(helper, facetValue) {
|
|
167
132
|
sendEvent('click', facetValue);
|
|
168
133
|
helper.setState(getRefinedState(helper.state, facetValue)).search();
|
|
169
134
|
};
|
|
170
|
-
|
|
171
135
|
var connectorState = {
|
|
172
136
|
toggleRefinementFactory: function toggleRefinementFactory(helper) {
|
|
173
137
|
return toggleRefinement.bind(null, helper);
|
|
174
138
|
},
|
|
175
139
|
createURLFactory: function createURLFactory(_ref4) {
|
|
176
140
|
var state = _ref4.state,
|
|
177
|
-
|
|
141
|
+
createURL = _ref4.createURL;
|
|
178
142
|
return function (value) {
|
|
179
143
|
return createURL(getRefinedState(state, value));
|
|
180
144
|
};
|
|
@@ -201,12 +165,11 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
|
|
|
201
165
|
},
|
|
202
166
|
getWidgetRenderState: function getWidgetRenderState(_ref5) {
|
|
203
167
|
var helper = _ref5.helper,
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
168
|
+
results = _ref5.results,
|
|
169
|
+
state = _ref5.state,
|
|
170
|
+
instantSearchInstance = _ref5.instantSearchInstance,
|
|
171
|
+
createURL = _ref5.createURL;
|
|
208
172
|
var facetValues = [];
|
|
209
|
-
|
|
210
173
|
if (!sendEvent) {
|
|
211
174
|
sendEvent = createSendEvent({
|
|
212
175
|
instantSearchInstance: instantSearchInstance,
|
|
@@ -217,23 +180,19 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
|
|
|
217
180
|
attribute: attribute
|
|
218
181
|
});
|
|
219
182
|
}
|
|
220
|
-
|
|
221
183
|
var refinementIsApplied = false;
|
|
222
184
|
var totalCount = 0;
|
|
223
185
|
var facetResults = results === null || results === void 0 ? void 0 : results.getFacetValues(attribute, {});
|
|
224
|
-
|
|
225
186
|
if (results && facetResults) {
|
|
226
187
|
var maxValuesPerFacet = facetResults.length;
|
|
227
188
|
var maxDecimalPlaces = getFacetsMaxDecimalPlaces(facetResults);
|
|
228
189
|
var maxFacets = Math.pow(10, maxDecimalPlaces) * max;
|
|
229
|
-
process.env.NODE_ENV === 'development' ? (0,
|
|
190
|
+
process.env.NODE_ENV === 'development' ? (0, _utils.warning)(maxFacets <= maxValuesPerFacet || Boolean(results.__isArtificial), getFacetValuesWarningMessage({
|
|
230
191
|
maxDecimalPlaces: maxDecimalPlaces,
|
|
231
192
|
maxFacets: maxFacets,
|
|
232
193
|
maxValuesPerFacet: maxValuesPerFacet
|
|
233
194
|
})) : void 0;
|
|
234
|
-
|
|
235
195
|
var refinedStar = _getRefinedStar(state);
|
|
236
|
-
|
|
237
196
|
var _loop = function _loop(star) {
|
|
238
197
|
var isRefined = refinedStar === star;
|
|
239
198
|
refinementIsApplied = refinementIsApplied || isRefined;
|
|
@@ -245,17 +204,14 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
|
|
|
245
204
|
return sum + current;
|
|
246
205
|
}, 0);
|
|
247
206
|
totalCount += count;
|
|
248
|
-
|
|
249
207
|
if (refinedStar && !isRefined && count === 0) {
|
|
250
208
|
// skip count==0 when at least 1 refinement is enabled
|
|
251
209
|
// eslint-disable-next-line no-continue
|
|
252
210
|
return "continue";
|
|
253
211
|
}
|
|
254
|
-
|
|
255
212
|
var stars = _toConsumableArray(new Array(Math.floor(max / STEP))).map(function (_v, i) {
|
|
256
213
|
return i * STEP < star;
|
|
257
214
|
});
|
|
258
|
-
|
|
259
215
|
facetValues.push({
|
|
260
216
|
stars: stars,
|
|
261
217
|
name: String(star),
|
|
@@ -265,14 +221,11 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
|
|
|
265
221
|
isRefined: isRefined
|
|
266
222
|
});
|
|
267
223
|
};
|
|
268
|
-
|
|
269
224
|
for (var star = STEP; star < max; star += STEP) {
|
|
270
225
|
var _ret = _loop(star);
|
|
271
|
-
|
|
272
226
|
if (_ret === "continue") continue;
|
|
273
227
|
}
|
|
274
228
|
}
|
|
275
|
-
|
|
276
229
|
facetValues = facetValues.reverse();
|
|
277
230
|
var hasNoResults = results ? results.nbHits === 0 : true;
|
|
278
231
|
return {
|
|
@@ -295,13 +248,10 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
|
|
|
295
248
|
},
|
|
296
249
|
getWidgetUiState: function getWidgetUiState(uiState, _ref7) {
|
|
297
250
|
var searchParameters = _ref7.searchParameters;
|
|
298
|
-
|
|
299
251
|
var value = _getRefinedStar(searchParameters);
|
|
300
|
-
|
|
301
252
|
if (typeof value !== 'number') {
|
|
302
253
|
return uiState;
|
|
303
254
|
}
|
|
304
|
-
|
|
305
255
|
return _objectSpread(_objectSpread({}, uiState), {}, {
|
|
306
256
|
ratingMenu: _objectSpread(_objectSpread({}, uiState.ratingMenu), {}, _defineProperty({}, attribute, value))
|
|
307
257
|
});
|
|
@@ -311,18 +261,15 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
|
|
|
311
261
|
var value = uiState.ratingMenu && uiState.ratingMenu[attribute];
|
|
312
262
|
var withoutRefinements = searchParameters.clearRefinements(attribute);
|
|
313
263
|
var withDisjunctiveFacet = withoutRefinements.addDisjunctiveFacet(attribute);
|
|
314
|
-
|
|
315
264
|
if (!value) {
|
|
316
265
|
return withDisjunctiveFacet.setQueryParameters({
|
|
317
266
|
numericRefinements: _objectSpread(_objectSpread({}, withDisjunctiveFacet.numericRefinements), {}, _defineProperty({}, attribute, {}))
|
|
318
267
|
});
|
|
319
268
|
}
|
|
320
|
-
|
|
321
269
|
return withDisjunctiveFacet.addNumericRefinement(attribute, '<=', max).addNumericRefinement(attribute, '>=', value);
|
|
322
270
|
}
|
|
323
271
|
};
|
|
324
272
|
};
|
|
325
273
|
};
|
|
326
|
-
|
|
327
274
|
var _default = connectRatingMenu;
|
|
328
275
|
exports.default = _default;
|
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
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); }
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
11
|
-
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
function
|
|
15
|
-
|
|
8
|
+
var _utils = require("../../lib/utils");
|
|
9
|
+
var _excluded = ["name", "escapedValue"],
|
|
10
|
+
_excluded2 = ["escapedValue", "value"];
|
|
11
|
+
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; }
|
|
12
|
+
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; }
|
|
13
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
14
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
15
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
16
16
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
17
|
-
|
|
18
17
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
19
|
-
|
|
20
|
-
var withUsage = (0, _index.createDocumentationMessageGenerator)({
|
|
18
|
+
var withUsage = (0, _utils.createDocumentationMessageGenerator)({
|
|
21
19
|
name: 'refinement-list',
|
|
22
20
|
connector: true
|
|
23
21
|
});
|
|
24
22
|
var DEFAULT_SORT = ['isRefined', 'count:desc', 'name:asc'];
|
|
25
|
-
|
|
26
23
|
/**
|
|
27
24
|
* **RefinementList** connector provides the logic to build a custom widget that
|
|
28
25
|
* will let the user filter the results based on the values of a specific facet.
|
|
@@ -36,87 +33,75 @@ var DEFAULT_SORT = ['isRefined', 'count:desc', 'name:asc'];
|
|
|
36
33
|
* - a `searchForItems()` function to search within the items.
|
|
37
34
|
*/
|
|
38
35
|
var connectRefinementList = function connectRefinementList(renderFn) {
|
|
39
|
-
var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
40
|
-
(0,
|
|
36
|
+
var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.noop;
|
|
37
|
+
(0, _utils.checkRendering)(renderFn, withUsage());
|
|
41
38
|
return function (widgetParams) {
|
|
42
39
|
var _ref = widgetParams || {},
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
40
|
+
attribute = _ref.attribute,
|
|
41
|
+
_ref$operator = _ref.operator,
|
|
42
|
+
operator = _ref$operator === void 0 ? 'or' : _ref$operator,
|
|
43
|
+
_ref$limit = _ref.limit,
|
|
44
|
+
limit = _ref$limit === void 0 ? 10 : _ref$limit,
|
|
45
|
+
_ref$showMore = _ref.showMore,
|
|
46
|
+
showMore = _ref$showMore === void 0 ? false : _ref$showMore,
|
|
47
|
+
_ref$showMoreLimit = _ref.showMoreLimit,
|
|
48
|
+
showMoreLimit = _ref$showMoreLimit === void 0 ? 20 : _ref$showMoreLimit,
|
|
49
|
+
_ref$sortBy = _ref.sortBy,
|
|
50
|
+
sortBy = _ref$sortBy === void 0 ? DEFAULT_SORT : _ref$sortBy,
|
|
51
|
+
_ref$escapeFacetValue = _ref.escapeFacetValues,
|
|
52
|
+
escapeFacetValues = _ref$escapeFacetValue === void 0 ? true : _ref$escapeFacetValue,
|
|
53
|
+
_ref$transformItems = _ref.transformItems,
|
|
54
|
+
transformItems = _ref$transformItems === void 0 ? function (items) {
|
|
55
|
+
return items;
|
|
56
|
+
} : _ref$transformItems;
|
|
61
57
|
if (!attribute) {
|
|
62
58
|
throw new Error(withUsage('The `attribute` option is required.'));
|
|
63
59
|
}
|
|
64
|
-
|
|
65
60
|
if (!/^(and|or)$/.test(operator)) {
|
|
66
61
|
throw new Error(withUsage("The `operator` must one of: `\"and\"`, `\"or\"` (got \"".concat(operator, "\").")));
|
|
67
62
|
}
|
|
68
|
-
|
|
69
63
|
if (showMore === true && showMoreLimit <= limit) {
|
|
70
64
|
throw new Error(withUsage('`showMoreLimit` should be greater than `limit`.'));
|
|
71
65
|
}
|
|
72
|
-
|
|
73
66
|
var formatItems = function formatItems(_ref2) {
|
|
74
67
|
var label = _ref2.name,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
value = _ref2.escapedValue,
|
|
69
|
+
item = _objectWithoutProperties(_ref2, _excluded);
|
|
78
70
|
return _objectSpread(_objectSpread({}, item), {}, {
|
|
79
71
|
value: value,
|
|
80
72
|
label: label,
|
|
81
73
|
highlighted: label
|
|
82
74
|
});
|
|
83
75
|
};
|
|
84
|
-
|
|
85
76
|
var lastResultsFromMainSearch;
|
|
86
77
|
var lastItemsFromMainSearch = [];
|
|
87
78
|
var hasExhaustiveItems = true;
|
|
88
79
|
var triggerRefine;
|
|
89
80
|
var sendEvent;
|
|
90
|
-
var isShowingMore = false;
|
|
81
|
+
var isShowingMore = false;
|
|
82
|
+
// Provide the same function to the `renderFn` so that way the user
|
|
91
83
|
// has to only bind it once when `isFirstRendering` for instance
|
|
92
|
-
|
|
93
84
|
var toggleShowMore = function toggleShowMore() {};
|
|
94
|
-
|
|
95
85
|
function cachedToggleShowMore() {
|
|
96
86
|
toggleShowMore();
|
|
97
87
|
}
|
|
98
|
-
|
|
99
88
|
function createToggleShowMore(renderOptions, widget) {
|
|
100
89
|
return function () {
|
|
101
90
|
isShowingMore = !isShowingMore;
|
|
102
91
|
widget.render(renderOptions);
|
|
103
92
|
};
|
|
104
93
|
}
|
|
105
|
-
|
|
106
94
|
function getLimit() {
|
|
107
95
|
return isShowingMore ? showMoreLimit : limit;
|
|
108
96
|
}
|
|
109
|
-
|
|
110
97
|
var searchForFacetValues = function searchForFacetValues() {
|
|
111
98
|
return function () {};
|
|
112
99
|
};
|
|
113
|
-
|
|
114
100
|
var createSearchForFacetValues = function createSearchForFacetValues(helper, widget) {
|
|
115
101
|
return function (renderOptions) {
|
|
116
102
|
return function (query) {
|
|
117
103
|
var instantSearchInstance = renderOptions.instantSearchInstance,
|
|
118
|
-
|
|
119
|
-
|
|
104
|
+
searchResults = renderOptions.results;
|
|
120
105
|
if (query === '' && lastItemsFromMainSearch) {
|
|
121
106
|
// render with previous data from the helper.
|
|
122
107
|
renderFn(_objectSpread(_objectSpread({}, widget.getWidgetRenderState(_objectSpread(_objectSpread({}, renderOptions), {}, {
|
|
@@ -126,19 +111,19 @@ var connectRefinementList = function connectRefinementList(renderFn) {
|
|
|
126
111
|
}), false);
|
|
127
112
|
} else {
|
|
128
113
|
var tags = {
|
|
129
|
-
highlightPreTag: escapeFacetValues ?
|
|
130
|
-
highlightPostTag: escapeFacetValues ?
|
|
114
|
+
highlightPreTag: escapeFacetValues ? _utils.TAG_PLACEHOLDER.highlightPreTag : _utils.TAG_REPLACEMENT.highlightPreTag,
|
|
115
|
+
highlightPostTag: escapeFacetValues ? _utils.TAG_PLACEHOLDER.highlightPostTag : _utils.TAG_REPLACEMENT.highlightPostTag
|
|
131
116
|
};
|
|
132
|
-
helper.searchForFacetValues(attribute, query,
|
|
117
|
+
helper.searchForFacetValues(attribute, query,
|
|
118
|
+
// We cap the `maxFacetHits` value to 100 because the Algolia API
|
|
133
119
|
// doesn't support a greater number.
|
|
134
120
|
// See https://www.algolia.com/doc/api-reference/api-parameters/maxFacetHits/
|
|
135
121
|
Math.min(getLimit(), 100), tags).then(function (results) {
|
|
136
|
-
var facetValues = escapeFacetValues ? (0,
|
|
122
|
+
var facetValues = escapeFacetValues ? (0, _utils.escapeFacets)(results.facetHits) : results.facetHits;
|
|
137
123
|
var normalizedFacetValues = transformItems(facetValues.map(function (_ref3) {
|
|
138
124
|
var escapedValue = _ref3.escapedValue,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
125
|
+
value = _ref3.value,
|
|
126
|
+
item = _objectWithoutProperties(_ref3, _excluded2);
|
|
142
127
|
return _objectSpread(_objectSpread({}, item), {}, {
|
|
143
128
|
value: escapedValue,
|
|
144
129
|
label: value
|
|
@@ -160,7 +145,6 @@ var connectRefinementList = function connectRefinementList(renderFn) {
|
|
|
160
145
|
};
|
|
161
146
|
};
|
|
162
147
|
};
|
|
163
|
-
|
|
164
148
|
return {
|
|
165
149
|
$$type: 'ais.refinementList',
|
|
166
150
|
init: function init(initOptions) {
|
|
@@ -180,29 +164,25 @@ var connectRefinementList = function connectRefinementList(renderFn) {
|
|
|
180
164
|
},
|
|
181
165
|
getWidgetRenderState: function getWidgetRenderState(renderOptions) {
|
|
182
166
|
var results = renderOptions.results,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
167
|
+
state = renderOptions.state,
|
|
168
|
+
_createURL = renderOptions.createURL,
|
|
169
|
+
instantSearchInstance = renderOptions.instantSearchInstance,
|
|
170
|
+
helper = renderOptions.helper;
|
|
187
171
|
var items = [];
|
|
188
172
|
var facetValues = [];
|
|
189
|
-
|
|
190
173
|
if (!sendEvent || !triggerRefine || !searchForFacetValues) {
|
|
191
|
-
sendEvent = (0,
|
|
174
|
+
sendEvent = (0, _utils.createSendEventForFacet)({
|
|
192
175
|
instantSearchInstance: instantSearchInstance,
|
|
193
176
|
helper: helper,
|
|
194
177
|
attribute: attribute,
|
|
195
178
|
widgetType: this.$$type
|
|
196
179
|
});
|
|
197
|
-
|
|
198
180
|
triggerRefine = function triggerRefine(facetValue) {
|
|
199
181
|
sendEvent('click', facetValue);
|
|
200
182
|
helper.toggleFacetRefinement(attribute, facetValue).search();
|
|
201
183
|
};
|
|
202
|
-
|
|
203
184
|
searchForFacetValues = createSearchForFacetValues(helper, this);
|
|
204
185
|
}
|
|
205
|
-
|
|
206
186
|
if (results) {
|
|
207
187
|
var values = results.getFacetValues(attribute, {
|
|
208
188
|
sortBy: sortBy,
|
|
@@ -213,24 +193,23 @@ var connectRefinementList = function connectRefinementList(renderFn) {
|
|
|
213
193
|
results: results
|
|
214
194
|
});
|
|
215
195
|
var maxValuesPerFacetConfig = state.maxValuesPerFacet;
|
|
216
|
-
var currentLimit = getLimit();
|
|
196
|
+
var currentLimit = getLimit();
|
|
197
|
+
// If the limit is the max number of facet retrieved it is impossible to know
|
|
217
198
|
// if the facets are exhaustive. The only moment we are sure it is exhaustive
|
|
218
199
|
// is when it is strictly under the number requested unless we know that another
|
|
219
200
|
// widget has requested more values (maxValuesPerFacet > getLimit()).
|
|
220
201
|
// Because this is used for making the search of facets unable or not, it is important
|
|
221
202
|
// to be conservative here.
|
|
222
|
-
|
|
223
203
|
hasExhaustiveItems = maxValuesPerFacetConfig > currentLimit ? facetValues.length <= currentLimit : facetValues.length < currentLimit;
|
|
224
204
|
lastResultsFromMainSearch = results;
|
|
225
205
|
lastItemsFromMainSearch = items;
|
|
226
|
-
|
|
227
206
|
if (renderOptions.results) {
|
|
228
207
|
toggleShowMore = createToggleShowMore(renderOptions, this);
|
|
229
208
|
}
|
|
230
|
-
}
|
|
231
|
-
// function
|
|
232
|
-
|
|
209
|
+
}
|
|
233
210
|
|
|
211
|
+
// Do not mistake searchForFacetValues and searchFacetValues which is the actual search
|
|
212
|
+
// function
|
|
234
213
|
var searchFacetValues = searchForFacetValues && searchForFacetValues(renderOptions);
|
|
235
214
|
var canShowLess = isShowingMore && lastItemsFromMainSearch.length > limit;
|
|
236
215
|
var canShowMore = showMore && !hasExhaustiveItems;
|
|
@@ -256,21 +235,17 @@ var connectRefinementList = function connectRefinementList(renderFn) {
|
|
|
256
235
|
var state = _ref4.state;
|
|
257
236
|
unmountFn();
|
|
258
237
|
var withoutMaxValuesPerFacet = state.setQueryParameter('maxValuesPerFacet', undefined);
|
|
259
|
-
|
|
260
238
|
if (operator === 'and') {
|
|
261
239
|
return withoutMaxValuesPerFacet.removeFacet(attribute);
|
|
262
240
|
}
|
|
263
|
-
|
|
264
241
|
return withoutMaxValuesPerFacet.removeDisjunctiveFacet(attribute);
|
|
265
242
|
},
|
|
266
243
|
getWidgetUiState: function getWidgetUiState(uiState, _ref5) {
|
|
267
244
|
var searchParameters = _ref5.searchParameters;
|
|
268
245
|
var values = operator === 'or' ? searchParameters.getDisjunctiveRefinements(attribute) : searchParameters.getConjunctiveRefinements(attribute);
|
|
269
|
-
|
|
270
246
|
if (!values.length) {
|
|
271
247
|
return uiState;
|
|
272
248
|
}
|
|
273
|
-
|
|
274
249
|
return _objectSpread(_objectSpread({}, uiState), {}, {
|
|
275
250
|
refinementList: _objectSpread(_objectSpread({}, uiState.refinementList), {}, _defineProperty({}, attribute, values))
|
|
276
251
|
});
|
|
@@ -284,12 +259,10 @@ var connectRefinementList = function connectRefinementList(renderFn) {
|
|
|
284
259
|
var currentMaxValuesPerFacet = withFacetConfiguration.maxValuesPerFacet || 0;
|
|
285
260
|
var nextMaxValuesPerFacet = Math.max(currentMaxValuesPerFacet, showMore ? showMoreLimit : limit);
|
|
286
261
|
var withMaxValuesPerFacet = withFacetConfiguration.setQueryParameter('maxValuesPerFacet', nextMaxValuesPerFacet);
|
|
287
|
-
|
|
288
262
|
if (!values) {
|
|
289
263
|
var key = isDisjunctive ? 'disjunctiveFacetsRefinements' : 'facetsRefinements';
|
|
290
264
|
return withMaxValuesPerFacet.setQueryParameters(_defineProperty({}, key, _objectSpread(_objectSpread({}, withMaxValuesPerFacet[key]), {}, _defineProperty({}, attribute, []))));
|
|
291
265
|
}
|
|
292
|
-
|
|
293
266
|
return values.reduce(function (parameters, value) {
|
|
294
267
|
return isDisjunctive ? parameters.addDisjunctiveFacetRefinement(attribute, value) : parameters.addFacetRefinement(attribute, value);
|
|
295
268
|
}, withMaxValuesPerFacet);
|
|
@@ -297,6 +270,5 @@ var connectRefinementList = function connectRefinementList(renderFn) {
|
|
|
297
270
|
};
|
|
298
271
|
};
|
|
299
272
|
};
|
|
300
|
-
|
|
301
273
|
var _default = connectRefinementList;
|
|
302
274
|
exports.default = _default;
|