{"version":3,"sources":["webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/product/ProductSet.js"],"names":["Widget","ProductSet","prefs","pid","selectedQuantity","showMinicartOnProductAdd","showAlertOnProductAdd","addToCartGlobalMsg","textNetworkError","constants","ALERT_SHOW","init","handleStateRestrictions","eventBus","on","handleUnselectedProduct","unselectedProduct","eachChild","child","productSetItem","readyToOrder","getById","addToCartMsg","error","msg","textSelectOptions","render","ref","then","show","productName","get","focus","scrollWindowTo","getProductSetItems","statID","productSetItems","stateID","getStateID","items","isOutOfStock","isRestricted","addToCart","isStateRestricted","shipToRestrictedStates","push","currentProductID","quantity","available","getPidsObj","filter","setItem","map","childProduct","qty","onAddAllToCart","button","find","pidsObj","isFullProductSet","length","startProcess","promise","submitFormJson","addToCartUrl","JSON","stringify","response","postAddAllToCart","finally","stopProcess","catch","showAlertMessage","emit","cart","cartModel","isCSCAgent","showMinicart","accessibilityAlerts","addedtocart","message","isError","accessibilityAlert","errorClass","isAllChildRestricted","every","HarmonyAddToWishlistMixin","getConstructor","shiptoerror"],"mappings":"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","file":"8.bundle.js","sourcesContent":["import { scrollWindowTo } from 'widgets/toolbox/scroll';\nimport { submitFormJson } from 'widgets/toolbox/ajax';\nimport { getStateID, isStateRestricted } from 'harmony/toolbox/shipToUtils';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {ReturnType} HarmonyAddToWishlistMixin\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof ProductSet} Product Set widget\n */\nexport default function (Widget) {\n /**\n * @category widgets\n * @subcategory product\n * @class ProductSet\n * @augments Widget\n * @classdesc Represents product set component with the next features:\n * 1. Scrolls page to the product list, once `Show the collection` button pressed.\n *\n * @example Example of product set component usage\n *\n * \n ...\n
\n ....\n
\n
\n ....\n
\n \n */\n class ProductSet extends Widget {\n prefs() {\n return {\n pid: '',\n selectedQuantity: '',\n showMinicartOnProductAdd: '',\n showAlertOnProductAdd: '',\n addToCartGlobalMsg: '',\n textNetworkError: '',\n ...super.prefs()\n };\n }\n\n get constants() {\n return {\n ALERT_SHOW: 'alert.show'\n };\n }\n\n init() {\n super.init();\n this.handleStateRestrictions();\n\n this.eventBus().on('shipto.restrictions.updated', 'handleStateRestrictions');\n }\n\n /**\n * @description If product set has unselected product variation,\n * show error message for all such products, scroll to the first one error and set focus first product with error\n * @returns {void}\n */\n handleUnselectedProduct() {\n /** @type {HTMLElement|undefined} */\n let unselectedProduct;\n\n this.eachChild((child) => {\n if (child.prefs().productSetItem && (!child.prefs().readyToOrder)) {\n child.getById('addToCartMsg', (addToCartMsg) => {\n const error = true;\n const msg = child.prefs().textSelectOptions;\n\n addToCartMsg.render(\n 'template',\n { msg, error },\n addToCartMsg.ref('container')\n ).then(() => addToCartMsg.show());\n });\n\n if (!unselectedProduct) {\n unselectedProduct = child.getById('productName', (productName) => productName.ref('titleLink').get());\n }\n }\n });\n\n if (unselectedProduct) {\n unselectedProduct.focus();\n scrollWindowTo(unselectedProduct, true);\n }\n }\n\n /**\n * @description Returns product set data for the set items\n * @returns {Array} result\n */\n getProductSetItems(statID) {\n const productSetItems = [];\n const stateID = getStateID(statID);\n\n this.items[0]?.eachChild((child) => {\n if (child.prefs().productSetItem) {\n let isOutOfStock = false;\n let isRestricted = false;\n\n child.getById('addToCart', (addToCart) => {\n isOutOfStock = !!addToCart.prefs().isOutOfStock;\n\n if (stateID) {\n isRestricted = isStateRestricted(stateID, addToCart.prefs().shipToRestrictedStates);\n }\n });\n\n productSetItems.push({\n pid: child.prefs().currentProductID || child.prefs().pid,\n quantity: child.prefs().selectedQuantity,\n available: !isOutOfStock,\n isRestricted: isRestricted,\n readyToOrder: child.prefs().readyToOrder\n });\n }\n });\n\n return productSetItems;\n }\n\n /**\n * @description Returns an array with products available for ordering\n * @param {Array} productSetItems - product set data for the set items\n * @returns {Array} result\n */\n getPidsObj(productSetItems) {\n return productSetItems.filter(setItem => setItem.available && !setItem.isRestricted).map((childProduct) => {\n return {\n pid: childProduct.pid,\n qty: childProduct.quantity\n };\n });\n }\n\n /**\n * @description On add all to cart button click handler\n * @param {any} button - button\n * @returns {void}\n */\n onAddAllToCart(button) {\n const productSetItems = this.getProductSetItems();\n const unselectedProduct = productSetItems.find(\n (setItem) => !setItem.readyToOrder && setItem.available\n );\n\n if (unselectedProduct) {\n this.handleUnselectedProduct();\n return;\n }\n\n const pidsObj = this.getPidsObj(productSetItems);\n const isFullProductSet = pidsObj.length === productSetItems.length;\n\n button.startProcess();\n\n const promise = submitFormJson(button.prefs().addToCartUrl, {\n pid: this.prefs().pid || button.prefs().pid,\n quantity: this.prefs().selectedQuantity || button.prefs().selectedQuantity,\n pidsObj: JSON.stringify(pidsObj)\n }).then(response => this.postAddAllToCart(response, isFullProductSet, pidsObj.length))\n .finally(() => {\n button.stopProcess();\n }).catch(() => {\n this.showAlertMessage(this.prefs().textNetworkError, true);\n });\n\n this.eventBus().emit('loader.start', promise);\n }\n\n /**\n * @description Handles a result of product set adding to cart\n * @param {object} response - response\n * @param {boolean} isFullProductSet - Identifies if all product set items are added\n * @param {number} productsCount - products count to be added to the cart\n * @returns {void}\n */\n postAddAllToCart(response) {\n if (!response.error && response.cart) {\n const cartModel = response.cart;\n\n // Hide mini cart pop up for CSC Agent\n if (response.isCSCAgent) {\n cartModel.showMinicart = false;\n } else {\n cartModel.showMinicart = this.prefs().showMinicartOnProductAdd;\n }\n\n this.showAlertMessage(this.prefs().accessibilityAlerts.addedtocart, false);\n this.eventBus().emit('product.added.to.cart', cartModel, this);\n } else {\n this.showAlertMessage(response.message, true);\n }\n }\n\n /**\n * @description Emits global alert\n * @param {string} message Text for an alert\n * @param {boolean} isError is error flag\n */\n showAlertMessage(message, isError = false) {\n this.eventBus().emit(this.constants.ALERT_SHOW, {\n accessibilityAlert: message,\n errorClass: isError\n });\n }\n\n /**\n * @description Handle update of shipping restrictions\n */\n handleStateRestrictions(statID) {\n const productSetItems = this.getProductSetItems(statID);\n const isAllChildRestricted = productSetItems.every((setItem) => setItem.isRestricted);\n const stateID = getStateID(statID);\n\n if (isAllChildRestricted) {\n const HarmonyAddToWishlistMixin = /** @type {HarmonyAddToWishlistMixin} */(this.getConstructor('productDetail'));\n\n this.eachChild(child => {\n if (!(child instanceof HarmonyAddToWishlistMixin)) {\n return;\n }\n\n child.handleStateRestrictions(stateID, isAllChildRestricted);\n\n // handle ship to error\n child.getById('shiptoerror', (shiptoerror) => {\n shiptoerror.show();\n });\n });\n }\n }\n }\n\n return ProductSet;\n}\n"],"sourceRoot":""}