Skip to content
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit f0f2ca9

Browse files
author
Vincent Voyer
committed
Merge pull request #243 from algolia/fix-pagination-hierarchical
fix(hierarchical): reset pagination to 0 when refining
2 parents 89ba384 + e1193ef commit f0f2ca9

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

src/SearchParameters/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,6 +1056,7 @@ SearchParameters.prototype = {
10561056
}
10571057

10581058
return this.setQueryParameters({
1059+
page: 0,
10591060
hierarchicalFacetsRefinements: defaults({}, mod, this.hierarchicalFacetsRefinements)
10601061
});
10611062
},
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
'use strict';
2+
3+
var test = require('tape');
4+
5+
test('hierarchical facets: pagination', function(t) {
6+
var algoliasearch = require('algoliasearch');
7+
var sinon = require('sinon');
8+
var isArray = require('lodash/lang/isArray');
9+
10+
var algoliasearchHelper = require('../../../');
11+
12+
var appId = 'hierarchical-toggleRefine-appId';
13+
var apiKey = 'hierarchical-toggleRefine-apiKey';
14+
var indexName = 'hierarchical-toggleRefine-indexName';
15+
16+
var client = algoliasearch(appId, apiKey);
17+
var helper = algoliasearchHelper(client, indexName, {
18+
hierarchicalFacets: [{
19+
name: 'categories',
20+
attributes: ['categories.lvl0', 'categories.lvl1', 'categories.lvl2', 'categories.lvl3']
21+
}]
22+
});
23+
24+
var search = sinon.stub(client, 'search');
25+
helper.toggleRefine('categories', 'beers > IPA > Flying dog');
26+
27+
var algoliaResponse = {
28+
'results': [{
29+
'query': 'a',
30+
'index': indexName,
31+
'hits': [{'objectID': 'one'}],
32+
'nbHits': 3,
33+
'page': 0,
34+
'nbPages': 1,
35+
'hitsPerPage': 20,
36+
'facets': {
37+
'categories.lvl0': {'beers': 3, 'sales': 3},
38+
'categories.lvl1': {'beers > IPA': 3, 'sales > IPA': 3},
39+
'categories.lvl2': {'beers > IPA > Flying dog': 3, 'sales > IPA > Flying dog': 3}
40+
}
41+
}, {
42+
'query': 'a',
43+
'index': indexName,
44+
'hits': [{'objectID': 'one'}],
45+
'nbHits': 1,
46+
'page': 0,
47+
'nbPages': 1,
48+
'hitsPerPage': 1,
49+
'facets': {
50+
'categories.lvl0': {'beers': 9},
51+
'categories.lvl1': {'beers > IPA': 9},
52+
'categories.lvl2': {
53+
'beers > IPA > Flying dog': 3,
54+
'sales > IPA > Flying dog': 3,
55+
'beers > IPA > Brewdog punk IPA': 6
56+
}
57+
}
58+
}, {
59+
'query': 'a',
60+
'index': indexName,
61+
'hits': [{'objectID': 'one'}],
62+
'nbHits': 1,
63+
'page': 0,
64+
'nbPages': 1,
65+
'hitsPerPage': 1,
66+
'facets': {
67+
'categories.lvl0': {'beers': 20, 'fruits': 5, 'sales': 20}
68+
}
69+
}]
70+
};
71+
72+
search.yieldsAsync(null, algoliaResponse);
73+
helper.setQuery('');
74+
helper.setCurrentPage(1);
75+
helper.toggleRefine('categories', 'beers > IPA > Flying dog');
76+
helper.search();
77+
78+
helper.once('result', function() {
79+
var call = search.getCall(0);
80+
var queries = call.args[0];
81+
var hitsQuery = queries[0];
82+
83+
t.equal(hitsQuery.params.page, 0, 'Page is reset to 0');
84+
85+
// we do not yet support multiple values for hierarchicalFacetsRefinements
86+
// but at some point we may want to open multiple leafs of a hierarchical menu
87+
// So we set this as an array so that we do not have to bump major to handle it
88+
t.ok(
89+
isArray(helper.state.hierarchicalFacetsRefinements.categories),
90+
'state.hierarchicalFacetsRefinements is an array'
91+
);
92+
t.end();
93+
});
94+
});

0 commit comments

Comments
 (0)