1"use strict";(self.webpackChunktrux_common=self.webpackChunktrux_common||[]).push([[5987],{15987:function(e,t,a){a.r(t);a(44114),a(98992),a(54520),a(72577),a(3949),a(81454);var i=a(52891),s=a(92354);t.default=class extends i.xI{static outlets=["range-control"];static targets=["certification","certificationCheckBox","brand","model","city","company","tailDisplayBrand","count","showMoreBtn","price","year","run"];static values={locatorBackend:String};locator="/cars";host;url;ownTitle=!1;cityIsRegion=!1;brandSelectTom=null;modelSelectTom=null;citySelectTom=null;companySelectTom=null;certificationSelectTom=null;responseCaches={};regionsCache={};searchParams=[];filterData;brands=[];availableRegions=[];searchTimeout=null;skipChangeEvent=!1;async connect(){if(this.locator=this.element.dataset.carFindLocator,this.host=this.locatorBackendValue??"https://locator-backend.tradedealer.ru",this.url=new URL("/pre-filter?carType=new&_token=bQ4qopFnijpTo0sW&_tokenProduct=I8F1hswMVDvA6gW2",this.host),this.ownTitle=this.element.dataset.ownTitle,"new"===this.type&&"1"!==this.useModels&&this.url.searchParams.set("gens","1"),this.brands=JSON.parse(this.element.dataset.brands),this.brandSelectTom=new s.A(this.brandSelect,{maxOptions:null,maxItems:1,plugins:["remove_button"],valueField:"alias",labelField:"title",searchField:["title","titleRus"],options:this.brands}),this.modelSelectTom=new s.A(this.modelSelect,{maxOptions:null,maxItems:1,plugins:["remove_button"],valueField:"alias",labelField:"title",searchField:["title","titleRus"],options:[{alias:null,title:"ÐÑбÑаÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ"}]}),this.hasCityTarget&&(this.citySelectTom=new s.A(this.cityTarget,{maxOptions:null,maxItems:1,placeholder:"",plugins:["remove_button"],valueField:"alias",labelField:"title",searchField:"title",load:(e,t)=>{if(!e.length)return t();this.searchCities(e,t)},onItemAdd:e=>{"__message__"!==e?this.onCitySelected(e):this.citySelectTom.removeItem(e,!0)},onDropdownOpen:()=>{const e=this.citySelectTom;if(e.isFull()){const t=e.refreshState.bind(e);e.refreshState=function(){if(t(),e.isOpen){e.wrapper.classList.remove("full"),e.control_input.style.cssText="display:block !important; width:100% !important; opacity:1 !important; position:relative !important;";const t=e.control.querySelector("[data-ts-item]");t&&(t.style.display="none")}},e.refreshState(),e.control_input.focus()}},onDropdownClose:()=>{const e=this.citySelectTom;e.control_input.style.cssText="";const t=e.control.querySelector("[data-ts-item]");t&&(t.style.display=""),e.refreshState()},render:{option:function(e,t){return"__message__"===e.alias?'<div class="option" style="color: #666; font-style: italic; pointer-events: none;">'+t(e.title)+"</div>":'<div class="option">'+t(e.title)+"</div>"}}})),this.hasCompanyTarget&&(this.companySelectTom=new s.A(this.companyTarget,{maxOptions:null,maxItems:1,plugins:["remove_button"],valueField:"id",labelField:"commerceTitle",searchField:"commerceTitle"})),this.hasCertificationTarget&&(this.certificationSelectTom=new s.A(this.certificationTarget,{maxOptions:null,maxItems:1,plugins:["remove_button"],valueField:"id",labelField:"title",searchField:"title"})),this.hasCertificationCheckBoxTarget&&(this.certificationCheckBoxTarget.checked?this.url.searchParams.set("onlyCertified","true"):this.url.searchParams.delete("onlyCertified")),this.modelSelectTom.disable(),this.url.searchParams.set("carType",this.apiCarType),this.isImport&&this.url.searchParams.set("parallelImport","true"),this.url.searchParams.set("_token",this.token),this.url.searchParams.set("_tokenProduct",this.tokenProduct),this.initializeCount(),this.hasCityTarget){const e=new URL(this.url);e.pathname="/city",this.fetchURL(e).then(e=>{e.ok&&(this.availableRegions=e.content,this.updateCitySelectTom(e.content)),this.citySelectTom.settings.placeholder=this.cityIsRegion?"Регион":"ÐоÑод",this.citySelectTom.inputState()}),this.cityTarget.addEventListener("change",async e=>{if(this.skipChangeEvent)return void(this.skipChangeEvent=!1);let t=this.url;""!==e.target.value?(t.searchParams.delete("cities[]"),e.target.value.split("::").forEach(e
1=>{t.searchParams.append("cities[]",e)})):t.searchParams.delete("cities[]");const a=await this.fetchFilter(t);a.filter.ok&&this.onFilterResponse(a)}),this.citySelectTom?.on("type",()=>{this.skipChangeEvent=!1})}this.hasCompanyTarget&&this.companyTarget.addEventListener("change",async e=>{let t=this.url;""!==e.target.value?t.searchParams.set("companies[]",[e.target.value]):t.searchParams.delete("companies[]");const a=await this.fetchFilter(t);a.filter.ok&&this.onFilterResponse(a)}),this.brandSelect.addEventListener("change",async e=>{""===e.target.value?(this.modelSelectTom.disable(),this.modelSelectTom.clear(),this.modelSelectTom.clearOptions()):(this.modelSelectTom.clear(),this.modelSelectTom.clearOptions());let t=this.url;this.brandSelectTom.getValue()?t.searchParams.set("brands[]",[this.brandSelectTom.getValue()]):t.searchParams.delete("brands[]"),this.modelSelectTom.getValue()?t.searchParams.set("models[]",[this.modelSelectTom.getValue()]):t.searchParams.delete("models[]"),this.resetPriceRange(),this.resetYearRange(),this.resetRunRange();let a=await this.fetchFilter(t);if(a.filter.ok){let t=a.filter.content;this.onFilterResponse(a),e.target.value&&this.modelSelectTom.enable(),this.modelSelectTom.clear(),this.modelSelectTom.clearOptions();let i=t.filterData.models;i=i.sort((e,t)=>e.title>t.title?1:-1),i.forEach(e=>{this.modelSelectTom.addOption({alias:e.alias,title:e.title+(e.ownTitle&&this.ownTitle?" "+e.ownTitle:""),titleRus:e.titleRus})}),1===t.filterData.models.length&&this.modelSelectTom.setValue(t.filterData.models[0].alias,!0)}}),this.modelSelect.addEventListener("change",async e=>{let t=this.url;""===e.target.value?t.searchParams.delete("models[]"):(t.searchParams.set("brands[]",[this.brandSelectTom.getValue()]),t.searchParams.set("models[]",[e.target.value])),this.resetPriceRange(),this.resetYearRange(),this.resetRunRange();let a=await this.fetchFilter(t);a.filter.ok&&this.onFilterResponse(a)}),this.certificationSelect?.addEventListener("change",async e=>{let t=this.url;""===e.target.value?t.searchParams.delete("certifications"):t.searchParams.set("certifications",e.target.value),this.brandSelectTom?this.brandSelectTom.setValue(""):this.modelSelectTom&&this.modelSelectTom.setValue(""),this.companySelectTom?this.companySelectTom.setValue(""):this.citySelectTom&&this.citySelectTom.setValue(""),this.resetPriceRange(),this.resetYearRange(),this.resetRunRange();let a=await this.fetchFilter(t);a.filter.ok&&this.onFilterResponse(a)})}async onCertificationCheckBoxChange(e){const t=this.url;e.target.checked?t.searchParams.set("onlyCertified","true"):t.searchParams.delete("onlyCertified");const a=await this.fetchFilter(t);a.filter.ok&&this.onFilterResponse(a)}async resetFilter(){this.certificationSelectTom&&this.certificationSelectTom.setValue(""),this.url.searchParams.delete("certifications"),this.hasCertificationCheckBoxTarget&&(this.certificationCheckBoxTarget.checked=!1),this.url.searchParams.delete("onlyCertified"),this.brandSelectTom&&this.brandSelectTom.setValue(""),this.url.searchParams.delete("brands[]"),this.modelSelectTom&&(this.modelSelectTom.disable(),this.modelSelectTom.clear(),this.modelSelectTom.clearOptions()),this.url.searchParams.delete("models[]"),this.companySelectTom&&this.companySelectTom.setValue(""),this.url.searchParams.delete("companies[]"),this.citySelectTom&&(this.citySelectTom.setValue(""),this.updateCitySelectTom(this.availableRegions)),this.url.searchParams.delete("cities[]"),this.resetPriceRange(),this.resetYearRange(),this.resetRunRange();const e=await this.fetchFilter(this.url);e.filter.ok&&this.onFilterResponse(e)}resetPriceRange(){this.url.searchParams.delete("priceMin"),this.url.searchParams.delete("priceMax"),this.rangeControlOutlets.forEach(function(e){"price"===e.nameValue&&(e.sliderEnabled?this.filterData&&e.resetValue(this.filterData.price.min,this.filterData.price.max):e.resetValue(null,null))},this)}resetYearRange(){this.url.searchParams.delete("ageMin"),this.url.searchParams.delete("ageMax"),this.rangeControlOutlets.forEach(function(e){"year"===e.nameValue&&(e.sliderEnabled?this.filterData&&e.resetValue(this.filterData.year.min,this.filterData.year.max):e.resetValue(null,null))},this)}resetRunRange(){this.url.searchParams.delete("runMin"),this.url.searchParams.delete("runMax"),this.rangeControlOutlets.forEac
1h(function(e){"run"===e.nameValue&&(e.sliderEnabled?this.filterData&&e.resetValue(this.filterData.run.min,this.filterData.run.max):e.resetValue(null,null))},this)}rangeControlOutletConnected(e,t){setTimeout(()=>{Array.prototype.unique=function(){for(var e=this.concat(),t=0;t<e.length;++t)for(var a=t+1;a<e.length;++a)e[t]===e[a]&&e.splice(a--,1);return e},this.rangeControlOutlets.forEach(function(e){let t=e.sliderEnabled?e.rangeTarget.dataset.rangeDirection:e.rangeDirectionValue,a=!1;if("price"===e.nameValue)switch(t){case"bidirectional":this.searchParams=this.searchParams.concat(["priceMin","priceMax"]).unique();break;case"right":this.searchParams=[].concat(this.searchParams,["priceMax"]);break;default:this.searchParams=[].concat(this.searchParams,["priceMin"])}else if("year"===e.nameValue)switch(t){case"bidirectional":this.searchParams=this.searchParams.concat(["ageMin","ageMax"]).unique();break;case"right":this.searchParams=[].concat(this.searchParams,["ageMax"]);break;default:this.searchParams=[].concat(this.searchParams,["ageMin"])}else if("run"===e.nameValue)switch(t){case"bidirectional":this.searchParams=this.searchParams.concat(["runMin","runMax"]).unique();break;case"right":this.searchParams=[].concat(this.searchParams,["runMax"]);break;default:this.searchParams=[].concat(this.searchParams,["runMin"])}if(e.sliderEnabled)e.rangeTarget.noUiSlider.on("change",async e=>{a=!0}),e.rangeTarget.noUiSlider.on("set",async t=>{if(a){let a=this.url;this.searchParams.forEach((i,s)=>{("price"===e.nameValue&&i.includes("price")||"year"===e.nameValue&&i.includes("age")||"run"===e.nameValue&&i.includes("run"))&&a.searchParams.set(i,parseInt(t[s%2]))});let i=await fetch(a);if(i.ok){let e=await i.json();this.count.innerHTML=e.total}}a=!1},this);else{const t=async()=>{let t=this.url;const a=e.getValue(),i=Array.isArray(a)?a:[a];this.searchParams.forEach((a,s)=>{if("price"===e.nameValue&&a.includes("price")||"year"===e.nameValue&&a.includes("age")||"run"===e.nameValue&&a.includes("run")){const e=i[s%i.length];null==e||isNaN(e)?t.searchParams.delete(a):t.searchParams.set(a,parseInt(e))}});let s=await fetch(t);if(s.ok){let e=await s.json();this.count&&(this.count.innerHTML=e.total)}};e.hasLimitStartTarget&&e.limitStartTarget.addEventListener("change",t),e.hasLimitEndTarget&&e.limitEndTarget.addEventListener("change",t)}},this)},1e3)}showMore(){this.tailDisplayBrandTargets.forEach(e=>e.classList.toggle("d-none")),this.showMoreBtnTarget.classList.contains("js-active")&&this.scrollToTop(),this.showMoreBtnTarget.classList.toggle("js-active")}scrollToTop(){let e=document.querySelector("#js-car-find-top");if(e){const t=document.querySelector(".td-header__nav");let a=80;t&&(a=t.offsetHeight+30);const i=e.getBoundingClientRect().top+window.pageYOffset-a;window.scrollTo({top:i,behavior:"smooth"})}}onFilterResponse(e){const t=e.filter.content;this.count&&(this.count.innerHTML=t.total),this.filterData=t.filterData;const a=t.filterData.certifications;this.certificationTargets.forEach(e=>{e.disabled=!a.map(e=>e.id.toString()).includes(e.getAttribute("data-certification-id"))});let i=t.filterData.brands;const s=JSON.parse(this.element.dataset.brandsSortable)??{};i.sort(function(e,t){return void 0!==s[e.alias]||void 0!==s[t.alias]?(void 0!==s[e.alias]?s[e.alias]:-1)>(void 0!==s[t.alias]?s[t.alias]:-1):e.alias>t.alias?1:-1},this),this.brandSelectTom.clearOptions(),i.forEach(e=>{this.brandSelectTom.addOption({alias:e.alias,title:e.title,titleRus:e?.titleRus})}),i.map(e=>e.alias).includes(this.brandSelectTom.getValue())||this.brandSelectTom.setValue(""),1===i.length&&i[0].alias!==this.brandSelectTom.getValue()&&this.brandSelectTom.setValue(i[0].alias);const r=t.filterData.companies,l=e.city?.ok?e.city.content:r.map(e=>e.city);this.updateCitySelectTom(l),this.companySelectTom&&(this.companySelectTom.clearOptions(),r.forEach(e=>{this.companySelectTom.addOption({id:e.id,commerceTitle:e.commerceTitle})}),r.map(e=>e.id.toString()).includes(this.companySelectTom.getValue().toString())||this.companySelectTom.setValue(""),1===r.length&&r[0].id!==this.companySelectTom.getValue()&&this.companySelectTom.setValue(r[0].id,!0)),this.rangeControlOutlets.forEac
1h(function(e){e.updateOptions({range:{min:t.filterData[e.nameValue].min,max:t.filterData[e.nameValue].max}})},this),this.rangeControlOutlets.forEach(function(e){let a,i=e.nameValue;t.filterData[i].min===t.filterData[i].max?(e.sliderEnabled&&e.rangeTarget.noUiSlider.disable(),a=!0):(e.sliderEnabled&&e.rangeTarget.noUiSlider.enable(),a=!1),e.hasLimitStartTarget&&(e.limitStartTarget.disabled=a),e.hasLimitEndTarget&&(e.limitEndTarget.disabled=a)},this)}updateCitySelectTom(e){if(this.citySelectTom){this.citySelectTom.clearOptions();const t=[];let a=[];e.forEach(e=>{const i=this.getRegionAlias(e);t.includes(i)||(t.push(i),a.push({alias:i,title:e.title}))}),a.sort((e,t)=>e.title>t.title?1:-1),a.sort((e,t)=>"СанкÑ-ÐеÑеÑбÑÑг"!==e.title?1:-1),a.sort((e,t)=>"ÐоÑква"!==e.title?1:-1),a.forEach(e=>{this.citySelectTom.addOption({alias:e.alias,title:e.title})}),e.map(e=>this.getRegionAlias(e)).includes(this.citySelectTom.getValue())||this.citySelectTom.setValue(""),1===t.length&&t[0]!==this.citySelectTom.getValue()&&this.citySelectTom.setValue(t[0],!0)}}getRegionAlias(e){return e.id&&"string"!=typeof e.alias?(void 0===this.regionsCache[e.id]&&(this.regionsCache[e.id]=e.alias.join("::"),this.cityIsRegion=!0),this.regionsCache[e.id]):e.alias}openLocator(){window.open(this.generateUrl(),"_self")}generateUrl(){let e=[],t=this.locator;if(this.isImport&&e.push("parallelImport=true"),t+="/"+this.getCarType(),this.brandSelectTom.getValue()&&(t+="/"+this.brandSelectTom.getValue()),this.modelSelectTom.getValue()){let e=this.filterData.models.find(e=>e.alias===this.modelSelectTom.getValue())?.model?.alias;e=e||this.modelSelectTom.getValue(),t+="/"+e}return this.companySelectTom?.getValue()&&e.push("companies="+this.companySelectTom?.getValue()),this.citySelectTom?.getValue()&&this.citySelectTom.getValue().split("::").forEach(t=>{e.push("cities="+t)}),this.certificationTargets.filter(e=>e.checked).forEach(t=>{e.push("certifications="+t.getAttribute("data-certification-id"))}),this.hasCertificationCheckBoxTarget&&this.certificationCheckBoxTarget.checked&&e.push("onlyCertified=true"),this.rangeControlOutlets.forEach(function(t){let a=t.getValue();if(null!=a)if(this.searchParams.length>1)this.searchParams.forEach((i,s)=>{if("price"===t.nameValue&&i.includes("price")||"year"===t.nameValue&&i.includes("age")||"run"===t.nameValue&&i.includes("run")){const r=Array.isArray(a)?a[s%2]:a;if(null==r||""===r)return;const l=parseInt(r);if(isNaN(l))return;const n=t.params?.range?.min||t.minValue,o=t.params?.range?.max||t.maxValue;l!==(i.includes("Min")?n:o)&&e.push(`${i}=${l}`)}});else{const t=Array.isArray(a)?a[0]:a;null==t||""===t||isNaN(parseInt(t))||e.push(`${this.searchParams[0]}=${parseInt(t)}`)}},this),e.length&&(t+="?"+e.join("&")),t}async fetchFilter(e){const t=[this.brandSelectTom,this.modelSelectTom,this.citySelectTom,this.companySelectTom,this.certificationSelectTom],a=[];t.forEach(e=>{e&&(e.isDisabled||(e.disable(),a.push(e)))});const i=[e];if(this.citySelectTom){const t=new URL(e);t.pathname="/city",t.searchParams.delete("cities[]"),i.push(t)}const s=await Promise.all(i.map(e=>this.fetchURL(e)));return a.forEach(e=>e.enable()),{filter:s[0],city:s[1]||null}}async fetchURL(e){const t=e.toString();if(void 0===this.responseCaches[t]){const a=await fetch(e);this.responseCaches[t]={ok:a.ok,content:await a.json()}}return this.responseCaches[t]}searchCities(e,t){this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(async()=>{const a=this.availableRegions.find(t=>t.title.toLowerCase().includes(e.toLowerCase()));if(a)t([{alias:this.getRegionAlias(a),title:a.title}]);else try{const a=new URL(this.host);a.pathname="/find-cities-by-partial-name",a.searchParams.set("city",e),a.searchParams.set("_token",this.token),a.searchParams.set("_tokenProduct",this.tokenProduct),a.searchParams.set("_version","desktop");const i=await this.fetchURL(a);if(i.ok){const e={};i.content.forEach(t=>{e[t.title]=(e[t.title]||0)+1});const a=i.content.map(t=>({alias:"city_"+t.id,title:e[t.title]>1&&t.regionData?t.title+", "+t.regionData.title:t.title,regionData:t.regionData,originalAlias:t.alias}
1));t(a)}else t([])}catch(e){console.error("ÐÑибка поиÑка гоÑодов:",e),t([])}},300)}async onCitySelected(e){const t=this.citySelectTom.options[e];if(!t)return;if(!t.regionData)return;const a=this.availableRegions.find(e=>e.id===t.regionData.id||Array.isArray(e.alias)&&e.alias.includes(t.regionData.alias));if(a){const e=this.getRegionAlias(a);this.citySelectTom.setValue(e,!0)}else this.skipChangeEvent=!0,await this.showNearestRegions(t.title)}async showNearestRegions(e){try{const t=new URL(this.host);t.pathname="/find-nearest-cities",t.searchParams.set("city",e),t.searchParams.set("_token",this.token),t.searchParams.set("_tokenProduct",this.tokenProduct),t.searchParams.set("order","actual"),t.searchParams.set("page","1"),t.searchParams.set("carType",this.apiCarType),this.isImport&&t.searchParams.set("parallelImport","true");const a=await this.fetchURL(t);a.ok&&a.content.length>0?this.showNearestRegionsInSelect(a.content):this.showNoResultsMessage()}catch(e){console.error("ÐÑибка поиÑка ближайÑиÑ
Ñегионов:",e),this.showNoResultsMessage()}}showNearestRegionsInSelect(e){this.citySelectTom.clearOptions(),this.citySelectTom.addOption({alias:"__message__",title:"ÐÐµÑ Ð¿Ð¾Ð´Ñ
одÑÑиÑ
авÑомобилей по ваÑим паÑамеÑÑам. ÐÑбеÑиÑе дÑÑгой Ñегион:"}),e.forEach(e=>{const t=Array.isArray(e.alias)?e.alias.join("::"):e.alias;this.citySelectTom.addOption({alias:t,title:e.title})}),this.skipChangeEvent=!0,this.citySelectTom.clear(),this.citySelectTom.open()}showNoResultsMessage(){this.citySelectTom.clearOptions(),this.citySelectTom.addOption({alias:"__message__",title:"ÐÐµÑ Ð¿Ð¾Ð´Ñ
одÑÑиÑ
авÑомобилей по ваÑим паÑамеÑÑам. ÐÑбеÑиÑе дÑÑгой Ñегион."}),this.citySelectTom.clear(),this.citySelectTom.open()}async initializeCount(){try{const e=await fetch(this.url);if(e.ok){const t=await e.json();this.count&&void 0!==t.total&&(this.count.innerHTML=t.total)}}catch(e){console.error("ÐÑибка пÑи полÑÑении акÑÑалÑного колиÑеÑÑва маÑин:",e)}}getCarType(){return this.apiCarType}get type(){return this.element.dataset.type}get apiCarType(){return"import"===this.type?"used":this.type}get isImport(){return"import"===this.type}get tokenProduct(){return this.element.dataset.tokenProduct}get token(){return this.element.dataset.token}get useModels(){return this.element.dataset.useModels}get brandSelect(){return this.brandTarget}get modelSelect(){return this.modelTarget}get certificationSelect(){return this.hasCertificationTarget?this.certificationTarget:null}get count(){return this.hasCountTarget?this.countTarget:null}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.