Skip to content

Commit 150a94b

Browse files
committed
support sortOptions in array
1 parent 890526c commit 150a94b

File tree

3 files changed

+40
-12
lines changed

3 files changed

+40
-12
lines changed

src/apifetch.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@ var executeApiFetch = function(apiHostname, sitekey, type, settings, cb, fuzzyRe
7575
settingToQueryParam(settings.dateTo, 'dateTo') +
7676
settingToQueryParam(settings.paging.page, 'page') +
7777
settingToQueryParam(settings.paging.pageSize, 'limit') +
78-
settingToQueryParam(settings.paging.sortBy, 'sort') +
79-
settingToQueryParam(settings.paging.sortOrder, 'order') +
8078
settingToQueryParam(settings.shuffleAndLimitTo, 'shuffleAndLimitTo') +
8179
settingToQueryParam(settings.jwt, 'jwt') +
8280
settingToQueryParam(settings.resultType, 'resultType') +
@@ -87,6 +85,17 @@ var executeApiFetch = function(apiHostname, sitekey, type, settings, cb, fuzzyRe
8785
settingToQueryParam(settings.analyticsTag, 'analyticsTag') +
8886
settingToQueryParam(settings.hierarchicalFacetSetting, 'hierarchicalFacets');
8987

88+
// Add sortBy and sortOrder
89+
if (Array.isArray(settings.paging.sortBy)) {
90+
settings.paging.sortBy.forEach(function(value, index) {
91+
qs = qs + settingToQueryParam(value, 'sort') +
92+
settingToQueryParam(settings.paging.sortOrder[index], 'order');
93+
});
94+
} else {
95+
qs = qs + settingToQueryParam(settings.paging.sortBy, 'sort') +
96+
settingToQueryParam(settings.paging.sortOrder, 'order');
97+
}
98+
9099
// Add custom field filters
91100
if (settings.customFieldFilters) {
92101
for (let i = 0; i < settings.customFieldFilters.length; i++) {

src/settings.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22

3+
var util = require('./util');
34
var settings = function() {
45
this.settings = {
56
keyword: '*',
@@ -193,15 +194,7 @@ var settings = function() {
193194

194195
this.setPaging = function(page, pageSize, sortBy, sortOrder) {
195196
// Validate
196-
if (page < 1) {
197-
throw "page must be 1 or bigger";
198-
}
199-
if (pageSize < 1 || pageSize > 300) {
200-
throw "pageSize must be 1-300";
201-
}
202-
if (sortOrder !== 'asc' && sortOrder !== 'desc') {
203-
throw "sortOrder must be asc or desc";
204-
}
197+
util.validateSetPagingParams(page, pageSize, sortBy, sortOrder);
205198

206199
this.settings.paging.page = page;
207200
this.settings.paging.pageSize = pageSize;

src/util.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,33 @@ const base64 = function(s) {
1414
}
1515
}
1616

17+
const validateSetPagingParams = function(page, pageSize, sortBy, sortOrder) {
18+
if (page < 1) {
19+
throw "page must be 1 or bigger";
20+
}
21+
if (pageSize < 1 || pageSize > 300) {
22+
throw "pageSize must be 1-300";
23+
}
24+
if (!sortBy || !sortOrder) {
25+
throw "invalid values for sortBy or sortOrder: " + sortBy + ", " + sortOrder;
26+
}
27+
if (!((typeof sortBy == 'string' && typeof sortOrder == 'string') || (Array.isArray(sortBy) && Array.isArray(sortOrder)))) {
28+
throw "sortBy and sortOrder must have the same type: string or Array";
29+
}
30+
if (Array.isArray(sortBy) && sortBy.length !== sortOrder.length) {
31+
throw "sortBy and sortOrder must have the same size";
32+
}
33+
if (typeof sortOrder == 'string' && sortOrder !== 'asc' && sortOrder !== 'desc') {
34+
throw "sortOrder must be asc or desc";
35+
}
36+
if (Array.isArray(sortOrder) &&
37+
sortOrder.filter(function(e) {return e !== 'desc' && e!=='asc'}).length > 0) {
38+
throw "all values of sortOrder array must be asc or desc";
39+
}
40+
}
41+
1742
module.exports = {
1843
isFunction,
19-
base64
44+
base64,
45+
validateSetPagingParams: validateSetPagingParams
2046
}

0 commit comments

Comments
 (0)