var SearchComponent = class SearchComponent { constructor(idInstance, events, venues, categories, inputId, resultsId, closeFunction, isFullSize) { this.idInstance = idInstance; this.eventsSearchJson = events; this.venuesSearchJson = venues; this.categorySearchJson = categories; this.statesHeaderJson = this.getStatesOfEvents(events); this.citiesHeaderJson = this.getCitiesOfEvents(events); this.inputId = inputId; this.resultsId = resultsId; this.closeFunction = closeFunction; this.isFullSize = isFullSize; } getStatesOfEvents(events) { var statesArray = new Array(); if(events != null && events.length > 0) { for (var j=0; j < events.length; j++) { var eventItem = events[j]; if(!statesArray.includes(eventItem.prR)) { statesArray.push(eventItem.prR); } } return statesArray; } return null; } getCitiesOfEvents(events) { var citiesArray = new Array(); if(events != null && events.length > 0) { for (var j=0; j < events.length; j++) { var eventItem = events[j]; if(!citiesArray.includes(eventItem.pbR)) { citiesArray.push(eventItem.pbR); } } return citiesArray; } return null; } searchBoxTyping(e) { var resultList = $(".result-header-searcher .item-search-header"); var selected = $(".result-header-searcher .selected"); $(".item-search-header.selected").removeClass("selected"); if (e.key == "Enter") { //selected? if(selected != null && selected.length > 0) { var urlResult = selected.data("url"); window.location.href = urlBase + urlResult; return false; } else { var textName = encodeURIComponent(document.getElementById(this.inputId).value); window.location.href = urlBase + 'search?text='+textName; return false; } } if (e.key == "Escape") { this.renderSearchResults(null); if(this.isFullSize != null && this.isFullSize == true) { this.closeSearch(); } } else if(e.key == "ArrowUp") // up { if (selected != undefined && selected != null) { if (selected.prev().length == 0) { $(".result-header-searcher .item-search-header:last").addClass("selected"); } else { if(selected.prev().hasClass("item-search-header")) { selected.prev().addClass("selected"); } else { selected.prev().prev().addClass("selected"); } } } } else if(e.key == "ArrowDown") // down { if (selected != undefined && selected != null) { if(selected.prev().length == 0) { $(".result-header-searcher .item-search-header:first").addClass("selected"); } else { if(selected.next().hasClass("item-search-header")) { selected.next().addClass("selected"); } else { selected.next().next().addClass("selected"); } } } } else { var results = null; var textName = encodeURIComponent(document.getElementById(this.inputId).value); var keyword = textoBuscar(textName).toLowerCase(); if(keyword != null && keyword != "" && keyword.length > 1) { results = this.searchText(keyword); } else { results = this.searchText(null, true); } this.renderSearchResults(results); } } sendSearchText(){ var textName = encodeURIComponent(document.getElementById(this.inputId).value); window.location.href = urlBase + 'search?text='+ (textName); return false; } showPreviewSearchResults() { var results = null; var textInput = encodeURIComponent(document.getElementById(this.inputId).value); var keyword = textoBuscar(textInput).toLowerCase(); if(keyword != null && keyword != "" && keyword.length > 1) { results = this.searchText(keyword); } else { results = this.searchText(null, true); } this.renderSearchResults(results); } hidePreview(event) { if(event != null && event.relatedTarget != null && event.relatedTarget.tagName != null) { if(event.relatedTarget.tagName == 'BUTTON' || event.relatedTarget.tagName == 'A') { var href = event.relatedTarget.href; window.location = href; return; } } this.renderSearchResults(null); } searchText(keyword, showCategoriesPreview) { var results = { history: [], dictionary: [], events: [], venues: [], states: [], cities: [], tags: [] } if(keyword != null && keyword != "") { //EVENTS if(this.eventsSearchJson != null && this.eventsSearchJson.length > 0) { var eventsArray = new Array(); for (var j=0; j < this.eventsSearchJson.length; j++) { var event = this.eventsSearchJson[j]; var objName = textoBuscar(getObjNameMultiLang(OBJ_TYPES_MULTILNG.EVENTS, event.idE)).toLowerCase(); if(keyword.length < 1 || objName.indexOf(keyword) > -1) { eventsArray.push(event); } } results.events = eventsArray; } //VENUES if(this.venuesSearchJson != null && this.venuesSearchJson.length > 0) { var venuesArray = new Array(); for (var j=0; j < this.venuesSearchJson.length; j++) { var venue = this.venuesSearchJson[j]; var objName = textoBuscar(venue.valor).toLowerCase(); if(keyword.length < 1 || objName.indexOf(keyword) > -1) { //IF THE PARENT VENUE IS ALREADY ADDED THE CHILD VENUE WILL NOT BE ADDED TOO if(venue.parentVenueId != null && venuesArray.filter(v => v.id == venue.parentVenueId || v.parentVenueId == venue.parentVenueId).length != 0) { continue; } //CHILDREN VENUES OF THE CURRENT PARENT VENUE CONTAINED IN THE ARRAY ARE REPLACED BY THE PARENT VENUE else if(venue.parentVenueId == null && venuesArray.filter(v => v.parentVenueId == venue.id).length != 0) { venuesArray = venuesArray.filter(v => v.parentVenueId != venue.id); } venuesArray.push(venue); } } results.venues = venuesArray; } //STATES if(this.statesHeaderJson != null && this.statesHeaderJson.length > 0) { var statesArray = new Array(); for (var j=0; j < this.statesHeaderJson.length; j++) { var stateItem = this.statesHeaderJson[j]; var objName = textoBuscar(stateItem).toLowerCase(); if(keyword.length > 0 && objName.indexOf(keyword) != -1) { statesArray.push(stateItem); } } results.states = statesArray; } //CITIES if(this.citiesHeaderJson != null && this.citiesHeaderJson.length > 0) { var citiesArray = new Array(); for (var j=0; j < this.citiesHeaderJson.length; j++) { var cityItem = this.citiesHeaderJson[j]; var objName = textoBuscar(cityItem).toLowerCase(); if(keyword.length > 0 && objName.indexOf(keyword) != -1) { citiesArray.push(cityItem); } } results.cities = citiesArray; } //CATEGORIES if(this.categorySearchJson != null && this.categorySearchJson.length > 0) { var categoriesArray = new Array(); for(var f = 0; f < this.categorySearchJson.length; f++) { var objCategory = this.categorySearchJson[f]; var nameTag = textoBuscar(objCategory.litTag).toLowerCase(); if(keyword.length > 0 && nameTag.indexOf(keyword) != -1) { categoriesArray.push(objCategory); } } results.tags = categoriesArray; } } else { //PREVIEW if(showCategoriesPreview) { if(this.categorySearchJson != null && this.categorySearchJson.length > 0) { var categoriesArray = new Array(); for(var f = 0; f < this.categorySearchJson.length; f++) { var objCategory = this.categorySearchJson[f]; categoriesArray.push(objCategory); } results.tags = categoriesArray; } } } return results; } renderSearchResults(resultList) { var code = ''; if(resultList != null) { //events let rEvents = resultList.events; if(rEvents != null && rEvents.length > 0) { code += this.renderEvents_header(); for(var e = 0; e < rEvents.length; e++) { var itemEv = rEvents[e]; code += this.renderEvent_result(itemEv); } } //venues let rVenues = resultList.venues; if(rVenues != null && rVenues.length > 0) { code += this.renderVenues_header(); for(var e = 0; e < rVenues.length; e++) { var itemVe = rVenues[e]; code += this.renderVenue_result(itemVe); } } //categories let rTags = resultList.tags; if(rTags != null && rTags.length > 0) { code += this.renderTags_header(); for(var e = 0; e < rTags.length; e++) { var itemVe = rTags[e]; code += this.renderTag_result(itemVe); } } //states let rStates = resultList.states; if(rStates != null && rStates.length > 0) { code += this.renderStates_header(); for(var e = 0; e < rStates.length; e++) { var itemSt = rStates[e]; code += this.renderState_result(itemSt); } } //cities let rCities = resultList.cities; if(rCities != null && rCities.length > 0) { code += this.renderCities_header(); for(var e = 0; e < rCities.length; e++) { var itemSt = rCities[e]; code += this.renderCity_result(itemSt); } } let resultIdComponent = this.resultsId; setTimeout(function(){ document.getElementById(resultIdComponent).innerHTML = code; }, 100); } else { let resultIdComponent = this.resultsId; document.getElementById(resultIdComponent).innerHTML = ""; } } renderEvents_header() { var code = ""; code += "