define(['ko',"jquery",'mage/translate','Magento_Ui/js/modal/modal','matchMedia','mage/accordion','jquery-ui-modules/widget','jquery-ui-modules/slider'],function(ko,$,$t,modal,mediaCheck){"use strict";$.widget("mage.filtersManager",{body:null,modal:null,useApplyButtonActive:false,options:{title:null,useApplyButton:true,useApplyButtonDesktop:true,useAjax:false,stickActions:false,activeFilters:true,activeFiltersDesktop:false,allowMultiselect:false},_create:function(){this.body=$('body');if($('body').is('.page-layout-category-configurable-columns.page-layout-1column')){$('.products-wrapper-container .toolbar-products').first().appendTo($('#products-sticky-actions .products-sticky-actions-content'));$('.products-wrapper-container').addClass('toolbar-wrapped');} this.initModal();if(this.options.useApplyButton||this.options.useAjax){this.initButtonBindings();} this.initCollapsibleFilters();this.stickActions();this.element.addClass('filters-manager-initialized');},stickActions:function(){if(this.options.stickActions){$('#products-sticky-actions').mage('stickyElement',{stickyContainerSelector:' .products-sticky-actions-container',bodyClass:'category-actions-sticky',mobileOffsetTopSelector:'#layered-filter-block',mobileSetTopFromSelector:'.header-sticky-container.sticky',desktopSetTopFromSelector:'.header-sticky-container.sticky'});}},initModal:function(){var popupOptions={type:"custom",title:(this.options.title)?this.options.title:$t('Shopping Options'),modalClass:"filters-popup filters-type-"+this.options.type,trigger:"[data-role=filters-trigger]",wrapperClass:"filters-wrapper",parentModalClass:"_has-modal-custom _has-filter-shown",responsive:true,responsiveClass:"custom-slide",appendTo:'#filters-popup-container',bodyStateClass:'modal-open filters-active _has-modal-custom',overlayClass:"dropdown-overlay modal-custom-overlay",modalCloseBtn:'[data-role="closeBtn"], .modal-header [data-role="title"]',buttons:[]};if(this.options.type=='slide'){popupOptions.type='slide';popupOptions.useRight=true;popupOptions.useRightDesktop=false;popupOptions.bodyStateClass='modal-open filters-active _has-modal-slide';delete popupOptions.responsiveClass;delete popupOptions.overlayClass;} if(this.options.useApplyButton){popupOptions.modalCloseBtnHandler=this.modalCloseBtnHandler.bind(this);var $this=this;popupOptions.buttons=[{text:$t('Cancel'),class:'action-secondary action-cancel',click:function(event){this.closeModal(event);$this.resetFilters();}},{text:$t('Apply'),class:'action-primary action-apply',click:function(event){this.closeModal(event,true);$this.applyFilters();}}];} this.modal=modal(popupOptions,$('#filters-popup-content'));},initCollapsibleFilters:function(){if(this.options.activeFilters!==this.options.activeFiltersDesktop){mediaCheck({media:'(min-width: 768px)',entry:function(){this.collapseFilters(this.options.activeFiltersDesktop);}.bind(this),exit:function(){this.collapseFilters(this.options.activeFilters);}.bind(this)});}else{this.collapseFilters(this.options.activeFilters);}},collapseFilters:function(active){let activeItems=[];if(active){this.element.find('#narrow-by-list').children().each(function(i,elem){activeItems.push(i)});} if(this.element.find('#narrow-by-list').data('mageAccordion')){this.element.find('#narrow-by-list').accordion('destroy');} this.element.find('#narrow-by-list').mage('accordion',{openedState:"active",collapsible:true,multipleCollapsible:true,active:activeItems});},initButtonBindings:function(){if($('#narrow-by-list').length&&this.options.useApplyButton){if(!this.options.useApplyButtonDesktop){mediaCheck({media:'(min-width: 768px)',entry:function(){this.useApplyButtonActive=false;this.modalCloseBtnHandler();this.element.removeClass('filter-apply-button');}.bind(this),exit:function(){this.useApplyButtonActive=true;this.element.addClass('filter-apply-button');}.bind(this)});this.useApplyButtonActive=!matchMedia("screen and (min-width:768px)").matches;}else{this.useApplyButtonActive=true;} if(this.useApplyButtonActive){this.element.addClass('filter-apply-button');}} $('.filter-options-item:not(.cat)').on('click','.item a',function(event){if(this.useApplyButtonActive){let element=$(event.currentTarget);if(element.find('input[type=checkbox]').length){event.preventDefault();if(this.options.allowMultiselect){element.toggleClass('pending-apply-selected');element.find('input[type=checkbox]').prop('checked',!element.find('input[type=checkbox]').prop('checked'))}else{let wasSelected=element.find('input[type=checkbox]').prop('checked');element.closest('.filter-options-item').find('.pending-apply-selected').removeClass('pending-apply-selected');element.closest('.filter-options-item').find('input[type=checkbox]').prop('checked',false) if(!wasSelected){element.addClass('pending-apply-selected');element.find('input[type=checkbox]').prop('checked',true);}}}}else{if(this.options.useAjax){event.preventDefault();let element=$(event.currentTarget);if(this.options.allowMultiselect){element.find('input[type=checkbox]').prop('checked',!element.find('input[type=checkbox]').prop('checked'))}else{let wasSelected=element.find('input[type=checkbox]').prop('checked');element.closest('.filter-options-item').find('input[type=checkbox]').prop('checked',false) if(!wasSelected){element.find('input[type=checkbox]').prop('checked',true);}} this.filterItemByAjax(event,element);}}}.bind(this));$('.filter-options-item .swatch-attribute-options').on('click','a',function(event){if(this.useApplyButtonActive){event.preventDefault();let element=$(event.currentTarget);if(element.find('.swatch-option').length){if(this.options.allowMultiselect){element.toggleClass('pending-apply-selected') element.find('.swatch-option').toggleClass('selected');}else{let wasSelected=element.find('.swatch-option').hasClass('selected');element.closest('.swatch-attribute-options').find('a.pending-apply-selected').removeClass('pending-apply-selected') element.closest('.swatch-attribute-options').find('.swatch-option').removeClass('selected');if(!wasSelected){element.addClass('pending-apply-selected') element.find('.swatch-option').addClass('selected');}}}}else{if(this.options.useAjax){event.preventDefault();let element=$(event.currentTarget);if(this.options.allowMultiselect){element.find('.swatch-option').toggleClass('selected');}else{let wasSelected=element.find('.swatch-option').hasClass('selected');element.closest('.swatch-attribute-options').find('.swatch-option').removeClass('selected');if(!wasSelected){element.find('.swatch-option').addClass('selected');}} this.filterItemByAjax(event,element);}}}.bind(this));if(this.options.useAjax){$('.filter-current .action.remove, .filter-actions .action.clear').on('click',function(event){event.preventDefault();this.filterByAjax($(event.currentTarget).attr('href'));}.bind(this));let sliderElement=$('[data-role="range-price-slider-price"]');if(sliderElement.length){sliderElement.on('click','[data-role=apply-range]',function(event){event.preventDefault();setTimeout(function(){this.filterByAjax(event.currentTarget.href);}.bind(this),0);}.bind(this))}}},modalCloseBtnHandler:function(){if(this.element.hasClass('filters-manager-initialized')){this.modal.closeModal();this.resetFilters();}},resetFilters:function(){this.resetPriceSlider();this.resetOptions();},resetOptions:function(){let items=$('.filter-options-item:not(.cat) .item a.pending-apply-selected');items.each(function(){let element=$(this);element.removeClass('pending-apply-selected');if(element.find('input[type=checkbox]').length){element.find('input[type=checkbox]').prop('checked',!element.find('input[type=checkbox]').prop('checked'))}});let swatchItems=$('.filter-options-item .swatch-attribute-options a.pending-apply-selected');swatchItems.each(function(){let element=$(this);element.removeClass('pending-apply-selected');if(element.find('.swatch-option').length){element.find('.swatch-option').toggleClass('selected');}});},resetPriceSlider:function(){let sliderElement=$('[data-role="range-price-slider-price"]');if(sliderElement.length){let $sliderWidget=sliderElement.data('smileEsRangeSlider');if(!$sliderWidget){$sliderWidget=sliderElement.data('mageRangeSlider');} if($sliderWidget){$sliderWidget._initSliderValues();$sliderWidget.element.find('[data-role="slider-bar"]').slider('values',[$sliderWidget.from,$sliderWidget.to]);$sliderWidget._refreshDisplay();}}},getFiltersFromUrlSearch:function(url){let filters=url.replace('?','');if(!filters){return[];} filters=filters.split('&') for(var i=0;i!filterFilters.includes(x));let filterToAdd=filterFilters.filter(x=>!currentUrlFilters.includes(x));$.each(filterToRemove,function(i,item){let index=filters.indexOf(item);filters.splice(index,1);});$.each(filterToAdd,function(i,item){filters.push(item);});return filters;},filterByAjax:function(filterUrl){let $body=$('body');$body.trigger('processStart');this.xhr=fetch(filterUrl,{method:'GET',headers:{'Cache-Control':'no-cache, no-store, must-revalidate','Pragma':'no-cache','Expires':'0'}}).then(response=>response.text()).then(function(html){let parser=new DOMParser(),parsedResponse=parser.parseFromString(html,"text/html"),columnMain=parsedResponse.querySelector('#maincontent');if(columnMain){if(window.SgyIAS){window.ias.destroy();} window.history.replaceState({},'',filterUrl);let $wrapper=$('#maincontent') $wrapper.html(columnMain.innerHTML);let headerHeight=$('.page-header.sticky').height();headerHeight=(headerHeight)?headerHeight:0 if($.fn.bindings){$wrapper.trigger('contentUpdated');$wrapper.children().applyBindings();$body.trigger('ias.ajaxFilterUpdated');$('html, body').animate({scrollTop:$wrapper.offset().top-headerHeight},500);}else{require(['Magento_Ui/js/lib/view/utils/bindings'],function(){$wrapper.trigger('contentUpdated');$wrapper.children().applyBindings();$body.trigger('ias.ajaxFilterUpdated');$('html, body').animate({scrollTop:$wrapper.offset().top-headerHeight},500);})}} $body.trigger('processStop');}).catch(function(error){$body.trigger('processStop');});},filterItemByAjax:function(event,$filterElem){this.setItemFilterKey($filterElem);let actualFilters=this.getFiltersFromUrlSearch(window.location.search),currentFilterKey=$filterElem.attr('data-filter-key'),indexFilter=actualFilters.indexOf(currentFilterKey);if(indexFilter>=0){actualFilters.splice(indexFilter,1);}else{if(!this.options.allowMultiselect){let filterRequestVar=$filterElem.attr('data-filter-key').split('=')[0],filtersToDelete=[];$.each(actualFilters,function(i,filter){let filterKey=filter.split('=')[0];if(filterRequestVar==filterKey){filtersToDelete.push(filter);}});let auxIndexFilter;$.each(filtersToDelete,function(i,filter){auxIndexFilter=actualFilters.indexOf(filter);actualFilters.splice(indexFilter,1);});} actualFilters.push(currentFilterKey)} actualFilters=this.formatFilters(actualFilters);let search=actualFilters.join('&'),path=window.location.href.split('?')[0],newUrl=path;if(search){newUrl+='?'+search} this.filterByAjax(newUrl);},setItemFilterKey:function($filter){if(!$filter.attr('data-filter-key')){const baseFilters=this.getFiltersFromUrlSearch(window.location.search),filterSearch=$filter.attr('href').split('?'),itemFilters=this.getFiltersFromUrlSearch((filterSearch[1])?filterSearch[1]:''),baseFiltersExcluded=baseFilters.filter(item=>!itemFilters.includes(item)),itemFiltersExcluded=itemFilters.filter(item=>!baseFilters.includes(item)),filterSearchValue=[...baseFiltersExcluded,...itemFiltersExcluded];$filter.attr('data-filter-key',filterSearchValue[0].replace(/%5B.*%5D=/g,'='));}},formatFilters:function(filters){let filterStrings=filters.join('&');$.each(filters,function(i,filter){if(filter.indexOf('%5B')===-1){let filterKey=filter.split('=')[0],searchKey=filterKey+'=',reg=new RegExp(searchKey,"g"),matchResult=filterStrings.match(reg);if(matchResult&&matchResult.length>1){var counter=0;$.each(filters,function(k,innerFilter){if(innerFilter.indexOf(searchKey)!=-1){filters[k]=innerFilter.replace(searchKey,filterKey+'%5B'+counter+'%5D'+'=');counter++;}});filterStrings=filters.join('&')}}});return filters;}});return $.mage.filtersManager;});