@@ -84,6 +84,18 @@ const connectInfiniteHits: InfiniteHitsConnector = (
8484 const getShowMore = ( helper : Helper ) : ( ( ) => void ) => ( ) => {
8585 helper . setPage ( lastReceivedPage + 1 ) . search ( ) ;
8686 } ;
87+ const filterEmptyRefinements = ( refinements = { } ) => {
88+ return Object . keys ( refinements )
89+ . filter ( key =>
90+ Array . isArray ( refinements [ key ] )
91+ ? refinements [ key ] . length
92+ : Object . keys ( refinements [ key ] ) . length
93+ )
94+ . reduce ( ( obj , key ) => {
95+ obj [ key ] = refinements [ key ] ;
96+ return obj ;
97+ } , { } ) ;
98+ } ;
8799
88100 return {
89101 $$type : 'ais.infiniteHits' ,
@@ -131,7 +143,22 @@ const connectInfiniteHits: InfiniteHitsConnector = (
131143 // We're doing this to "reset" the widget if a refinement or the
132144 // query changes between renders, but we want to keep it as is
133145 // if we only change pages.
134- const { page = 0 , ...currentState } = state ;
146+ const {
147+ page = 0 ,
148+ hierarchicalFacets,
149+ disjunctiveFacets,
150+ ...currentState
151+ } = state ;
152+
153+ currentState . hierarchicalFacetsRefinements = filterEmptyRefinements (
154+ currentState . hierarchicalFacetsRefinements
155+ ) ;
156+ currentState . disjunctiveFacetsRefinements = filterEmptyRefinements (
157+ currentState . disjunctiveFacetsRefinements
158+ ) ;
159+ currentState . numericRefinements = filterEmptyRefinements (
160+ currentState . numericRefinements
161+ ) ;
135162
136163 if ( ! isEqual ( currentState , prevState ) ) {
137164 hitsCache = [ ] ;
@@ -230,7 +257,11 @@ const connectInfiniteHits: InfiniteHitsConnector = (
230257 ) ;
231258 }
232259
233- if ( hasShowPrevious && uiState . page ) {
260+ if ( ! hasShowPrevious ) {
261+ return widgetSearchParameters ;
262+ }
263+
264+ if ( uiState . page ) {
234265 // The page in the search parameters is decremented by one
235266 // to get to the actual parameter value from the UI state.
236267 return widgetSearchParameters . setQueryParameter (
0 commit comments