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

fix(hierarchical): reset pagination to 0 when refining #243

Merged
merged 1 commit into from
Nov 2, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/SearchParameters/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1056,6 +1056,7 @@ SearchParameters.prototype = {
}

return this.setQueryParameters({
page: 0,
hierarchicalFacetsRefinements: defaults({}, mod, this.hierarchicalFacetsRefinements)
});
},
Expand Down
94 changes: 94 additions & 0 deletions test/spec/hierarchical-facets/pagination.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
'use strict';

var test = require('tape');

test('hierarchical facets: pagination', function(t) {
var algoliasearch = require('algoliasearch');
var sinon = require('sinon');
var isArray = require('lodash/lang/isArray');

var algoliasearchHelper = require('../../../');

var appId = 'hierarchical-toggleRefine-appId';
var apiKey = 'hierarchical-toggleRefine-apiKey';
var indexName = 'hierarchical-toggleRefine-indexName';

var client = algoliasearch(appId, apiKey);
var helper = algoliasearchHelper(client, indexName, {
hierarchicalFacets: [{
name: 'categories',
attributes: ['categories.lvl0', 'categories.lvl1', 'categories.lvl2', 'categories.lvl3']
}]
});

var search = sinon.stub(client, 'search');
helper.toggleRefine('categories', 'beers > IPA > Flying dog');

var algoliaResponse = {
'results': [{
'query': 'a',
'index': indexName,
'hits': [{'objectID': 'one'}],
'nbHits': 3,
'page': 0,
'nbPages': 1,
'hitsPerPage': 20,
'facets': {
'categories.lvl0': {'beers': 3, 'sales': 3},
'categories.lvl1': {'beers > IPA': 3, 'sales > IPA': 3},
'categories.lvl2': {'beers > IPA > Flying dog': 3, 'sales > IPA > Flying dog': 3}
}
}, {
'query': 'a',
'index': indexName,
'hits': [{'objectID': 'one'}],
'nbHits': 1,
'page': 0,
'nbPages': 1,
'hitsPerPage': 1,
'facets': {
'categories.lvl0': {'beers': 9},
'categories.lvl1': {'beers > IPA': 9},
'categories.lvl2': {
'beers > IPA > Flying dog': 3,
'sales > IPA > Flying dog': 3,
'beers > IPA > Brewdog punk IPA': 6
}
}
}, {
'query': 'a',
'index': indexName,
'hits': [{'objectID': 'one'}],
'nbHits': 1,
'page': 0,
'nbPages': 1,
'hitsPerPage': 1,
'facets': {
'categories.lvl0': {'beers': 20, 'fruits': 5, 'sales': 20}
}
}]
};

search.yieldsAsync(null, algoliaResponse);
helper.setQuery('');
helper.setCurrentPage(1);
helper.toggleRefine('categories', 'beers > IPA > Flying dog');
helper.search();

helper.once('result', function() {
var call = search.getCall(0);
var queries = call.args[0];
var hitsQuery = queries[0];

t.equal(hitsQuery.params.page, 0, 'Page is reset to 0');

// we do not yet support multiple values for hierarchicalFacetsRefinements
// but at some point we may want to open multiple leafs of a hierarchical menu
// So we set this as an array so that we do not have to bump major to handle it
t.ok(
isArray(helper.state.hierarchicalFacetsRefinements.categories),
'state.hierarchicalFacetsRefinements is an array'
);
t.end();
});
});