{"version":3,"sources":["vueProduct.js"],"names":["vueProduct","Vue","name","el","data","vueProduct_DATA","productType","maxMinRules","productRules","colourMatrixItems","thicknesses","dimensionsUnavailableForCutSizeOptions","dimenensionsUnavailableForCutSizeOptionsDiscOrSheet","dimensionsUnavailableForCutSizeOptionsRodOrTube","thicknessOnly","weightPerPanel","displayDimensions","thickness","height","width","length","diameter","tubeDiameter","product","dimensions","debouncedUpdateProductPrice","created","this","_","debounce","updateProductPrice","mounted","vm","setDefaultValues","addColours","vueProductElement","document","querySelector","addEventListener","handleGlobalFromPriceChange","mixins","closeModal","addToCartBarMixin","calcEngineServiceMixin","coloursMixin","discountTiersMixin","dropZoneMixin","edgeFinishingMixin","generalMixin","hatchMixin","holesMixin","onLoadPropertiesMixin","optionalExtrasMixin","productMixin","quantityMixin","requestServiceMixin","roundedCornersMixin","shoppingCartServiceMixin","socketCutOutsMixin","standardSizesMixin","toggleMixin","unitsMixin","validationMixin","vatMixin","productPriceMixin","methods","vueSampleModal","close","init","openEdgeFinishingModal","vueEdgeFinishingModal","open","openRoundCornersModal","vueRoundCornersModal","openDrilledHolesModal","vueDrilledHolesModal","checkValidSelect","standardSizes","$refs","getProductPrice","isLimitedOrOutOfStock","getElementById","id","errorField","value","validate","classList","parentElement","remove","isUpdating","hasCampaign","quoteMe","content","clearErrors","requiredFieldsAreValid","y","scrollTo","getProductPriceApi","then","response","invalidFields","priceResponse","vueQuoteModal","quoteDetails","productPricing","addConfiguredProduct","calculateDiscountBarStyle","async","addConfiguredProductApi","isAddingToCart","invalidMixMax","vueAddToCartModal","openError","focus","getBoundingClientRect","top","window","scrollY","behavior","getById","hasSocketCutOutsToUpload","uploadSocketCutOuts","badData","isProductValid","quantity","addedProduct","vueShoppingCartCount","total","basketItemsTotal","validateWithProductRules","finally"],"mappings":"aAAA,MAAMA,WAAa,IAAIC,IAAI,CAC1BC,KAAM,aADPC,GAAA,cAGCC,KAFI,CACJD,YAAIE,gBAAaC,YACjBF,YAAMC,gBAAAE,YAGLC,aAFWH,gBAAiBG,aAG5BC,kBAFaJ,gBAAgBE,kBAG7BG,YAFAF,gBAAcH,YAGdM,uCAFmCF,gBAAiBE,uCAGpDC,oDACCP,gBAFDM,oDAGAE,gDACCR,gBADDQ,gDAEAC,eAAa,EACbC,eAAc,EACdC,kBAAiB,CAChBC,UAAAA,EACAC,OAAAA,EACAC,MAAAA,EACAC,OAAAA,EACAC,SAAAA,EACAC,aAAAA,GAEDC,QAAO,CACNC,WAAAA,CACCP,UAAAA,EACAC,OAAAA,EACAE,OAAAA,EACAD,MAAAA,EACAE,SAAAA,EACAC,aAAAA,IAGFG,4BAA2B,MAE5BC,UAECC,KAAAF,4BAAgCG,EAAGA,SAAEC,KAASC,mBAAuB,MAEtEC,UACC,MAAAC,EAAQL,KACRK,EAAAA,WACAA,EAAAA,iBAAGC,EAAiBD,mBACpBA,EAAAA,WAAGE,EAAWF,mBACdA,EAAAA,sBAEA,MAEIG,EAAmBC,SAAAC,cAAA,eAEvBF,GACAA,EAAAG,iBAAA,SAAAX,KAAAY,8BACDC,OA0BCC,CAzBAC,kBACAC,uBACAC,aACAC,mBACAC,cACAC,mBACAC,aACAC,WACAC,WACAC,sBACAC,oBACAC,aACAC,cACAC,oBACAC,oBACAC,yBACAC,mBACAC,mBACAC,YACAC,WACAC,gBACAC,SACAC,mBAEDC,QA2BC,CACFxB,WAAA,WACAyB,eAAAC,MAAAC,OAzBEC,uBA2BgB,WA1BfC,sBAAsBC,QAEvBC,sBAAuB,WACtBC,qBA2BapC,QAzBdqC,sBA2BC,WA1BAC,qBAAqBJ,QAEtBK,iBA2BcC,SAAAA,GA1Bb,MA2BC7C,EAAG8C,KAzBJ,GA4BA9C,SAAG+C,cAAiB,eAAA,CA3BnB,MA6BEC,EAAAA,SAAuBC,eAAAC,GAC1B,GAAAC,EAAAC,QACDC,EAAUC,UAAAD,OAAA,cA5BPF,EA6BMI,cAAOD,UAAAE,OAAA,cA5BbxD,EA6BAF,2BA1BDE,EA6BDF,sBAMHA,mBAAA,WA5BG,MA6BDiD,EAAAA,KAzBK3C,SA8BAqD,cAAkB,uBAAArD,SAAAC,cAAA,iBASIqD,MAlCtB1D,EAkCD8C,MAACY,gBAjCH1D,EAAG8C,MAkCAa,cAAUC,MAAQD,GA/BtB3D,EAAG+C,kBAEH/C,EAqCAgD,0BAEHK,SAAA,WAlCG,OAmCH1D,KACEkE,gBADFlE,KAEGmE,0BA5BDf,gBAwCE,WAvCD,MAwCC/C,EAAM+D,KAvCP/D,EAAGyD,YAwCKO,EAtCRhE,EAAGiE,mBAwCSjE,EAAAT,SAAA2E,MAAA,SAAAC,GArCX,GAFAnE,EAAGyD,YAwCD,GAGHU,EAAA,OAvCC,MA2CGnE,EAAGoE,EAAchF,KAAMwE,QAzC1B5D,EAAGqE,cA2CWT,EAACQ,aAzCfpE,EAAGjB,eA4CH6E,EAAA7E,eA3CAiB,EA4CD0D,YAAAE,EAAAF,YACD1D,EAAC2D,QAAAC,EAAAD,QAEHW,cAAAC,aAAAC,eAAAxE,EAAA2D,QAAA3D,EAAAT,QAAA,KAEEkF,EAAAA,YAAAA,EA1CEzE,EA6CD0E,gCAvCDC,oBACC,MAgDGC,EAAAA,KA9CH,GAAI5E,EAiDDA,eAAG6E,OA/CN,IAAK7E,EAiDF8D,yBAhDF,OAGD,MAAMgB,EAmDHC,SAAkBC,cAAW,sBAlDhC,GAAIF,EAAJ,CACCA,EAmDCG,QAhDD,MAoDElB,EAAAe,EAAAI,wBAAAC,IAAAC,OAAAC,QAnDFD,OAoDCpB,SAAA,CAnDAmB,IAqDAJ,EApDAO,SAqDAP,gBA/CF/E,EAuDCyE,uBAEHzE,EAAAoE,cAAAhF,OAAA,GACC,IAAAY,EAAAoE,cAAAhF,QAtDGY,EAAGuF,QAAQvF,EAAGoE,cAAc,IAAIa,SASnCR,qBAAsB,WACrB,MAAMzE,EAAKL,KAEPK,EAAG6E,iBAIP7E,EAAG6E,gBAAiB,EAEhB7E,EAAGwF,4BACNxF,EAAGyF,sBAGJzF,EAAG4E,wBAAwB5E,EAAGT,SAC5B2E,MAAK,SAAUC,GACf,IAAKA,EAGJ,OAFAnE,EAAG6E,gBAAiB,OACpBE,kBAAkBC,YAInB,MAAMpB,EAAUO,EAAS/F,KAAKwF,QAE1BA,EAAQ8B,QACXX,kBAAkBC,YAIdpB,EAAQ+B,gBAKbZ,kBAAkBV,cAAgBrG,WAAWqG,cAC7CU,kBAAkBa,SAAW5H,WAAWuB,QAAQqG,SAChDb,kBAAkBc,aAAejC,EAAQiC,aACzCC,qBAAqBC,MAAQnC,EAAQoC,iBAErCjB,kBAAkBxC,QATjBvC,EAAGiG,yBAAyBrC,MAW7BsC,SAAQ,KACRlG,EAAG6E,gBAAiB","file":"../vueProduct.js","sourcesContent":["const vueProduct = new Vue({\r\n\tname: 'vueProduct',\r\n\tel: '#vueProduct',\r\n\tdata: {\r\n\t\tproductType: vueProduct_DATA.productType,\r\n\t\tmaxMinRules: vueProduct_DATA.maxMinRules,\r\n\t\tproductRules: vueProduct_DATA.productRules,\r\n\t\tcolourMatrixItems: vueProduct_DATA.colourMatrixItems,\r\n\t\tthicknesses: vueProduct_DATA.thicknesses,\r\n\t\tdimensionsUnavailableForCutSizeOptions: vueProduct_DATA.dimensionsUnavailableForCutSizeOptions,\r\n\t\tdimenensionsUnavailableForCutSizeOptionsDiscOrSheet:\r\n\t\t\tvueProduct_DATA.dimenensionsUnavailableForCutSizeOptionsDiscOrSheet,\r\n\t\tdimensionsUnavailableForCutSizeOptionsRodOrTube:\r\n\t\t\tvueProduct_DATA.dimensionsUnavailableForCutSizeOptionsRodOrTube,\r\n\t\tthicknessOnly: false,\r\n\t\tweightPerPanel: 0,\r\n\t\tdisplayDimensions: {\r\n\t\t\tthickness: 0,\r\n\t\t\theight: 0,\r\n\t\t\twidth: 0,\r\n\t\t\tlength: 0,\r\n\t\t\tdiameter: 0,\r\n\t\t\ttubeDiameter: 0,\r\n\t\t},\r\n\t\tproduct: {\r\n\t\t\tdimensions: {\r\n\t\t\t\tthickness: 0,\r\n\t\t\t\theight: 0,\r\n\t\t\t\tlength: 0,\r\n\t\t\t\twidth: 0,\r\n\t\t\t\tdiameter: 0,\r\n\t\t\t\ttubeDiameter: 0,\r\n\t\t\t},\r\n\t\t},\r\n\t\tdebouncedUpdateProductPrice: null\r\n\t},\r\n\tcreated() {\r\n\t\t// Create the debounced version of the updateProductPrice method\r\n\t\tthis.debouncedUpdateProductPrice = _.debounce(this.updateProductPrice, 1000);\r\n\t},\r\n\tmounted() {\r\n\t\tconst vm = this;\r\n\t\tvm.dropZone();\r\n\t\tvm.setDefaultValues(vm.displayDimensions);\r\n\t\tvm.addColours(vm.colourMatrixItems);\r\n\t\tvm.setMaxMinProperties();\r\n\r\n\t\tconst vueProductElement = document.querySelector(\"#vueProduct\");\r\n\r\n\t\tif (vueProductElement) {\r\n\t\t\tvueProductElement.addEventListener('change', this.handleGlobalFromPriceChange);\r\n\t\t}\r\n\t},\r\n\tmixins: [\r\n\t\taddToCartBarMixin,\r\n\t\tcalcEngineServiceMixin,\r\n\t\tcoloursMixin,\r\n\t\tdiscountTiersMixin,\r\n\t\tdropZoneMixin,\r\n\t\tedgeFinishingMixin,\r\n\t\tgeneralMixin,\r\n\t\thatchMixin,\r\n\t\tholesMixin,\r\n\t\tonLoadPropertiesMixin,\r\n\t\toptionalExtrasMixin,\r\n\t\tproductMixin,\r\n\t\tquantityMixin,\r\n\t\trequestServiceMixin,\r\n\t\troundedCornersMixin,\r\n\t\tshoppingCartServiceMixin,\r\n\t\tsocketCutOutsMixin,\r\n\t\tstandardSizesMixin,\r\n\t\ttoggleMixin,\r\n\t\tunitsMixin,\r\n\t\tvalidationMixin,\r\n\t\tvatMixin,\r\n\t\tproductPriceMixin,\r\n\t],\r\n\tmethods: {\r\n\t\tcloseModal: function () {\r\n\t\t\tvueSampleModal.close(init);\r\n\t\t},\r\n\t\topenEdgeFinishingModal: function () {\r\n\t\t\tvueEdgeFinishingModal.open();\r\n\t\t},\r\n\t\topenRoundCornersModal: function () {\r\n\t\t\tvueRoundCornersModal.open();\r\n\t\t},\r\n\t\topenDrilledHolesModal: function () {\r\n\t\t\tvueDrilledHolesModal.open();\r\n\t\t},\r\n\t\tcheckValidSelect: function (id) {\r\n\t\t\tconst vm = this;\r\n\r\n\t\t\tif (document.querySelector('.is-invalid')) {\r\n\t\t\t\tconst errorField = document.getElementById(id);\r\n\t\t\t\tif (errorField.value != 0) {\r\n\t\t\t\t\terrorField.classList.remove('is-invalid');\r\n\t\t\t\t\terrorField.parentElement.classList.remove('is-invalid');\r\n\t\t\t\t\tvm.updateProductPrice();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvm.updateProductPrice();\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t * Updates the product price\r\n\t\t */\r\n\t\tupdateProductPrice: function () {\r\n\t\t\tconst vm = this;\r\n\r\n\t\t\t//vm.validate();\r\n\r\n\t\t\tif (document.querySelector('.is-invalid-minmax') || document.querySelector('.is-invalid')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//vm.showFromPrice = false;\r\n\t\t\tif (vm.$refs.standardSizes != null) {\r\n\t\t\t\tvm.$refs.standardSizes.value = 0;\r\n\t\t\t}\r\n\r\n\t\t\tvm.getProductPrice();\r\n\r\n\t\t\tvm.isLimitedOrOutOfStock();\r\n\t\t},\r\n\t\tvalidate: function () {\r\n\t\t\tconst vm = this;\r\n\t\t\tvm.clearErrors();\r\n\t\t\tif (!vm.requiredFieldsAreValid()) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\t/**\r\n\t\t * Either returns the default price or configured price.\r\n\t\t * @param {boolean} setInitialPrice - Whether to set the initial price;.\r\n\t\t */\r\n\t\tgetProductPrice: function () {\r\n\t\t\tconst vm = this;\r\n\t\t\tvm.isUpdating = true;\r\n\r\n\t\t\tvm.getProductPriceApi(vm.product).then(function (response) {\r\n\t\t\t\tvm.isUpdating = false;\r\n\r\n\t\t\t\tif (!response) return;\r\n\r\n\t\t\t\tconst content = response.data.content;\r\n\r\n\t\t\t\tvm.priceResponse = content.productPrice;\r\n\r\n\t\t\t\tvm.weightPerPanel = content.weightPerPanel;\r\n\t\t\t\tvm.hasCampaign = content.hasCampaign;\r\n\t\t\t\tvm.quoteMe = content.quoteMe;\r\n\r\n\t\t\t\tvueQuoteModal.quoteDetails.productPricing = vm.quoteMe ? vm.product : null;\r\n\r\n\t\t\t\tvm.isUpdating = false;\r\n\r\n\t\t\t\tvm.calculateDiscountBarStyle();\r\n\t\t\t});\r\n\t\t},\r\n\t\t/**\r\n\t\t * Adds item to basket\r\n\t\t */\r\n\t\tasync addToBasket() {\r\n\t\t\tconst vm = this;\r\n\r\n\t\t\tif (vm.isAddingToCart) return;\r\n\r\n\t\t\tif (!vm.requiredFieldsAreValid()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst invalidMixMax = document.querySelector('.is-invalid-minmax');\r\n\t\t\tif (invalidMixMax) {\r\n\t\t\t\tinvalidMixMax.focus();\r\n\r\n\t\t\t\t// scrollIntoView() would not work here.\r\n\t\t\t\tconst y = invalidMixMax.getBoundingClientRect().top + window.scrollY;\r\n\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\ttop: y,\r\n\t\t\t\t\tbehavior: 'smooth',\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvm.addConfiguredProduct();\r\n\r\n\t\t\tif (vm.invalidFields.length > 0) {\r\n\t\t\t\tif (vm.invalidFields.length === 1) {\r\n\t\t\t\t\tvm.getById(vm.invalidFields[0]).focus();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t * Performs the API call to add the items\r\n\t\t */\r\n\t\taddConfiguredProduct: function () {\r\n\t\t\tconst vm = this;\r\n\r\n\t\t\tif (vm.isAddingToCart) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvm.isAddingToCart = true;\r\n\r\n\t\t\tif (vm.hasSocketCutOutsToUpload()) {\r\n\t\t\t\tvm.uploadSocketCutOuts();\r\n\t\t\t}\r\n\r\n\t\t\tvm.addConfiguredProductApi(vm.product)\r\n\t\t\t\t.then(function (response) {\r\n\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\tvm.isAddingToCart = false;\r\n\t\t\t\t\t\tvueAddToCartModal.openError();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst content = response.data.content;\r\n\r\n\t\t\t\t\tif (content.badData) {\r\n\t\t\t\t\t\tvueAddToCartModal.openError();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!content.isProductValid) {\r\n\t\t\t\t\t\tvm.validateWithProductRules(content);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvueAddToCartModal.priceResponse = vueProduct.priceResponse\r\n\t\t\t\t\tvueAddToCartModal.quantity = vueProduct.product.quantity;\r\n\t\t\t\t\tvueAddToCartModal.addedProduct = content.addedProduct\r\n\t\t\t\t\tvueShoppingCartCount.total = content.basketItemsTotal;\r\n\r\n\t\t\t\t\tvueAddToCartModal.open();\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tvm.isAddingToCart = false;\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n});\r\n"]}