Skip to content

Commit eed7e77

Browse files
samoussHaroenv
authored andcommitted
feat(connectPagination): update getWidgetSearchParameters (#4004)
* test(connectPagination): remove routing describe * refactor(connectPagination): sets default value with getWidgetSearchParameters * refactor(connectPagination): remove equality check
1 parent 8373529 commit eed7e77

File tree

3 files changed

+69
-134
lines changed

3 files changed

+69
-134
lines changed

src/connectors/pagination/__tests__/__snapshots__/connectPagination-test.js.snap

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/connectors/pagination/__tests__/connectPagination-test.js

Lines changed: 66 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,25 @@ import algoliasearchHelper, {
66
import connectPagination from '../connectPagination';
77

88
describe('connectPagination', () => {
9+
const getInitializedWidget = () => {
10+
const renderFn = jest.fn();
11+
const makeWidget = connectPagination(renderFn);
12+
const widget = makeWidget({});
13+
14+
const helper = algoliasearchHelper({}, '');
15+
helper.search = jest.fn();
16+
17+
widget.init({
18+
helper,
19+
state: helper.state,
20+
createURL: () => '#',
21+
});
22+
23+
const { refine } = renderFn.mock.calls[0][0];
24+
25+
return [widget, helper, refine];
26+
};
27+
928
describe('Usage', () => {
1029
it('throws without render function', () => {
1130
expect(() => {
@@ -361,113 +380,71 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/pagination/
361380
});
362381
});
363382

364-
describe('routing', () => {
365-
const getInitializedWidget = () => {
366-
const renderFn = jest.fn();
367-
const makeWidget = connectPagination(renderFn);
368-
const widget = makeWidget({});
383+
describe('getWidgetState', () => {
384+
test('returns the `uiState` emtpy', () => {
385+
const [widget, helper] = getInitializedWidget();
369386

370-
const helper = algoliasearchHelper({}, '');
371-
helper.search = jest.fn();
387+
const actual = widget.getWidgetState(
388+
{},
389+
{
390+
searchParameters: helper.state,
391+
helper,
392+
}
393+
);
372394

373-
widget.init({
374-
helper,
375-
state: helper.state,
376-
createURL: () => '#',
377-
});
395+
expect(actual).toEqual({});
396+
});
378397

379-
const { refine } = renderFn.mock.calls[0][0];
398+
test('returns the `uiState` with a refinement', () => {
399+
const [widget, helper] = getInitializedWidget();
380400

381-
return [widget, helper, refine];
382-
};
401+
helper.setQueryParameter('page', 4);
383402

384-
describe('getWidgetState', () => {
385-
test('should give back the object unmodified if the default value is selected', () => {
386-
const [widget, helper] = getInitializedWidget();
387-
const uiStateBefore = {};
388-
const uiStateAfter = widget.getWidgetState(uiStateBefore, {
403+
const actual = widget.getWidgetState(
404+
{},
405+
{
389406
searchParameters: helper.state,
390407
helper,
391-
});
408+
}
409+
);
392410

393-
expect(uiStateAfter).toBe(uiStateBefore);
411+
expect(actual).toEqual({
412+
page: 5, // page + 1
394413
});
414+
});
415+
});
395416

396-
test('should add an entry equal to the refinement', () => {
397-
const [widget, helper, refine] = getInitializedWidget();
398-
refine(4);
399-
const uiStateBefore = {};
400-
const uiStateAfter = widget.getWidgetState(uiStateBefore, {
401-
searchParameters: helper.state,
402-
helper,
403-
});
417+
describe('getWidgetSearchParameters', () => {
418+
test('returns the `SearchParameters` with the value from `uiState`', () => {
419+
const [widget, helper] = getInitializedWidget();
404420

405-
expect(uiStateAfter).toMatchSnapshot();
406-
});
407-
408-
test('should give back the object unmodified if refinements are already set', () => {
409-
const [widget, helper, refine] = getInitializedWidget();
410-
refine(4);
411-
const uiStateBefore = {
421+
const actual = widget.getWidgetSearchParameters(helper.state, {
422+
uiState: {
412423
page: 5,
413-
};
414-
const uiStateAfter = widget.getWidgetState(uiStateBefore, {
415-
searchParameters: helper.state,
416-
helper,
417-
});
418-
419-
expect(uiStateAfter).toBe(uiStateBefore);
424+
},
420425
});
426+
427+
expect(actual).toEqual(
428+
new SearchParameters({
429+
index: '',
430+
page: 4, // uiState.page - 1
431+
})
432+
);
421433
});
422434

423-
describe('getWidgetSearchParameters', () => {
424-
test('should return the same SP if there are no refinements in the UI state', () => {
425-
const [widget, helper] = getInitializedWidget();
426-
// The user presses back (browser), and the URL contains no parameters
427-
const uiState = {};
428-
// The current state is empty (and page is set to 0 by default)
429-
const searchParametersBefore = SearchParameters.make(helper.state);
430-
const searchParametersAfter = widget.getWidgetSearchParameters(
431-
searchParametersBefore,
432-
{ uiState }
433-
);
434-
// Applying the same values should not return a new object
435-
expect(searchParametersAfter).toBe(searchParametersBefore);
436-
});
435+
test('returns the `SearchParameters` with the default value', () => {
436+
const [widget, helper] = getInitializedWidget();
437437

438-
test('should enforce the default value if no value is in the UI State', () => {
439-
const [widget, helper, refine] = getInitializedWidget();
440-
// The user presses back (browser), and the URL contains no parameters
441-
const uiState = {};
442-
// The current state is set to page 4
443-
refine(4);
444-
const searchParametersBefore = SearchParameters.make(helper.state);
445-
const searchParametersAfter = widget.getWidgetSearchParameters(
446-
searchParametersBefore,
447-
{ uiState }
448-
);
449-
// Applying an empty state, should force back to page 0
450-
expect(searchParametersAfter).toMatchSnapshot();
451-
expect(searchParametersAfter.page).toBeUndefined();
438+
const actual = widget.getWidgetSearchParameters(helper.state, {
439+
uiState: {},
452440
});
453441

454-
test('should add the refinements according to the UI state provided', () => {
455-
const [widget, helper, refine] = getInitializedWidget();
456-
// The user presses back (browser), and the URL contains some parameters
457-
const uiState = {
458-
page: 2,
459-
};
460-
// The current search is set to page 10
461-
refine(10);
462-
const searchParametersBefore = SearchParameters.make(helper.state);
463-
const searchParametersAfter = widget.getWidgetSearchParameters(
464-
searchParametersBefore,
465-
{ uiState }
466-
);
467-
// Applying a state with new parameters should apply them on the search
468-
expect(searchParametersAfter).toMatchSnapshot();
469-
expect(searchParametersAfter.page).toBe(1);
470-
});
442+
expect(actual).toEqual(
443+
new SearchParameters({
444+
index: '',
445+
page: 0,
446+
})
447+
);
471448
});
472449
});
473450
});

src/connectors/pagination/connectPagination.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ export default function connectPagination(renderFn, unmountFn = noop) {
169169
getWidgetState(uiState, { searchParameters }) {
170170
const page = searchParameters.page || 0;
171171

172-
if (page === 0 || page + 1 === uiState.page) {
172+
if (!page) {
173173
return uiState;
174174
}
175175

@@ -180,13 +180,9 @@ export default function connectPagination(renderFn, unmountFn = noop) {
180180
},
181181

182182
getWidgetSearchParameters(searchParameters, { uiState }) {
183-
const uiPage = uiState.page;
183+
const page = uiState.page ? uiState.page - 1 : 0;
184184

185-
if (uiPage) {
186-
return searchParameters.setQueryParameter('page', uiState.page - 1);
187-
}
188-
189-
return searchParameters.setQueryParameter('page', undefined);
185+
return searchParameters.setQueryParameter('page', page);
190186
},
191187
};
192188
};

0 commit comments

Comments
 (0)