@beamimpact/web-sdk
Version:
The Beam SDK enables brands to connect with their customers over shared values, not transactional discounts, to build stronger loyalty. Our integration achieves this by allowing customers to (a) choose a nonprofit where the brand will donate part of their
3 lines (2 loc) • 6.32 kB
JavaScript
import{o as O,i as T,a as J}from"./lodash-D3TLHRR_.esm.js";import{i as W,j as K,d as M,c as q,k as F,h as G,g as V}from"./events-Dki0ka4F.esm.js";import{logger as g}from"../utils/logger.esm.js";import{initNetworkListeners as $}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as j}from"../utils/local-storage.esm.js";import{memoizeLast as U}from"../utils/memoize-last.esm.js";import"./promo-types-DKAOFHJr.esm.js";import{B as D}from"./cart-contents-DkoytiZh.esm.js";import{O as E}from"./update-cart-gwNcGXkd.esm.js";import{W as z,D as X}from"./routes-DguZveS3.esm.js";import{getExternalCartId as Z,getBeamCartId as A}from"../utils/cart.esm.js";import"../components/post-purchase.esm.js";import{waitForElement as H}from"../utils/wait-for-element.esm.js";import{B as Q}from"./beam-errors-Ci0d3926.esm.js";import{getCookieValue as Y}from"../utils/cookies.esm.js";const N=window.Shopify?.routes?.root||"/";let P=!1,R=!0,k=!1;const tt="cart";async function et(t,c=!0){if(P)return!1;$(),window.addEventListener(K.eventName,async()=>{k=!0}),window.addEventListener(M.eventName,async i=>{const e=i,o=/cart\/(add|change|update|clear)/,r=e.detail.type==="xhr"?e.detail.xhr.responseURL:e.detail.response.url,n=new URL(r);if(!o.test(n.pathname))return;const s=await B(t);s.changed&&E(t,s.cart)});let m,d;window.addEventListener(q.eventName,async i=>{const e=i;g.debug("[cart-page][BeamNonprofitSelectEvent]",e.detail);const{source:o,selectedNonprofitId:r,selectionId:n}=e.detail;if(o===z.select_nonprofit){if(m===r&&d===n)return;const s=await y(t);await h({...s,selectedNonprofitId:r,selectionId:n}),d=n,m=r}}),window.addEventListener(F.eventName,async i=>{const e=i;g.debug("[cart-page][BeamNonprofitSelectionRemovedEvent]",e.detail);const{newNonprofitId:o,selectionId:r}=e.detail;if(m===o&&d===r)return;const n=await y(t);await h({...n,selectedNonprofitId:null,selectionId:r}),d=r,m=o}),window.addEventListener(G.eventName,async i=>{const e=i;if(g.debug("[cart-page][BeamCartCreatedEvent]",e.detail),window.statsig||c){const o=await y(t);await h(o)}}),window.addEventListener(V.eventName,async i=>{const e=i;if(g.debug("[cart-page][BeamCartChangeEvent]",e.detail),window.statsig||c){const o=await y(t);await h(o)}});const p=await B(t);return await E(t,p.cart,!0),P=!0,!0}async function x(t){const c=await y(t);await h(c)}async function y(t){let c,m;if(window.statsig)try{const o=window.statsig;typeof o?.getLayer("beam_trial_layer")?.get("show_beam")=="boolean"&&(c=o.getLayer("beam_trial_layer").get("show_beam",!1),m=o.getStableID())}catch{}const d=Z(tt,t),p=A(D,t),{chainId:i,storeId:e}=t;return{showBeam:c??void 0,remoteSessionId:m??void 0,beamCartId:p&&p!=="null"?p:void 0,cartId:d&&d!=="null"?d:void 0,chainId:i,storeId:e}}const ot=x;async function B(t){const{token:c,total_price:m,item_count:d,currency:p,items:i,cart_level_discount_applications:e,attributes:o}=await L();let r=!1;const n=j(t),s=n.getItemJson("cart"),b=A(D,t),u={cartId:c,beamCartId:b,subtotal:m/100,itemCount:d,currencyCode:p,schema:{source:"generic"},content:{items:i.map(({sku:l,final_line_price:f,product_id:C,line_level_discount_allocations:I})=>{const w=l||String(C),a=f/100,v=I?.map(({discount_application:S})=>({code:S?.title,applicable:!0}));return{remoteProductIdentifier:w,localAmount:a,discounts:v}}),discounts:e.map(({title:l})=>({code:l,applicable:!0}))}};let _=null;try{o?.beam&&(_=JSON.parse(o.beam))}catch(l){g.error(l)}if(_&&R&&!k){R=!1;const{nonprofit_id:l,selection_id:f}=_,C=n.getItem("nonprofit"),I=n.getItem("transaction"),w=l!==void 0&&String(l)!==C,a=f!=null&&String(f)!==I;(w||a)&&(w&&(n.setItem("nonprofit",String(l)),n.setItem("nonprofit_selected_at",new Date().toISOString())),a&&(n.setItem("transaction",String(f)),n.setItem("nonprofit_selected_at",new Date().toISOString())),window.dispatchEvent(new W({nonprofitId:l,nonprofitIdChanged:w,selectionId:f,selectionIdChanged:a})))}return T(u,{...s,beamCartId:s?.beamCartId})||(r=!0),{changed:r,cart:u}}const at=E,L=async function(){return await window.fetch(N+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(t=>t.json())},h=U(async function({selectedNonprofitId:t,selectionId:c,beamCartId:m,cartId:d,chainId:p,storeId:i,showBeam:e,remoteSessionId:o}){const{attributes:r}=await L(),n=r?.beam;let s={};try{n&&(s=JSON.parse(n))}catch(l){g.error(l)}const b=O({nonprofit_id:t,selection_id:c,beam_cart_id:m,shopify_cart_id:d,chain_id:p,store_id:i,show_beam:e,remote_session_id:o},J),u={...s,...b};t===null&&(u.nonprofit_id=void 0);const _={beam:JSON.stringify(u)};if(!T(u,s))try{await window.fetch(N+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:_})})}catch(l){g.error(l)}}),nt=U(async function({selectedNonprofitId:t,selectionId:c,beamCartId:m,cartId:d,chainId:p,storeId:i}){let e,o;if(window.statsig)try{const s=window.statsig;typeof s?.getLayer("beam_trial_layer")?.get("show_beam")=="boolean"&&(e=s.getLayer("beam_trial_layer").get("show_beam",!1),o=s.getStableID())}catch{}const r=O({nonprofit_id:t,selection_id:c,beam_cart_id:m,shopify_cart_id:d,chain_id:p,store_id:i,show_beam:e,remote_session_id:o},J);t===null&&(r.nonprofit_id=void 0);const n={beam:JSON.stringify(r)};try{await window.fetch(N+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:n})})}catch(s){g.error(s)}});async function it({parentSelector:t=".step__sections",apiKey:c,baseUrl:m=X,storeId:d,postalCode:p,discountCodes:i,countryCode:e,orderId:o,email:r,cartTotal:n,cart:s,promoCodes:b,htmlPromoCodes:u,currencyCode:_="USD",domain:l,lang:f="en",debug:C=!1}){const I=document.querySelector(t)||await H(t);if(!I)throw new Q(`Timed out waiting for selector '${t}'. Could not render Beam post-purchase widget.`);const w=await Y("cart");if(w){const v=j({apiKey:c}),S=v.getItemJson("cart")||{};v.setItemJson("cart",{...S,cartId:w})}const a=document.createElement("beam-post-purchase");a.apiKey=c,a.baseUrl=m,a.storeId=d,a.postalCode=p,a.countryCode=e,a.orderId=String(o),a.email=r,a.cartTotal=n,a.cart=s,a.promoCodes=b,a.htmlPromoCodes=u,a.discountCodes=i,a.currencyCode=_,a.domain=l,a.lang=f,a.debug=C,I.appendChild(a)}export{at as $,y as C,L as E,et as X,ot as Z,h as b,it as s,nt as t,B as v,x};
//# sourceMappingURL=order-page-BRG7MXZ2.esm.js.map