Skip to content

Commit 1077340

Browse files
Yannick CroissantHaroenv
authored andcommitted
fix(connectInfiniteHits): fix page state when adding or removing widgets (#4104)
1 parent 079db57 commit 1077340

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

src/connectors/infinite-hits/connectInfiniteHits.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)