Skip to content

Instantly share code, notes, and snippets.

@francoislg
Created September 8, 2017 20:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save francoislg/bbbad4fb179c9f213addfd0979aa4a1d to your computer and use it in GitHub Desktop.
Save francoislg/bbbad4fb179c9f213addfd0979aa4a1d to your computer and use it in GitHub Desktop.
Coveo JavaScript Search Framework extension to add Tab count
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