UNPKG

@appmate/wishlist

Version:

Wishlist King SDK

2 lines (1 loc) 6.91 kB
var C=s=>{throw TypeError(s)};var S=(s,t,e)=>t.has(s)||C("Cannot "+e);var o=(s,t,e)=>(S(s,t,"read from private field"),e?e.call(s):t.get(s)),h=(s,t,e)=>t.has(s)?C("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,e),l=(s,t,e,i)=>(S(s,t,"write to private field"),i?i.call(s,e):t.set(s,e),e);var m,v=s=>(!!localStorage.getItem("debug")&&(m=import("https://cdn.jsdelivr.net/npm/debug@4.3.7/+esm")),(e,...i)=>{m&&m.then(({default:r})=>{r(s)(e,...i)})});var g=1,E={shopify:`wk-shopify-v${g}`,storefront:`wk-storefront-v${g}`,wishlist:`wk-wishlist-v${g}`};var W=()=>{let s=v("wk:cache"),t=Object.values(E);caches.keys().then(e=>Promise.all(e.map(i=>{if(!t.includes(i))return s("Delete old cache",{cacheName:i}),caches.delete(i)})))};W();var c,u=class{constructor(t){h(this,c);l(this,c,t)}subscribe(t){let e=o(this,c).call(this,new b(t));return new w(()=>{e==null||e()})}};c=new WeakMap;var d,b=class{constructor(t){h(this,d);l(this,d,t)}next(t){o(this,d).call(this,t)}};d=new WeakMap;var p,w=class{constructor(t){h(this,p);l(this,p,t)}unsubscribe(){var t;(t=o(this,p))==null||t.call(this)}};p=new WeakMap;var f=class{constructor(t){this.stateConfig={loading:"eager"};this.state={};(this.host=t).addController(this)}get app(){if(!window.WishlistKing)throw new Error("Wishlist King SDK not initialized");return window.WishlistKing}get hostDataset(){return this.host.dataset?this.host.dataset:this.host.host?this.host.host.dataset:{}}hostConnected(){}hostDisconnected(){}parseStateConfig(t){var e;return{loading:(e=t.loading)!=null?e:"eager",wishlist:this.parseWishlistStateConfig(t),wishlistItem:this.parseWishlistItemStateConfig(t),productInfo:this.parseProductInfoStateConfig(t),cart:t.cart}}parseWishlistStateConfig({wishlist:t}){var i;let e=(i=this.hostDataset.wishlistId)!=null?i:"mine";if(t)return{params:{wishlistId:e}}}parseWishlistItemStateConfig({wishlistItem:t}){let{wishlistId:e="mine",wishlistItemId:i}=this.hostDataset;if(!(!t||!i))return{params:{wishlistId:e,wishlistItemId:i}}}parseProductInfoStateConfig({productInfo:t}){if(!t)return;let{wishlistId:e="mine",productHandle:i="",productId:r,variantId:n}=this.hostDataset;return{params:{wishlistId:e,productHandle:i,variantId:n?parseInt(n):void 0}}}observe(){return this.stateConfig=this.parseStateConfig(this.host.getStateConfig()),new u(t=>{let e=i=>{this.state={...this.state,...i},t.next(this.state)};if(this.stateConfig.wishlist){let{wishlistId:i="mine"}=this.stateConfig.wishlist.params;this.app.state.observeWishlist({wishlistId:i}).subscribe(r=>e({wishlist:r}))}if(this.stateConfig.productInfo){let{productHandle:i,variantId:r}=this.stateConfig.productInfo.params;if(!i)throw new Error("Product handle is required");this.app.state.observeProductInfo({productHandle:i,variantId:r}).subscribe(n=>e({productInfo:n}))}if(this.stateConfig.wishlistItem){let{wishlistId:i,wishlistItemId:r}=this.stateConfig.wishlistItem.params;if(!i)throw new Error("Wishlist id is required");if(!r)throw new Error("Wishlist item id is required");this.app.state.observeWishlist({wishlistId:i}).subscribe(n=>e({wishlistItem:n.items.find(a=>a.id===r)}))}this.stateConfig.cart&&this.app.state.observeShopifyCart({cacheStrategy:"public, max-age=1, stale-while-revalidate=10"}).subscribe(i=>e({cart:i}))})}getFallback(){this.stateConfig=this.parseStateConfig(this.host.getStateConfig());let t={};if(this.stateConfig.wishlist){let{wishlistId:e="mine"}=this.stateConfig.wishlist.params;t.wishlist={id:e,isMine:e==="mine",numItems:0,items:[]}}if(this.stateConfig.productInfo){let{variantId:e=0,productHandle:i}=this.stateConfig.productInfo.params;t.productInfo={productId:0,variantId:e,productHandle:i,inWishlist:!1}}if(this.stateConfig.wishlistItem){let{wishlistId:e,wishlistItemId:i}=this.stateConfig.wishlistItem.params;if(!e)throw new Error("Wishlist id is required");if(!i)throw new Error("Wishlist item id is required");t.wishlistItem={id:i,product:{id:0,handle:"",variants:[]}}}return t}};var y=class s{constructor(t){this.connected=!1;this.cleanupMethods=[];this.eventPending=!1;this.firstConnect=!0;if(this.host=t,this.stateCtrl=new f(this),this.host.hasAttribute("wk-headless"))throw new Error("Headless component already initialised");this.host.setAttribute("wk-headless",""),this.host.setAttribute("wk-skip",""),this.initEvents(),this.connect(),this.firstConnect=!1,new MutationObserver(i=>{i.some(n=>n.type==="attributes"&&n.attributeName&&s.observedAttributes.includes(n.attributeName))&&this.initState()}).observe(this.host,{attributes:!0})}get app(){return this.stateCtrl.app}static get observedAttributes(){return["data-wishlist-id","data-wishlist-item-id","data-product-handle","data-product-id","data-variant-id"]}addController(t){}appReadyCallback(){this.host.dataset.productHandle&&this.app.events.subscribe("product:change-variant:success",t=>{var e,i,r;if(this.host.dataset.productHandle===((e=t.data)==null?void 0:e.productHandle)&&((i=t.data)!=null&&i.variantId)){let n=this.productInfo?this.productInfo.wishlistItemId:void 0,a=this.productInfo?this.productInfo.variantId:void 0;n&&!a&&this.app.updateWishlistItem({wishlistItemId:n,changes:{variantId:(r=t.data)==null?void 0:r.variantId}}),this.host.dataset.variantId=t.data.variantId.toString(),this.connected&&this.initState()}})}async connect(){this.connected||(this.connected=!0,this.init())}getStateConfig(){return{}}init(){let{loading:t}=this.getStateConfig();t==="lazy"?(this.initFallbackState(),this.initObserver()):(this.initState(),this.appReadyCallback())}updated(){}setState(t){this.wishlist=t.wishlist,this.wishlistItem=t.wishlistItem,this.productInfo=t.productInfo,this.updated()}createRenderRoot(){return this}initState(){this.subscription&&this.subscription.unsubscribe(),this.subscription=this.stateCtrl.observe().subscribe(t=>{this.setState(t)})}initFallbackState(){let t=this.stateCtrl.getFallback();t&&this.setState(t)}initObserver(){var t;(t=this.observer)==null||t.disconnect(),this.observer=new IntersectionObserver(e=>this.handleIntersect(e),{root:null,rootMargin:"0px"}),this.host.setAttribute("wk-lazy",""),this.observer.observe(this.host)}handleIntersect([t]){var e;t.isIntersecting&&(this.host.removeAttribute("wk-lazy"),(e=this.observer)==null||e.disconnect(),this.initState(),this.appReadyCallback())}getEventConfig(){return{}}initEvents(){let t=this.getEventConfig();if(!t)return;let e=Object.entries(t).map(([i,r])=>{let[n,a]=i.split(/ (.*)/s);return this.subscribeToEvent({eventName:n,selector:a,handler:r})})}subscribeToEvent({eventName:t,handler:e,selector:i}){this.host.addEventListener(t,async r=>{if(this.eventPending){r.preventDefault();return}this.eventPending=!0;let a=r.target instanceof HTMLElement?i?r.target.closest(i):r.currentTarget:null;await(async()=>{try{return e.bind(this)(r,a)}catch(I){return console.error(I),I}})(),this.eventPending=!1})}};export{y as WishlistElementHeadless,f as WishlistStateController};