"use strict";(self.heliuxModules=self.heliuxModules||[]).push([[2391],{50432:(t,i,e)=>{e.d(i,{q:()=>d});var a=e(63319),n=e(51113),s=e(36606),r=e(2371),o=e(87587);class c extends a.J{constructor(t={}){super({...t,storeName:"marketplace"}),this.userStore=(0,r.KA)(o.EF)}get name(){return"MarketplaceFetchApi"}isUserLoggedIn(){return this.userStore?.ELRN?this.userStore.ELRN.isLoggedIn&&this.userStore.ELRN.userCanBuy:this.CIAM&&this.CIAM.signedIn}async getProductVariants(t){let i;this.logger.log("Getting variants list for: ",t);try{i=await this.get(`/products/variants/${t}`)||[]}catch(t){return this.logger.log(t),[]}return i}async getProductData(t,i,e){return(await this.getDistributorsWithProductInStock(t,i)).find((t=>t.store.code===e))}async getDistributorsWithProductInStock(t,i){let e;this.logger.log("Getting distributors list for: ",i);try{e=await this.get(`/products/distributor/spu/${t}/sku/${i}`)||[]}catch(t){return this.logger.log(t),[]}return e}async getDeliveryOptions(t){this.logger.log("Getting delivery options for: ",t);const i=t.map((t=>`storeCodeList=${t}`)).join("&");return this.get(`/delivery/getOptionList?${i}`)}async getDistributorsAndDeliveryOptions(t,i){let e,a=await this.getDistributorsWithProductInStock(t,i);try{e=await this.getDeliveryOptions(a.map((({store:t})=>t.code)))||[]}catch(t){this.logger.log(t),e=[]}return a=a.map((t=>({...t,delivery:(e.find((i=>i.storeCode===t.store.code))||{}).deliveryOptionDTOList}))),a}_compareItems(t,i){return t.itemId===i.product.id&&t.storeCode===i.storeCode}async getCartItem(t){return(await this.getCart()).items.find((i=>this._compareItems(t,i)))}async quantityInCartFor(t){const i=await this.getCartItem(t);return i?i.quantity:0}async notifyAboutProductAvailability(t,i){return await this.post("/products/stock-notify/add",{},t,{noDataReturned:!0,headers:{...(0,n.Q)(t,i)}})}async stopNotifyAboutProductAvailability(t,i){return await this.post("/products/stock-notify/remove",{},t,{noDataReturned:!0,headers:{...(0,n.Q)(t,i)}})}async checkProductNotificationStatus({email:t,storeCode:i,spuCode:e,skuCode:a}){return await this.get(`/products/stock-notify/check-exists?email=${t}&storeCode=${i}&spuCode=${e}&skuCode=${a}`)}}const d=()=>(0,s.R)({MarketplaceFetchApi:c})},1106:(t,i,e)=>{e.d(i,{u:()=>d});var a=e(58480),n=e(30082),s=e(37252),r=e(70908),o=e(35978);const c={selectors:{maxOrderQuantityWarningLabel:".addtocart__maxOrderQuantityWarningLabel",maxOrderQuantityLabel:".addtocart__maxOrderQuantityLabel",maxQuantityWarningLabel:".addtocart__maxQuantityWarningLabel",maxQuantityLabel:".addtocart__maxQuantityLabel",counterWrapper:".addtocart__counterWrapper",plusButton:".addtocart__plus",minusButton:".addtocart__minus",quantityInput:".addtocart__quantity",addToCartButton:".calltoaction__link",addToCartButtonIcon:".calltoaction__link .calltoaction__icon",addToCartButtonText:".calltoaction__text",addToCartContent:".addtocart__content",errorHint:".addtocart__errorHint",successMessage:".addtocart__successMessage",number:".number",closeIcon:".addtocart__closeIcon",checkmarkIcon:".addtocart__checkmarkIcon",orderdetailsComponent:".orderdetailsitems__base"},elements:{cartIcon:".carticon__icon .icon__number"},classes:{hidden:"isHidden",hiddenTransitionVisible:"isHiddenTransition--visible",addToCartButtonText:"calltoaction__text",iconNumber:"icon__number",inCartQuantityBanner:"addtocart__inCartQuantityBanner",triggerAnalytic:"addtocart__buy_again"},publishes:{cartOpenAnalyticsEvent:"ecommerce:cart:cartOpen",cartAddAnalyticsEvent:"ecommerce:cart:cartAdd",raqnCartHasUpdated:"raqn:cart:hasUpdated",quantityChanged:"addtocart::quantitychanged",itemAdded:"addtocart::itemadded",addToCartAgain:"addtocart:again:click",plusandminus:"addtocart::plusandminus::tracking"},subscribes:{addAllToCartMounted:"AddAllToCart::init",raqnCartHasUpdated:"raqn:cart:hasUpdated"},maxOrderQtyPlaceholder:"{max}",successMessageFadeOutTime:"3000",options:{badge:"badge",banner:"banner"},iconNumberTemplate:t=>`\n    <span class='number'>${t}</span>\n  `,tooltipTemplate:t=>`\n  <heliux-tooltip data-components='IconTooltip' class='icon__tooltip'>\n    <div class='icontooltip__content'>\n      ${t}\n    </div>\n  </heliux-tooltip>\n  `,bannerTextTemplate:t=>` \n    <span class='text'>${t}</span>\n  `};class d extends a.ComponentBase{init(){this.config={...c,...this.config},this.logger=new s.V("AddToCartBase"),this.api=this.getApi(),this.cart=this.getLocalCart(),this.productData={},this.getElements(),this.addToCartButton=this.addToCartButton||null,this.inCartQuantityBadge=this.inCartQuantityBadge||null,this.inCartQuantityBadgeTooltip=this.inCartQuantityBadgeTooltip||null,this.inCartQuantityBanner=this.inCartQuantityBanner||null,this.listeners(),this.checkPriceStatus((()=>{this.initQuantity(),this.checkIfCartIsOpen(),this.prepareMaxOrderQtyLabel()})),this.initComponentInteractionAnalyticsConfig()}get modalId(){return`modal${this.addToCartButton.id}`}get configProductData(){return{...this.config,...this.productData}}set quantity(t){this.quantityInput&&(this.quantityInput.value=t,this.quantityInput.setAttribute("value",t)),this.publishQuantityChangeEvent()}get quantity(){return this.quantityInput?parseInt(this.quantityInput.value,10):parseInt(this.minimumQuantity,10)}get maxOrderQtyDefined(){const{maxOrderQty:t}=this.configProductData;return t||0===t}get maxQuantityDefined(){const{saleableQty:t}=this.configProductData;return t||0===t||this.maxOrderQtyDefined}get minimumQuantity(){const{minimumQuantity:t,multipleOrderQuantity:i,defaultQuantity:e}=this.configProductData;return 0===Number(e)?parseInt(e,10):t&&i?Math.max(t,i):i||e||1}get incrementationValue(){const{multipleOrderQuantity:t}=this.configProductData;return t||1}checkPriceStatus(t){t()}getApi(){throw new Error("Abstract")}getLocalCart(){throw new Error("Abstract")}prepareMaxOrderQtyLabel(){const{maxOrderQty:t,maxOrderQtyPlaceholder:i}=this.configProductData;[this.maxOrderQuantityWarningLabel,this.maxOrderQuantityLabel].forEach((e=>{e&&this.maxOrderQtyDefined&&((e.querySelector("span")||e).textContent=(e.textContent||"").replace(i,t))}))}initQuantity(){this.productMaxQuantityReached=!1,this.itemQuantityInCart=0,this.quantity=this.minimumQuantity,this.maxQuantityDefined&&this.getItemQuantityInCart(),this.config.showInCartQuantity&&this.checkInCartQuantityIconNumber()}resetQuantity(){this.quantity=this.minimumQuantity,this.maxQuantityDefined&&this.getItemQuantityInCart()}async getItemQuantityInCart(){let t;return t=this.api.isUserLoggedIn()?this.api.quantityInCartFor(this.itemParams):this.cart.quantityInCartFor(this.itemParams),t.then((t=>{this.itemQuantityInCart=t,this.checkQuantity()}))}async checkIfCartIsOpen(){let t=0;t=this.api.isUserLoggedIn()?await this.api.getCartQuantity():await this.cart.quantity(),this.productAlreadyInCart=!!t}async checkInCartQuantityIconNumber(){await this.getItemQuantityInCart();const{options:{badge:t,banner:i},inCartQuantityStyle:e}=this.config;if(!this.itemQuantityInCart)return this.removeInCartQuantityIconNumber(),void(e===i&&this.addToCartContent.classList.add("banner__space"));this.inCartQuantityBadge?this.updateInCartQuantityIconNumber(this.inCartQuantityBadge):this.inCartQuantityBanner?this.updateInCartQuantityIconNumber(this.inCartQuantityBanner):e===t?(this.createInCartQuantityBadge(),this.config.inCartQuantityTooltip&&!this.inCartQuantityBadgeTooltip&&this.createInCartQuantityTooltip()):e===i&&(this.createInCartQuantityBanner(),this.addToCartContent.classList.remove("banner__space"))}createInCartQuantityBadge(){const{classes:{iconNumber:t},iconNumberTemplate:i}=this.config,e=i(this.itemQuantityInCart);this.inCartQuantityBadge=document.createElement("div"),this.inCartQuantityBadge.classList.add(t),this.inCartQuantityBadge.innerHTML=e,this.addToCartButtonIcon.appendChild(this.inCartQuantityBadge)}createInCartQuantityTooltip(){const{inCartQuantityTooltip:t,tooltipTemplate:i}=this.config,e=i(t);this.inCartQuantityBadgeTooltip=document.createElement("div"),this.inCartQuantityBadgeTooltip.innerHTML=e,this.inCartQuantityBadge.appendChild(this.inCartQuantityBadgeTooltip)}createInCartQuantityBanner(){const{classes:{inCartQuantityBanner:t},inCartQuantityText:i,bannerTextTemplate:e,iconNumberTemplate:a}=this.config,n=a(this.itemQuantityInCart)+e(i);this.inCartQuantityBanner=document.createElement("div"),this.inCartQuantityBanner.classList.add(t),this.inCartQuantityBanner.innerHTML=n,this.addToCartContent.parentNode.insertBefore(this.inCartQuantityBanner,this.addToCartContent)}updateInCartQuantityIconNumber(t){t.querySelector(this.config.selectors.number).textContent=`${this.itemQuantityInCart}`}removeInCartQuantityIconNumber(){this.inCartQuantityBadge?(this.inCartQuantityBadge.parentNode.removeChild(this.inCartQuantityBadge),this.inCartQuantityBadge=null,this.inCartQuantityBadgeTooltip=null):this.inCartQuantityBanner&&(this.inCartQuantityBanner.parentNode.removeChild(this.inCartQuantityBanner),this.inCartQuantityBanner=null)}listeners(){const{subscribes:t}=this.config;this.listenForAddAllToCartMounted(),this.plusButton&&this.minusButton&&(this.plusButton.addEventListener("click",this.increment.bind(this)),this.minusButton.addEventListener("click",this.decrement.bind(this))),this.quantityInput&&this.quantityInput.addEventListener("change",this.checkQuantity.bind(this)),this.addToCartButton&&this.addToCartButton.addEventListener("click",this.addToCart.bind(this)),(0,a.subscribe)(t.raqnCartHasUpdated,(()=>this.initQuantity()))}disableButtons({plus:t,minus:i,addToCart:e}={plus:!0,minus:!0,addToCart:!0}){this.addToCartButton&&(this.addToCartButton.disabled=e),this.minusButton&&(this.minusButton.disabled=i),this.plusButton&&(this.plusButton.disabled=t),this.quantityInput&&t&&i&&e&&(this.quantityInput.disabled=!0)}async checkQuantity(){let t=this.quantity,i=!1,e=!1,a=!1;if(this.quantity<this.minimumQuantity&&(t=this.minimumQuantity),t%this.incrementationValue!=0&&(t=Math.floor(t/this.incrementationValue)*this.incrementationValue),this.maxQuantityDefined){const{saleableQty:n,maxOrderQty:s}=this.configProductData,r=t=>Number(t||0===t?t:1/0),o=[r(s),r(n)],c=Math.min(...o)-this.itemQuantityInCart;this.quantity>c&&(t=Math.max(this.incrementationValue,c)),a=!!(c<this.incrementationValue||t<this.minimumQuantity),e=!!(t+this.incrementationValue>c),i=!!(t<=this.minimumQuantity)}this.quantity=t,this.productMaxQuantityReached=a,this.disableButtons({plus:e,minus:i,addToCart:a}),this.toggleQuantityLabels({addToCartDisabled:a,plusDisabled:e})}toggleQuantityLabels({addToCartDisabled:t,plusDisabled:i}){const{classes:e}=this.config;!t&&i?this.maxOrderQtyDefined?this.maxOrderQuantityWarningLabel?.classList?.add(e.hiddenTransitionVisible):this.maxQuantityWarningLabel?.classList?.add(e.hiddenTransitionVisible):(this.maxOrderQuantityWarningLabel?.classList?.remove(e.hiddenTransitionVisible),this.maxQuantityWarningLabel?.classList?.remove(e.hiddenTransitionVisible)),t?this.maxOrderQtyDefined?this.maxOrderQuantityLabel?.classList?.add(e.hiddenTransitionVisible):this.maxQuantityLabel?.classList?.add(e.hiddenTransitionVisible):(this.maxQuantityLabel?.classList?.remove(e.hiddenTransitionVisible),this.maxOrderQuantityLabel?.classList?.remove(e.hiddenTransitionVisible))}listenForAddAllToCartMounted(){const{subscribes:t}=this.config;(0,a.subscribe)(t.addAllToCartMounted,(()=>this.publishQuantityChangeEvent()))}publishQuantityChangeEvent(){const{publishes:t}=this.config;(0,a.publish)(t.quantityChanged,{params:this.itemParams,apiCallParams:this.apiCallParams,quantity:this.quantity})}increment(){const{publishes:t}=this.config;this.quantity+=this.incrementationValue,this.checkQuantity(),(0,a.publish)(t.plusandminus,this.prepareAnalyticData("plus"))}prepareAnalyticData(t){return{productList:[this.trackingData],baseElement:this.el,action:t}}decrement(){const{publishes:t}=this.config;this.quantity-=this.incrementationValue,this.checkQuantity(),(0,a.publish)(t.plusandminus,this.prepareAnalyticData("minus"))}get itemParams(){throw new Error("Abstract")}get apiCallParams(){throw new Error("Abstract")}addToCart(t){if(!t.isTrusted)return;if(t.stopImmediatePropagation(),!this.quantity)return;let i;this.addToCartButton.disabled=!0,i=this.api.isUserLoggedIn()?this.api.addToCart(this.apiCallParams):this.cart.add(this.itemParams),i.then((()=>{let i=document.querySelector(this.config.elements.cartIcon)?.textContent;i&&(i=parseInt(i,10)),this.productAlreadyInCart=this.productAlreadyInCart||!!i,this.publishTrackingEvents(t),this.resetQuantity(),this.updateCartIconValues(),this.productAlreadyInCart=!0,this.config.showInCartQuantity&&this.checkInCartQuantityIconNumber(),this.config.successMessage&&this.showSuccessMessage(),this.addToCartSuccess(),(0,a.publish)(this.config.publishes.itemAdded)})).catch((t=>{this.errorNotification(t),this.addToCartFailure()})).finally((()=>{this.productMaxQuantityReached||(this.addToCartButton.disabled=!1)}))}addToCartSuccess(){const{target:t}=this.config;"summary"===t?this.openSummaryModal(!0):this.addToCartButton.dispatchEvent(new Event("click"))}addToCartFailure(t){this.logger.error("Error while adding to cart",t);const{target:i}=this.config;"summary"===i?this.openSummaryModal(!1):(0,n.rG)({title:"cart.add_to_cart_error-title",description:"cart.add_to_cart_error-description",forceRender:!0})}get trackingData(){return this.itemParams}showSuccessMessage(){const{classes:t,successMessageFadeOutTime:i}=this.config;this.successMessage?.classList?.add(t.hiddenTransitionVisible),setTimeout((()=>{this.successMessage?.classList?.remove(t.hiddenTransitionVisible)}),i)}publishTrackingEvents(t){const{trackingEnabled:i}=this.config;if(i){const{publishes:i}=this.config;this.componentInteractionAnalyticsConfig&&(t.trackingProperties=this.componentInteractionAnalyticsConfig?.addToCartQuantitySelectorComponentInteraction?.trackingProperties,(0,a.publish)(i.addToCartAgain,t)),this.productAlreadyInCart||(0,a.publish)(i.cartOpenAnalyticsEvent,[this.trackingData]),(0,a.publish)(i.cartAddAnalyticsEvent,[this.trackingData])}}async updateCartIconValues(){const{publishes:t}=this.config;(0,a.publish)(t.raqnCartHasUpdated,{},{usePostMessage:!0})}async openSummaryModal(t){const{successLabel:i,errorLabel:e,outOfStockLabel:a,experienceFragment:n}=this.config,{currency:s,price:c,productName:d}=this.configProductData,u=s&&(0,r.X)(c,{currency:s},document.documentElement.lang),l=[{quantity:this.quantity,productName:d,price:u||c}];(0,o.S)({modalId:this.modalId,successItems:t?l:[],errorItems:t?[]:l,successLabel:i,errorLabel:e,outOfStockLabel:a,experienceFragment:n,closeIcon:this.closeIcon,checkmarkIcon:this.checkmarkIcon,customizationclass:this.el.dataset.customizationclass,sizeDefinedByDialog:!1})}initComponentInteractionAnalyticsConfig(){const t=this.el.closest(this.config.selectors.orderdetailsComponent),i=this.addToCartButton,e=this.config.adobeDataTrackingConfigsJson;t&&i&&e&&this.config.componentInteractionEnabled&&this.config.trackingEnabled&&(this.componentInteractionAnalyticsConfig=JSON.parse(e))}}},44598:(t,i,e)=>{e.d(i,{r:()=>o});var a=e(58480),n=e(37252),s=e(16095);const r={selectors:{skeleton:".sellerbox__skeleton",template:".sellerbox__template",sellerboxElements:".sellerbox__element"},tplSourcesAndTargets:[{renderTplSource:t=>t.querySelector(".sellerbox__template"),renderTplTarget:t=>t.querySelector(".sellerbox__distributors"),noDataHideContainer:t=>t.parentElement,hideNoDataHideContainer:!0,renderTplPosition:"beforeend"}],showNoDataMsg:!1,selectedEndpointName:"sellerBoxDistributors",skipInitialRender:!1,dataSourceEndpoints:[{name:"sellerBoxDistributors",mapDataConfig:{placeholdersNameSpace:"distributor",mapDataMethodName:"mapDistributorData"}}],dataRequestSubscriptions:{renderDataRequestedBySellerBox:"renderData::requested::by::SellerBox"},publishes:{productView:"ecommerce:sellerBox:prodView"},subscribes:{adobeAnalyticsTrackingEventsReady:"AdobeAnalytics:events:ready"}};class o extends s.y{init(){this.logger=new n.V("SellerBoxRender"),this.config={...r,...this.config},this.getElements(),this.api=this.getAPI(),this.sellerNumberIndex=0,this.template&&super.init()}getAPI(){throw new Error("Abstract")}mapDistributorData(){throw new Error("Abstract")}setApiDataItemMappers(){return{mapDistributorData:this.mapDistributorData.bind(this)}}publishTracking(t=[]){const{trackingEnabled:i}=this.config,{publishes:e,baseProductName:n,brand:s,productCategory:r,size:o,productId:c,sku:d,productCategoryId:u,dataRequestSubscriptions:l}=this.config;if(i){const i=()=>{const h=Array.from(this.el.querySelectorAll(this.config.selectors.sellerboxElements))[0];if(this.isElementHidden(h))return;const[m]=t,p=h?.dataset?.productPrice;p&&(m.unitPriceFromPlaceholder=h?.dataset?.productPrice);const y={distributor:m,productId:c,baseProductName:n,brand:s,size:o,productCategory:r,productCategoryId:u,sku:d},g=h?.dataset?.productAvailability;if(g){const{inStock:t,notInStock:i}=JSON.parse(g);y.productAvailability={inStock:t,notInStock:i}}(0,a.publish)(e.productView,y),(0,a.unsubscribe)(l.renderDataRequestedBySellerBox,i)};(0,a.subscribe)(l.renderDataRequestedBySellerBox,(()=>i()))}}isElementHidden(t){if(!t&&this.el)return!1;const i=t.getBoundingClientRect();return i.top+i.height<=0||i.left+i.width<=0||i.top>=window.innerHeight||i.left>=window.innerWidth}extendConfig(){return{...super.extendConfig(),...r,componentCustomError:!!this.config.fallbackExperienceFragment}}removeSkeleton(){this.skeleton&&this.skeleton.remove()}}}}]);