import BaseComponent from "../../base-component";
import Settings from "../../../helpers/settings";
/**
* Instant search result item
* @extends BaseComponent
*/
class InstantSearchResultItem extends BaseComponent {
/**
* Build highlight for instant search result label
* @param {*} resultItem
* @param {*} searchTerm
*/
_highlightSuggestionResult(resultItem, searchTerm) {
if (Settings.getSettingValue('search.highlightSuggestionResult') && searchTerm.length > 1 && resultItem) {
function createRegex(str) {
return new RegExp(str.replace(/([\(\)\{\}\[\]\.\+\-\=\\\/])/g, '\\$&'), 'ig');
}
// Find words that are the same with the Search term
var termElements = searchTerm.split(' ');
var i;
var termElementsLength = termElements.length;
for (i = 0; i < termElementsLength; i++) {
// Escape the following characters: ( ) { } and .
var reg = createRegex(termElements[i]);
var foundWords = resultItem.match(reg);
if (foundWords !== null && foundWords.length > 0) {
// Remove duplicate values
foundWords = foundWords.filter(function(item, pos) {
return foundWords.indexOf(item) == pos && item != '';
})
// Highlight the above words
var k;
var foundWordsLength = foundWords.length;
for (k = 0; k < foundWordsLength; k++) {
if (foundWords[k].length > 1) {
var reg = createRegex(foundWords[k]);
resultItem = resultItem.replace(reg, '<b>' + foundWords[k] + '</b>');
}
}
}
}
}
return resultItem;
};
}
export default InstantSearchResultItem;