{"version":3,"file":"product-form.7e9cb49d.js","sources":["../modules/product-form/product-form.js"],"sourcesContent":["import find from 'lodash/find'\n\nimport { storefrontClient } from '@/scripts/storefrontClient'\nimport { handleize } from '@/scripts/utils'\nimport { removeFromWishlist, addToWishlist, getWishlist } from '@/services/wishlist'\nimport { pushAddToWishlist, pushDataBundleProduct, getCategory, handleAddToCartClick, handleWhereToBuyClick } from '@/scripts/datalayer'\n\nconst productsQuery = (handles = [] ) =>\n `fragment productDetails on Product {\n id\n handle\n title\n featuredImage { id }\n descriptionHtml\n onlineStoreUrl\n variants(first: 1) {\n nodes {\n id\n price { amount }\n availableForSale\n }\n }\n }\n {\n ${handles.map((handle) => `${handle}:product(handle: \"${handle}\") {\n ...productDetails\n }\\n`)}\n }`\n\nclass ProductFormElement extends HTMLElement {\n constructor () {\n super()\n\n if (this.dataset.variants) {\n this.variants = JSON.parse(this.dataset.variants)\n }\n\n this.addToWishlist = this.querySelector('.js-add-to-wishlist')\n this.heartFill = this.querySelector('.heart-fill')\n this.wishlist = window.BARREL.wishlist\n this.wishlistItem = null\n const formEl = this.querySelector('form')\n const { isSticky, parameter, datalayerProduct } = this.dataset\n\n if (formEl) {\n formEl.addEventListener('change', (event) => {\n if (event.target.closest('[data-option]')) {\n this.onOptionChange(event)\n }\n })\n const productData = JSON.parse(decodeURIComponent(datalayerProduct))\n productData.index = 0\n productData.item_list_id = 'product_form'\n productData.item_list_name = 'Product Form'\n\n const whereToBuyButton = this.querySelector('.js-where-to-buy')\n whereToBuyButton?.addEventListener('click', () => {\n handleWhereToBuyClick(productData, 'additional retailers')\n })\n\n document.addEventListener('seller-click', (event) => {\n document.dispatchEvent(new CustomEvent('post-seller-click', { detail: {\n productData,\n text: event.detail\n } }))\n })\n\n formEl.addEventListener('submit', (event) => {\n event.preventDefault()\n const variantAvailable = productData.variants.find(variant => variant.available)\n handleAddToCartClick(productData, productData.index, parameter, getCategory(productData), variantAvailable)\n const placement = sessionStorage.getItem('placement')\n const placementProperties = document.querySelector('input[name=\"properties[_placement]\"]')\n if (placement) {\n placementProperties.value = placement\n }\n document.querySelector('shopify-cart').addItemFromForm(event.target)\n\n const { isBundle } = this.dataset\n if (isBundle) {\n const bundleItemEls = formEl.parentElement.querySelectorAll('.js-datalayer-bundle-item')\n let items = []\n bundleItemEls.forEach(item => {\n const {title, sku} = item.dataset\n items.push({\n item_id: sku,\n item_name: title,\n item_bundle : \"True\"\n })\n })\n if (items.length) pushDataBundleProduct(items)\n }\n\n\n if (isSticky && document.querySelector('product-form-sticky')) {\n setTimeout(() => {\n document.querySelector('product-form-sticky').closeForm()\n }, 3000)\n }\n })\n }\n\n if (this.addToWishlist) {\n this.addToWishlist.addEventListener('click', this.addToWishlistClickHandler.bind(this))\n }\n\n if (this.dataset.bundleComponentProducts) {\n this.loadBundleComponentProducts()\n }\n\n window.document.addEventListener('wishlistLoaded', this.handleWishlistLoaded.bind(this))\n const style = ``\n setTimeout(() => {\n const paymentTermsEls = document.querySelectorAll('shopify-payment-terms')\n paymentTermsEls.forEach(item => {\n const learMoreButtonEl = item.shadowRoot.querySelector('.shopify-installments__learn-more')\n if (learMoreButtonEl && learMoreButtonEl.parentElement.querySelector('style') === null) {\n learMoreButtonEl.insertAdjacentHTML('beforebegin', style)\n }\n })\n }, 500)\n }\n\n handleWishlistLoaded ({ detail }) {\n this.wishlist = detail.data\n this.wishlistItem = this.findWishlistItem()\n this.updateAddedWishlist()\n this.updateHeartFill()\n }\n\n findWishlistItem () {\n if (!this.wishlist) {\n return\n }\n\n const productId = this.dataset.productId\n return this.wishlist.find(product => product['productID'] === productId)\n }\n\n updateAddedWishlist () {\n if (this.wishlistItem) {\n this.addToWishlist.classList.add('is-added')\n } else {\n this.addToWishlist.classList.remove('is-added')\n }\n }\n updateHeartFill () {\n if (!this.heartFill || !this.wishlist) {\n return\n }\n\n if (!this.wishlistItem) {\n this.heartFill.style.fill = ''\n return\n }\n\n this.heartFill.style.fill = 'white'\n }\n\n async addToWishlistClickHandler (event) {\n event.preventDefault()\n\n const variantId = this.querySelector('[name=\"id\"]')?.value\n const customerId = window.BARREL.customerId\n const productId = this.dataset.productId\n const handle = this.dataset.productHandle\n const title = this.dataset.productTitle\n const wishListItemId = this.wishlistItem?.wishListItemID\n const qty = 1\n\n if (!customerId) {\n return window.location.replace(window.BARREL.routes.account_register_url)\n }\n\n try {\n if (!wishListItemId) {\n await addToWishlist({\n customerId,\n productId,\n handle,\n title,\n variantId,\n qty\n })\n\n const productData = JSON.parse(decodeURIComponent(this.dataset.datalayerProduct))\n productData.index = 1\n productData.item_list_id = handleize(this.dataset.placement)\n productData.item_list_name = this.dataset.placement\n\n pushAddToWishlist(productData)\n } else {\n await removeFromWishlist({\n customerId,\n wishListItemId\n })\n }\n await this.refreshWishlist()\n } catch (error) {\n console.error(error)\n }\n }\n\n async refreshWishlist () {\n window.BARREL.wishlist = await getWishlist()\n const event = new window.CustomEvent('wishlistLoaded', { detail: window.BARREL.wishlist })\n window.document.dispatchEvent(event)\n }\n\n onOptionChange (event) {\n const formEl = this.querySelector('form')\n\n const option1 = formEl.querySelector('[data-option=\"1\"] input[type=\"radio\"]:checked')\n const option2 = formEl.querySelector('[data-option=\"2\"] input[type=\"radio\"]:checked')\n const option3 = formEl.querySelector('[data-option=\"3\"] input[type=\"radio\"]:checked')\n\n const matchingVariant = find(this.variants, {\n option1: option1?.value || null,\n option2: option2?.value || null,\n option3: option3?.value || null\n })\n\n this.querySelector('input[name=\"id\"]').value = matchingVariant.id\n\n this.dispatchEvent(new CustomEvent('change-variant', {\n detail: { id: matchingVariant.id },\n bubbles: true\n }))\n }\n\n loadBundleComponentProducts() {\n const handles = this.dataset.bundleComponentProducts.split('|')\n\n storefrontClient(productsQuery(handles))\n .then((response) => {\n if (response.data) {\n let available = true\n // Append hidden inputs for bundle component product variants\n Object.keys(response.data).forEach((dataKey) => {\n const variantGid = response.data[dataKey].variants.nodes[0].id\n const variantId = variantGid.slice(variantGid.lastIndexOf('/')+1)\n const input = document.createElement('input')\n input.name = 'id[]'\n input.type = 'hidden'\n input.value = variantId\n this.querySelector('form').appendChild(input)\n\n if (!response.data[dataKey].variants.nodes[0].availableForSale) {\n available = false\n }\n })\n\n this.dispatchEvent(new CustomEvent('load-bundle-components', {\n detail: response.data,\n bubbles: true\n }))\n\n if (available) {\n // Enable add-to-cart button once bundle component products are present in form\n this.querySelector('[data-bundle-add]').disabled = false\n } else {\n // Show out-of-stock button if bundle components are not available\n this.querySelector('[data-bundle-add]').classList.add('hidden')\n this.querySelector('[data-bundle-sold-out]').classList.remove('hidden')\n }\n }\n })\n }\n}\n\ncustomElements.define('product-form', ProductFormElement)\n"],"names":["productsQuery","handles","map","handle","ProductFormElement","HTMLElement","constructor","dataset","variants","JSON","parse","addToWishlist","querySelector","heartFill","wishlist","window","BARREL","wishlistItem","formEl","isSticky","parameter","datalayerProduct","addEventListener","event","target","closest","onOptionChange","productData","decodeURIComponent","index","item_list_id","item_list_name","whereToBuyButton","handleWhereToBuyClick","document","dispatchEvent","CustomEvent","detail","text","preventDefault","variantAvailable","find","variant","available","handleAddToCartClick","getCategory","placement","sessionStorage","getItem","placementProperties","value","addItemFromForm","isBundle","bundleItemEls","parentElement","querySelectorAll","items","forEach","item","title","sku","push","item_id","item_name","item_bundle","length","pushDataBundleProduct","setTimeout","closeForm","addToWishlistClickHandler","bind","bundleComponentProducts","loadBundleComponentProducts","handleWishlistLoaded","style","learMoreButtonEl","shadowRoot","insertAdjacentHTML","data","findWishlistItem","updateAddedWishlist","updateHeartFill","productId","product","classList","add","remove","fill","__async","variantId","_a","customerId","productHandle","productTitle","wishListItemId","_b","wishListItemID","qty","location","replace","routes","account_register_url","removeFromWishlist","handleize","pushAddToWishlist","refreshWishlist","error","console","getWishlist","option1","option2","option3","matchingVariant","id","bubbles","split","storefrontClient","then","response","Object","keys","dataKey","variantGid","nodes","slice","lastIndexOf","input","createElement","name","type","appendChild","availableForSale","disabled","customElements","define"],"mappings":"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"}