PageSourceSearch

https://le-grand-comptoir.fr/fw/js/fw_promoManager.js

js le-grand-comptoir.fr collected 2026-09-24 14:02:35 UTC 7,504 bytes, 1 lines download raw bytes

1import{Promo}from"./fw_common.js";export class PromoUI{constructor(promoFront){console.logStart(),this.promo=promoFront,this.btnAppliPromo=pageOrder||pageCart?document.querySelector(".order-resume__confirm__promo--btn-appli"):document.querySelector(".popup-cart__confirm__promo--btn-appli"),this.btnDeletePromo=pageOrder||pageCart?document.querySelector(".order-resume__confirm__reduce-applied__content--delete"):document.querySelector(".popup-cart__confirm__reduce-applied__content--delete"),this.divPromo=pageOrder||pageCart?document.querySelector(".order-resume__confirm__promo"):document.querySelector(".popup-cart__confirm__promo"),this.inputCodePromo=pageOrder||pageCart?document.querySelector(".order-resume__confirm__promo--code"):document.querySelector(".popup-cart__confirm__promo--code"),this.divReducApplied=pageOrder||pageCart?document.querySelector(".order-resume__confirm__reduce-applied"):document.querySelector(".popup-cart__confirm__reduce-applied"),this.codePromoAffiché=pageOrder||pageCart?document.querySelector(".order-resume__confirm__reduce-applied__content--code"):document.querySelector(".popup-cart__confirm__reduce-applied__content--code"),this.promoError=pageOrder||pageCart?document.querySelector("#order-resume__confirm__promo-error"):document.querySelector("#popup-cart__confirm__promo-error"),this.promoErrorMessage=pageOrder||pageCart?document.querySelector(".order-resume__confirm__promo-error--message"):document.querySelector(".popup-cart__confirm__promo-error--message"),this.divPourcent=pageOrder||pageCart?document.querySelector(".order-resume__confirm__pourcent"):document.querySelector(".popup-cart__confirm__pourcent"),this.libPourcent=pageOrder||pageCart?document.querySelector(".order-resume__confirm__pourcent--lib"):document.querySelector(".popup-cart__confirm__pourcent--lib"),this.valPourcent=pageOrder||pageCart?document.querySelector(".order-resume__confirm__pourcent--price"):document.querySelector(".popup-cart__confirm__pourcent--price"),this.initEventListener()}initEventListener(){console.logStart(),this.inputCodePromo?this.inputCodePromo.addEventListener("keydown",event=>{"Enter"===event.key&&(event.preventDefault(),this.btnAppliPromo.click())}):console.warn("inputCodePromo not found"),this.btnDeletePromo?this.btnDeletePromo.addEventListener("click",async()=>{if(console.logStart(),await this.promo.deletePromo(),mainManager.cart.cartUI.updateTotal(),"fr"===lang)displayInfo("Code promo supprimé");else displayInfo("Promo code deleted")}):console.warn("btnDeletePromo not found"),this.btnAppliPromo?this.btnAppliPromo.addEventListener("click",async()=>{if(console.logStart(),this.inputCodePromo?.value){const res=await this.promo.appliquerCodePromo(this.inputCodePromo.value.toUpperCase());!0===res.validate?(mainManager.cart.cartUI.updateTotal(),displaySuccess(res.message)):displayError(res.message)}else if("fr"===lang)displayWarning("Merci de saisir un code promo");else displayWarning("Please enter a promo code")}):console.warn("btnAppliPromo not found")}affichePromo(){console.logStart();const champsTotauxPromo=document.querySelectorAll(".order-resume__confirm__total__ligne--total-promo"),champsTotalReduction=document.querySelector(".montantreduction");if(console.log("this.promo.promotionPossible",this.promo.promotionPossible),!this.promo.promotionPossible)return this.divPromo&&this.divPromo.classList.add("masked"),this.divReducApplied&&this.divReducApplied.classList.add("masked"),this.divPourcent&&this.divPourcent.classList.add("masked"),void(this.promoError&&this.promoError.classList.add("masked"));if(this.promo?.codePromo&&""!==this.promo?.codePromo){let labelReduction,labelTTC,labelHT;if("fr"===lang)labelReduction="Réduction",labelHT="HT",labelTTC="TTC";else labelReduction="Reduction",labelHT="VAT not incl.",labelTTC="VAT incl.";this.divPromo&&this.divPromo.classList.add("masked"),this.divReducApplied&&this.divReducApplied.classList.remove("masked"),this.codePromoAffiché.innerText=mainManager.cart.promo.codePromo,this.divPourcent&&this.divPourcent.classList.remove("masked"),pageOrder||pageCart||isB2B?(this.libPourcent.innerText=`${labelReduction} ${labelHT}`,this.valPourcent.innerText="-"+formatePrice(lang,mainManager.cart.montantRéduction)):(this.libPourcent.innerText=`${labelReduction} ${labelTTC}`,this.valPourcent.innerText="-"+formatePrice(lang,mainManager.cart.montantRéduction+calculTVADepuisHT(mainManager.cart.montantRéduction,RowCart.tauxTva))),champsTotalReduction&&(champsTotalReduction.innerText="-"+formatePrice(lang,mainManager.cart.montantRéduction));for(let i=0;i<champsTotauxPromo.length;i++)champsTotauxPromo[i].classList.remove("masked");this.promo?.errorMessage?(this.promoError&&this.promoError.classList.remove("masked"),this.promoErrorMessage&&(this.promoErrorMessage.innerText=this.promo?.errorMessage)):(this.promoError&&this.promoError.classList.add("masked"),this.promoErrorMessage&&(this.promoErrorMessage.innerText=""))}
1else{this.inputCodePromo.value="",this.codePromoAffiché.innerText="",this.libPourcent.innerText="",this.valPourcent.innerText="",this.promoError&&this.promoError.classList.add("masked"),this.promoErrorMessage&&(this.promoErrorMessage.innerText=""),this.divPromo&&this.divPromo.classList.remove("masked"),this.divReducApplied&&this.divReducApplied.classList.add("masked"),this.divPourcent&&this.divPourcent.classList.add("masked"),champsTotalReduction&&(champsTotalReduction.innerText=0);for(let i=0;i<champsTotauxPromo.length;i++)champsTotauxPromo[i].classList.add("masked")}}}export class PromoFront extends Promo{constructor(withPromoUI=!1){console.logStart(),super(),this.promoUI=withPromoUI?new PromoUI(this):{}}getSimpleObject(seen=new Set,blacklist=[]){return blacklist.includes("promoUI")||blacklist.push("promoUI"),super.getSimpleObject(seen,blacklist)}savePromo(){console.logStart(),localStorage.setItem("promo",this.stringify())}static getNewObject(){const promo=new PromoFront(!0);return promo.getLocalStorage(),promo}getLocalStorage(){const storedPromo=localStorage.getItem("promo");storedPromo&&this.assign(JSON.parse(storedPromo))}async checkPromo(codePromo=""){console.logStart();const objet={codePromo:codePromo};try{const response=await fetch(`/${lang}/${translations.slugs.cart}/checkpromo`,{method:"POST",headers:{"x-is-fetch":"true","Content-Type":"application/json"},body:JSON.stringify(objet)});if(!response.ok){console.log("[FW] checkPromo","!response.ok");const errorMessage=await response.text(),error=new Error(errorMessage);throw error.code=response.status,error}const result=await response.json();return console.log("result.promo",result.promo),result}catch(err){throw console.warn(err),err}}async appliquerCodePromo(codePromo,init=!1){console.logStart();try{const result=await this.checkPromo(codePromo);if(!0===result.validate){if(!result.cart)throw new Error("Cart not found");if(mainManager.cart.assignCart(result.cart),!result.promo)throw new Error("Promo not found");this.assign(result.promo),this.savePromo()}else console.warn("[FW] appliquerCodePromo","result.validate !== true"),result.err&&console.warn(result.err);return result}catch(err){return console.warn(err),displayError(`${err.message}`),{validate:!1,message:"error"}}}async deletePromo(){console.logStart();try{this.reset();const result=await this.checkPromo();if(!result.cart)throw new Error("Cart not found");this.assign(result.promo),this.savePromo(),mainManager.cart.assignCart(result.cart)}catch(e){console.warn(e),displayError(`${e.message}`)}}}

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.