@dropins/storefront-wishlist 0.2.4-alpha → 1.0.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/getProductBySku/getProductBySku.d.ts +3 -1
- package/chunks/WishlistItem.js +1 -1
- package/chunks/mergeWishlists.js +64 -54
- package/chunks/removeProductsFromWishlist.js +2 -2
- package/containers/WishlistToggle.js +1 -1
- package/data/models/product.d.ts +1 -0
- package/data/transforms/transform-product.d.ts +2 -2
- package/package.json +1 -1
- package/render.js +1 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Product } from '../../data/models';
|
|
2
2
|
|
|
3
|
-
export declare const getProductBySku: (sku: string
|
|
3
|
+
export declare const getProductBySku: (sku: string, selectedOptions?: {
|
|
4
|
+
uid: string;
|
|
5
|
+
}[]) => Promise<void | Product | null>;
|
|
4
6
|
//# sourceMappingURL=getProductBySku.d.ts.map
|
package/chunks/WishlistItem.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as t,Fragment as
|
|
3
|
+
import{jsx as t,Fragment as _,jsxs as h}from"@dropins/tools/preact-jsx-runtime.js";import{classes as w}from"@dropins/tools/lib.js";import{Price as b,Button as y,Icon as U,Image as H}from"@dropins/tools/components.js";import{useState as J}from"@dropins/tools/preact-compat.js";import{s as N,r as Q}from"./removeProductsFromWishlist.js";import{events as q}from"@dropins/tools/event-bus.js";import{a as Z,S as D}from"./Trash.js";import{useText as ee}from"@dropins/tools/i18n.js";const te=({taxes:r,displayMode:e})=>t(_,{children:r.map((o,c)=>h("div",{"data-testid":`wishlist-product-item-tax-${c}`,className:"wishlist-product-item-tax",children:[t("span",{className:"wishlist-product-item-tax-label",children:o.label}),t(b,{className:"wishlist-product-item-tax-price",amount:o.money.value,currency:o.money.currency}),t("span",{className:"wishlist-product-item-tax-display-mode",children:e==="INCLUDING_FPT_AND_DESCRIPTION"?"incl.":"excl."})]},c))}),re=({className:r,item:e,onCartActionButtonClick:o,onTrashButtonClick:c,fixedProductTaxesEnabled:v,fixedProductTaxesEnabledDisplayInProductLists:a,routeProdDetailPage:d,...u})=>{var T,C,g,A,O,B,S,E,z;const n=ee({cartActionBtn:"ProductItem.CartActionButton",trashActionBtn:"ProductItem.TrashActionButton",customizeActionBtn:"ProductItem.CustomizeActionButton"}),P=((g=(C=(T=e.product)==null?void 0:T.prices)==null?void 0:C.discount)==null?void 0:g.amountOff)!==0||((B=(O=(A=e.product)==null?void 0:A.prices)==null?void 0:O.discount)==null?void 0:B.percentOff)!==0,f=()=>{var s;return t("a",{className:"wishlist-product-item-image","data-testid":"wishlist-product-item-image",href:d(e.product),children:t(se,{images:(s=e.product)!=null&&s.image?[e.product.image]:[]})})},p=()=>{var s,i,l,m,F,G,R,k,L,M;return h(_,{children:[t(b,{className:w(["wishlist-product-item-price",P?"strikeout":""]),"data-testid":"wishlist-product-item-price",amount:(i=(s=e.product)==null?void 0:s.prices)==null?void 0:i.regularPrice.value,currency:(m=(l=e.product)==null?void 0:l.prices)==null?void 0:m.regularPrice.currency}),P&&t(b,{className:"wishlist-product-item-discounted-price","data-testid":"wishlist-product-item-discounted-price",amount:(G=(F=e.product)==null?void 0:F.prices)==null?void 0:G.finalPrice.value,currency:(k=(R=e.product)==null?void 0:R.prices)==null?void 0:k.finalPrice.currency}),v&&(a==="INCLUDING_FPT_AND_DESCRIPTION"||a==="EXCLUDING_FPT_INCLUDING_DESCRIPTION_FINAL_PRICE")&&((M=(L=e.product)==null?void 0:L.prices)==null?void 0:M.fixedProductTaxes)&&t(te,{taxes:e.product.prices.fixedProductTaxes,displayMode:a})]})},W=()=>t(y,{"data-testid":"wishlist-product-item-remove-button",className:"wishlist-product-item-button__remove",variant:"tertiary",onClick:()=>c==null?void 0:c(),icon:t(U,{source:Z,size:"24",stroke:"2",viewBox:"0 0 24 24","aria-label":n.trashActionBtn})}),$=()=>V()?X():Y(),V=()=>{var s,i,l,m;return((s=e.product)==null?void 0:s.type)==="ConfigurableProduct"?j():((i=e.product)==null?void 0:i.type)!=="GiftCardProduct"&&((l=e.product)==null?void 0:l.type)!=="BundleProduct"&&((m=e.product)==null?void 0:m.type)!=="GroupedProduct"},I=((S=e.selectedOptions)==null?void 0:S.map(s=>s.uid))||[],x=((E=e.product.options)==null?void 0:E.filter(s=>s.required))||[],j=()=>x.length===0?!0:x.every(s=>{var i;return(i=s.values)==null?void 0:i.some(l=>I.includes(l.uid))}),K=()=>I.length===0?null:t("div",{className:"wishlist-product-item-options",children:x.map(s=>{var l;const i=(l=s.values)==null?void 0:l.find(m=>I.includes(m.uid));return i?h("div",{className:"wishlist-product-item-option",children:[h("span",{className:"wishlist-product-item-option__attribute",children:[s.attributeCode,":"]})," ",t("span",{className:"wishlist-product-item-option__label",children:i.label})]},s.attributeCode):null})}),X=()=>{var s;return t(y,{"data-testid":"wishlist-product-item-move-to-cart-button",size:"medium",type:"submit",icon:t(U,{source:D}),disabled:((s=e.product)==null?void 0:s.stockStatus)!=="IN_STOCK","aria-label":n.cartActionBtn,onClick:()=>o==null?void 0:o(),children:n.cartActionBtn})},Y=()=>t(y,{"data-testid":"wishlist-product-item-customize-button",size:"medium",type:"submit","aria-label":n.customizeActionBtn,href:d(e.product),children:n.customizeActionBtn});return t("div",{...u,className:w(["wishlist-product-item",r]),children:h("div",{className:"wishlist-product-item__content",children:[f(),h("div",{className:"wishlist-product-item__title","data-testid":"wishlist-product-item-header",children:[t("a",{className:"wishlist-product-item-name","data-testid":"wishlist-product-item-name",href:d(e.product),children:(z=e.product)==null?void 0:z.name}),W(),p()]}),K(),$()]})})},se=({className:r,children:e,images:o,...c})=>{const[v,a]=J(0);return h(_,{children:[t("div",{...c,className:w(["image-carousel",r]),children:t("div",{className:w(["overflow-hidden relative max-w-[200px]",r]),children:o==null?void 0:o.map((d,u)=>u===v&&t(H,{className:"image-carousel-image",alt:d.alt,src:d.src}))})}),(o==null?void 0:o.length)>1&&t("div",{className:w(["absolute","image-switcher-area"]),children:o==null?void 0:o.map((d,u)=>t("span",{className:w(["image-switcher",v===u?"image-switcher-active":"image-switcher-inactive"]),onClick:n=>{a(u),n.stopPropagation()}},u))})]})},pe=({initialData:r=null,moveProdToCart:e,routeProdDetailPage:o})=>{var a,d,u,n,P;if(!(r!=null&&r.product))return null;const c=async(f=!0)=>{try{return await Q([r]),console.log(`Product ${r.product.sku} removed from wishlist!`),f&&q.emit("wishlist/alert",{action:"remove",item:r}),!0}catch(p){return console.error(`Product ${r.product.sku} could not be removed from wishlist`,p),!1}};return t(re,{item:r,onCartActionButtonClick:async()=>{var f;try{return await e([{sku:r.product.sku,quantity:1,optionsUIDs:(f=r.selectedOptions)==null?void 0:f.map(p=>p.uid),enteredOptions:r.enteredOptions}]),console.log(`Product ${r.product.sku} successfully moved to cart 🛒`),q.emit("wishlist/alert",{action:"move",item:r}),await c(!1)}catch(p){return console.error("Could not move product to cart: ",p),p.toString().includes("You need to choose options for your item.")&&window.location.replace(o(r.product)),!1}},onTrashButtonClick:c,fixedProductTaxesEnabled:((a=N.config)==null?void 0:a.fixedProductTaxesEnabled)??!1,fixedProductTaxesApply:((d=N.config)==null?void 0:d.fixedProductTaxesApply)??!1,fixedProductTaxesEnabledDisplayInProductLists:(u=N.config)==null?void 0:u.fixedProductTaxesEnabledDisplayInProductLists,fixedProductTaxesEnabledDisplayInProductView:(n=N.config)==null?void 0:n.fixedProductTaxesEnabledDisplayInProductView,fixedProductTaxesEnabledDisplayInSalesModules:(P=N.config)==null?void 0:P.fixedProductTaxesEnabledDisplayInSalesModules,routeProdDetailPage:o})};export{pe as W};
|
package/chunks/mergeWishlists.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{Initializer as
|
|
3
|
+
import{Initializer as D}from"@dropins/tools/lib.js";import{events as c}from"@dropins/tools/event-bus.js";import{s as l,j as v,f as b,h as E,g as y,i as C,k as G}from"./removeProductsFromWishlist.js";const R=new D({init:async e=>{const t={isGuestWishlistEnabled:!1,...e};R.config.setConfig(t),S().catch(console.error)},listeners:()=>[c.on("authenticated",async e=>{if(l.authenticated&&!e&&c.emit("wishlist/reset",void 0),e&&!l.authenticated){l.authenticated=e;const t=await S().catch(console.error);t&&ce(t)}},{eager:!0}),c.on("wishlist/data",e=>{v(e)}),c.on("wishlist/reset",()=>{ae().catch(console.error),c.emit("wishlist/data",null)})]}),fe=R.config;function O(e){if(!e)return null;const t=i=>{switch(i){case 1:return"INCLUDING_FPT_AND_DESCRIPTION";case 2:return"EXCLUDING_FPT_INCLUDING_DESCRIPTION_FINAL_PRICE";case 3:return"EXCLUDING_FPT";default:return"INCLUDING_FPT_ONLY"}};return{wishlistIsEnabled:e.storeConfig.magento_wishlist_general_is_enabled,wishlistMultipleListIsEnabled:e.storeConfig.enable_multiple_wishlists,wishlistMaxNumber:e.storeConfig.maximum_number_of_wishlists,fixedProductTaxesEnabled:e.storeConfig.fixed_product_taxes_enable,fixedProductTaxesApply:e.storeConfig.fixed_product_taxes_apply_tax_to_fpt,fixedProductTaxesEnabledDisplayInProductLists:t(e.storeConfig.fixed_product_taxes_display_prices_in_product_lists),fixedProductTaxesEnabledDisplayInSalesModules:t(e.storeConfig.fixed_product_taxes_display_prices_in_sales_modules),fixedProductTaxesEnabledDisplayInProductView:t(e.storeConfig.fixed_product_taxes_display_prices_on_product_view_page)}}function N(e,t=[]){var i;return e?{type:e.__typename,name:e.name,sku:e.sku,uid:e.uid,image:M(e,t),stockStatus:e.stock_status,canonicalUrl:e.canonical_url,urlKey:e.url_key,categories:(i=e.categories)==null?void 0:i.map(s=>s.name),prices:W(e),productAttributes:F(e),options:U(e)}:null}function U(e){var t,i;return e.__typename==="ConfigurableProduct"?e.configurable_options?(t=e.configurable_options)==null?void 0:t.map(s=>{var n;return{uid:s.uid,attributeUid:s.attribute_uid,attributeCode:s.attribute_code,values:(n=s.values)==null?void 0:n.map(r=>({uid:r.uid,label:r.label})),required:!0}}):[]:e.__typename==="GiftCardProduct"?e.gift_card_options?(i=e.gift_card_options)==null?void 0:i.map(s=>({uid:s.uid,required:s.required,title:s.title})):[]:[]}function M(e,t=[]){var s;let i=e.thumbnail;if(e.__typename==="ConfigurableProduct"&&e.variants&&(t==null?void 0:t.length)>0){const n=t.map(o=>o.uid);let r=e.variants.find(o=>{var u;const _=((u=o.attributes)==null?void 0:u.map(a=>a.uid))||[];return n.every(a=>_.includes(a))});r||(r=e.variants.find(o=>{var _;return(_=o.attributes)==null?void 0:_.some(u=>t.some(a=>a.uid===u.uid))})),(s=r==null?void 0:r.product)!=null&&s.image&&(i=r.product.image)}return{src:i==null?void 0:i.url,alt:i==null?void 0:i.label}}function W(e){var t,i,s,n,r,o,_,u,a,d,m,p,f,I,g,T,h,P;return{regularPrice:{currency:((s=(i=(t=e.price_range)==null?void 0:t.minimum_price)==null?void 0:i.regular_price)==null?void 0:s.currency)??"USD",value:((o=(r=(n=e.price_range)==null?void 0:n.minimum_price)==null?void 0:r.regular_price)==null?void 0:o.value)??0},finalPrice:{currency:((a=(u=(_=e.price_range)==null?void 0:_.minimum_price)==null?void 0:u.final_price)==null?void 0:a.currency)??"USD",value:((p=(m=(d=e.price_range)==null?void 0:d.minimum_price)==null?void 0:m.final_price)==null?void 0:p.value)??0},discount:{amountOff:((g=(I=(f=e.price_range)==null?void 0:f.minimum_price)==null?void 0:I.discount)==null?void 0:g.amount_off)??0,percentOff:((P=(h=(T=e.price_range)==null?void 0:T.minimum_price)==null?void 0:h.discount)==null?void 0:P.percent_off)??0},fixedProductTaxes:L(e)}}function F(e){var t,i;return(i=(t=e.custom_attributesV2)==null?void 0:t.items)==null?void 0:i.map(s=>{const n=s.code.split("_").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ");return{...s,code:n}})}function L(e){var t,i,s,n,r;return(i=(t=e.price_range)==null?void 0:t.minimum_price)!=null&&i.fixed_product_taxes?(r=(n=(s=e.price_range)==null?void 0:s.minimum_price)==null?void 0:n.fixed_product_taxes)==null?void 0:r.map(o=>({money:{value:o.amount.value,currency:o.amount.currency},label:o.label})):[]}function w(e,t){return e?{id:e.id,updated_at:e.updated_at,sharing_code:e.sharing_code,items_count:e.items_count,items:k(e,t??[])}:null}function k(e,t){var i,s;return(s=(i=e==null?void 0:e.items_v2)==null?void 0:i.items)!=null&&s.length?e.items_v2.items.map(n=>{const r=$(n);return{id:n.id,quantity:n.quantity,description:n.description,added_at:n.added_at,enteredOptions:t,selectedOptions:r,product:N(n.product,r)}}):[]}function $(e){return e.product.__typename==="ConfigurableProduct"?e.configurable_options?e.configurable_options.map(t=>({value:t.value_label,label:t.option_label,uid:t.configurable_product_option_value_uid})):[]:[]}const q=`
|
|
4
4
|
query STORE_CONFIG_QUERY {
|
|
5
5
|
storeConfig {
|
|
6
6
|
magento_wishlist_general_is_enabled
|
|
@@ -13,7 +13,7 @@ query STORE_CONFIG_QUERY {
|
|
|
13
13
|
fixed_product_taxes_display_prices_on_product_view_page
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
`,H=async()=>
|
|
16
|
+
`,H=async()=>b(q,{method:"GET",cache:"force-cache"}).then(({errors:e,data:t})=>e?E(e):O(t)),B=`
|
|
17
17
|
fragment PRICE_RANGE_FRAGMENT on PriceRange {
|
|
18
18
|
minimum_price {
|
|
19
19
|
regular_price {
|
|
@@ -58,44 +58,6 @@ query STORE_CONFIG_QUERY {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
`,x=`
|
|
62
|
-
fragment PRODUCT_FRAGMENT on ProductInterface {
|
|
63
|
-
__typename
|
|
64
|
-
uid
|
|
65
|
-
sku
|
|
66
|
-
name
|
|
67
|
-
thumbnail {
|
|
68
|
-
url
|
|
69
|
-
label
|
|
70
|
-
}
|
|
71
|
-
url_key
|
|
72
|
-
categories {
|
|
73
|
-
url_path
|
|
74
|
-
url_key
|
|
75
|
-
name
|
|
76
|
-
}
|
|
77
|
-
stock_status
|
|
78
|
-
canonical_url
|
|
79
|
-
custom_attributesV2(filters: {is_visible_on_front: true}){
|
|
80
|
-
items {
|
|
81
|
-
code
|
|
82
|
-
...on AttributeValue {
|
|
83
|
-
value
|
|
84
|
-
}
|
|
85
|
-
...on AttributeSelectedOptions {
|
|
86
|
-
selected_options {
|
|
87
|
-
value
|
|
88
|
-
label
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
price_range {
|
|
94
|
-
...PRICE_RANGE_FRAGMENT
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
${B}
|
|
99
61
|
`,z=`
|
|
100
62
|
... on SimpleProduct {
|
|
101
63
|
options {
|
|
@@ -110,12 +72,22 @@ ${B}
|
|
|
110
72
|
attribute_code
|
|
111
73
|
values {
|
|
112
74
|
uid
|
|
75
|
+
label
|
|
113
76
|
}
|
|
114
77
|
}
|
|
115
78
|
variants {
|
|
79
|
+
attributes {
|
|
80
|
+
code
|
|
81
|
+
uid
|
|
82
|
+
label
|
|
83
|
+
}
|
|
116
84
|
product {
|
|
117
85
|
sku
|
|
118
86
|
stock_status
|
|
87
|
+
image {
|
|
88
|
+
label
|
|
89
|
+
url
|
|
90
|
+
}
|
|
119
91
|
}
|
|
120
92
|
}
|
|
121
93
|
}
|
|
@@ -147,7 +119,7 @@ ${B}
|
|
|
147
119
|
}
|
|
148
120
|
}
|
|
149
121
|
}
|
|
150
|
-
`,
|
|
122
|
+
`,j=`
|
|
151
123
|
... on BundleProduct {
|
|
152
124
|
items {
|
|
153
125
|
uid
|
|
@@ -160,22 +132,60 @@ ${B}
|
|
|
160
132
|
}
|
|
161
133
|
}
|
|
162
134
|
}
|
|
163
|
-
`,
|
|
135
|
+
`,x=`
|
|
136
|
+
fragment PRODUCT_FRAGMENT on ProductInterface {
|
|
137
|
+
__typename
|
|
138
|
+
uid
|
|
139
|
+
sku
|
|
140
|
+
name
|
|
141
|
+
thumbnail {
|
|
142
|
+
url
|
|
143
|
+
label
|
|
144
|
+
}
|
|
145
|
+
url_key
|
|
146
|
+
categories {
|
|
147
|
+
url_path
|
|
148
|
+
url_key
|
|
149
|
+
name
|
|
150
|
+
}
|
|
151
|
+
stock_status
|
|
152
|
+
canonical_url
|
|
153
|
+
custom_attributesV2(filters: {is_visible_on_front: true}){
|
|
154
|
+
items {
|
|
155
|
+
code
|
|
156
|
+
...on AttributeValue {
|
|
157
|
+
value
|
|
158
|
+
}
|
|
159
|
+
...on AttributeSelectedOptions {
|
|
160
|
+
selected_options {
|
|
161
|
+
value
|
|
162
|
+
label
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
price_range {
|
|
168
|
+
...PRICE_RANGE_FRAGMENT
|
|
169
|
+
}
|
|
170
|
+
${z}
|
|
171
|
+
${Y}
|
|
172
|
+
${Q}
|
|
173
|
+
${K}
|
|
174
|
+
${j}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
${B}
|
|
178
|
+
`,V=`
|
|
164
179
|
query GET_PRODUCT_BY_SKU($sku: String!) {
|
|
165
180
|
products(filter: { sku: { eq: $sku } }) {
|
|
166
181
|
items {
|
|
167
182
|
...PRODUCT_FRAGMENT
|
|
168
|
-
${z}
|
|
169
|
-
${Y}
|
|
170
|
-
${Q}
|
|
171
|
-
${K}
|
|
172
|
-
${V}
|
|
173
183
|
}
|
|
174
184
|
}
|
|
175
185
|
}
|
|
176
186
|
|
|
177
187
|
${x}
|
|
178
|
-
`,Z=async
|
|
188
|
+
`,Z=async(e,t)=>{if(!e)throw Error("Product SKU is not set");return b(V,{variables:{sku:e}}).then(({errors:i,data:s})=>{var n;return i?E(i):(n=s==null?void 0:s.products)!=null&&n.items?N(s.products.items[0],t??[]):null})},X=`
|
|
179
189
|
fragment CUSTOMIZABLE_OPTIONS_FRAGMENT on SelectedCustomizableOption {
|
|
180
190
|
type
|
|
181
191
|
customizable_option_uid
|
|
@@ -269,7 +279,7 @@ fragment WISHLIST_ITEM_FRAGMENT on WishlistItemInterface {
|
|
|
269
279
|
|
|
270
280
|
${x}
|
|
271
281
|
${X}
|
|
272
|
-
`,
|
|
282
|
+
`,A=`
|
|
273
283
|
fragment WISHLIST_FRAGMENT on Wishlist {
|
|
274
284
|
id
|
|
275
285
|
updated_at
|
|
@@ -283,7 +293,7 @@ fragment WISHLIST_FRAGMENT on Wishlist {
|
|
|
283
293
|
}
|
|
284
294
|
|
|
285
295
|
${se}
|
|
286
|
-
`,
|
|
296
|
+
`,re=`
|
|
287
297
|
query GET_WISHLISTS_QUERY {
|
|
288
298
|
customer {
|
|
289
299
|
wishlists {
|
|
@@ -292,8 +302,8 @@ ${se}
|
|
|
292
302
|
}
|
|
293
303
|
}
|
|
294
304
|
|
|
295
|
-
${
|
|
296
|
-
`,
|
|
305
|
+
${A}
|
|
306
|
+
`,ne=async()=>l.authenticated?b(re).then(({errors:e,data:t})=>{var i;return e?E(e):(i=t==null?void 0:t.customer)!=null&&i.wishlists?t.customer.wishlists.map(s=>w(s)):null}):y(),ue=`
|
|
297
307
|
mutation ADD_PRODUCTS_TO_WISHLIST_MUTATION(
|
|
298
308
|
$wishlistId: ID!,
|
|
299
309
|
$wishlistItems: [WishlistItemInput!]!,
|
|
@@ -311,5 +321,5 @@ ${se}
|
|
|
311
321
|
}
|
|
312
322
|
}
|
|
313
323
|
}
|
|
314
|
-
${
|
|
315
|
-
`,
|
|
324
|
+
${A}
|
|
325
|
+
`,oe=async e=>{var s,n,r,o,_;if(!e)return null;const t=y();let i={id:(t==null?void 0:t.id)??"",updated_at:"",sharing_code:"",items_count:0,items:(t==null?void 0:t.items)??[]};for(const u of e){if((s=t.items)==null?void 0:s.some(p=>C(p,{sku:u.sku,optionUIDs:u.optionsUIDs})))continue;const d=u.optionsUIDs?(n=u.optionsUIDs)==null?void 0:n.map(p=>({uid:p})):[],m=await Z(u.sku,d);m&&(i.items=[...i.items,{quantity:u.quantity,selectedOptions:d,enteredOptions:[],product:m}])}if(i.items_count=(r=i.items)==null?void 0:r.length,c.emit("wishlist/data",i),l.authenticated){if(!l.wishlistId)throw c.emit("wishlist/data",t),Error("Wishlist ID is not set");const u={wishlistId:l.wishlistId,wishlistItems:e.map(({sku:f,parentSku:I,quantity:g,optionsUIDs:T,enteredOptions:h})=>({sku:f,parent_sku:I,quantity:g,selected_options:T,entered_options:h}))},{errors:a,data:d}=await b(ue,{variables:u}),m=[...((o=d==null?void 0:d.addProductsToWishlist)==null?void 0:o.user_errors)??[],...a??[]];if(m.length>0)return c.emit("wishlist/data",t),E(m);const p=w(d.addProductsToWishlist.wishlist,((_=e[0])==null?void 0:_.enteredOptions)??[]);c.emit("wishlist/data",p)}return null},ae=()=>(l.wishlistId=null,l.authenticated=!1,Promise.resolve(null)),S=async()=>{if(l.initializing)return null;l.initializing=!0,l.config||(l.config=await H());const e=l.authenticated?await le():await _e();return c.emit("wishlist/initialized",e),c.emit("wishlist/data",e),l.initializing=!1,e};async function le(){const e=await ne(),t=e?e[0]:null;return t?(l.wishlistId=t.id,t):null}async function _e(){try{return await y()}catch(e){throw console.error(e),e}}const ce=async e=>{var n;if(!e)return null;const t=y(!0),i=[];if((n=t==null?void 0:t.items)==null||n.forEach(r=>{var u;const o=((u=r.selectedOptions)==null?void 0:u.map(a=>a.uid))||[];if(!e.items.some(a=>C(a,{sku:r.product.sku,optionUIDs:o}))){const a={sku:r.product.sku,quantity:1,optionsUIDs:o,enteredOptions:r.enteredOptions||void 0};i.push(a)}}),i.length===0)return null;const s=await oe(i);return G(),s};export{se as W,oe as a,A as b,fe as c,Z as d,ne as e,S as f,H as g,le as h,R as i,_e as j,ce as m,ae as r,w as t};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{events as u}from"@dropins/tools/event-bus.js";import{FetchGraphQL as S}from"@dropins/tools/fetch-graphql.js";function g(s){const e=document.cookie.split(";");for(const t of e)if(t.trim().startsWith(`${s}=`))return t.trim().substring(s.length+1);return null}const f={wishlistId:null,authenticated:!1,isLoading:!0},n=new Proxy(f,{set(s,e,t){if(s[e]=t,e==="wishlistId"){if(t===n.wishlistId)return!0;if(t===null)return document.cookie="DROPIN__WISHLIST__WISHLIST-ID=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/",!0;const r=new Date;r.setDate(r.getDate()+30),document.cookie=`DROPIN__WISHLIST__WISHLIST-ID=${t}; expires=${r.toUTCString()}; path=/`}return Reflect.set(s,e,t)},get(s,e){return e==="wishlistId"?g("DROPIN__WISHLIST__WISHLIST-ID"):s[e]}});function d(s,e){var
|
|
3
|
+
import{events as u}from"@dropins/tools/event-bus.js";import{FetchGraphQL as S}from"@dropins/tools/fetch-graphql.js";function g(s){const e=document.cookie.split(";");for(const t of e)if(t.trim().startsWith(`${s}=`))return t.trim().substring(s.length+1);return null}const f={wishlistId:null,authenticated:!1,isLoading:!0},n=new Proxy(f,{set(s,e,t){if(s[e]=t,e==="wishlistId"){if(t===n.wishlistId)return!0;if(t===null)return document.cookie="DROPIN__WISHLIST__WISHLIST-ID=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/",!0;const r=new Date;r.setDate(r.getDate()+30),document.cookie=`DROPIN__WISHLIST__WISHLIST-ID=${t}; expires=${r.toUTCString()}; path=/`}return Reflect.set(s,e,t)},get(s,e){return e==="wishlistId"?g("DROPIN__WISHLIST__WISHLIST-ID"):s[e]}});function d(s,e){var o;if(s.product.sku!==e.sku)return!1;const t=((o=s.selectedOptions)==null?void 0:o.map(i=>i.uid).filter(i=>!!i).sort())||[],r=(e.optionUIDs||[]).filter(i=>!!i).sort();return JSON.stringify(t)===JSON.stringify(r)}const c="DROPIN__WISHLIST__WISHLIST__DATA";function E(s){const e=n.authenticated?sessionStorage:localStorage;if(s)try{e.setItem(c,JSON.stringify(s))}catch(t){p(t)?console.error("Storage quota exceeded:",t):console.error("Error saving wishlist:",t)}else e.removeItem(c)}const p=s=>s instanceof DOMException&&s.name==="QuotaExceededError";function _(s=!1){const e=n.authenticated&&!s?sessionStorage:localStorage;try{const t=e.getItem(c);return t?JSON.parse(t):{id:"",items:[]}}catch(t){return console.error("Error retrieving wishlist:",t),{id:"",items:[]}}}function H(){localStorage.removeItem(c)}function L(s,e=[],t=[]){var i;const r=n.authenticated?sessionStorage:localStorage,o=r.getItem(c)?JSON.parse(r.getItem(c)):{items:[]};return(i=o==null?void 0:o.items)==null?void 0:i.find(l=>d(l,{sku:s,optionUIDs:e}))}const{setEndpoint:P,setFetchGraphQlHeader:F,removeFetchGraphQlHeader:R,setFetchGraphQlHeaders:M,fetchGraphQl:w,getConfig:N}=new S().getMethods(),O=s=>{const e=s.map(t=>t.message).join(" ");throw Error(e)},D=`
|
|
4
4
|
mutation REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION(
|
|
5
5
|
$wishlistId: ID!,
|
|
6
6
|
$wishlistItemsIds: [ID!]!,
|
|
@@ -15,4 +15,4 @@ import{events as u}from"@dropins/tools/event-bus.js";import{FetchGraphQL as S}fr
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
`,$=async s=>{var r,i
|
|
18
|
+
`,$=async s=>{var r,o,i;const e=_(),t={...e,items:(r=e.items)==null?void 0:r.filter(l=>!s.some(I=>{var a;return d(l,{sku:I.product.sku,optionUIDs:(a=I.selectedOptions)==null?void 0:a.map(h=>h.uid)})}))};if(t.items_count=(o=t.items)==null?void 0:o.length,u.emit("wishlist/data",t),n.authenticated){if(!n.wishlistId)throw Error("Wishlist ID is not set");const l=s.map(m=>m.id),{errors:I,data:a}=await w(D,{variables:{wishlistId:n.wishlistId,wishlistItemsIds:l}}),h=[...((i=a==null?void 0:a.removeProductsFromWishlist)==null?void 0:i.user_errors)??[],...I??[]];return h.length>0?(u.emit("wishlist/data",e),O(h)):null}return null};export{P as a,F as b,R as c,M as d,N as e,w as f,_ as g,O as h,d as i,E as j,H as k,L as l,$ as r,n as s};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as
|
|
3
|
+
import{jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{useState as m,useCallback as P,useEffect as d}from"@dropins/tools/preact-compat.js";import{Button as b,Icon as h}from"@dropins/tools/components.js";import{events as a}from"@dropins/tools/event-bus.js";import{s as x,g as E,i as F,r as H}from"../chunks/removeProductsFromWishlist.js";import{c as L,a as T}from"../chunks/mergeWishlists.js";import{S as j}from"../chunks/HeartFilled.js";import{S as q}from"../chunks/Heart.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/lib.js";const R=({product:s,iconWishlisted:u,iconToWishlist:g,size:I,variant:v,disabled:p,labelToWishlist:k,labelWishlisted:W,onClick:w})=>{const[D,C]=m(x.authenticated),[c,n]=m(!1),[f,S]=m(null),{isGuestWishlistEnabled:U}=L.getConfig(),o=P(()=>{var e;const i=E(),t=(e=i==null?void 0:i.items)==null?void 0:e.find(l=>F(l,{sku:s.sku,optionUIDs:s.optionUIDs}));S(t??null),n(!!t)},[s.sku,s.optionUIDs]);d(()=>{o()},[o]),d(()=>{const i=l=>C(l),t=a.on("authenticated",i),e=a.on("wishlist/data",o);return()=>{t==null||t.off(),e==null||e.off()}},[o]);const y=async()=>{var i;c?(await H([f]),n(!1),a.emit("wishlist/alert",{action:"remove",item:f})):(await T([{sku:s.sku,quantity:1,optionsUIDs:s.optionUIDs??void 0,enteredOptions:(i=s.options)!=null&&i.items?s.options.items.filter(t=>t.selected).map(t=>({uid:t.uid,value:t.value})):void 0}]),n(!0),a.emit("wishlist/alert",{action:"add",item:{product:s}}))};return!D&&!U?null:r(b,{active:c,"data-testid":"wishlist-toggle",size:I??"medium",variant:v??"tertiary",disabled:p,icon:r(h,{source:g??q}),activeIcon:r(h,{source:u??j}),onClick:w??y,children:k,activeChildren:W})};export{R as WishlistToggle,R as default};
|
package/data/models/product.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Product } from '../models';
|
|
1
|
+
import { Product, ConfigurableOption } from '../models';
|
|
2
2
|
|
|
3
|
-
export declare function transformProduct(data: any): Product | null;
|
|
3
|
+
export declare function transformProduct(data: any, selectedOptions?: ConfigurableOption[]): Product | null;
|
|
4
4
|
//# sourceMappingURL=transform-product.d.ts.map
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name": "@dropins/storefront-wishlist", "version": "0.
|
|
1
|
+
{"name": "@dropins/storefront-wishlist", "version": "1.0.0-beta2", "@dropins/tools": "~1.0.0", "license": "SEE LICENSE IN LICENSE.md"}
|
package/render.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
(function(r,
|
|
3
|
+
(function(r,e){try{if(typeof document<"u"){const t=document.createElement("style"),n=e.styleId;for(const i in e.attributes)t.setAttribute(i,e.attributes[i]);t.setAttribute("data-dropin",n),t.appendChild(document.createTextNode(r));const a=document.querySelector('style[data-dropin="sdk"]');if(a)a.after(t);else{const i=document.querySelector('link[rel="stylesheet"], style');i?i.before(t):document.head.append(t)}}}catch(t){console.error("dropin-styles (injectCodeFunction)",t)}})(".wishlist-empty-wishlist{container-type:inline-size;container-name:wishlist}.wishlist-empty-wishlist__wrapper .dropin-card--secondary{display:grid;grid-auto-rows:min-content;justify-content:center;text-align:center;border:unset}.wishlist-empty-wishlist .dropin-illustrated-message__heading{font:var(--type-headline-1-font)}.wishlist-empty-wishlist .dropin-illustrated-message__message{font:var(--type-body-1-default-font)}@container wishlist (width < 737px){.wishlist-empty-wishlist__wrapper .dropin-card{border:unset;border-style:hidden}}.wishlist-wishlist{container-type:inline-size;container-name:wishlist-grid;max-width:inherit}.wishlist-wishlist__content{display:grid;gap:var(--spacing-medium);margin:auto;padding:var(--spacing-medium) 0}.wishlist-wishlist__heading{color:var(--color-neutral-800);display:grid;font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);padding:var(--spacing-small) 0;row-gap:var(--spacing-xsmall)}.wishlist-wishlist__heading-count{color:#6d6d6d;margin-left:var(--spacing-xxsmall);letter-spacing:normal;font:var(--type-details-caption-2-font)}.wishlist-wishlist__content.wishlist-wishlist__content--empty{border:var(--shape-border-width-2) solid var(--color-neutral-400);border-radius:var(--shape-border-radius-2);grid-template-columns:repeat(1,1fr);padding:var(--spacing-xxbig);margin:var(--spacing-xxbig) auto}@media only screen and (max-width: 480px){.wishlist-wishlist__content,.dropin-skeleton{grid-template-columns:repeat(1,1fr)}.dropin-skeleton-row:nth-child(n+2){display:none}}@media only screen and (min-width: 480px) and (max-width: 600px){.wishlist-wishlist__content,.dropin-skeleton{grid-template-columns:repeat(2,1fr)}.dropin-skeleton-row:nth-child(n+3){display:none}}@media only screen and (min-width: 600px){.wishlist-wishlist__content,.dropin-skeleton{grid-template-columns:repeat(2,1fr)}.dropin-skeleton-row:nth-child(n+3){display:none}}@media only screen and (min-width: 768px){.wishlist-wishlist__content,.dropin-skeleton{grid-template-columns:repeat(3,1fr)}.dropin-skeleton-row:nth-child(n){display:block}}.wishlist-product-item{background-color:var(--color-neutral-50);margin-bottom:var(--spacing-small)}.wishlist-product-item__content{display:flex;flex-direction:column;gap:var(--spacing-small)}.wishlist-product-item__content .wishlist-product-item-image{background:var(--color-neutral-200);height:100%;padding:0;width:100%}.wishlist-product-item__content .wishlist-product-item__title{color:var(--color-neutral-800);font:var(--type-body-2-strong-font);letter-spacing:var(--type-body-2-strong-letter-spacing);margin:0;position:relative}.wishlist-product-item-name{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:85%}a.wishlist-product-item-name:active,a.wishlist-product-item-name:hover,a.wishlist-product-item-name{color:var(--color-neutral-800);cursor:pointer;font:var(--type-body-2-strong-font);letter-spacing:var(--type-body-2-strong-letter-spacing)}.wishlist-product-item__content .wishlist-product-item-button__remove{position:absolute;right:0;top:-10px}.wishlist-product-item__content .wishlist-product-item-options{font:var(--type-body-2-default-font)}.wishlist-product-item__content .wishlist-product-item-option__attribute{text-transform:capitalize}.wishlist-product-item__content .wishlist-product-item-option__label{font:var(--type-body-2-strong-font)}.wishlist-product-item__content .wishlist-product-item-price{display:inline;font:var(--type-body-2-default-font)}.strikeout{text-decoration:line-through}.wishlist-product-item__content .wishlist-product-item-discounted-price{display:inline;margin-left:var(--spacing-xsmall);color:var(--color-alert-800)}.wishlist-product-item-move-to-cart{display:grid;grid-area:product-add-to-cart;justify-content:end}.wishlist-product-item-tax{color:var(--color-neutral-500)}.wishlist-product-item-tax span{margin-right:var(--spacing-xsmall)}.image-carousel{display:flex;flex-direction:column;gap:var(--spacing-medium);padding:var(--spacing-medium)}.image-carousel .image-carousel-image{object-fit:contain;padding:var(--spacing-xxsmall) 0;width:100%}.image-switcher-area{margin-top:var(--spacing-small);text-align:center;width:100%}.image-switcher-area .image-switcher{cursor:pointer;border-radius:50%;display:inline-flex;height:var(--spacing-xsmall);margin:0 var(--spacing-xxsmall);width:var(--spacing-xsmall)}.image-switcher-area .image-switcher-active{background-color:var(--color-neutral-900);border:var(--shape-border-width-1) solid var(--color-brand-700)}.image-switcher-area .image-switcher-inactive{background-color:var(--color-neutral-600);border:var(--shape-border-width-1) solid var(--color-neutral-600)}@media only screen and (max-width: 480px){.image-carousel{gap:var(--spacing-xxsmall)}.image-carousel .image-carousel-image{height:250px}}@media only screen and (min-width: 480px) and (max-width: 600px){.image-carousel{gap:var(--spacing-xsmall)}.image-carousel .image-carousel-image{height:300px}}@media only screen and (min-width: 600px){.image-carousel{gap:var(--spacing-xsmall)}.image-carousel .image-carousel-image{height:300px}}@media only screen and (min-width: 768px){.image-carousel{gap:var(--spacing-small)}.image-carousel .image-carousel-image{height:350px}}@media only screen and (min-width: 1024px){.image-carousel{gap:var(--spacing-medium)}.image-carousel .image-carousel-image{height:400px}}.wishlist-login__sign-in{grid-column-start:2;color:var(--color-neutral-800);font:var(--type-body-1-default-font);letter-spacing:var(--type-body-2-default-letter-spacing);margin-top:var(--spacing-xxsmall);text-align:center}a.wishlist-login__link{font:var(--type-body-1-strong-font);letter-spacing:var(--type-body-2-strong-letter-spacing);margin-left:var(--spacing-xxsmall);text-decoration:underline;text-decoration-thickness:auto;text-underline-offset:auto;color:var(--color-neutral-800)}a.wishlist-login__link:hover{color:var(--color-neutral-800);text-decoration:underline;text-decoration-thickness:auto;text-underline-offset:auto}",{styleId:"Wishlist"});
|
|
4
4
|
import{jsx as o}from"@dropins/tools/preact-jsx-runtime.js";import{Render as n}from"@dropins/tools/lib.js";import{useState as d,useEffect as a}from"@dropins/tools/preact-hooks.js";import{UIProvider as c}from"@dropins/tools/components.js";import{events as m}from"@dropins/tools/event-bus.js";const h={EmptyWishlist:{heading:"Your wishlist is empty",message:"Add items by clicking on the heart icon.",cta:"Start shopping"},Wishlist:{heading:"Wishlist {count}",loading:"Loading..."},Alert:{addProduct:{heading:"Added to wishlist",message:"{product} has been added to your wishlist"},removeProduct:{heading:"Removed from wishlist",message:"{product} has been removed from your wishlist"},moveToCart:{heading:"Moved to cart",message:"{product} has been moved to your cart"},viewWishlist:"View wishlist"},Login:{sync:" to sync your saved items across all your devices.",logIn:"Log in"}},u={CartActionButton:"Move To Cart",TrashActionButton:"Remove this product from wishlist",CustomizeActionButton:"Customize"},l={Wishlist:h,ProductItem:u},g={default:l},f=({children:e})=>{const[s,i]=d("en_US");return a(()=>{const t=m.on("locale",r=>{i(r)},{eager:!0});return()=>{t==null||t.off()}},[]),o(c,{lang:s,langDefinitions:g,children:e})},P=new n(o(f,{}));export{P as render};
|