JezK
Edit File: sc-product-buy-button.cjs.entry.js.map
{"file":"sc-product-buy-button.entry.cjs.js","mappings":"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","names":["state","setProduct","getProductBuyLink","submitCartForm","onChange","h","Host","isProductOutOfStock","isSelectedVariantMissing","getTopLevelError","getAdditionalErrorMessages","index"],"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 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 <Host\n class={{\n 'is-busy': state[this.productId]?.busy && !!this.addToCart,\n 'is-disabled': state[this.productId]?.disabled,\n 'is-sold-out': isProductOutOfStock(this.productId) && !isSelectedVariantMissing(this.productId),\n 'is-unavailable': isSelectedVariantMissing(this.productId),\n }}\n onClick={e => this.handleCartClick(e)}\n >\n {!!this.error && (\n <sc-alert\n onClick={event => {\n event.stopPropagation();\n }}\n type=\"danger\"\n scrollOnOpen={true}\n open={!!this.error}\n closable={false}\n >\n {!!getTopLevelError(this.error) && <span slot=\"title\" innerHTML={getTopLevelError(this.error)}></span>}\n {(getAdditionalErrorMessages(this.error) || []).map((message, index) => (\n <div innerHTML={message} key={index}></div>\n ))}\n </sc-alert>\n )}\n <slot />\n </Host>\n );\n }\n}\n"],"version":3}