in process_api/cartridges/app_storefront_custom/cartridge/scripts/helpers/searchHelpers.js [92:183]
function search(req, res) {
var CatalogMgr = require('dw/catalog/CatalogMgr');
var URLUtils = require('dw/web/URLUtils');
var ProductSearchModel = require('dw/catalog/ProductSearchModel');
var pageMetaHelper = require('*/cartridge/scripts/helpers/pageMetaHelper');
var ProductSearch = require('*/cartridge/models/search/productSearch');
var reportingUrlsHelper = require('*/cartridge/scripts/reportingUrls');
var categoryTemplate = '';
var maxSlots = 4;
var productSearch;
var reportingURLs;
var apiProductSearch = res.getViewData().apiProductSearch;
if (!apiProductSearch) {
apiProductSearch = new ProductSearchModel();
}
var searchRedirect = req.querystring.q ? apiProductSearch.getSearchRedirect(req.querystring.q) : null;
if (searchRedirect) {
return {searchRedirect: searchRedirect.getLocation()};
}
apiProductSearch = setupSearch(apiProductSearch, req.querystring);
apiProductSearch.search();
if (!apiProductSearch.personalizedSort) {
applyCache(res);
}
categoryTemplate = getCategoryTemplate(apiProductSearch);
productSearch = new ProductSearch(
apiProductSearch,
req.querystring,
req.querystring.srule,
CatalogMgr.getSortingOptions(),
CatalogMgr.getSiteCatalog().getRoot()
);
pageMetaHelper.setPageMetaTags(req.pageMetaData, productSearch);
var refineurl = URLUtils.url('Search-Refinebar');
var whitelistedParams = ['q', 'cgid', 'pmin', 'pmax', 'srule'];
var isRefinedSearch = false;
Object.keys(req.querystring).forEach(function (element) {
if (whitelistedParams.indexOf(element) > -1) {
refineurl.append(element, req.querystring[element]);
}
if (['pmin', 'pmax'].indexOf(element) > -1) {
isRefinedSearch = true;
}
if (element === 'preferences') {
var i = 1;
isRefinedSearch = true;
Object.keys(req.querystring[element]).forEach(function (preference) {
refineurl.append('prefn' + i, preference);
refineurl.append('prefv' + i, req.querystring[element][preference]);
i++;
});
}
});
if (productSearch.searchKeywords !== null && !isRefinedSearch) {
reportingURLs = reportingUrlsHelper.getProductSearchReportingURLs(productSearch);
}
delete productSearch.productSort;
delete productSearch.productSearch;
delete productSearch.showMoreUrl;
delete productSearch.pageMetaTags;
delete productSearch.resetLink;
delete productSearch.bannerImageUrl;
var result = {
productSearch: productSearch,
maxSlots: maxSlots,
reportingURLs: reportingURLs,
refineurl: refineurl
};
if (productSearch.isCategorySearch && !productSearch.isRefinedCategorySearch
&& categoryTemplate
&& apiProductSearch.category.parent.ID === 'root') {
pageMetaHelper.setPageMetaData(req.pageMetaData, productSearch.category);
result.category = apiProductSearch.category;
result.categoryTemplate = categoryTemplate;
}
return result;
}