1import{fetchConfig}from"@theme/utilities";import{CartAddEvent,CartErrorEvent}from"@theme/events";export class CustomiserStrategy{constructor(host){this.host=host,this.configData=host.configData}get iframe(){return this.host.iframe}get type(){return this.host.type}static formatPrice(number,language="en",country="US"){return new Intl.NumberFormat(`${language}-${country}`,{style:"decimal",minimumFractionDigits:2,maximumFractionDigits:2}).format(number)}postMessage(message){const data=typeof message=="string"?message:JSON.stringify(message);this.iframe?.contentWindow?.postMessage(data,"*")}handleMessage(type,data){type==="ready_initialization"||type==="readyinitialization"?this.onReadyInitialization():type==="configuration_saved"||type==="configurationsaved"?this.onConfigurationSaved(data):type==="add_to_cart"||type==="addtocart"?this.onAddToCart(data):type==="configuration_update"||type==="configurationupdate"?this.onConfigurationUpdate(data):type==="at_closing"||type==="atclosing"?this.onClosing(data):type==="share_your_code"||type==="shareyourcode"?this.onShareYourCode(data):type==="send_configuration_email"||type==="sendconfigurationemail"?this.onSendConfigurationEmail(data):type==="error"&&console.error(`[Configurator] ${data.payload.code}: ${data.payload.message}`)}onReadyInitialization(){this.handleInitialization()}onConfigurationSaved(data){this.handleConfigurationSaved(data)}onAddToCart(data){this.handleConfigurationSaved(data)}onConfigurationUpdate(){}onClosing(){this.host.configurationSaving||this.host.closeCustomiser()}onShareYourCode(data){this.copyShareLink(data?.code)}onSendConfigurationEmail(data){this.shareConfigurationPopup(data)}handleInitialization(){}getSuitConfig(data){return data.payload.configuration}normalizeConfig(suitConfig){return suitConfig}getMainVariantId(){return[null,!1]}getWeightAndHeight(){return[null,null]}getLogoAddons(){return[{name:"vector_logo",count:0},{name:"non_vector_logo",count:0}]}getAddOns(config,vectorLogo,nonVectorLogo){return[vectorLogo,nonVectorLogo]}canAddConfigurationToCart(_madeToMeasure,_configId){return!0}onAddToCartBlocked(_madeToMeasure,_configId){}async handleConfigurationSaved(data){if(!this.host.iframeOpen)return;let shouldClose=!0;try{this.host.configurationSaving=!0;const suitConfig=this.getSuitConfig(data),config=this.normalizeConfig(suitConfig),configId=data.payload?.code||data.payload?.meta?.code||null,thumbnails=data.payload.thumbnails.map(t=>t.downloadUrl?t:null),thumbnail=thumbnails[0]?.downloadUrl||null,[mainVariantId,madeToMeasure]=this.getMainVariantId(config);if(!mainVariantId)throw new Error("No custom suit variant id found");const ean=this.configData?.barcodes?.[mainVariantId]?this.configData.barcodes[mainVariantId].replace(" ","").trim():null,[weight,height]=this.getWeightAndHeight(config),[vectorLogo,nonVectorLogo]=this.getLogoAddons(suitConfig),addOns=this.getAddOns(config,vectorLogo,nonVectorLogo);if(this.configData.add_to_cart_option){if(!this.canAddConfigurationToCart(madeToMeasure,configId)){this.onAddToCartBlocked(madeToMeasure,configId),shouldClose=!1;return}this.host.originalConfigCode&&await this.removeCartItem(this.host.originalConfigCode),await this.addToCart({mainVariantId,addOns,configId,ean,thumbnail,madeToMeasure,weight,height})}else this.shareConfigurationInline(configId,ean,thumbnail,thumbnails,suitConfig)}catch(error){console.error(error)}finally{this.host.configurationSaving=!1,shouldClose&&this.host.closeCustomiser()}}getCartSectionIds(){return Array.from(document.querySelectorAll("cart-items-component")).map(el=>el.dataset.sectionId).filter(Boolean)}async addToCart({mainVariantId,addOns,configId,ean,thumbnail,madeToMeasure,weight,height}){const addOnCartData=addOns.filter(addOn=>addOn.count>0&&addOn.id!==void 0).map(addOn=>({quantity:addOn.count||1,id:addOn.id,parent_id:mainVariantId,properties:{"_suit-base":mainVariantId,"_suit-multiplier":addOn.count}})),addToCartData={items:[{quantity:1,id:parseFloat(mainVariantId),properties:{_ean:ean,"_suit-thumbnail":thumbnail,"_suit-config":!0,"_suit-config-id":configId,"_suit-mtm":madeToMeasure,"_suit-weight":weight,"_suit-height":height,...addOns.reduce((acc,addOn)=>(acc[`_suit-${addOn.name}`]=addOn.count,addOn.price&&(acc[`_suit-${addOn.name}-price`]=addOn.price),acc),{})}},...addOnCartData],sections:this.getCartSectionIds().join(","),sections_url:window.location.pathname};if(typeof window.getSizebaySessionIdV4=="function"){const sizebaySessionId=window.getSizebaySessionIdV4();sizebaySessionId&&(addToCartData.attributes={SIZEBAY_SESSION_ID_V4:sizebaySessionId})}const json=await(await fetch(Theme.routes.cart_add_url,fetchConfig("json",{body:JSON.stringify(addToCartData)}))).json();if(json.status){console.error(json.description||json.message),this.host.dispatchEvent(new CartErrorEvent("product-customiser",json.message,json.description,json.errors));return}this.clearLocalStorage();let cart={};try{cart=await(await fetch(`${Theme.routes.cart_url}.js`)).json()}catch(error){console.error(error)}document.dispatchEvent(new CartAddEvent(cart,"product-customiser",{source:"product-customiser",itemCount:cart.item_count,sections:json.sections}))}
1async removeCartItem(configId){if(configId)try{const item=(await(await fetch(`${Theme.routes.cart_url}.js`)).json()).items.find(item2=>item2.properties["_suit-config-id"]==configId);if(!item)return;const updates={[item.key]:0};await fetch(Theme.routes.cart_update_url,fetchConfig("json",{body:JSON.stringify({updates})}))}catch(error){console.error(error)}}buildShareUrl(code){return`${window.location.origin}${window.location.pathname}?configurationCode=${code}`}copyShareLink(code){this.copyToClipboard(this.buildShareUrl(code))}shareConfigurationInline(configId,ean,thumbnail,thumbnails,suitConfig){if(!document.querySelector("[data-customiser-load]")||!document.querySelector("[data-customiser-success]")||!document.querySelector("[data-customiser-success-code]")||!document.querySelector("[data-page-customiser-form]"))return;this.host.closeCustomiser(),document.querySelector("[data-customiser-load]").classList.add("hidden"),document.querySelector("[data-customiser-success]").classList.remove("hidden"),document.querySelector("[data-customiser-success] [data-thumbnail]").src=thumbnail,document.querySelector("[data-customiser-success-code]").innerHTML=configId,document.querySelector('[data-cf-field-type="phone"]').classList.remove("hidden"),setTimeout(()=>{const shareForm=document.querySelector("[data-page-customiser-form]");shareForm instanceof HTMLDialogElement&&!shareForm.open&&shareForm.showModal()},500);const myForm=document.querySelector("form[data-cf-form]");myForm&&(myForm.cfForm.setFieldValue("form_body",JSON.stringify(suitConfig)),myForm.cfForm.setFieldValue("suit_thumbnail",thumbnail),myForm.cfForm.setFieldValue("suit_config_id",configId),location.href.indexOf("?configCode")>-1?myForm.cfForm.setFieldValue("customiser_url",location.href):configId.length>0?myForm.cfForm.setFieldValue("customiser_url",`${this.configData.url}?configurationCode=${configId}`):myForm.cfForm.setFieldValue("customiser_url",location.href),myForm.cfForm.setFieldValue("refferal","alpinestars_share_configuration_page"),myForm.cfForm.setFieldValue("suit_thumbnail_1",thumbnails[0].downloadUrl),myForm.cfForm.setFieldValue("suit_thumbnail_2",thumbnails[1].downloadUrl),myForm.cfForm.setFieldValue("suit_thumbnail_3",thumbnails[2].downloadUrl),myForm.cfForm.setFieldValue("suit_thumbnail_4",thumbnails[3].downloadUrl),window.alpinestars_refferal&&myForm.cfForm.setFieldValue("refferal",window.alpinestars_refferal),window.alpinestars_refferal_email&&myForm.cfForm.setFieldValue("refferal_email",window.alpinestars_refferal_email))}shareConfigurationPopup(data){if(!document.querySelector("[data-page-customiser-form]")||!document.querySelector("[data-cf-form]"))return;const thumbnail=data?.screenshots?.[0]||data?.thumbnails?.[0]?.downloadUrl||null,code=data?.code||data?.meta?.code||null,myForm=document.querySelector("form[data-cf-form]");if(myForm){document.body.classList.add("no-scroll");const shareForm=document.querySelector("[data-page-customiser-form]");shareForm instanceof HTMLDialogElement&&!shareForm.open&&shareForm.showModal(),myForm.cfForm.setFieldValue("form_body",JSON.stringify(data)),myForm.cfForm.setFieldValue("suit_config_id",code),thumbnail&&(document.querySelector("[data-page-customiser-form] [data-thumbnail]").src=thumbnail,myForm.cfForm.setFieldValue("suit_thumbnail",thumbnail)),myForm.cfForm.setFieldValue("customiser_url",this.buildShareUrl(code)),myForm.cfForm.setFieldValue("refferal","alpinestars_share_configuration"),this.configData.referral_email&&myForm.cfForm.setFieldValue("refferal_email",this.configData.referral_email)}}requestMeasurementPopup(data){const form=document.querySelector("[data-measurement-form]");if(!form||!form.querySelector("[data-cf-form]"))return;const thumbnail=data?.screenshots?.[0]||data?.thumbnails?.[0]?.downloadUrl||null,code=data?.code||data?.meta?.code||null;this.host.measurementConfigId=code,document.body.classList.add("no-scroll"),form instanceof HTMLDialogElement&&!form.open&&form.showModal();const cfForm=form.querySelector("form[data-cf-form]");if(cfForm?.cfForm&&cfForm.cfForm.setFieldValue("suit_config_id",code),thumbnail){const img=form.querySelector("[data-thumbnail]");
1img&&(img.src=thumbnail)}}async sendMeasurementRequest({reference,email}){const url=this.configData.measurement_webhook_url;if(!url)return console.warn("[Customiser] No measurement_webhook_url configured"),!1;try{return await fetch(url,{method:"POST",headers:{"Content-Type":"text/plain;charset=UTF-8"},body:JSON.stringify({reference,email}),keepalive:!0,mode:"no-cors"}),!0}catch(error){return console.error(error),!1}}async copyToClipboard(text){await navigator.clipboard.writeText(text),alert(this.configData.code_copied_to_clipboard||"Your design url has been copied to clipboard")}setLocalStorage(code){!code||this.type=="auto"||this.host.configCodeInput?.value||(this.host.originalConfigCode=code,this.host.rebuildUrl())}clearLocalStorage(){this.host.configCodeInput?.value||this.type!="auto"&&(this.host.originalConfigCode="",this.host.rebuildUrl())}} 2//# sourceMappingURL=/cdn/shop/t/196/assets/product-customiser-base.js.map?v=127021711077562735111786114184
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.