index.js
3 lines
| 1 | import*as e from"@wordpress/interactivity";var t,r,n={d:function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},o=(t={getContext:function(){return e.getContext},getElement:function(){return e.getElement},store:function(){return e.store},withSyncEvent:function(){return e.withSyncEvent}},r={},n.d(r,t),r);const{__,sprintf:u}=wp.i18n,{state:a,actions:c}=(0,o.store)("surecart/checkout"),s=e=>(a?.checkout?.line_items?.data||[]).some((t=>t.bump===e?.id));let i=null;const{state:l,actions:d}=(0,o.store)("surecart/order-bumps",{state:{currentIndex:0,get orderBumps(){const e=(0,o.getContext)(),t=e?.hideAddedItems??!0,r=(a?.checkout?.recommended_bumps?.data||[]).filter((e=>{const r=e?.price?.product;return!(r?.variants?.pagination?.count||t&&s(e))}));return null!==i&&i!==r.length&&(l.currentIndex=0,requestAnimationFrame((()=>{requestAnimationFrame((()=>{document.querySelector(".wp-block-surecart-cart-order-bump-template")?.scrollTo({left:0,behavior:"instant"})}))}))),i=r.length,r},get hasOrderBumps(){return l.orderBumps.length>0},get hasMultipleBumps(){return l.orderBumps.length>1},get hasPreviousPage(){return l.currentIndex>0},get hasNextPage(){return l.currentIndex<l.orderBumps.length-1},get showPagination(){return l.orderBumps.length>1},get bumpHasDiscount(){const{bump:e}=(0,o.getContext)();return e?.percent_off>0||e?.amount_off>0},get bumpDiscountText(){const{bump:e}=(0,o.getContext)();return e?.percent_off?`-${e.percent_off}%`:e?.amount_off?`-${e.amount_off_display_amount}`:""},get isBumpInCart(){const{bump:e}=(0,o.getContext)();return s(e)},get bumpImage(){const{bump:e}=(0,o.getContext)();return e?.price?.product?.line_item_image||null},get bumpName(){const{bump:e}=(0,o.getContext)();return e?.name||e?.price?.product?.name||""},get bumpCta(){const{bump:e}=(0,o.getContext)();return e?.metadata?.cta||""},get orderBumpsListAriaLabel(){return l.hasMultipleBumps?__("Order bumps carousel. Use left and right arrow keys to navigate.","surecart"):__("Order bump","surecart")},get addButtonAriaLabel(){const{bump:e}=(0,o.getContext)(),t=e?.name||e?.price?.product?.name||"";return l.isBumpInCart?u(__("%s added to cart","surecart"),t):u(__("Add %s to cart","surecart"),t); |
| 2 | // translators: %s: product name |
| 3 | }},actions:{handleAddButtonKeydown:(0,o.withSyncEvent)((function*(e){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),yield*d.addBumpToCart(e))})),previousPage:(0,o.withSyncEvent)((function*(e){e?.preventDefault(),l.hasPreviousPage&&(l.currentIndex--,d.scrollToCurrentItem(e))})),nextPage:(0,o.withSyncEvent)((function*(e){e?.preventDefault(),l.hasNextPage&&(l.currentIndex++,d.scrollToCurrentItem(e))})),handlePreviousKeydown:(0,o.withSyncEvent)((function(e){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),d.previousPage(e))})),handleNextKeydown:(0,o.withSyncEvent)((function(e){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),d.nextPage(e))})),handleCarouselKeydown:(0,o.withSyncEvent)((function(e){"ArrowLeft"!==e.key&&"ArrowRight"!==e.key||(e.preventDefault(),"ArrowLeft"===e.key?d.previousPage(e):"ArrowRight"===e.key&&d.nextPage(e))})),addBumpToCart:(0,o.withSyncEvent)((function*(e){e?.preventDefault();const t=(0,o.getContext)(),{bump:r}=t,n=t.mode||(a?.checkout?.live_mode?"live":"test"),u=t.formId;if(!r||l.isBumpInCart)return;const{addCheckoutLineItem:s}=yield import("@surecart/checkout-service"),{speak:i}=yield import("@wordpress/a11y");try{a.loading=!0;const e=yield*s({price:r?.price?.id,quantity:1,bump:r?.id});e&&(a.checkout=e,n&&u&&c.setCheckout(e,n,u),i(__("Item added to cart.","surecart"),"assertive"))}catch(e){console.error(e),a.error=e}finally{a.loading=!1}})),scrollToCurrentItem(e){const t=e?.target;if(!t)return;const r=t.closest(".wp-block-surecart-cart-order-bumps");r&&d.scrollCarouselToIndex(r,l.currentIndex)},scrollCarouselToIndex(e,t){const r=e?.querySelector(".wp-block-surecart-cart-order-bump-template"),n=r?.querySelectorAll(".sc-cart-order-bump-item");n&&n[t]&&n[t].scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}},callbacks:{init(){l.currentIndex=0},onCarouselScroll(){const{ref:e}=(0,o.getElement)();if(!e)return;const t=e.querySelectorAll(".sc-cart-order-bump-item");if(!t.length)return;const r=e.scrollLeft,n=t[0].offsetWidth,u=parseFloat(getComputedStyle(e).gap)||0,a=Math.round(r/(n+u)),c=Math.max(0,Math.min(a,t.length-1));l.currentIndex!==c&&(l.currentIndex=c)}}}); |