@dropins/storefront-wishlist 1.0.0-beta1 → 1.0.0-beta3
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/addProductsToWishlist/addProductsToWishlist.d.ts +0 -1
- package/api/getProductBySku/getProductBySku.d.ts +3 -1
- package/chunks/WishlistItem.js +1 -1
- package/chunks/mergeWishlists.js +64 -54
- package/containers/Wishlist.js +1 -1
- package/containers/WishlistToggle/WishlistToggle.d.ts +4 -0
- package/containers/WishlistToggle.js +1 -1
- package/data/models/product.d.ts +2 -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 h,h as b,g as E,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)})]}),pe=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,f,p,I,g,T,y,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:((f=(m=(d=e.price_range)==null?void 0:d.minimum_price)==null?void 0:m.final_price)==null?void 0:f.value)??0},discount:{amountOff:((g=(I=(p=e.price_range)==null?void 0:p.minimum_price)==null?void 0:I.discount)==null?void 0:g.amount_off)??0,percentOff:((P=(y=(T=e.price_range)==null?void 0:T.minimum_price)==null?void 0:y.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()=>h(q,{method:"GET",cache:"force-cache"}).then(({errors:e,data:t})=>e?b(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 h(V,{variables:{sku:e}}).then(({errors:i,data:s})=>{var n;return i?b(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?h(re).then(({errors:e,data:t})=>{var i;return e?b(e):(i=t==null?void 0:t.customer)!=null&&i.wishlists?t.customer.wishlists.map(s=>w(s)):null}):E(),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=E();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(f=>C(f,{sku:u.sku,optionUIDs:u.optionsUIDs})))continue;const d=u.optionsUIDs?(n=u.optionsUIDs)==null?void 0:n.map(f=>({uid:f})):[],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:p,quantity:I,optionsUIDs:g,enteredOptions:T})=>({sku:p,quantity:I,selected_options:g,entered_options:T}))},{errors:a,data:d}=await h(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),b(m);const f=w(d.addProductsToWishlist.wishlist,((_=e[0])==null?void 0:_.enteredOptions)??[]);c.emit("wishlist/data",f)}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 E()}catch(e){throw console.error(e),e}}const ce=async e=>{var n;if(!e)return null;const t=E(!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,pe 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};
|
package/containers/Wishlist.js
CHANGED
|
@@ -14,4 +14,4 @@ import{jsx as i,jsxs as d,Fragment as H}from"@dropins/tools/preact-jsx-runtime.j
|
|
|
14
14
|
<rect x="6" y="556" width="132" height="22" rx="4" fill="#E8E8E8" />
|
|
15
15
|
<rect x="6" y="592" width="280" height="48" rx="24" fill="#D9D9D9" />
|
|
16
16
|
</svg>
|
|
17
|
-
`}),Q=()=>d(q,{"data-testid":"wishlist-loader",children:[i(S,{}),i(S,{}),i(S,{})]}),hi=({routeEmptyWishlistCTA:l,routeToWishlist:s,moveProdToCart:e,routeProdDetailPage:c,...r})=>{const[f,m]=u(null),[N,_]=u(b.authenticated),[L,g]=u(b.isLoading),W=n=>_(n),[p,a]=u(null),x=j(n=>{const{action:o,item:h}=n;a(i(J,{action:o,item:h}))},[s]);return F(()=>{const n=I.on("authenticated",W),o=I.on("wishlist/alert",t=>x(t)),h=I.on("wishlist/data",t=>{m(t),g(!1)});return()=>{n==null||n.off(),h==null||h.off(),o==null||o.off()}},[x]),i(U,{...r,wishlistData:f,wishlistAlert:p,routeEmptyWishlistCTA:l,moveProdToCart:e,isLoggedIn:N,isLoading:L,routeProdDetailPage:c})},U=({className:l,wishlistData:s,wishlistAlert:e,isLoggedIn:c,isLoading:r,moveProdToCart:f,routeEmptyWishlistCTA:m,onLoginClick:N,routeProdDetailPage:_,...L})=>{const[g,W]=u(e),p=$({wishlistHeading:"Wishlist.Wishlist.heading",wishlistLoadingHeading:"Wishlist.Wishlist.loading"}),a=k(()=>{var t;return((t=s==null?void 0:s.items)==null?void 0:t.length)>0?s.items.map(y=>{var w;return i(G,{initialData:y,moveProdToCart:f,routeProdDetailPage:_},(w=y.product)==null?void 0:w.sku)}):null},[s,f,_]);F(()=>{if(e){W(e);const t=setTimeout(()=>{W(null)},5e3);return()=>clearTimeout(t)}},[e]);const x=k(()=>g?i(R,{node:g,className:"wishlist-wishlist__alert"}):null,[g]),n=()=>d(H,{children:[i("div",{className:"wishlist-wishlist__heading","data-testid":"wishlist-heading-wrapper",children:i("div",{className:"wishlist-wishlist__heading-text","data-testid":"loader-wishlist-heading",children:p.wishlistLoadingHeading})}),i(Q,{})]}),o=()=>a?d(H,{children:[h,i("div",{className:"wishlist-wishlist__content",children:a})]}):i("div",{className:v(["wishlist-wishlist__content","wishlist-wishlist__content--empty"]),children:d("div",{children:[i(O,{"data-testid":"empty-wishlist",ctaLinkURL:m==null?void 0:m()}),!c&&i(X,{onLoginClick:N})]})}),h=k(()=>{var t;return a?i("div",{className:"wishlist-wishlist__heading","data-testid":"wishlist-heading-wrapper",children:i("div",{className:"wishlist-wishlist__heading-text","data-testid":"default-wishlist-heading",children:(t=p.wishlistHeading)==null?void 0:t.split(" {count}").map((y,w)=>{var E;return d(B,{children:[y,w===0&&i("span",{className:"wishlist-wishlist__heading-count","data-testid":"wishlist-heading-count",children:`${s==null?void 0:s.items_count} products`})]},((E=s==null?void 0:s.id)==null?void 0:E.toString())+w)})})}):null},[p,a,s]);return d("div",{...L,className:v(["wishlist-wishlist",l]),children:[x,r?n():o()]})},X=({onLoginClick:l})=>d("div",{className:"wishlist-login__sign-in",children:[i("a",{"data-testid":"log-in-link",className:"wishlist-login__link",href:"",rel:"noreferrer",onClick:l,role:"button",children:i(M,{id:"Wishlist.Login.logIn"})}),i(M,{id:"Wishlist.Login.sync"})]});export{hi as Wishlist,hi as default};
|
|
17
|
+
`}),Q=()=>d(q,{"data-testid":"wishlist-loader",children:[i(S,{}),i(S,{}),i(S,{})]}),hi=({routeEmptyWishlistCTA:l,routeToWishlist:s,moveProdToCart:e,routeProdDetailPage:c,...r})=>{const[f,m]=u(null),[N,_]=u(b.authenticated),[L,g]=u(b.isLoading),W=n=>_(n),[p,a]=u(null),x=j(n=>{const{action:o,item:h}=n;a(i(J,{action:o,item:h,routeToWishlist:s}))},[s]);return F(()=>{const n=I.on("authenticated",W),o=I.on("wishlist/alert",t=>x(t)),h=I.on("wishlist/data",t=>{m(t),g(!1)});return()=>{n==null||n.off(),h==null||h.off(),o==null||o.off()}},[x]),i(U,{...r,wishlistData:f,wishlistAlert:p,routeEmptyWishlistCTA:l,moveProdToCart:e,isLoggedIn:N,isLoading:L,routeProdDetailPage:c})},U=({className:l,wishlistData:s,wishlistAlert:e,isLoggedIn:c,isLoading:r,moveProdToCart:f,routeEmptyWishlistCTA:m,onLoginClick:N,routeProdDetailPage:_,...L})=>{const[g,W]=u(e),p=$({wishlistHeading:"Wishlist.Wishlist.heading",wishlistLoadingHeading:"Wishlist.Wishlist.loading"}),a=k(()=>{var t;return((t=s==null?void 0:s.items)==null?void 0:t.length)>0?s.items.map(y=>{var w;return i(G,{initialData:y,moveProdToCart:f,routeProdDetailPage:_},(w=y.product)==null?void 0:w.sku)}):null},[s,f,_]);F(()=>{if(e){W(e);const t=setTimeout(()=>{W(null)},5e3);return()=>clearTimeout(t)}},[e]);const x=k(()=>g?i(R,{node:g,className:"wishlist-wishlist__alert"}):null,[g]),n=()=>d(H,{children:[i("div",{className:"wishlist-wishlist__heading","data-testid":"wishlist-heading-wrapper",children:i("div",{className:"wishlist-wishlist__heading-text","data-testid":"loader-wishlist-heading",children:p.wishlistLoadingHeading})}),i(Q,{})]}),o=()=>a?d(H,{children:[h,i("div",{className:"wishlist-wishlist__content",children:a})]}):i("div",{className:v(["wishlist-wishlist__content","wishlist-wishlist__content--empty"]),children:d("div",{children:[i(O,{"data-testid":"empty-wishlist",ctaLinkURL:m==null?void 0:m()}),!c&&i(X,{onLoginClick:N})]})}),h=k(()=>{var t;return a?i("div",{className:"wishlist-wishlist__heading","data-testid":"wishlist-heading-wrapper",children:i("div",{className:"wishlist-wishlist__heading-text","data-testid":"default-wishlist-heading",children:(t=p.wishlistHeading)==null?void 0:t.split(" {count}").map((y,w)=>{var E;return d(B,{children:[y,w===0&&i("span",{className:"wishlist-wishlist__heading-count","data-testid":"wishlist-heading-count",children:`${s==null?void 0:s.items_count} products`})]},((E=s==null?void 0:s.id)==null?void 0:E.toString())+w)})})}):null},[p,a,s]);return d("div",{...L,className:v(["wishlist-wishlist",l]),children:[x,r?n():o()]})},X=({onLoginClick:l})=>d("div",{className:"wishlist-login__sign-in",children:[i("a",{"data-testid":"log-in-link",className:"wishlist-login__link",href:"",rel:"noreferrer",onClick:l,role:"button",children:i(M,{id:"Wishlist.Login.logIn"})}),i(M,{id:"Wishlist.Login.sync"})]});export{hi as Wishlist,hi as default};
|
|
@@ -13,6 +13,10 @@ export interface WishlistToggleProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
13
13
|
labelToWishlist?: string;
|
|
14
14
|
labelWishlisted?: string;
|
|
15
15
|
onClick?: () => void;
|
|
16
|
+
removeProdFromCart?: (product: {
|
|
17
|
+
uid: string;
|
|
18
|
+
quantity: number;
|
|
19
|
+
}[]) => Promise<any>;
|
|
16
20
|
}
|
|
17
21
|
export declare const WishlistToggle: Container<WishlistToggleProps>;
|
|
18
22
|
//# sourceMappingURL=WishlistToggle.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as
|
|
3
|
+
import{jsx as m}from"@dropins/tools/preact-jsx-runtime.js";import{useState as c,useCallback as y,useEffect as u}from"@dropins/tools/preact-compat.js";import{Button as C,Icon as d}from"@dropins/tools/components.js";import{events as a}from"@dropins/tools/event-bus.js";import{s as j,g as q,i as x,r as E}from"../chunks/removeProductsFromWishlist.js";import{c as H,a as P}from"../chunks/mergeWishlists.js";import{S as T}from"../chunks/HeartFilled.js";import{S as z}from"../chunks/Heart.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/lib.js";const V=({product:s,iconWishlisted:I,iconToWishlist:v,size:g,variant:k,disabled:D,labelToWishlist:U,labelWishlisted:p,onClick:w,removeProdFromCart:r})=>{const[O,S]=c(j.authenticated),[f,n]=c(!1),[h,W]=c(null),{isGuestWishlistEnabled:L}=H.getConfig(),o=y(()=>{var i;const e=q(),t=(i=e==null?void 0:e.items)==null?void 0:i.find(l=>x(l,{sku:s.topLevelSku??s.sku,optionUIDs:s.optionUIDs??(s.selectedOptionsUIDs?Object.values(s.selectedOptionsUIDs):void 0)}));W(t??null),n(!!t)},[s.topLevelSku,s.sku,s.optionUIDs,s.selectedOptionsUIDs]);u(()=>{o()},[o]),u(()=>{const e=l=>S(l),t=a.on("authenticated",e),i=a.on("wishlist/data",o);return()=>{t==null||t.off(),i==null||i.off()}},[o]);const b=async()=>{var e;f?(await E([h]),n(!1),a.emit("wishlist/alert",{action:"remove",item:h})):(await P([{sku:s.topLevelSku??s.sku,quantity:1,optionsUIDs:s.optionUIDs??(s.selectedOptionsUIDs?Object.values(s.selectedOptionsUIDs):void 0),enteredOptions:(e=s.options)!=null&&e.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}}),r&&await r([{uid:s.uid,quantity:0}]))};return!O&&!L?null:m(C,{active:f,"data-testid":"wishlist-toggle",size:g??"medium",variant:k??"tertiary",disabled:D,icon:m(d,{source:v??z}),activeIcon:m(d,{source:I??T}),onClick:w??b,children:U,activeChildren:p})};export{V as WishlistToggle,V as default};
|
package/data/models/product.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export interface Product {
|
|
|
18
18
|
type: string;
|
|
19
19
|
name: string;
|
|
20
20
|
sku: string;
|
|
21
|
+
topLevelSku?: string;
|
|
21
22
|
uid: string;
|
|
22
23
|
image: Image;
|
|
23
24
|
stockStatus?: string;
|
|
@@ -65,6 +66,7 @@ interface Option {
|
|
|
65
66
|
required: boolean;
|
|
66
67
|
values: [{
|
|
67
68
|
uid: string;
|
|
69
|
+
label: string;
|
|
68
70
|
}];
|
|
69
71
|
}
|
|
70
72
|
export {};
|
|
@@ -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": "1.0.0-
|
|
1
|
+
{"name": "@dropins/storefront-wishlist", "version": "1.0.0-beta3", "@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};
|