{"version":3,"names":["scProductBuyButtonCss","ScProductBuyButton","async","e","preventDefault","console","log","_a","state","this","productId","busy","_c","_b","selectedPrice","ad_hoc","setProduct","dialog","addToCart","checkoutUrl","_e","_d","window","scData","pages","checkout","location","assign","getProductBuyLink","no_cart","submitCartForm","error","componentDidLoad","link","el","querySelector","updateProductLink","onChange","href","render","h","Host","class","disabled","isProductOutOfStock","isSelectedVariantMissing","onClick","handleCartClick","event","stopPropagation","type","scrollOnOpen","open","closable","getTopLevelError","slot","innerHTML","getAdditionalErrorMessages","map","message","index","key"],"sources":["./src/components/controllers/product/sc-product-buy-button/sc-product-buy-button.scss?tag=sc-product-buy-button","./src/components/controllers/product/sc-product-buy-button/sc-product-buy-button.tsx"],"sourcesContent":["sc-product-buy-button {\n position: relative;\n\n a.wp-block-button__link {\n position: relative;\n text-decoration: none;\n }\n\n .sc-block-button--sold-out,\n .sc-block-button--unavailable {\n display: none !important;\n }\n\n &.is-unavailable {\n a {\n display: none !important;\n }\n .sc-block-button--unavailable {\n display: initial !important;\n }\n }\n\n &.is-sold-out {\n a {\n display: none !important;\n }\n .sc-block-button--sold-out {\n display: initial !important;\n }\n }\n\n sc-spinner::part(base) {\n --indicator-color: currentColor;\n --spinner-size: 12px;\n position: absolute;\n top: calc(50% - var(--spinner-size) + (var(--spinner-size) / 4));\n left: calc(50% - var(--spinner-size) + (var(--spinner-size) / 4));\n }\n\n [data-text],\n [data-loader] {\n transition: opacity var(--sc-transition-fast) ease-in-out, visibility var(--sc-transition-fast) ease-in-out;\n }\n\n [data-loader] {\n opacity: 0;\n visibility: hidden;\n }\n\n &.is-disabled {\n pointer-events: none;\n }\n\n &.is-busy {\n [data-text] {\n opacity: 0;\n visibility: hidden;\n }\n [data-loader] {\n opacity: 1;\n visibility: visible;\n }\n }\n sc-alert {\n margin-bottom: var(--sc-spacing-medium);\n }\n\n &.is-out-of-stock {\n [data-text] {\n opacity: 0.6;\n }\n }\n}\n","import { Component, Element, h, Host, Prop, State } from '@stencil/core';\nimport { __ } from '@wordpress/i18n';\nimport { getProductBuyLink, submitCartForm } from '@store/product/mutations';\nimport { state } from '@store/product';\nimport { setProduct } from '@store/product/setters';\nimport { onChange } from '@store/product';\nimport { ScNoticeStore } from '../../../../types';\nimport { isProductOutOfStock, isSelectedVariantMissing } from '@store/product/getters';\nimport { getTopLevelError, getAdditionalErrorMessages } from '../../../../functions/error';\n\n@Component({\n tag: 'sc-product-buy-button',\n styleUrl: 'sc-product-buy-button.scss',\n shadow: false,\n})\nexport class ScProductBuyButton {\n @Element() el: HTMLScProductBuyButtonElement;\n\n // Is add to cart enabled\n @Prop() addToCart: boolean;\n\n // The product id.\n @Prop() productId: string;\n\n // The form id\n @Prop() formId: number;\n\n // The mode\n @Prop() mode: 'live' | 'test' = 'live';\n\n // checkout link\n @Prop() checkoutLink: string;\n\n // Is add to cart enabled\n @State() error: ScNoticeStore;\n\n async handleCartClick(e) {\n e.preventDefault();\n\n console.log(e);\n\n // already busy, do nothing.\n if (state[this.productId]?.busy) return;\n\n // ad hoc price, use the dialog.\n if (state[this.productId]?.selectedPrice?.ad_hoc) {\n setProduct(this.productId, { dialog: this.addToCart ? 'ad_hoc_cart' : 'ad_hoc_buy' });\n return;\n }\n\n // if add to cart is undefined/false navigate to buy url\n if (!this.addToCart) {\n const checkoutUrl = window?.scData?.pages?.checkout;\n if (!checkoutUrl) return;\n return window.location.assign(getProductBuyLink(this.productId, checkoutUrl, { no_cart: !this.addToCart }));\n }\n\n // submit the cart form.\n try {\n console.log('submit');\n await submitCartForm(this.productId);\n } catch (e) {\n console.error(e);\n this.error = e;\n }\n }\n\n componentDidLoad() {\n this.link = this.el.querySelector('a');\n this.updateProductLink();\n onChange(this.productId, () => this.updateProductLink());\n }\n\n private link: HTMLAnchorElement;\n\n updateProductLink() {\n const checkoutUrl = window?.scData?.pages?.checkout;\n if (!checkoutUrl || !this.link) return;\n this.link.href = getProductBuyLink(this.productId, checkoutUrl, !this.addToCart ? { no_cart: true } : {});\n }\n\n render() {\n return (\n this.handleCartClick(e)}\n >\n {!!this.error && (\n {\n event.stopPropagation();\n }}\n type=\"danger\"\n scrollOnOpen={true}\n open={!!this.error}\n closable={false}\n >\n {!!getTopLevelError(this.error) && }\n {(getAdditionalErrorMessages(this.error) || []).map((message, index) => (\n
\n ))}\n \n )}\n \n \n );\n }\n}\n"],"mappings":"0kBAAA,MAAMA,EAAwB,u1C,MCejBC,EAAkB,M,2GAaG,O,iDAQhCC,sBAAsBC,G,cACpBA,EAAEC,iBAEFC,QAAQC,IAAIH,GAGZ,IAAII,EAAAC,EAAMC,KAAKC,cAAU,MAAAH,SAAA,SAAAA,EAAEI,KAAM,OAGjC,IAAIC,GAAAC,EAAAL,EAAMC,KAAKC,cAAU,MAAAG,SAAA,SAAAA,EAAEC,iBAAa,MAAAF,SAAA,SAAAA,EAAEG,OAAQ,CAChDC,EAAWP,KAAKC,UAAW,CAAEO,OAAQR,KAAKS,UAAY,cAAgB,eACtE,M,CAIF,IAAKT,KAAKS,UAAW,CACnB,MAAMC,GAAcC,GAAAC,EAAAC,SAAM,MAANA,cAAM,SAANA,OAAQC,UAAM,MAAAF,SAAA,SAAAA,EAAEG,SAAK,MAAAJ,SAAA,SAAAA,EAAEK,SAC3C,IAAKN,EAAa,OAClB,OAAOG,OAAOI,SAASC,OAAOC,EAAkBnB,KAAKC,UAAWS,EAAa,CAAEU,SAAUpB,KAAKS,Y,CAIhG,IACEb,QAAQC,IAAI,gBACNwB,EAAerB,KAAKC,U,CAC1B,MAAOP,GACPE,QAAQ0B,MAAM5B,GACdM,KAAKsB,MAAQ5B,C,EAIjB6B,mBACEvB,KAAKwB,KAAOxB,KAAKyB,GAAGC,cAAc,KAClC1B,KAAK2B,oBACLC,EAAS5B,KAAKC,WAAW,IAAMD,KAAK2B,qB,CAKtCA,oB,QACE,MAAMjB,GAAcN,GAAAN,EAAAe,SAAM,MAANA,cAAM,SAANA,OAAQC,UAAM,MAAAhB,SAAA,SAAAA,EAAEiB,SAAK,MAAAX,SAAA,SAAAA,EAAEY,SAC3C,IAAKN,IAAgBV,KAAKwB,KAAM,OAChCxB,KAAKwB,KAAKK,KAAOV,EAAkBnB,KAAKC,UAAWS,GAAcV,KAAKS,UAAY,CAAEW,QAAS,MAAS,G,CAGxGU,S,QACE,OACEC,EAACC,EAAI,CACHC,MAAO,CACL,YAAWnC,EAAAC,EAAMC,KAAKC,cAAU,MAAAH,SAAA,SAAAA,EAAEI,SAAUF,KAAKS,UACjD,eAAeL,EAAAL,EAAMC,KAAKC,cAAU,MAAAG,SAAA,SAAAA,EAAE8B,SACtC,cAAeC,EAAoBnC,KAAKC,aAAemC,EAAyBpC,KAAKC,WACrF,iBAAkBmC,EAAyBpC,KAAKC,YAElDoC,QAAS3C,GAAKM,KAAKsC,gBAAgB5C,MAEhCM,KAAKsB,OACNS,EAAA,YACEM,QAASE,IACPA,EAAMC,iBAAiB,EAEzBC,KAAK,SACLC,aAAc,KACdC,OAAQ3C,KAAKsB,MACbsB,SAAU,SAEPC,EAAiB7C,KAAKsB,QAAUS,EAAA,QAAMe,KAAK,QAAQC,UAAWF,EAAiB7C,KAAKsB,UACrF0B,EAA2BhD,KAAKsB,QAAU,IAAI2B,KAAI,CAACC,EAASC,IAC5DpB,EAAA,OAAKgB,UAAWG,EAASE,IAAKD,OAIpCpB,EAAA,a"}