Created
September 8, 2017 20:46
-
-
Save francoislg/bbbad4fb179c9f213addfd0979aa4a1d to your computer and use it in GitHub Desktop.
Coveo JavaScript Search Framework extension to add Tab count
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Coveo.activateTabCount = (function(searchInterfaceElement, onTabCountResolved) { | |
var searchInterfaceDom = Coveo.$$(searchInterfaceElement); | |
var tabGroupBys = []; | |
searchInterfaceDom.on(Coveo.QueryEvents.doneBuildingQuery, function(event, args) { | |
tabGroupBys = []; | |
var allTabs = searchInterfaceDom.findAll(".CoveoTab").map(function(tabDom) { | |
return Coveo.get(tabDom, Coveo.Tab); | |
}); | |
var allTabsExpressions = allTabs.map(function(tab) { | |
return tab.options.expression; | |
}); | |
allTabs.forEach(function(tab) { | |
var groupByIndex = args.queryBuilder.groupByRequests.length; | |
var tabExpression = new Coveo.ExpressionBuilder(); | |
tabExpression.add(tab.options.expression || "@uri"); | |
var expressionsWithoutTabExpression = args.queryBuilder.advancedExpression.parts.filter(function(part) { | |
return allTabsExpressions.indexOf(part) === -1; | |
}); | |
var advancedExpression = new Coveo.ExpressionBuilder(); | |
tabExpression.add(expressionsWithoutTabExpression.join(" ")); | |
var tabQuery = Coveo.ExpressionBuilder.merge(args.queryBuilder.expression, advancedExpression, args.queryBuilder.constantExpression, tabExpression).build(); | |
var tabRequest = { | |
field: '@syssource', | |
maximumNumberOfValues: 16, | |
sortCriteria: "nosort", | |
injectionDepth: 1000, | |
completeFacetWithStandardValues: true, | |
queryOverride: tabQuery | |
}; | |
args.queryBuilder.groupByRequests.push(tabRequest); | |
tabGroupBys.push({ | |
index: groupByIndex, | |
element: tab.element, | |
originalText: tab.options.caption | |
}); | |
}); | |
}); | |
searchInterfaceDom.on(Coveo.QueryEvents.querySuccess, function(event, args) { | |
tabGroupBys.forEach(function(groupBy) { | |
onTabCountResolved({ | |
count: countTotalForGroupByResult(args.results.groupByResults[groupBy.index]), | |
element: groupBy.element, | |
originalText: groupBy.originalText | |
}); | |
}); | |
}); | |
function countTotalForGroupByResult(groupByResult) { | |
var totalCount = 0; | |
for (var i = 0; i < groupByResult.values.length; i++) { | |
totalCount += groupByResult.values[i].numberOfResults; | |
} | |
return totalCount; | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment