@dropins/storefront-wishlist 3.3.0 → 3.4.0-alpha-20260616153611

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @dropins/storefront-wishlist
2
2
 
3
+ ## 3.4.0-alpha-20260616153611
4
+
5
+ ### Minor Changes
6
+
7
+ - 53ab3b8: Added `pageSize` option to the `initialize` config to control how many wishlist items are fetched and displayed per page. Defaults to 9. Set a custom value to enable page-by-page navigation with pagination controls. Pagination UI renders automatically when total pages exceed one.
8
+
3
9
  ## 3.3.0
4
10
 
5
11
  ### Minor Changes
@@ -0,0 +1,19 @@
1
+ /********************************************************************
2
+ * ADOBE CONFIDENTIAL
3
+ * __________________
4
+ *
5
+ * Copyright 2026 Adobe
6
+ * All Rights Reserved.
7
+ *
8
+ * NOTICE: All information contained herein is, and remains
9
+ * the property of Adobe and its suppliers, if any. The intellectual
10
+ * and technical concepts contained herein are proprietary to Adobe
11
+ * and its suppliers and are protected by all applicable intellectual
12
+ * property laws, including trade secret and copyright laws.
13
+ * Dissemination of this information or reproduction of this material
14
+ * is strictly forbidden unless prior written permission is obtained
15
+ * from Adobe.
16
+ *******************************************************************/
17
+ export declare const DEFAULT_PAGE_SIZE = 9;
18
+ export declare const DEFAULT_CURRENT_PAGE = 1;
19
+ //# sourceMappingURL=constants.d.ts.map
@@ -1,4 +1,4 @@
1
1
  import { Wishlist } from '../../data/models';
2
2
 
3
- export declare const getWishlistById: (wishlistId: string) => Promise<void | Wishlist | null>;
3
+ export declare const getWishlistById: (wishlistId: string, pageSize?: number, currentPage?: number) => Promise<void | Wishlist | null>;
4
4
  //# sourceMappingURL=getWishlistById.d.ts.map
@@ -1,4 +1,4 @@
1
1
  import { Wishlist } from '../../data/models';
2
2
 
3
- export declare const getWishlists: () => Promise<void | Wishlist[] | null>;
3
+ export declare const getWishlists: (pageSize?: number, currentPage?: number) => Promise<void | Wishlist[] | null>;
4
4
  //# sourceMappingURL=getWishlists.d.ts.map
package/api/index.d.ts CHANGED
@@ -14,6 +14,7 @@
14
14
  * is strictly forbidden unless prior written permission is obtained
15
15
  * from Adobe.
16
16
  *******************************************************************/
17
+ export * from './constants';
17
18
  export * from './initialize';
18
19
  export * from './fetch-graphql';
19
20
  export * from './getStoreConfig';
@@ -5,6 +5,7 @@ type ConfigProps = {
5
5
  langDefinitions?: Lang;
6
6
  isGuestWishlistEnabled?: boolean;
7
7
  storeCode?: string;
8
+ pageSize?: number;
8
9
  };
9
10
  export declare const initialize: Initializer<ConfigProps>;
10
11
  export declare const config: import('@dropins/tools/types/elsie/src/lib').Config<ConfigProps>;
@@ -1,6 +1,10 @@
1
1
  import { Wishlist } from '../../data/models';
2
2
 
3
- export declare const initializeWishlist: () => Promise<Wishlist | null>;
4
- export declare function getDefaultWishlist(): Promise<Wishlist | null>;
3
+ export interface InitializeWishlistOptions {
4
+ pageSize?: number;
5
+ currentPage?: number;
6
+ }
7
+ export declare const initializeWishlist: (options?: InitializeWishlistOptions) => Promise<Wishlist | null>;
8
+ export declare function getDefaultWishlist(options?: InitializeWishlistOptions): Promise<Wishlist | null>;
5
9
  export declare function getGuestWishlist(): Promise<{} | Wishlist>;
6
10
  //# sourceMappingURL=initializeWishlist.d.ts.map
package/api.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*! Copyright 2026 Adobe
2
2
  All Rights Reserved. */
3
- import{events as c}from"@dropins/tools/event-bus.js";import{Initializer as C}from"@dropins/tools/lib.js";import{FetchGraphQL as A}from"@dropins/tools/fetch-graphql.js";function b(t){const s=document.cookie.split(";");for(const e of s)if(e.trim().startsWith(`${t}=`))return e.trim().substring(t.length+1);return null}const f={wishlistId:null,authenticated:!1,isLoading:!0},W=()=>f.storeCode&&f.storeCode!=="default"?`DROPIN__WISHLIST__WISHLIST-ID__${f.storeCode}`:"DROPIN__WISHLIST__WISHLIST-ID",o=new Proxy(f,{set(t,s,e){if(t[s]=e,s==="wishlistId"){const i=W();if(e===o.wishlistId)return!0;if(e===null)return document.cookie=`${i}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`,!0;const n=new Date;n.setDate(n.getDate()+30),document.cookie=`${i}=${e}; expires=${n.toUTCString()}; path=/`}return Reflect.set(t,s,e)},get(t,s){return s==="wishlistId"?b(W()):t[s]}});function T(t,s){var n;if(t.product.sku!==s.sku)return!1;const e=((n=t.selectedOptions)==null?void 0:n.map(r=>r.uid).filter(r=>!!r).sort())||[],i=(s.optionUIDs||[]).filter(r=>!!r).sort();return JSON.stringify(e)===JSON.stringify(i)}const E="DROPIN__WISHLIST__WISHLIST__DATA",S=()=>o.storeCode&&o.storeCode!=="default"?`${E}__${o.storeCode}`:E;function v(t){const s=o.authenticated?sessionStorage:localStorage,e=S();if(t)try{s.setItem(e,JSON.stringify(t))}catch(i){$(i)?console.error("Storage quota exceeded:",i):console.error("Error saving wishlist:",i)}else s.removeItem(e)}const $=t=>t instanceof DOMException&&t.name==="QuotaExceededError";function h(t=!1){const s=o.authenticated&&!t?sessionStorage:localStorage,e=S();try{const i=s.getItem(e);return i?JSON.parse(i):{id:"",items:[]}}catch(i){return console.error("Error retrieving wishlist:",i),{id:"",items:[]}}}function G(){localStorage.removeItem(S())}function ut(t,s=[]){var u;const e=o.authenticated?sessionStorage:localStorage,i=S(),n=e.getItem(i),r=n?JSON.parse(n):{items:[]};return(u=r==null?void 0:r.items)==null?void 0:u.find(d=>T(d,{sku:t,optionUIDs:s}))}const D=new C({init:async t=>{const s={isGuestWishlistEnabled:!1,...t};D.config.setConfig(s),o.storeCode=t.storeCode||void 0,O().catch(console.error)},listeners:()=>[c.on("wishlist/data",t=>{v(t)},{eager:!0}),c.on("authenticated",async t=>{if(o.authenticated&&!t&&c.emit("wishlist/reset",void 0),t&&!o.authenticated){o.authenticated=t;const s=await O().catch(console.error);s&&nt(s)}},{eager:!0}),c.on("wishlist/reset",()=>{st().catch(console.error),c.emit("wishlist/data",null)})]}),ct=D.config,{setEndpoint:at,setFetchGraphQlHeader:dt,removeFetchGraphQlHeader:_t,setFetchGraphQlHeaders:It,fetchGraphQl:m,getConfig:ht}=new A().getMethods();function H(t){return t?{wishlistIsEnabled:t.storeConfig.magento_wishlist_general_is_enabled,wishlistMultipleListIsEnabled:t.storeConfig.enable_multiple_wishlists,wishlistMaxNumber:t.storeConfig.maximum_number_of_wishlists}:null}function g(t,s){return t?{id:t.id,updated_at:t.updated_at,sharing_code:t.sharing_code,items_count:t.items_count,items:F(t,s??[])}:null}function F(t,s){var e,i;return(i=(e=t==null?void 0:t.items_v2)==null?void 0:e.items)!=null&&i.length?t.items_v2.items.map(n=>{const r=P(n);return{id:n.id,quantity:n.quantity,description:n.description,added_at:n.added_at,enteredOptions:s,selectedOptions:r,product:{sku:n.product.sku}}}):[]}function P(t){return t.__typename==="ConfigurableWishlistItem"?t.configurable_options?t.configurable_options.map(s=>({uid:s.configurable_product_option_value_uid})):[]:t.__typename==="BundleWishlistItem"?(t.bundle_options??[]).flatMap(e=>e.values??[]).map(e=>({uid:e.uid})):[]}const p=t=>{const s=t.map(e=>e.message).join(" ");throw Error(s)},k=`
3
+ import{events as u}from"@dropins/tools/event-bus.js";import{Initializer as A}from"@dropins/tools/lib.js";import{FetchGraphQL as C}from"@dropins/tools/fetch-graphql.js";const E=9,W=1;function v(t){const e=document.cookie.split(";");for(const s of e)if(s.trim().startsWith(`${t}=`))return s.trim().substring(t.length+1);return null}const g={wishlistId:null,authenticated:!1,isLoading:!0},D=()=>g.storeCode&&g.storeCode!=="default"?`DROPIN__WISHLIST__WISHLIST-ID__${g.storeCode}`:"DROPIN__WISHLIST__WISHLIST-ID",r=new Proxy(g,{set(t,e,s){if(t[e]=s,e==="wishlistId"){const i=D();if(s===r.wishlistId)return!0;if(s===null)return document.cookie=`${i}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`,!0;const n=new Date;n.setDate(n.getDate()+30),document.cookie=`${i}=${s}; expires=${n.toUTCString()}; path=/`}return Reflect.set(t,e,s)},get(t,e){return e==="wishlistId"?v(D()):t[e]}});function f(t,e){var n;if(t.product.sku!==e.sku)return!1;const s=((n=t.selectedOptions)==null?void 0:n.map(o=>o.uid).filter(o=>!!o).sort())||[],i=(e.optionUIDs||[]).filter(o=>!!o).sort();return JSON.stringify(s)===JSON.stringify(i)}const P="DROPIN__WISHLIST__WISHLIST__DATA",S=()=>r.storeCode&&r.storeCode!=="default"?`${P}__${r.storeCode}`:P;function b(t){const e=r.authenticated?sessionStorage:localStorage,s=S();if(t)try{e.setItem(s,JSON.stringify(t))}catch(i){G(i)?console.error("Storage quota exceeded:",i):console.error("Error saving wishlist:",i)}else e.removeItem(s)}const G=t=>t instanceof DOMException&&t.name==="QuotaExceededError";function h(t=!1){const e=r.authenticated&&!t?sessionStorage:localStorage,s=S();try{const i=e.getItem(s);return i?JSON.parse(i):{id:"",items:[]}}catch(i){return console.error("Error retrieving wishlist:",i),{id:"",items:[]}}}function z(){localStorage.removeItem(S())}function dt(t,e=[]){var l;const s=r.authenticated?sessionStorage:localStorage,i=S(),n=s.getItem(i),o=n?JSON.parse(n):{items:[]};return(l=o==null?void 0:o.items)==null?void 0:l.find(_=>f(_,{sku:t,optionUIDs:e}))}const w=new A({init:async t=>{const e={isGuestWishlistEnabled:!1,...t};w.config.setConfig(e),r.storeCode=t.storeCode||void 0,r.pageSize=t.pageSize,$({pageSize:t.pageSize}).catch(console.error)},listeners:()=>[u.on("wishlist/data",t=>{b(t)},{eager:!0}),u.on("authenticated",async t=>{var e;if(r.authenticated&&!t&&u.emit("wishlist/reset",void 0),t&&!r.authenticated){r.authenticated=t;const s=await $({pageSize:(e=w.config.getConfig())==null?void 0:e.pageSize}).catch(console.error);s&&lt(s)}},{eager:!0}),u.on("wishlist/reset",()=>{rt().catch(console.error),u.emit("wishlist/data",null)})]}),It=w.config,{setEndpoint:ht,setFetchGraphQlHeader:pt,removeFetchGraphQlHeader:mt,setFetchGraphQlHeaders:gt,fetchGraphQl:p,getConfig:ft}=new C().getMethods();function F(t){return t?{wishlistIsEnabled:t.storeConfig.magento_wishlist_general_is_enabled,wishlistMultipleListIsEnabled:t.storeConfig.enable_multiple_wishlists,wishlistMaxNumber:t.storeConfig.maximum_number_of_wishlists}:null}function T(t,e){return t?{id:t.id,updated_at:t.updated_at,sharing_code:t.sharing_code,items_count:t.items_count,items:k(t,e??[]),page_info:H(t)}:null}function H(t){var s;const e=(s=t==null?void 0:t.items_v2)==null?void 0:s.page_info;if(e)return{currentPage:e.current_page,pageSize:e.page_size,totalPages:e.total_pages}}function k(t,e){var s,i;return(i=(s=t==null?void 0:t.items_v2)==null?void 0:s.items)!=null&&i.length?t.items_v2.items.map(n=>{const o=x(n);return{id:n.id,quantity:n.quantity,description:n.description,added_at:n.added_at,enteredOptions:e,selectedOptions:o,product:{sku:n.product.sku}}}):[]}function x(t){return t.__typename==="ConfigurableWishlistItem"?t.configurable_options?t.configurable_options.map(e=>({uid:e.configurable_product_option_value_uid})):[]:t.__typename==="BundleWishlistItem"?(t.bundle_options??[]).flatMap(s=>s.values??[]).map(s=>({uid:s.uid})):[]}const m=t=>{const e=t.map(s=>s.message).join(" ");throw Error(e)},q=`
4
4
  query STORE_CONFIG_QUERY {
5
5
  storeConfig {
6
6
  magento_wishlist_general_is_enabled
@@ -8,7 +8,7 @@ query STORE_CONFIG_QUERY {
8
8
  maximum_number_of_wishlists
9
9
  }
10
10
  }
11
- `,x=async()=>m(k,{method:"GET",cache:"force-cache"}).then(({errors:t,data:s})=>t?p(t):H(s)),q=`
11
+ `,Q=async()=>p(q,{method:"GET",cache:"force-cache"}).then(({errors:t,data:e})=>t?m(t):F(e)),B=`
12
12
  fragment CUSTOMIZABLE_OPTIONS_FRAGMENT on SelectedCustomizableOption {
13
13
  type
14
14
  customizable_option_uid
@@ -24,7 +24,7 @@ query STORE_CONFIG_QUERY {
24
24
  }
25
25
  }
26
26
  }
27
- `,Q=`
27
+ `,Y=`
28
28
  ... on ConfigurableWishlistItem {
29
29
  configurable_options {
30
30
  option_label
@@ -36,7 +36,7 @@ query STORE_CONFIG_QUERY {
36
36
  canonical_url
37
37
  }
38
38
  }
39
- `,B=`
39
+ `,J=`
40
40
  ... on DownloadableWishlistItem {
41
41
  added_at
42
42
  description
@@ -48,7 +48,7 @@ query STORE_CONFIG_QUERY {
48
48
  }
49
49
  quantity
50
50
  }
51
- `,z=`
51
+ `,Z=`
52
52
  ... on GiftCardWishlistItem {
53
53
  added_at
54
54
  description
@@ -68,7 +68,7 @@ query STORE_CONFIG_QUERY {
68
68
  sender_name
69
69
  }
70
70
  }
71
- `,Y=`
71
+ `,K=`
72
72
  ... on BundleWishlistItem {
73
73
  bundle_options {
74
74
  label
@@ -91,33 +91,40 @@ fragment WISHLIST_ITEM_FRAGMENT on WishlistItemInterface {
91
91
  product {
92
92
  sku
93
93
  }
94
- ${Q}
95
- ${B}
96
- ${z}
97
94
  ${Y}
95
+ ${J}
96
+ ${Z}
97
+ ${K}
98
98
  customizable_options {
99
99
  ...CUSTOMIZABLE_OPTIONS_FRAGMENT
100
100
  }
101
101
  }
102
102
 
103
- ${q}
104
- `,w=`
103
+ ${B}
104
+ `,O=`
105
105
  fragment WISHLIST_FRAGMENT on Wishlist {
106
106
  id
107
107
  updated_at
108
108
  sharing_code
109
109
  items_count
110
- items_v2 {
110
+ items_v2(pageSize: $pageSize, currentPage: $currentPage) {
111
111
  items {
112
112
  ...WISHLIST_ITEM_FRAGMENT
113
113
  }
114
+ page_info {
115
+ current_page
116
+ page_size
117
+ total_pages
118
+ }
114
119
  }
115
120
  }
116
121
 
117
122
  ${M}
118
- `,J=`
123
+ `,V=`
119
124
  query GET_WISHLIST_BY_ID_QUERY(
120
125
  $wishlistId: ID!,
126
+ $pageSize: Int = 9,
127
+ $currentPage: Int = 1,
121
128
  ) {
122
129
  customer {
123
130
  wishlist_v2(id: $wishlistId) {
@@ -125,18 +132,23 @@ ${M}
125
132
  updated_at
126
133
  sharing_code
127
134
  items_count
128
- items_v2 {
135
+ items_v2(pageSize: $pageSize, currentPage: $currentPage) {
129
136
  items {
130
137
  ...WISHLIST_ITEM_FRAGMENT
131
138
  }
139
+ page_info {
140
+ current_page
141
+ page_size
142
+ total_pages
143
+ }
132
144
  }
133
145
  }
134
146
  }
135
147
  }
136
148
 
137
149
  ${M}
138
- `,mt=async t=>{if(!o.authenticated)return h();if(!t)throw Error("Wishlist ID is not set");return m(J,{variables:{wishlistId:t}}).then(({errors:s,data:e})=>{var n;if(s)return p(s);if(!((n=e==null?void 0:e.customer)!=null&&n.wishlist_v2))return null;const i=g(e.customer.wishlist_v2);return c.emit("wishlist/data",i),i})},Z=`
139
- query GET_WISHLISTS_QUERY {
150
+ `,j=async(t,e=E,s=W)=>{if(!r.authenticated)return h();if(!t)throw Error("Wishlist ID is not set");return p(V,{variables:{wishlistId:t,pageSize:e,currentPage:s}}).then(({errors:i,data:n})=>{var l;if(i)return m(i);if(!((l=n==null?void 0:n.customer)!=null&&l.wishlist_v2))return null;const o=T(n.customer.wishlist_v2);return u.emit("wishlist/data",o),o})},X=`
151
+ query GET_WISHLISTS_QUERY($pageSize: Int = 9, $currentPage: Int = 1) {
140
152
  customer {
141
153
  wishlists {
142
154
  ...WISHLIST_FRAGMENT
@@ -144,11 +156,13 @@ ${M}
144
156
  }
145
157
  }
146
158
 
147
- ${w}
148
- `,K=async()=>o.authenticated?m(Z).then(({errors:t,data:s})=>{var e;return t?p(t):(e=s==null?void 0:s.customer)!=null&&e.wishlists?s.customer.wishlists.map(i=>g(i)):null}):h(),V=`
159
+ ${O}
160
+ `,tt=async(t=E,e=W)=>r.authenticated?p(X,{variables:{pageSize:t,currentPage:e}}).then(({errors:s,data:i})=>{var n;return s?m(s):(n=i==null?void 0:i.customer)!=null&&n.wishlists?i.customer.wishlists.map(o=>T(o)):null}):h(),et=`
149
161
  mutation ADD_PRODUCTS_TO_WISHLIST_MUTATION(
150
162
  $wishlistId: ID!,
151
163
  $wishlistItems: [WishlistItemInput!]!,
164
+ $pageSize: Int = 9,
165
+ $currentPage: Int = 1,
152
166
  ) {
153
167
  addProductsToWishlist(
154
168
  wishlistId: $wishlistId
@@ -163,8 +177,8 @@ ${M}
163
177
  }
164
178
  }
165
179
  }
166
- ${w}
167
- `,j=async t=>{var i,n,r,u,d;if(!t)return null;const s=h();let e={id:(s==null?void 0:s.id)??"",updated_at:"",sharing_code:"",items_count:0,items:(s==null?void 0:s.items)??[]};for(const l of t){if((i=e.items)==null?void 0:i.some(I=>T(I,{sku:l.sku,optionUIDs:l.optionsUIDs})))continue;const _=l.optionsUIDs?(n=l.optionsUIDs)==null?void 0:n.map(I=>({uid:I})):[];e.items=[...e.items,{id:crypto.randomUUID(),quantity:l.quantity,selectedOptions:_,enteredOptions:l.enteredOptions??[],product:{sku:l.sku}}]}if(e.items_count=(r=e.items)==null?void 0:r.length,c.emit("wishlist/data",e),o.authenticated){if(!o.wishlistId)throw c.emit("wishlist/data",s),Error("Wishlist ID is not set");const l={wishlistId:o.wishlistId,wishlistItems:t.map(({sku:N,quantity:L,optionsUIDs:R,enteredOptions:U})=>({sku:N,quantity:L,selected_options:R,entered_options:U}))},{errors:a,data:_}=await m(V,{variables:l}),I=[...((u=_==null?void 0:_.addProductsToWishlist)==null?void 0:u.user_errors)??[],...a??[]];if(I.length>0)return c.emit("wishlist/data",s),p(I);const y=g(_.addProductsToWishlist.wishlist,((d=t[0])==null?void 0:d.enteredOptions)??[]);c.emit("wishlist/data",y)}return null},X=`
180
+ ${O}
181
+ `,st=async t=>{var i,n,o,l,_;if(!t)return null;const e=h();let s={id:(e==null?void 0:e.id)??"",updated_at:"",sharing_code:"",items_count:0,items:(e==null?void 0:e.items)??[]};for(const a of t){if((i=s.items)==null?void 0:i.some(I=>f(I,{sku:a.sku,optionUIDs:a.optionsUIDs})))continue;const d=a.optionsUIDs?(n=a.optionsUIDs)==null?void 0:n.map(I=>({uid:I})):[];s.items=[...s.items,{id:crypto.randomUUID(),quantity:a.quantity,selectedOptions:d,enteredOptions:a.enteredOptions??[],product:{sku:a.sku}}]}if(s.items_count=(o=s.items)==null?void 0:o.length,u.emit("wishlist/data",s),r.authenticated){if(!r.wishlistId)throw u.emit("wishlist/data",e),Error("Wishlist ID is not set");const a={wishlistId:r.wishlistId,wishlistItems:t.map(({sku:L,quantity:N,optionsUIDs:R,enteredOptions:U})=>({sku:L,quantity:N,selected_options:R,entered_options:U})),pageSize:r.pageSize,currentPage:r.currentPage},{errors:c,data:d}=await p(et,{variables:a}),I=[...((l=d==null?void 0:d.addProductsToWishlist)==null?void 0:l.user_errors)??[],...c??[]];if(I.length>0)return u.emit("wishlist/data",e),m(I);const y=T(d.addProductsToWishlist.wishlist,((_=t[0])==null?void 0:_.enteredOptions)??[]);u.emit("wishlist/data",y)}return null},it=`
168
182
  mutation REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION(
169
183
  $wishlistId: ID!,
170
184
  $wishlistItemsIds: [ID!]!,
@@ -179,10 +193,12 @@ ${w}
179
193
  }
180
194
  }
181
195
  }
182
- `,pt=async t=>{var i,n,r;const s=h(),e={...s,items:(i=s.items)==null?void 0:i.filter(u=>!t.some(d=>{var l;return T(u,{sku:d.product.sku,optionUIDs:(l=d.selectedOptions)==null?void 0:l.map(a=>a.uid)})}))};if(o.authenticated){if(!o.wishlistId)throw Error("Wishlist ID is not set");const u=t.map(_=>_.id),{errors:d,data:l}=await m(X,{variables:{wishlistId:o.wishlistId,wishlistItemsIds:u}}),a=[...((n=l==null?void 0:l.removeProductsFromWishlist)==null?void 0:n.user_errors)??[],...d??[]];if(a.length>0)return c.emit("wishlist/data",s),p(a)}return e.items_count=(r=e.items)==null?void 0:r.length,c.emit("wishlist/data",e),null},tt=`
196
+ `,St=async t=>{var i,n,o;const e=h(),s={...e,items:(i=e.items)==null?void 0:i.filter(l=>!t.some(_=>{var a;return f(l,{sku:_.product.sku,optionUIDs:(a=_.selectedOptions)==null?void 0:a.map(c=>c.uid)})}))};if(r.authenticated){if(!r.wishlistId)throw Error("Wishlist ID is not set");const l=t.map(d=>d.id),{errors:_,data:a}=await p(it,{variables:{wishlistId:r.wishlistId,wishlistItemsIds:l}}),c=[...((n=a==null?void 0:a.removeProductsFromWishlist)==null?void 0:n.user_errors)??[],..._??[]];return c.length>0?(u.emit("wishlist/data",e),m(c)):(await j(r.wishlistId,r.pageSize,r.currentPage),null)}return s.items_count=(o=s.items)==null?void 0:o.length,u.emit("wishlist/data",s),null},nt=`
183
197
  mutation UPDATE_PRODUCTS_IN_WISHLIST_MUTATION(
184
198
  $wishlistId: ID!,
185
199
  $wishlistItems: [WishlistItemUpdateInput!]!,
200
+ $pageSize: Int = 9,
201
+ $currentPage: Int = 1,
186
202
  ) {
187
203
  updateProductsInWishlist(
188
204
  wishlistId: $wishlistId
@@ -198,6 +214,6 @@ ${w}
198
214
  }
199
215
  }
200
216
 
201
- ${w}
202
- `,ft=async t=>{const s=o.wishlistId;if(!s)throw Error("Wishlist ID is not set");return m(tt,{variables:{wishlistId:s,wishlistItems:t.map(({wishlistItemId:e,quantity:i,description:n,selectedOptions:r,enteredOptions:u})=>({wishlistItemId:e,quantity:i,description:n,selected_options:r,entered_options:u}))}}).then(({errors:e,data:i})=>{var r;const n=[...((r=i==null?void 0:i.updateProductsInWishlist)==null?void 0:r.user_errors)??[],...e??[]];return n.length>0?p(n):g(i.updateProductsInWishlist.wishlist)})},st=()=>(o.wishlistId=null,o.authenticated=!1,Promise.resolve(null)),O=async()=>{if(o.initializing)return null;o.initializing=!0,o.config||(o.config=await x());const t=o.authenticated?await et():await it();return c.emit("wishlist/initialized",t),c.emit("wishlist/data",t),o.initializing=!1,t};async function et(){const t=await K(),s=t?t[0]:null;return s?(o.wishlistId=s.id,s):null}async function it(){try{return await h()}catch(t){throw console.error(t),t}}const nt=async t=>{var n;if(!t)return null;const s=h(!0),e=[];if((n=s==null?void 0:s.items)==null||n.forEach(r=>{var l;const u=((l=r.selectedOptions)==null?void 0:l.map(a=>a.uid))||[];if(!t.items.some(a=>T(a,{sku:r.product.sku,optionUIDs:u}))){const a={sku:r.product.sku,quantity:1,optionsUIDs:u,enteredOptions:r.enteredOptions||void 0};e.push(a)}}),e.length===0)return null;const i=await j(e);return G(),i};export{j as addProductsToWishlist,G as clearPersistedLocalStorage,ct as config,m as fetchGraphQl,ht as getConfig,et as getDefaultWishlist,it as getGuestWishlist,h as getPersistedWishlistData,x as getStoreConfig,mt as getWishlistById,ut as getWishlistItemFromStorage,K as getWishlists,T as i,D as initialize,O as initializeWishlist,nt as mergeWishlists,_t as removeFetchGraphQlHeader,pt as removeProductsFromWishlist,st as resetWishlist,o as s,at as setEndpoint,dt as setFetchGraphQlHeader,It as setFetchGraphQlHeaders,v as setPersistedWishlistData,ft as updateProductsInWishlist};
217
+ ${O}
218
+ `,Tt=async t=>{const e=r.wishlistId;if(!e)throw Error("Wishlist ID is not set");return p(nt,{variables:{wishlistId:e,pageSize:r.pageSize,currentPage:r.currentPage,wishlistItems:t.map(({wishlistItemId:s,quantity:i,description:n,selectedOptions:o,enteredOptions:l})=>({wishlistItemId:s,quantity:i,description:n,selected_options:o,entered_options:l}))}}).then(({errors:s,data:i})=>{var o;const n=[...((o=i==null?void 0:i.updateProductsInWishlist)==null?void 0:o.user_errors)??[],...s??[]];return n.length>0?m(n):T(i.updateProductsInWishlist.wishlist)})},rt=()=>(r.wishlistId=null,r.authenticated=!1,Promise.resolve(null)),$=async(t={})=>{if(r.initializing)return null;r.initializing=!0,r.config||(r.config=await Q());const e=r.authenticated?await ot(t):await at();return u.emit("wishlist/initialized",e),u.emit("wishlist/data",e),r.initializing=!1,e};async function ot(t={}){const{pageSize:e=E,currentPage:s=W}=t,i=await tt(e,s),n=i?i[0]:null;return n?(r.wishlistId=n.id,n):null}async function at(){try{return await h()}catch(t){throw console.error(t),t}}const lt=async t=>{var n;if(!t)return null;const e=h(!0),s=[];if((n=e==null?void 0:e.items)==null||n.forEach(o=>{var a;const l=((a=o.selectedOptions)==null?void 0:a.map(c=>c.uid))||[];if(!t.items.some(c=>f(c,{sku:o.product.sku,optionUIDs:l}))){const c={sku:o.product.sku,quantity:1,optionsUIDs:l,enteredOptions:o.enteredOptions||void 0};s.push(c)}}),s.length===0)return null;const i=await st(s);return z(),i};export{W as DEFAULT_CURRENT_PAGE,E as DEFAULT_PAGE_SIZE,st as addProductsToWishlist,z as clearPersistedLocalStorage,It as config,p as fetchGraphQl,ft as getConfig,ot as getDefaultWishlist,at as getGuestWishlist,h as getPersistedWishlistData,Q as getStoreConfig,j as getWishlistById,dt as getWishlistItemFromStorage,tt as getWishlists,f as i,w as initialize,$ as initializeWishlist,lt as mergeWishlists,mt as removeFetchGraphQlHeader,St as removeProductsFromWishlist,rt as resetWishlist,r as s,ht as setEndpoint,pt as setFetchGraphQlHeader,gt as setFetchGraphQlHeaders,b as setPersistedWishlistData,Tt as updateProductsInWishlist};
203
219
  //# sourceMappingURL=api.js.map
package/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sources":["/@dropins/storefront-wishlist/src/lib/cookies.ts","/@dropins/storefront-wishlist/src/lib/state.ts","/@dropins/storefront-wishlist/src/lib/wishlist-item-comparator.ts","/@dropins/storefront-wishlist/src/lib/persisted-data.ts","/@dropins/storefront-wishlist/src/api/initialize/initialize.ts","/@dropins/storefront-wishlist/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-wishlist/src/data/transforms/transform-store-config.ts","/@dropins/storefront-wishlist/src/data/transforms/transform-wishlist.ts","/@dropins/storefront-wishlist/src/lib/fetch-error.ts","/@dropins/storefront-wishlist/src/api/getStoreConfig/graphql/StoreConfigQuery.ts","/@dropins/storefront-wishlist/src/api/getStoreConfig/getStoreConfig.ts","/@dropins/storefront-wishlist/src/api/graphql/CustomizableOptionsFragment.graphql.ts","/@dropins/storefront-wishlist/src/api/graphql/WishlistItemFragment.graphql.ts","/@dropins/storefront-wishlist/src/api/graphql/WishlistFragment.graphql.ts","/@dropins/storefront-wishlist/src/api/getWishlistById/graphql/getWishlistById.graphql.ts","/@dropins/storefront-wishlist/src/api/getWishlistById/getWishlistById.ts","/@dropins/storefront-wishlist/src/api/getWishlists/graphql/getWishlists.graphql.ts","/@dropins/storefront-wishlist/src/api/getWishlists/getWishlists.ts","/@dropins/storefront-wishlist/src/api/addProductsToWishlist/graphql/addProductsToWishlistMutation.ts","/@dropins/storefront-wishlist/src/api/addProductsToWishlist/addProductsToWishlist.ts","/@dropins/storefront-wishlist/src/api/removeProductsFromWishlist/graphql/removeProductsFromWishlistMutation.ts","/@dropins/storefront-wishlist/src/api/removeProductsFromWishlist/removeProductsFromWishlist.ts","/@dropins/storefront-wishlist/src/api/updateProductsInWishlist/graphql/updateProductsInWishlistMutation.ts","/@dropins/storefront-wishlist/src/api/updateProductsInWishlist/updateProductsInWishlist.ts","/@dropins/storefront-wishlist/src/api/resetWishlist/resetWishlist.ts","/@dropins/storefront-wishlist/src/api/initializeWishlist/initializeWishlist.ts","/@dropins/storefront-wishlist/src/api/mergeWishlists/mergeWishlists.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport function getCookie(cookieName: string) {\n // Split the cookie string into an array of individual cookies\n const cookies = document.cookie.split(';');\n\n // Loop through the cookies to find the one with the specified name\n for (const cookie of cookies) {\n // Check if this cookie starts with the name you're looking for\n if (cookie.trim().startsWith(`${cookieName}=`)) {\n // Extract and return the cookie's value\n return cookie.trim().substring(cookieName.length + 1);\n }\n }\n\n // If the cookie is not found, return null\n return null;\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { StoreConfigModel } from '@/wishlist/data/models/store-config';\nimport { getCookie } from '@/wishlist/lib/cookies';\n\ntype State = {\n wishlistId: string | null;\n initializing?: boolean;\n isLoading?: boolean;\n locale?: string;\n config?: StoreConfigModel | null;\n authenticated: boolean;\n storeCode?: string;\n};\n\nconst _state: State = (() => {\n return {\n wishlistId: null,\n authenticated: false,\n isLoading: true,\n };\n})();\n\nconst getWishlistCookieName = (): string =>\n _state.storeCode && _state.storeCode !== 'default'\n ? `DROPIN__WISHLIST__WISHLIST-ID__${_state.storeCode}`\n : 'DROPIN__WISHLIST__WISHLIST-ID';\n\n// Proxy state to allow reactivity\nexport const state = new Proxy(_state, {\n set(target, key, value) {\n // @ts-ignore\n target[key] = value;\n\n if (key === 'wishlistId') {\n const cookieName = getWishlistCookieName();\n\n // only update cookie if value has changed\n if (value === state.wishlistId) return true;\n\n if (value === null) {\n document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n return true;\n }\n\n // set expiration date\n const expires = new Date();\n expires.setDate(expires.getDate() + 30);\n document.cookie = `${cookieName}=${value}; expires=${expires.toUTCString()}; path=/`;\n }\n\n return Reflect.set(target, key, value);\n },\n get(target, key) {\n if (key === 'wishlistId') {\n return getCookie(getWishlistCookieName());\n }\n\n return target[key as keyof State];\n },\n});\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Item } from '@/wishlist/data/models/wishlist';\n\ninterface ProductLike {\n sku: string;\n optionUIDs?: string[];\n}\n\n/**\n * Helper function to compare wishlist items by their SKU and selected options\n */\nexport function isMatchingWishlistItem(\n wishlistItem: Item,\n product: ProductLike\n): boolean {\n // Compare SKUs first for early return\n if (wishlistItem.product.sku !== product.sku) {\n return false;\n }\n\n // Compare selected options\n const wishlistItemOptions =\n wishlistItem.selectedOptions\n ?.map((option: any) => option.uid)\n .filter((uid: any) => !!uid)\n .sort() || [];\n const productOptionUIDs = (product.optionUIDs || [])\n .filter((uid: any) => !!uid)\n .sort();\n\n // If options match (or both are empty), items are considered matching\n return (\n JSON.stringify(wishlistItemOptions) === JSON.stringify(productOptionUIDs)\n );\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Wishlist } from '@/wishlist/data/models';\nimport { state } from '@/wishlist/lib/state';\nimport { isMatchingWishlistItem } from '@/wishlist/lib/wishlist-item-comparator';\n\nconst WISHLIST_KEY_BASE = 'DROPIN__WISHLIST__WISHLIST__DATA';\n\nconst getWishlistKey = (): string =>\n state.storeCode && state.storeCode !== 'default'\n ? `${WISHLIST_KEY_BASE}__${state.storeCode}`\n : WISHLIST_KEY_BASE;\n\nexport function setPersistedWishlistData(data: Wishlist | null) {\n const $storage = state.authenticated ? sessionStorage : localStorage;\n const key = getWishlistKey();\n if (data) {\n try {\n $storage.setItem(key, JSON.stringify(data));\n } catch (error) {\n if (isQuotaExceededError(error)) {\n console.error('Storage quota exceeded:', error);\n } else {\n console.error('Error saving wishlist:', error);\n }\n }\n } else {\n $storage.removeItem(key);\n }\n}\n\nconst isQuotaExceededError = (error: unknown) => {\n //https://mmazzarolo.com/blog/2022-06-25-local-storage-status/\n return error instanceof DOMException && error.name === 'QuotaExceededError';\n};\n\nexport function getPersistedWishlistData(\n guest: boolean = false\n): Wishlist | {} {\n const $storage =\n state.authenticated && !guest ? sessionStorage : localStorage;\n const key = getWishlistKey();\n try {\n const wishlist = $storage.getItem(key);\n return wishlist ? JSON.parse(wishlist) : { id: '', items: [] };\n } catch (error) {\n console.error('Error retrieving wishlist:', error);\n return { id: '', items: [] };\n }\n}\n\nexport function clearPersistedLocalStorage() {\n localStorage.removeItem(getWishlistKey());\n}\n\nexport function getWishlistItemFromStorage(\n productSku: string,\n optionUIDs: string[] = []\n) {\n const storage = state.authenticated ? sessionStorage : localStorage;\n const key = getWishlistKey();\n const raw = storage.getItem(key);\n const wishlist = raw ? JSON.parse(raw) : { id: '', items: [] };\n\n return wishlist?.items?.find((item: any) =>\n isMatchingWishlistItem(item, {\n sku: productSku,\n optionUIDs,\n })\n );\n}\n","import { Initializer } from '@adobe-commerce/elsie/lib';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { state } from '@/wishlist/lib/state';\nimport {\n initializeWishlist,\n resetWishlist,\n mergeWishlists,\n} from '@/wishlist/api';\nimport { setPersistedWishlistData } from '@/wishlist/lib/persisted-data';\n\ntype ConfigProps = {\n langDefinitions?: Lang;\n isGuestWishlistEnabled?: boolean;\n storeCode?: string;\n};\n\nexport const initialize = new Initializer<ConfigProps>({\n init: async (config) => {\n const defaultConfig = { isGuestWishlistEnabled: false, ...config };\n\n initialize.config.setConfig(defaultConfig);\n\n state.storeCode = config.storeCode || undefined;\n\n initializeWishlist().catch(console.error);\n },\n\n listeners: () => [\n events.on(\n 'wishlist/data',\n (payload) => {\n setPersistedWishlistData(payload);\n },\n { eager: true }\n ),\n events.on(\n 'authenticated',\n async (authenticated) => {\n if (state.authenticated && !authenticated) {\n // Reset wishlist if the user is no longer authenticated\n events.emit('wishlist/reset', undefined);\n }\n // Login event occurred\n if (authenticated && !state.authenticated) {\n state.authenticated = authenticated;\n const wishlist = await initializeWishlist().catch(console.error);\n if (wishlist) {\n mergeWishlists(wishlist);\n }\n }\n },\n { eager: true }\n ),\n events.on('wishlist/reset', () => {\n resetWishlist().catch(console.error);\n events.emit('wishlist/data', null);\n }),\n ],\n});\n\nexport const config = initialize.config;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { StoreConfigModel } from '@/wishlist/data/models';\n\nexport function transformStoreConfig(data: any): StoreConfigModel | null {\n if (!data) return null;\n\n return {\n wishlistIsEnabled: data.storeConfig.magento_wishlist_general_is_enabled,\n wishlistMultipleListIsEnabled: data.storeConfig.enable_multiple_wishlists,\n wishlistMaxNumber: data.storeConfig.maximum_number_of_wishlists,\n };\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { Wishlist, Item, Option } from '@/wishlist/data/models/wishlist';\n\nexport function transformWishlist(\n data: any,\n enteredOptions?: { uid: string; value: string }[]\n): Wishlist | null {\n if (!data) return null;\n\n return {\n id: data.id,\n updated_at: data.updated_at,\n sharing_code: data.sharing_code,\n items_count: data.items_count,\n items: transformItems(data, enteredOptions ?? []),\n };\n}\n\nfunction transformItems(\n data: any,\n enteredOptions: { uid: string; value: string }[]\n): Item[] {\n if (!data?.items_v2?.items?.length) return [];\n\n return data.items_v2.items.map((item: any) => {\n const selectedOptions = getSelectedOptions(item);\n return {\n id: item.id,\n quantity: item.quantity,\n description: item.description,\n added_at: item.added_at,\n enteredOptions,\n selectedOptions,\n product: { sku: item.product.sku },\n };\n });\n}\n\nfunction getSelectedOptions(item: Item): Option[] {\n if (item.__typename === 'ConfigurableWishlistItem') {\n return item.configurable_options\n ? item.configurable_options.map((option: any) => ({\n uid: option.configurable_product_option_value_uid,\n }))\n : [];\n }\n if (item.__typename === 'BundleWishlistItem') {\n const values = (item.bundle_options ?? []).flatMap(\n (option: any) => option.values ?? []\n );\n return values.map((value: any) => ({ uid: value.uid }));\n }\n return [];\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n/** Actions */\nexport const handleFetchError = (errors: Array<{ message: string }>) => {\n const errorMessage = errors.map((e: any) => e.message).join(' ');\n\n throw Error(errorMessage);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const STORE_CONFIG_QUERY = `\nquery STORE_CONFIG_QUERY {\n storeConfig {\n magento_wishlist_general_is_enabled\n enable_multiple_wishlists\n maximum_number_of_wishlists\n }\n}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/wishlist/api';\nimport { StoreConfigModel } from '@/wishlist/data/models';\nimport { transformStoreConfig } from '@/wishlist/data/transforms';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\n\nimport { STORE_CONFIG_QUERY } from './graphql/StoreConfigQuery';\n\nexport const getStoreConfig = async (): Promise<StoreConfigModel | null> => {\n return fetchGraphQl(STORE_CONFIG_QUERY, {\n method: 'GET',\n cache: 'force-cache',\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n return transformStoreConfig(data);\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CUSTOMIZABLE_OPTIONS_FRAGMENT = `\n fragment CUSTOMIZABLE_OPTIONS_FRAGMENT on SelectedCustomizableOption {\n type\n customizable_option_uid\n label\n is_required\n values {\n label\n value\n price{\n type\n units\n value\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CUSTOMIZABLE_OPTIONS_FRAGMENT } from './CustomizableOptionsFragment.graphql';\n\nconst CONFIGURABLE_WISHLIST_ITEM_FRAGMENT = `\n ... on ConfigurableWishlistItem {\n configurable_options {\n option_label\n value_label\n configurable_product_option_value_uid\n configurable_product_option_uid\n }\n configured_variant {\n canonical_url\n }\n }\n`;\n\nconst DOWNLOADABLE_WISHLIST_ITEM_FRAGMENT = `\n ... on DownloadableWishlistItem {\n added_at\n description\n links_v2 {\n sample_url\n sort_order\n title\n uid\n }\n quantity\n }\n`;\n\nconst GIFT_CARD_WISHLIST_ITEM_FRAGMENT = `\n ... on GiftCardWishlistItem {\n added_at\n description\n gift_card_options {\n amount {\n value\n currency\n }\n custom_giftcard_amount {\n value\n currency\n }\n message\n recipient_email\n recipient_name\n sender_email\n sender_name\n }\n }\n`;\n\nconst BUNDLE_WISHLIST_ITEM_FRAGMENT = `\n ... on BundleWishlistItem {\n bundle_options {\n label\n type\n uid\n values {\n uid\n label\n quantity\n }\n }\n }\n`;\n\nexport const WISHLIST_ITEM_FRAGMENT = `\nfragment WISHLIST_ITEM_FRAGMENT on WishlistItemInterface {\n __typename\n id\n quantity\n description\n added_at\n product {\n sku\n }\n ${CONFIGURABLE_WISHLIST_ITEM_FRAGMENT}\n ${DOWNLOADABLE_WISHLIST_ITEM_FRAGMENT}\n ${GIFT_CARD_WISHLIST_ITEM_FRAGMENT}\n ${BUNDLE_WISHLIST_ITEM_FRAGMENT}\n customizable_options {\n ...CUSTOMIZABLE_OPTIONS_FRAGMENT\n }\n }\n \n ${CUSTOMIZABLE_OPTIONS_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_ITEM_FRAGMENT } from '@/wishlist/api/fragments';\n\nexport const WISHLIST_FRAGMENT = `\nfragment WISHLIST_FRAGMENT on Wishlist {\n id\n updated_at\n sharing_code\n items_count\n items_v2 {\n items {\n ...WISHLIST_ITEM_FRAGMENT\n }\n }\n }\n\n${WISHLIST_ITEM_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_ITEM_FRAGMENT } from '@/wishlist/api/fragments';\n\nexport const GET_WISHLIST_BY_ID_QUERY = `\n query GET_WISHLIST_BY_ID_QUERY(\n $wishlistId: ID!,\n ) {\n customer {\n wishlist_v2(id: $wishlistId) {\n id\n updated_at\n sharing_code\n items_count\n items_v2 {\n items {\n ...WISHLIST_ITEM_FRAGMENT\n }\n }\n }\n }\n }\n\n${WISHLIST_ITEM_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { GET_WISHLIST_BY_ID_QUERY } from '@/wishlist/api/getWishlistById/graphql/getWishlistById.graphql';\nimport { Wishlist } from '@/wishlist/data/models';\nimport { transformWishlist } from '@/wishlist/data/transforms';\nimport { state } from '@/wishlist/lib/state';\nimport { fetchGraphQl, getPersistedWishlistData } from '@/wishlist/api';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const getWishlistById = async (\n wishlistId: string\n): Promise<void | Wishlist | null> => {\n // When the user is not authenticated, we just have a single wishlist\n // There is no necessity to check any IDs\n if (!state.authenticated) {\n return getPersistedWishlistData();\n }\n\n if (!wishlistId) {\n throw Error('Wishlist ID is not set');\n }\n\n // @ts-ignore\n return fetchGraphQl(GET_WISHLIST_BY_ID_QUERY, {\n variables: {\n wishlistId,\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n if (!data?.customer?.wishlist_v2) {\n return null;\n }\n\n const payload = transformWishlist(data.customer.wishlist_v2);\n events.emit('wishlist/data', payload);\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_FRAGMENT } from '@/wishlist/api/fragments';\n\nexport const GET_WISHLISTS_QUERY = `\n query GET_WISHLISTS_QUERY {\n customer {\n wishlists {\n ...WISHLIST_FRAGMENT\n }\n }\n }\n\n ${WISHLIST_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { GET_WISHLISTS_QUERY } from '@/wishlist/api/getWishlists/graphql/getWishlists.graphql';\nimport { Wishlist } from '@/wishlist/data/models';\nimport { transformWishlist } from '@/wishlist/data/transforms';\nimport { state } from '@/wishlist/lib/state';\nimport { fetchGraphQl, getPersistedWishlistData } from '@/wishlist/api';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\n\nexport const getWishlists = async (): Promise<void | Wishlist[] | null> => {\n // When the user is not authenticated, we just have a single wishlist\n // There is no necessity to check any IDs\n if (!state.authenticated) {\n return getPersistedWishlistData();\n }\n\n return fetchGraphQl(GET_WISHLISTS_QUERY).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n if (!data?.customer?.wishlists) {\n return null;\n }\n\n return data.customer.wishlists.map((wishlist: any) =>\n transformWishlist(wishlist)\n );\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_FRAGMENT } from '@/wishlist/api/fragments';\n\nexport const ADD_PRODUCTS_TO_WISHLIST_MUTATION = `\n mutation ADD_PRODUCTS_TO_WISHLIST_MUTATION(\n $wishlistId: ID!, \n $wishlistItems: [WishlistItemInput!]!,\n ) {\n addProductsToWishlist(\n wishlistId: $wishlistId\n wishlistItems: $wishlistItems\n ) {\n wishlist {\n ...WISHLIST_FRAGMENT\n }\n user_errors {\n code\n message\n }\n }\n }\n${WISHLIST_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl, getPersistedWishlistData } from '@/wishlist/api';\nimport { state } from '@/wishlist/lib/state';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\nimport { ADD_PRODUCTS_TO_WISHLIST_MUTATION } from './graphql/addProductsToWishlistMutation';\nimport { Wishlist } from '@/wishlist/data/models/wishlist';\nimport { transformWishlist } from '@/wishlist/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { isMatchingWishlistItem } from '@/wishlist/lib/wishlist-item-comparator';\n\nexport const addProductsToWishlist = async (\n items: [\n {\n sku: string;\n quantity: number;\n optionsUIDs?: string[]; // should be the options available for the product\n enteredOptions?: { uid: string; value: string }[]; // refer to both selected and entered options\n }\n ]\n): Promise<Wishlist | null> => {\n if (!items) return null;\n\n const wishlist = getPersistedWishlistData();\n let updatedWishlist = {\n id: wishlist?.id ?? '',\n updated_at: '',\n sharing_code: '',\n items_count: 0,\n items: wishlist?.items ?? [],\n };\n\n for (const item of items) {\n const skuExists = updatedWishlist.items?.some((wishlistItem: any) =>\n isMatchingWishlistItem(wishlistItem, {\n sku: item.sku,\n optionUIDs: item.optionsUIDs,\n })\n );\n\n if (skuExists) {\n continue;\n }\n\n const selectedOptions: { uid: string }[] = item.optionsUIDs\n ? item.optionsUIDs?.map((option: any) => ({\n uid: option,\n }))\n : [];\n\n updatedWishlist.items = [\n ...updatedWishlist.items,\n {\n id: crypto.randomUUID(),\n quantity: item.quantity,\n selectedOptions,\n enteredOptions: item.enteredOptions ?? [],\n product: { sku: item.sku },\n },\n ];\n }\n\n updatedWishlist.items_count = updatedWishlist.items?.length;\n events.emit('wishlist/data', updatedWishlist);\n\n if (state.authenticated) {\n if (!state.wishlistId) {\n events.emit('wishlist/data', wishlist);\n throw Error('Wishlist ID is not set');\n }\n\n const variables = {\n wishlistId: state.wishlistId,\n wishlistItems: items.map(\n ({ sku, quantity, optionsUIDs, enteredOptions }) => ({\n sku,\n quantity,\n selected_options: optionsUIDs,\n entered_options: enteredOptions,\n })\n ),\n };\n\n const { errors, data }: { errors: any; data: any } = await fetchGraphQl(\n ADD_PRODUCTS_TO_WISHLIST_MUTATION,\n { variables }\n );\n\n const _errors = [\n ...(data?.addProductsToWishlist?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n // if saving item to wishlist for logged user failed, we need to restore original wishlist in storage:\n if (_errors.length > 0) {\n events.emit('wishlist/data', wishlist);\n return handleFetchError(_errors);\n }\n\n const updatedWishlist = transformWishlist(\n data.addProductsToWishlist.wishlist,\n items[0]?.enteredOptions ?? []\n );\n events.emit('wishlist/data', updatedWishlist);\n }\n\n return null;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION = `\n mutation REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION(\n $wishlistId: ID!, \n $wishlistItemsIds: [ID!]!,\n ) {\n removeProductsFromWishlist(\n wishlistId: $wishlistId\n wishlistItemsIds: $wishlistItemsIds\n ) {\n user_errors {\n code\n message\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/wishlist/api';\nimport { state } from '@/wishlist/lib/state';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\nimport { REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION } from './graphql/removeProductsFromWishlistMutation';\nimport { Item, Wishlist } from '@/wishlist/data/models/wishlist';\nimport { events } from '@adobe-commerce/event-bus';\nimport { getPersistedWishlistData } from '@/wishlist/lib/persisted-data';\nimport { isMatchingWishlistItem } from '@/wishlist/lib/wishlist-item-comparator';\n\nexport const removeProductsFromWishlist = async (\n items: Array<Item>\n): Promise<Wishlist | null> => {\n const wishlist = getPersistedWishlistData();\n const updatedWishlist = {\n ...wishlist,\n items: wishlist.items?.filter((wishlistItem: any) => {\n return !items.some((item) =>\n isMatchingWishlistItem(wishlistItem, {\n sku: item.product.sku,\n optionUIDs: item.selectedOptions?.map((option: any) => option.uid),\n })\n );\n }),\n };\n\n if (state.authenticated) {\n if (!state.wishlistId) {\n throw Error('Wishlist ID is not set');\n }\n\n const itemIds = items.map((item) => item.id);\n const { errors, data } = await fetchGraphQl(\n REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION,\n {\n variables: { wishlistId: state.wishlistId, wishlistItemsIds: itemIds },\n }\n );\n\n const _errors = [\n ...(data?.removeProductsFromWishlist?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n // restore wishlist if removing item failed:\n if (_errors.length > 0) {\n events.emit('wishlist/data', wishlist);\n return handleFetchError(_errors);\n }\n }\n\n updatedWishlist.items_count = updatedWishlist.items?.length;\n events.emit('wishlist/data', updatedWishlist);\n\n return null;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_FRAGMENT } from '@/wishlist/api/graphql/WishlistFragment.graphql';\n\nexport const UPDATE_PRODUCTS_IN_WISHLIST_MUTATION = `\n mutation UPDATE_PRODUCTS_IN_WISHLIST_MUTATION(\n $wishlistId: ID!, \n $wishlistItems: [WishlistItemUpdateInput!]!,\n ) {\n updateProductsInWishlist(\n wishlistId: $wishlistId\n wishlistItems: $wishlistItems\n ) {\n wishlist {\n ...WISHLIST_FRAGMENT\n }\n user_errors {\n code\n message\n }\n }\n }\n \n ${WISHLIST_FRAGMENT} \n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/wishlist/api';\nimport { state } from '@/wishlist/lib/state';\nimport { handleFetchError } from '@/wishlist//lib/fetch-error';\n\nimport { UPDATE_PRODUCTS_IN_WISHLIST_MUTATION } from './graphql/updateProductsInWishlistMutation';\nimport { Wishlist } from '@/wishlist/data/models/wishlist';\nimport { transformWishlist } from '@/wishlist/data/transforms';\n\nexport const updateProductsInWishlist = async (\n items: {\n wishlistItemId: string;\n quantity: number;\n description: string;\n selectedOptions?: string[];\n enteredOptions?: { uid: string; value: string }[];\n }[]\n): Promise<Wishlist | null> => {\n const wishlistId = state.wishlistId;\n\n if (!wishlistId) {\n throw Error('Wishlist ID is not set');\n }\n\n return fetchGraphQl(UPDATE_PRODUCTS_IN_WISHLIST_MUTATION, {\n variables: {\n wishlistId,\n wishlistItems: items.map(\n ({\n wishlistItemId,\n quantity,\n description,\n selectedOptions: selected_options,\n enteredOptions: entered_options,\n }) => ({\n wishlistItemId,\n quantity,\n description,\n selected_options,\n entered_options,\n })\n ),\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.updateProductsInWishlist?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n return transformWishlist(data.updateProductsInWishlist.wishlist);\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/wishlist/lib/state';\nimport { Wishlist } from '@/wishlist/data/models';\n\nexport const resetWishlist = (): Promise<Wishlist | null> => {\n state.wishlistId = null;\n state.authenticated = false;\n\n return Promise.resolve(null);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { events } from '@adobe-commerce/event-bus';\nimport { state } from '@/wishlist/lib/state';\nimport { getStoreConfig, getWishlists } from '@/wishlist/api';\nimport { getPersistedWishlistData } from '@/wishlist/lib/persisted-data';\nimport { Wishlist } from '@/wishlist/data/models';\n\nexport const initializeWishlist = async (): Promise<Wishlist | null> => {\n if (state.initializing) return null;\n\n state.initializing = true;\n\n // set config\n if (!state.config) {\n state.config = await getStoreConfig();\n }\n\n const payload = state.authenticated\n ? await getDefaultWishlist()\n : await getGuestWishlist();\n\n events.emit('wishlist/initialized', payload);\n events.emit('wishlist/data', payload);\n\n state.initializing = false;\n\n return payload;\n};\n\nexport async function getDefaultWishlist() {\n const wishlists = await getWishlists();\n const wishlist = wishlists ? wishlists[0] : null;\n if (!wishlist) return null;\n\n state.wishlistId = wishlist.id;\n\n return wishlist;\n}\n\nexport async function getGuestWishlist() {\n try {\n return await getPersistedWishlistData();\n } catch (error) {\n console.error(error);\n throw error;\n }\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Wishlist, Item } from '@/wishlist/data/models';\nimport { addProductsToWishlist } from '@/wishlist/api';\nimport {\n getPersistedWishlistData,\n clearPersistedLocalStorage,\n} from '@/wishlist/lib/persisted-data';\nimport { isMatchingWishlistItem } from '@/wishlist/lib/wishlist-item-comparator';\n\nexport const mergeWishlists = async (\n wishlist: Wishlist\n): Promise<Wishlist | null> => {\n if (!wishlist) {\n return null;\n }\n\n const guestWishlist: {\n id?: string;\n items?: Item[];\n } = getPersistedWishlistData(true);\n const itemsToMerge: any[] = [];\n\n guestWishlist?.items?.forEach((item: any) => {\n const optionUIDs =\n item.selectedOptions?.map((option: any) => option.uid) || [];\n\n const exists = wishlist.items.some((wishlistItem: any) =>\n isMatchingWishlistItem(wishlistItem, {\n sku: item.product.sku,\n optionUIDs,\n })\n );\n\n if (!exists) {\n const mergeItem = {\n sku: item.product.sku,\n quantity: 1,\n optionsUIDs: optionUIDs,\n enteredOptions: item.enteredOptions || undefined,\n };\n\n itemsToMerge.push(mergeItem);\n }\n });\n\n if (itemsToMerge.length === 0) {\n return null;\n }\n\n const result = await addProductsToWishlist(itemsToMerge);\n clearPersistedLocalStorage();\n return result;\n};\n"],"names":["getCookie","cookieName","cookies","cookie","_state","getWishlistCookieName","state","target","key","value","expires","isMatchingWishlistItem","wishlistItem","product","wishlistItemOptions","_a","option","uid","productOptionUIDs","WISHLIST_KEY_BASE","getWishlistKey","setPersistedWishlistData","data","$storage","error","isQuotaExceededError","getPersistedWishlistData","guest","wishlist","clearPersistedLocalStorage","getWishlistItemFromStorage","productSku","optionUIDs","storage","raw","item","initialize","Initializer","config","defaultConfig","initializeWishlist","events","payload","authenticated","mergeWishlists","resetWishlist","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","transformStoreConfig","transformWishlist","enteredOptions","transformItems","_b","selectedOptions","getSelectedOptions","handleFetchError","errors","errorMessage","STORE_CONFIG_QUERY","getStoreConfig","CUSTOMIZABLE_OPTIONS_FRAGMENT","CONFIGURABLE_WISHLIST_ITEM_FRAGMENT","DOWNLOADABLE_WISHLIST_ITEM_FRAGMENT","GIFT_CARD_WISHLIST_ITEM_FRAGMENT","BUNDLE_WISHLIST_ITEM_FRAGMENT","WISHLIST_ITEM_FRAGMENT","WISHLIST_FRAGMENT","GET_WISHLIST_BY_ID_QUERY","getWishlistById","wishlistId","GET_WISHLISTS_QUERY","getWishlists","ADD_PRODUCTS_TO_WISHLIST_MUTATION","addProductsToWishlist","items","updatedWishlist","_c","variables","sku","quantity","optionsUIDs","_errors","_d","_e","REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION","removeProductsFromWishlist","itemIds","UPDATE_PRODUCTS_IN_WISHLIST_MUTATION","updateProductsInWishlist","wishlistItemId","description","selected_options","entered_options","getDefaultWishlist","getGuestWishlist","wishlists","guestWishlist","itemsToMerge","mergeItem","result"],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sources":["/@dropins/storefront-wishlist/src/api/constants.ts","/@dropins/storefront-wishlist/src/lib/cookies.ts","/@dropins/storefront-wishlist/src/lib/state.ts","/@dropins/storefront-wishlist/src/lib/wishlist-item-comparator.ts","/@dropins/storefront-wishlist/src/lib/persisted-data.ts","/@dropins/storefront-wishlist/src/api/initialize/initialize.ts","/@dropins/storefront-wishlist/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-wishlist/src/data/transforms/transform-store-config.ts","/@dropins/storefront-wishlist/src/data/transforms/transform-wishlist.ts","/@dropins/storefront-wishlist/src/lib/fetch-error.ts","/@dropins/storefront-wishlist/src/api/getStoreConfig/graphql/StoreConfigQuery.ts","/@dropins/storefront-wishlist/src/api/getStoreConfig/getStoreConfig.ts","/@dropins/storefront-wishlist/src/api/graphql/CustomizableOptionsFragment.graphql.ts","/@dropins/storefront-wishlist/src/api/graphql/WishlistItemFragment.graphql.ts","/@dropins/storefront-wishlist/src/api/graphql/WishlistFragment.graphql.ts","/@dropins/storefront-wishlist/src/api/getWishlistById/graphql/getWishlistById.graphql.ts","/@dropins/storefront-wishlist/src/api/getWishlistById/getWishlistById.ts","/@dropins/storefront-wishlist/src/api/getWishlists/graphql/getWishlists.graphql.ts","/@dropins/storefront-wishlist/src/api/getWishlists/getWishlists.ts","/@dropins/storefront-wishlist/src/api/addProductsToWishlist/graphql/addProductsToWishlistMutation.ts","/@dropins/storefront-wishlist/src/api/addProductsToWishlist/addProductsToWishlist.ts","/@dropins/storefront-wishlist/src/api/removeProductsFromWishlist/graphql/removeProductsFromWishlistMutation.ts","/@dropins/storefront-wishlist/src/api/removeProductsFromWishlist/removeProductsFromWishlist.ts","/@dropins/storefront-wishlist/src/api/updateProductsInWishlist/graphql/updateProductsInWishlistMutation.ts","/@dropins/storefront-wishlist/src/api/updateProductsInWishlist/updateProductsInWishlist.ts","/@dropins/storefront-wishlist/src/api/resetWishlist/resetWishlist.ts","/@dropins/storefront-wishlist/src/api/initializeWishlist/initializeWishlist.ts","/@dropins/storefront-wishlist/src/api/mergeWishlists/mergeWishlists.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const DEFAULT_PAGE_SIZE = 9;\nexport const DEFAULT_CURRENT_PAGE = 1;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport function getCookie(cookieName: string) {\n // Split the cookie string into an array of individual cookies\n const cookies = document.cookie.split(';');\n\n // Loop through the cookies to find the one with the specified name\n for (const cookie of cookies) {\n // Check if this cookie starts with the name you're looking for\n if (cookie.trim().startsWith(`${cookieName}=`)) {\n // Extract and return the cookie's value\n return cookie.trim().substring(cookieName.length + 1);\n }\n }\n\n // If the cookie is not found, return null\n return null;\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { StoreConfigModel } from '@/wishlist/data/models/store-config';\nimport { getCookie } from '@/wishlist/lib/cookies';\n\ntype State = {\n wishlistId: string | null;\n initializing?: boolean;\n isLoading?: boolean;\n locale?: string;\n config?: StoreConfigModel | null;\n authenticated: boolean;\n storeCode?: string;\n pageSize?: number;\n currentPage?: number;\n};\n\nconst _state: State = (() => {\n return {\n wishlistId: null,\n authenticated: false,\n isLoading: true,\n };\n})();\n\nconst getWishlistCookieName = (): string =>\n _state.storeCode && _state.storeCode !== 'default'\n ? `DROPIN__WISHLIST__WISHLIST-ID__${_state.storeCode}`\n : 'DROPIN__WISHLIST__WISHLIST-ID';\n\n// Proxy state to allow reactivity\nexport const state = new Proxy(_state, {\n set(target, key, value) {\n // @ts-ignore\n target[key] = value;\n\n if (key === 'wishlistId') {\n const cookieName = getWishlistCookieName();\n\n // only update cookie if value has changed\n if (value === state.wishlistId) return true;\n\n if (value === null) {\n document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n return true;\n }\n\n // set expiration date\n const expires = new Date();\n expires.setDate(expires.getDate() + 30);\n document.cookie = `${cookieName}=${value}; expires=${expires.toUTCString()}; path=/`;\n }\n\n return Reflect.set(target, key, value);\n },\n get(target, key) {\n if (key === 'wishlistId') {\n return getCookie(getWishlistCookieName());\n }\n\n return target[key as keyof State];\n },\n});\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Item } from '@/wishlist/data/models/wishlist';\n\ninterface ProductLike {\n sku: string;\n optionUIDs?: string[];\n}\n\n/**\n * Helper function to compare wishlist items by their SKU and selected options\n */\nexport function isMatchingWishlistItem(\n wishlistItem: Item,\n product: ProductLike\n): boolean {\n // Compare SKUs first for early return\n if (wishlistItem.product.sku !== product.sku) {\n return false;\n }\n\n // Compare selected options\n const wishlistItemOptions =\n wishlistItem.selectedOptions\n ?.map((option: any) => option.uid)\n .filter((uid: any) => !!uid)\n .sort() || [];\n const productOptionUIDs = (product.optionUIDs || [])\n .filter((uid: any) => !!uid)\n .sort();\n\n // If options match (or both are empty), items are considered matching\n return (\n JSON.stringify(wishlistItemOptions) === JSON.stringify(productOptionUIDs)\n );\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Wishlist } from '@/wishlist/data/models';\nimport { state } from '@/wishlist/lib/state';\nimport { isMatchingWishlistItem } from '@/wishlist/lib/wishlist-item-comparator';\n\nconst WISHLIST_KEY_BASE = 'DROPIN__WISHLIST__WISHLIST__DATA';\n\nconst getWishlistKey = (): string =>\n state.storeCode && state.storeCode !== 'default'\n ? `${WISHLIST_KEY_BASE}__${state.storeCode}`\n : WISHLIST_KEY_BASE;\n\nexport function setPersistedWishlistData(data: Wishlist | null) {\n const $storage = state.authenticated ? sessionStorage : localStorage;\n const key = getWishlistKey();\n if (data) {\n try {\n $storage.setItem(key, JSON.stringify(data));\n } catch (error) {\n if (isQuotaExceededError(error)) {\n console.error('Storage quota exceeded:', error);\n } else {\n console.error('Error saving wishlist:', error);\n }\n }\n } else {\n $storage.removeItem(key);\n }\n}\n\nconst isQuotaExceededError = (error: unknown) => {\n //https://mmazzarolo.com/blog/2022-06-25-local-storage-status/\n return error instanceof DOMException && error.name === 'QuotaExceededError';\n};\n\nexport function getPersistedWishlistData(\n guest: boolean = false\n): Wishlist | {} {\n const $storage =\n state.authenticated && !guest ? sessionStorage : localStorage;\n const key = getWishlistKey();\n try {\n const wishlist = $storage.getItem(key);\n return wishlist ? JSON.parse(wishlist) : { id: '', items: [] };\n } catch (error) {\n console.error('Error retrieving wishlist:', error);\n return { id: '', items: [] };\n }\n}\n\nexport function clearPersistedLocalStorage() {\n localStorage.removeItem(getWishlistKey());\n}\n\nexport function getWishlistItemFromStorage(\n productSku: string,\n optionUIDs: string[] = []\n) {\n const storage = state.authenticated ? sessionStorage : localStorage;\n const key = getWishlistKey();\n const raw = storage.getItem(key);\n const wishlist = raw ? JSON.parse(raw) : { id: '', items: [] };\n\n return wishlist?.items?.find((item: any) =>\n isMatchingWishlistItem(item, {\n sku: productSku,\n optionUIDs,\n })\n );\n}\n","import { Initializer } from '@adobe-commerce/elsie/lib';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { state } from '@/wishlist/lib/state';\nimport {\n initializeWishlist,\n resetWishlist,\n mergeWishlists,\n} from '@/wishlist/api';\nimport { setPersistedWishlistData } from '@/wishlist/lib/persisted-data';\n\ntype ConfigProps = {\n langDefinitions?: Lang;\n isGuestWishlistEnabled?: boolean;\n storeCode?: string;\n pageSize?: number;\n};\n\nexport const initialize = new Initializer<ConfigProps>({\n init: async (config) => {\n const defaultConfig = { isGuestWishlistEnabled: false, ...config };\n\n initialize.config.setConfig(defaultConfig);\n\n state.storeCode = config.storeCode || undefined;\n state.pageSize = config.pageSize;\n\n initializeWishlist({ pageSize: config.pageSize }).catch(console.error);\n },\n\n listeners: () => [\n events.on(\n 'wishlist/data',\n (payload) => {\n setPersistedWishlistData(payload);\n },\n { eager: true }\n ),\n events.on(\n 'authenticated',\n async (authenticated) => {\n if (state.authenticated && !authenticated) {\n // Reset wishlist if the user is no longer authenticated\n events.emit('wishlist/reset', undefined);\n }\n // Login event occurred\n if (authenticated && !state.authenticated) {\n state.authenticated = authenticated;\n const wishlist = await initializeWishlist({\n pageSize: initialize.config.getConfig()?.pageSize,\n }).catch(console.error);\n if (wishlist) {\n mergeWishlists(wishlist);\n }\n }\n },\n { eager: true }\n ),\n events.on('wishlist/reset', () => {\n resetWishlist().catch(console.error);\n events.emit('wishlist/data', null);\n }),\n ],\n});\n\nexport const config = initialize.config;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { StoreConfigModel } from '@/wishlist/data/models';\n\nexport function transformStoreConfig(data: any): StoreConfigModel | null {\n if (!data) return null;\n\n return {\n wishlistIsEnabled: data.storeConfig.magento_wishlist_general_is_enabled,\n wishlistMultipleListIsEnabled: data.storeConfig.enable_multiple_wishlists,\n wishlistMaxNumber: data.storeConfig.maximum_number_of_wishlists,\n };\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { Wishlist, Item, PageInfo } from '@/wishlist/data/models/wishlist';\n\nexport function transformWishlist(\n data: any,\n enteredOptions?: { uid: string; value: string }[]\n): Wishlist | null {\n if (!data) return null;\n\n return {\n id: data.id,\n updated_at: data.updated_at,\n sharing_code: data.sharing_code,\n items_count: data.items_count,\n items: transformItems(data, enteredOptions ?? []),\n page_info: transformPageInfo(data),\n };\n}\n\nfunction transformPageInfo(data: any): PageInfo | undefined {\n const pageInfo = data?.items_v2?.page_info;\n if (!pageInfo) return undefined;\n\n return {\n currentPage: pageInfo.current_page,\n pageSize: pageInfo.page_size,\n totalPages: pageInfo.total_pages,\n };\n}\n\nfunction transformItems(\n data: any,\n enteredOptions: { uid: string; value: string }[]\n): Item[] {\n if (!data?.items_v2?.items?.length) return [];\n\n return data.items_v2.items.map((item: any) => {\n const selectedOptions = getSelectedOptions(item);\n return {\n id: item.id,\n quantity: item.quantity,\n description: item.description,\n added_at: item.added_at,\n enteredOptions,\n selectedOptions,\n product: { sku: item.product.sku },\n };\n });\n}\n\nfunction getSelectedOptions(item: any): { uid: string }[] {\n if (item.__typename === 'ConfigurableWishlistItem') {\n return item.configurable_options\n ? item.configurable_options.map((option: any) => ({\n uid: option.configurable_product_option_value_uid,\n }))\n : [];\n }\n if (item.__typename === 'BundleWishlistItem') {\n const values = (item.bundle_options ?? []).flatMap(\n (option: any) => option.values ?? []\n );\n return values.map((value: any) => ({ uid: value.uid }));\n }\n return [];\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n/** Actions */\nexport const handleFetchError = (errors: Array<{ message: string }>) => {\n const errorMessage = errors.map((e: any) => e.message).join(' ');\n\n throw Error(errorMessage);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const STORE_CONFIG_QUERY = `\nquery STORE_CONFIG_QUERY {\n storeConfig {\n magento_wishlist_general_is_enabled\n enable_multiple_wishlists\n maximum_number_of_wishlists\n }\n}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/wishlist/api';\nimport { StoreConfigModel } from '@/wishlist/data/models';\nimport { transformStoreConfig } from '@/wishlist/data/transforms';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\n\nimport { STORE_CONFIG_QUERY } from './graphql/StoreConfigQuery';\n\nexport const getStoreConfig = async (): Promise<StoreConfigModel | null> => {\n return fetchGraphQl(STORE_CONFIG_QUERY, {\n method: 'GET',\n cache: 'force-cache',\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n return transformStoreConfig(data);\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CUSTOMIZABLE_OPTIONS_FRAGMENT = `\n fragment CUSTOMIZABLE_OPTIONS_FRAGMENT on SelectedCustomizableOption {\n type\n customizable_option_uid\n label\n is_required\n values {\n label\n value\n price{\n type\n units\n value\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CUSTOMIZABLE_OPTIONS_FRAGMENT } from './CustomizableOptionsFragment.graphql';\n\nconst CONFIGURABLE_WISHLIST_ITEM_FRAGMENT = `\n ... on ConfigurableWishlistItem {\n configurable_options {\n option_label\n value_label\n configurable_product_option_value_uid\n configurable_product_option_uid\n }\n configured_variant {\n canonical_url\n }\n }\n`;\n\nconst DOWNLOADABLE_WISHLIST_ITEM_FRAGMENT = `\n ... on DownloadableWishlistItem {\n added_at\n description\n links_v2 {\n sample_url\n sort_order\n title\n uid\n }\n quantity\n }\n`;\n\nconst GIFT_CARD_WISHLIST_ITEM_FRAGMENT = `\n ... on GiftCardWishlistItem {\n added_at\n description\n gift_card_options {\n amount {\n value\n currency\n }\n custom_giftcard_amount {\n value\n currency\n }\n message\n recipient_email\n recipient_name\n sender_email\n sender_name\n }\n }\n`;\n\nconst BUNDLE_WISHLIST_ITEM_FRAGMENT = `\n ... on BundleWishlistItem {\n bundle_options {\n label\n type\n uid\n values {\n uid\n label\n quantity\n }\n }\n }\n`;\n\nexport const WISHLIST_ITEM_FRAGMENT = `\nfragment WISHLIST_ITEM_FRAGMENT on WishlistItemInterface {\n __typename\n id\n quantity\n description\n added_at\n product {\n sku\n }\n ${CONFIGURABLE_WISHLIST_ITEM_FRAGMENT}\n ${DOWNLOADABLE_WISHLIST_ITEM_FRAGMENT}\n ${GIFT_CARD_WISHLIST_ITEM_FRAGMENT}\n ${BUNDLE_WISHLIST_ITEM_FRAGMENT}\n customizable_options {\n ...CUSTOMIZABLE_OPTIONS_FRAGMENT\n }\n }\n \n ${CUSTOMIZABLE_OPTIONS_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_ITEM_FRAGMENT } from '@/wishlist/api/fragments';\n\nexport const WISHLIST_FRAGMENT = `\nfragment WISHLIST_FRAGMENT on Wishlist {\n id\n updated_at\n sharing_code\n items_count\n items_v2(pageSize: $pageSize, currentPage: $currentPage) {\n items {\n ...WISHLIST_ITEM_FRAGMENT\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n }\n }\n\n${WISHLIST_ITEM_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_ITEM_FRAGMENT } from '@/wishlist/api/fragments';\n\nexport const GET_WISHLIST_BY_ID_QUERY = `\n query GET_WISHLIST_BY_ID_QUERY(\n $wishlistId: ID!,\n $pageSize: Int = 9,\n $currentPage: Int = 1,\n ) {\n customer {\n wishlist_v2(id: $wishlistId) {\n id\n updated_at\n sharing_code\n items_count\n items_v2(pageSize: $pageSize, currentPage: $currentPage) {\n items {\n ...WISHLIST_ITEM_FRAGMENT\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n }\n }\n }\n }\n\n${WISHLIST_ITEM_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { GET_WISHLIST_BY_ID_QUERY } from '@/wishlist/api/getWishlistById/graphql/getWishlistById.graphql';\nimport { Wishlist } from '@/wishlist/data/models';\nimport { transformWishlist } from '@/wishlist/data/transforms';\nimport { state } from '@/wishlist/lib/state';\nimport { fetchGraphQl, getPersistedWishlistData } from '@/wishlist/api';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\nimport { events } from '@adobe-commerce/event-bus';\nimport {\n DEFAULT_PAGE_SIZE,\n DEFAULT_CURRENT_PAGE,\n} from '@/wishlist/api/constants';\n\nexport const getWishlistById = async (\n wishlistId: string,\n pageSize: number = DEFAULT_PAGE_SIZE,\n currentPage: number = DEFAULT_CURRENT_PAGE\n): Promise<void | Wishlist | null> => {\n // When the user is not authenticated, we just have a single wishlist\n // There is no necessity to check any IDs\n if (!state.authenticated) {\n return getPersistedWishlistData();\n }\n\n if (!wishlistId) {\n throw Error('Wishlist ID is not set');\n }\n\n // @ts-ignore\n return fetchGraphQl(GET_WISHLIST_BY_ID_QUERY, {\n variables: {\n wishlistId,\n pageSize,\n currentPage,\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n if (!data?.customer?.wishlist_v2) {\n return null;\n }\n\n const payload = transformWishlist(data.customer.wishlist_v2);\n events.emit('wishlist/data', payload);\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_FRAGMENT } from '@/wishlist/api/fragments';\n\nexport const GET_WISHLISTS_QUERY = `\n query GET_WISHLISTS_QUERY($pageSize: Int = 9, $currentPage: Int = 1) {\n customer {\n wishlists {\n ...WISHLIST_FRAGMENT\n }\n }\n }\n\n ${WISHLIST_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { GET_WISHLISTS_QUERY } from '@/wishlist/api/getWishlists/graphql/getWishlists.graphql';\nimport { Wishlist } from '@/wishlist/data/models';\nimport { transformWishlist } from '@/wishlist/data/transforms';\nimport { state } from '@/wishlist/lib/state';\nimport { fetchGraphQl, getPersistedWishlistData } from '@/wishlist/api';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\nimport {\n DEFAULT_PAGE_SIZE,\n DEFAULT_CURRENT_PAGE,\n} from '@/wishlist/api/constants';\n\nexport const getWishlists = async (\n pageSize: number = DEFAULT_PAGE_SIZE,\n currentPage: number = DEFAULT_CURRENT_PAGE\n): Promise<void | Wishlist[] | null> => {\n // When the user is not authenticated, we just have a single wishlist\n // There is no necessity to check any IDs\n if (!state.authenticated) {\n return getPersistedWishlistData();\n }\n\n return fetchGraphQl(GET_WISHLISTS_QUERY, {\n variables: { pageSize, currentPage },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n if (!data?.customer?.wishlists) {\n return null;\n }\n\n return data.customer.wishlists.map((wishlist: any) =>\n transformWishlist(wishlist)\n );\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_FRAGMENT } from '@/wishlist/api/fragments';\n\nexport const ADD_PRODUCTS_TO_WISHLIST_MUTATION = `\n mutation ADD_PRODUCTS_TO_WISHLIST_MUTATION(\n $wishlistId: ID!, \n $wishlistItems: [WishlistItemInput!]!,\n $pageSize: Int = 9,\n $currentPage: Int = 1,\n ) {\n addProductsToWishlist(\n wishlistId: $wishlistId\n wishlistItems: $wishlistItems\n ) {\n wishlist {\n ...WISHLIST_FRAGMENT\n }\n user_errors {\n code\n message\n }\n }\n }\n${WISHLIST_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl, getPersistedWishlistData } from '@/wishlist/api';\nimport { state } from '@/wishlist/lib/state';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\nimport { ADD_PRODUCTS_TO_WISHLIST_MUTATION } from './graphql/addProductsToWishlistMutation';\nimport { Wishlist } from '@/wishlist/data/models/wishlist';\nimport { transformWishlist } from '@/wishlist/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { isMatchingWishlistItem } from '@/wishlist/lib/wishlist-item-comparator';\n\nexport const addProductsToWishlist = async (\n items: [\n {\n sku: string;\n quantity: number;\n optionsUIDs?: string[]; // should be the options available for the product\n enteredOptions?: { uid: string; value: string }[]; // refer to both selected and entered options\n }\n ]\n): Promise<Wishlist | null> => {\n if (!items) return null;\n\n const wishlist = getPersistedWishlistData();\n let updatedWishlist = {\n id: wishlist?.id ?? '',\n updated_at: '',\n sharing_code: '',\n items_count: 0,\n items: wishlist?.items ?? [],\n };\n\n for (const item of items) {\n const skuExists = updatedWishlist.items?.some((wishlistItem: any) =>\n isMatchingWishlistItem(wishlistItem, {\n sku: item.sku,\n optionUIDs: item.optionsUIDs,\n })\n );\n\n if (skuExists) {\n continue;\n }\n\n const selectedOptions: { uid: string }[] = item.optionsUIDs\n ? item.optionsUIDs?.map((option: any) => ({\n uid: option,\n }))\n : [];\n\n updatedWishlist.items = [\n ...updatedWishlist.items,\n {\n id: crypto.randomUUID(),\n quantity: item.quantity,\n selectedOptions,\n enteredOptions: item.enteredOptions ?? [],\n product: { sku: item.sku },\n },\n ];\n }\n\n updatedWishlist.items_count = updatedWishlist.items?.length;\n events.emit('wishlist/data', updatedWishlist);\n\n if (state.authenticated) {\n if (!state.wishlistId) {\n events.emit('wishlist/data', wishlist);\n throw Error('Wishlist ID is not set');\n }\n\n const variables = {\n wishlistId: state.wishlistId,\n wishlistItems: items.map(\n ({ sku, quantity, optionsUIDs, enteredOptions }) => ({\n sku,\n quantity,\n selected_options: optionsUIDs,\n entered_options: enteredOptions,\n })\n ),\n pageSize: state.pageSize,\n currentPage: state.currentPage,\n };\n\n const { errors, data }: { errors: any; data: any } = await fetchGraphQl(\n ADD_PRODUCTS_TO_WISHLIST_MUTATION,\n { variables }\n );\n\n const _errors = [\n ...(data?.addProductsToWishlist?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n // if saving item to wishlist for logged user failed, we need to restore original wishlist in storage:\n if (_errors.length > 0) {\n events.emit('wishlist/data', wishlist);\n return handleFetchError(_errors);\n }\n\n const updatedWishlist = transformWishlist(\n data.addProductsToWishlist.wishlist,\n items[0]?.enteredOptions ?? []\n );\n events.emit('wishlist/data', updatedWishlist);\n }\n\n return null;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION = `\n mutation REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION(\n $wishlistId: ID!, \n $wishlistItemsIds: [ID!]!,\n ) {\n removeProductsFromWishlist(\n wishlistId: $wishlistId\n wishlistItemsIds: $wishlistItemsIds\n ) {\n user_errors {\n code\n message\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/wishlist/api';\nimport { state } from '@/wishlist/lib/state';\nimport { handleFetchError } from '@/wishlist/lib/fetch-error';\nimport { REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION } from './graphql/removeProductsFromWishlistMutation';\nimport { Item, Wishlist } from '@/wishlist/data/models/wishlist';\nimport { events } from '@adobe-commerce/event-bus';\nimport { getPersistedWishlistData } from '@/wishlist/lib/persisted-data';\nimport { isMatchingWishlistItem } from '@/wishlist/lib/wishlist-item-comparator';\nimport { getWishlistById } from '@/wishlist/api/getWishlistById';\n\nexport const removeProductsFromWishlist = async (\n items: Array<Item>\n): Promise<Wishlist | null> => {\n const wishlist = getPersistedWishlistData();\n const updatedWishlist = {\n ...wishlist,\n items: wishlist.items?.filter((wishlistItem: any) => {\n return !items.some((item) =>\n isMatchingWishlistItem(wishlistItem, {\n sku: item.product.sku,\n optionUIDs: item.selectedOptions?.map((option: any) => option.uid),\n })\n );\n }),\n };\n\n if (state.authenticated) {\n if (!state.wishlistId) {\n throw Error('Wishlist ID is not set');\n }\n\n const itemIds = items.map((item) => item.id);\n const { errors, data } = await fetchGraphQl(\n REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION,\n {\n variables: { wishlistId: state.wishlistId, wishlistItemsIds: itemIds },\n }\n );\n\n const _errors = [\n ...(data?.removeProductsFromWishlist?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n // restore wishlist if removing item failed:\n if (_errors.length > 0) {\n events.emit('wishlist/data', wishlist);\n return handleFetchError(_errors);\n }\n\n // Re-fetch the current page from the server so the pagination state remains\n // accurate. The locally-filtered data only contains the current page's items,\n // so emitting it directly can show an empty panel when items remain on other pages.\n await getWishlistById(state.wishlistId, state.pageSize, state.currentPage);\n return null;\n }\n\n updatedWishlist.items_count = updatedWishlist.items?.length;\n events.emit('wishlist/data', updatedWishlist);\n\n return null;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WISHLIST_FRAGMENT } from '@/wishlist/api/graphql/WishlistFragment.graphql';\n\nexport const UPDATE_PRODUCTS_IN_WISHLIST_MUTATION = `\n mutation UPDATE_PRODUCTS_IN_WISHLIST_MUTATION(\n $wishlistId: ID!, \n $wishlistItems: [WishlistItemUpdateInput!]!,\n $pageSize: Int = 9,\n $currentPage: Int = 1,\n ) {\n updateProductsInWishlist(\n wishlistId: $wishlistId\n wishlistItems: $wishlistItems\n ) {\n wishlist {\n ...WISHLIST_FRAGMENT\n }\n user_errors {\n code\n message\n }\n }\n }\n \n ${WISHLIST_FRAGMENT} \n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/wishlist/api';\nimport { state } from '@/wishlist/lib/state';\nimport { handleFetchError } from '@/wishlist//lib/fetch-error';\n\nimport { UPDATE_PRODUCTS_IN_WISHLIST_MUTATION } from './graphql/updateProductsInWishlistMutation';\nimport { Wishlist } from '@/wishlist/data/models/wishlist';\nimport { transformWishlist } from '@/wishlist/data/transforms';\n\nexport const updateProductsInWishlist = async (\n items: {\n wishlistItemId: string;\n quantity: number;\n description: string;\n selectedOptions?: string[];\n enteredOptions?: { uid: string; value: string }[];\n }[]\n): Promise<Wishlist | null> => {\n const wishlistId = state.wishlistId;\n\n if (!wishlistId) {\n throw Error('Wishlist ID is not set');\n }\n\n return fetchGraphQl(UPDATE_PRODUCTS_IN_WISHLIST_MUTATION, {\n variables: {\n wishlistId,\n pageSize: state.pageSize,\n currentPage: state.currentPage,\n wishlistItems: items.map(\n ({\n wishlistItemId,\n quantity,\n description,\n selectedOptions: selected_options,\n enteredOptions: entered_options,\n }) => ({\n wishlistItemId,\n quantity,\n description,\n selected_options,\n entered_options,\n })\n ),\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.updateProductsInWishlist?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n return transformWishlist(data.updateProductsInWishlist.wishlist);\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/wishlist/lib/state';\nimport { Wishlist } from '@/wishlist/data/models';\n\nexport const resetWishlist = (): Promise<Wishlist | null> => {\n state.wishlistId = null;\n state.authenticated = false;\n\n return Promise.resolve(null);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { events } from '@adobe-commerce/event-bus';\nimport { state } from '@/wishlist/lib/state';\nimport { getStoreConfig, getWishlists } from '@/wishlist/api';\nimport { getPersistedWishlistData } from '@/wishlist/lib/persisted-data';\nimport { Wishlist } from '@/wishlist/data/models';\nimport {\n DEFAULT_PAGE_SIZE,\n DEFAULT_CURRENT_PAGE,\n} from '@/wishlist/api/constants';\n\nexport interface InitializeWishlistOptions {\n pageSize?: number;\n currentPage?: number;\n}\n\nexport const initializeWishlist = async (\n options: InitializeWishlistOptions = {}\n): Promise<Wishlist | null> => {\n if (state.initializing) return null;\n\n state.initializing = true;\n\n // set config\n if (!state.config) {\n state.config = await getStoreConfig();\n }\n\n const payload = state.authenticated\n ? await getDefaultWishlist(options)\n : await getGuestWishlist();\n\n events.emit('wishlist/initialized', payload);\n events.emit('wishlist/data', payload);\n\n state.initializing = false;\n\n return payload;\n};\n\nexport async function getDefaultWishlist(\n options: InitializeWishlistOptions = {}\n) {\n const { pageSize = DEFAULT_PAGE_SIZE, currentPage = DEFAULT_CURRENT_PAGE } =\n options;\n const wishlists = await getWishlists(pageSize, currentPage);\n const wishlist = wishlists ? wishlists[0] : null;\n if (!wishlist) return null;\n\n state.wishlistId = wishlist.id;\n\n return wishlist;\n}\n\nexport async function getGuestWishlist() {\n try {\n return await getPersistedWishlistData();\n } catch (error) {\n console.error(error);\n throw error;\n }\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Wishlist, Item } from '@/wishlist/data/models';\nimport { addProductsToWishlist } from '@/wishlist/api';\nimport {\n getPersistedWishlistData,\n clearPersistedLocalStorage,\n} from '@/wishlist/lib/persisted-data';\nimport { isMatchingWishlistItem } from '@/wishlist/lib/wishlist-item-comparator';\n\nexport const mergeWishlists = async (\n wishlist: Wishlist\n): Promise<Wishlist | null> => {\n if (!wishlist) {\n return null;\n }\n\n const guestWishlist: {\n id?: string;\n items?: Item[];\n } = getPersistedWishlistData(true);\n const itemsToMerge: any[] = [];\n\n guestWishlist?.items?.forEach((item: any) => {\n const optionUIDs =\n item.selectedOptions?.map((option: any) => option.uid) || [];\n\n const exists = wishlist.items.some((wishlistItem: any) =>\n isMatchingWishlistItem(wishlistItem, {\n sku: item.product.sku,\n optionUIDs,\n })\n );\n\n if (!exists) {\n const mergeItem = {\n sku: item.product.sku,\n quantity: 1,\n optionsUIDs: optionUIDs,\n enteredOptions: item.enteredOptions || undefined,\n };\n\n itemsToMerge.push(mergeItem);\n }\n });\n\n if (itemsToMerge.length === 0) {\n return null;\n }\n\n const result = await addProductsToWishlist(itemsToMerge);\n clearPersistedLocalStorage();\n return result;\n};\n"],"names":["DEFAULT_PAGE_SIZE","DEFAULT_CURRENT_PAGE","getCookie","cookieName","cookies","cookie","_state","getWishlistCookieName","state","target","key","value","expires","isMatchingWishlistItem","wishlistItem","product","wishlistItemOptions","_a","option","uid","productOptionUIDs","WISHLIST_KEY_BASE","getWishlistKey","setPersistedWishlistData","data","$storage","error","isQuotaExceededError","getPersistedWishlistData","guest","wishlist","clearPersistedLocalStorage","getWishlistItemFromStorage","productSku","optionUIDs","storage","raw","item","initialize","Initializer","config","defaultConfig","initializeWishlist","events","payload","authenticated","mergeWishlists","resetWishlist","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","transformStoreConfig","transformWishlist","enteredOptions","transformItems","transformPageInfo","pageInfo","_b","selectedOptions","getSelectedOptions","handleFetchError","errors","errorMessage","e","STORE_CONFIG_QUERY","getStoreConfig","CUSTOMIZABLE_OPTIONS_FRAGMENT","CONFIGURABLE_WISHLIST_ITEM_FRAGMENT","DOWNLOADABLE_WISHLIST_ITEM_FRAGMENT","GIFT_CARD_WISHLIST_ITEM_FRAGMENT","BUNDLE_WISHLIST_ITEM_FRAGMENT","WISHLIST_ITEM_FRAGMENT","WISHLIST_FRAGMENT","GET_WISHLIST_BY_ID_QUERY","getWishlistById","wishlistId","pageSize","currentPage","GET_WISHLISTS_QUERY","getWishlists","ADD_PRODUCTS_TO_WISHLIST_MUTATION","addProductsToWishlist","items","updatedWishlist","_c","variables","sku","quantity","optionsUIDs","_errors","_d","_e","REMOVE_PRODUCTS_FROM_WISHLIST_MUTATION","removeProductsFromWishlist","itemIds","UPDATE_PRODUCTS_IN_WISHLIST_MUTATION","updateProductsInWishlist","wishlistItemId","description","selected_options","entered_options","options","getDefaultWishlist","getGuestWishlist","wishlists","guestWishlist","itemsToMerge","mergeItem","result"],"mappings":"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"}