define(['jquery','uiComponent','underscore','mage/translate'],function($,Component,_){"use strict";return Component.extend({defaults:{template:"Smile_ElasticsuiteCatalog/attribute-filter",showMoreLabel:$.mage.__("Show more"),showLessLabel:$.mage.__("Show less"),noSearchResultLabel:$.mage.__("No value matching the search %s.")},initialize:function(){this._super();this.expanded=false;this.items=this.items.map(this.addItemId.bind(this));this.observe(['fulltextSearch','expanded']);var lastSelectedIndex=Math.max.apply(null,(this.items.map(function(v,k){return v['is_selected']?k:0;})));this.maxSize=Math.max(this.maxSize,lastSelectedIndex+1);this.initSearchPlaceholder();this.onShowLess();this.displaySearch=this.displayShowMore();},initSearchPlaceholder:function(){var examples=this.items.slice(0,2).map(function(item){return item.label});if(this.items.length>2){examples.push('...');} this.searchPlaceholder=$('
').html($.mage.__('Search (%s)').replace('%s',examples.join(', '))).text();},onSearchChange:function(component,ev){var text=ev.target.value;if(text.trim()===""){component.fulltextSearch(null);component.onShowLess();}else{component.fulltextSearch(text);component.onShowMore();} return true;},onSearchFocusOut:function(component,ev){var text=ev.target.value;if(text.trim()===""){component.fulltextSearch(null);ev.target.value="";}},loadAdditionalItems:function(callback){$.get(this.ajaxLoadUrl,function(data){this.items=data.map(this.addItemId.bind(this));this.hasMoreItems=false;if(callback){return callback();}}.bind(this));},getDisplayedItems:function(){var items=this.items;if(this.expanded()===false){items=this.items.slice(0,this.maxSize);} if(this.fulltextSearch()){var searchTokens=this.slugify(this.fulltextSearch()).split('-');var lastSearchToken=searchTokens.splice(-1,1)[0];items=items.filter(function(item){var isValidItem=true;var itemTokens=this.slugify(item.label).split('-');searchTokens.forEach(function(currentToken){if(itemTokens.indexOf(currentToken)===-1){isValidItem=false;}}) if(isValidItem&&lastSearchToken){var ngrams=itemTokens.map(function(token){return token.substring(0,lastSearchToken.length)});isValidItem=ngrams.indexOf(lastSearchToken)!==-1;} return isValidItem;}.bind(this))} return items;},hasSearchResult:function(){return this.getDisplayedItems().length>0},getSearchResultMessage:function(){return this.noSearchResultLabel.replace("%s",'"'+this.fulltextSearch()+'"')},onShowMore:function(){if(this.hasMoreItems){this.loadAdditionalItems(this.onShowMore.bind(this));}else{this.expanded(true);}},slugify:function(text){return text.toString().toLowerCase().replace(/\s+/g,'-').replace(/[^\w\u0400-\u052F\u2DE0-\u2DFF\uA640-\uA69F'\-]+/g,'').replace(/\-\-+/g,'-').replace(/^-+/,'')},onShowLess:function(){this.expanded(false);},enableExpansion:function(){return this.hasMoreItems||this.items.length>this.maxSize;},displayShowMore:function(){return this.enableExpansion()&&this.expanded()===false&&!this.fulltextSearch();},displayShowLess:function(){return this.enableExpansion()&&this.expanded()===true&&!this.fulltextSearch();},addItemId:function(item){item.id=_.uniqueId(this.index+"_option_");item.displayProductCount=this.displayProductCount&&(item.count>=1);return item;},});});