Skip to content

Commit 40b27b6

Browse files
author
Eunjae Lee
authoredApr 8, 2021
fix(infiniteHits): fix wrong behavior of showPrevious regarding cachedHits (#4725)
1 parent 1d0d87c commit 40b27b6

File tree

2 files changed

+48
-12
lines changed

2 files changed

+48
-12
lines changed
 

‎src/connectors/infinite-hits/__tests__/connectInfiniteHits-test.ts

+32
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,38 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/infinite-hi
255255
expect(thirdRenderOptions.results).toEqual(previousResults);
256256
});
257257

258+
it('Renders previous page after showing next page', () => {
259+
const renderFn = jest.fn();
260+
const makeWidget = connectInfiniteHits(renderFn);
261+
const widget = makeWidget({});
262+
263+
const helper = algoliasearchHelper(createSearchClient(), '', {});
264+
helper.setPage(4);
265+
helper.overrideStateWithoutTriggeringChangeEvent = jest.fn(() => helper);
266+
helper.searchWithoutTriggeringOnStateChange = jest.fn();
267+
268+
widget.init!(
269+
createInitOptions({
270+
state: helper.state,
271+
helper,
272+
})
273+
);
274+
275+
const { showMore, showPrevious } = widget.getWidgetRenderState(
276+
createRenderOptions({
277+
state: helper.state,
278+
helper,
279+
})
280+
);
281+
showMore();
282+
expect(helper.state.page).toBe(5);
283+
284+
showPrevious();
285+
expect(
286+
helper.overrideStateWithoutTriggeringChangeEvent
287+
).toHaveBeenCalledWith(expect.objectContaining({ page: 3 }));
288+
});
289+
258290
it('Provides the hits and flush hists cache on query changes', () => {
259291
const renderFn = jest.fn();
260292
const makeWidget = connectInfiniteHits(renderFn);

‎src/connectors/infinite-hits/connectInfiniteHits.ts

+16-12
Original file line numberDiff line numberDiff line change
@@ -188,25 +188,29 @@ const connectInfiniteHits: InfiniteHitsConnector = function connectInfiniteHits(
188188
}
189189
};
190190

191-
const getShowPrevious = (
192-
helper: Helper,
193-
cachedHits: InfiniteHitsCachedHits
194-
): (() => void) => () => {
191+
const getShowPrevious = (helper: Helper): (() => void) => () => {
195192
// Using the helper's `overrideStateWithoutTriggeringChangeEvent` method
196193
// avoid updating the browser URL when the user displays the previous page.
197194
helper
198195
.overrideStateWithoutTriggeringChangeEvent({
199196
...helper.state,
200-
page: getFirstReceivedPage(helper.state, cachedHits) - 1,
197+
page:
198+
getFirstReceivedPage(
199+
helper.state,
200+
cache.read({ state: helper.state }) || {}
201+
) - 1,
201202
})
202203
.searchWithoutTriggeringOnStateChange();
203204
};
204-
const getShowMore = (
205-
helper: Helper,
206-
cachedHits: InfiniteHitsCachedHits
207-
): (() => void) => () => {
205+
206+
const getShowMore = (helper: Helper): (() => void) => () => {
208207
helper
209-
.setPage(getLastReceivedPage(helper.state, cachedHits) + 1)
208+
.setPage(
209+
getLastReceivedPage(
210+
helper.state,
211+
cache.read({ state: helper.state }) || {}
212+
) + 1
213+
)
210214
.search();
211215
};
212216

@@ -252,8 +256,8 @@ const connectInfiniteHits: InfiniteHitsConnector = function connectInfiniteHits(
252256
const cachedHits = cache.read({ state }) || {};
253257

254258
if (!results) {
255-
showPrevious = getShowPrevious(helper, cachedHits);
256-
showMore = getShowMore(helper, cachedHits);
259+
showPrevious = getShowPrevious(helper);
260+
showMore = getShowMore(helper);
257261
sendEvent = createSendEventForHits({
258262
instantSearchInstance,
259263
index: helper.getIndex(),

0 commit comments

Comments
 (0)
Please sign in to comment.