@dropins/storefront-product-discovery 2.0.0-alpha12 → 2.1.0-alpha001

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.
@@ -6,7 +6,7 @@
6
6
  * file in accordance with the terms of the Adobe license agreement
7
7
  * accompanying it.
8
8
  *******************************************************************/
9
- export declare const setEndpoint: (endpoint: string) => void, setFetchGraphQlHeader: (key: string, value: string | null) => void, removeFetchGraphQlHeader: (key: string) => void, setFetchGraphQlHeaders: (header: import('@adobe-commerce/fetch-graphql').Header | ((prev: import('@adobe-commerce/fetch-graphql').Header) => import('@adobe-commerce/fetch-graphql').Header)) => void, fetchGraphQl: <T = any>(query: string, options?: import('@adobe-commerce/fetch-graphql').FetchOptions | undefined) => Promise<{
9
+ export declare const setEndpoint: (endpoint: string) => void, setFetchGraphQlHeader: (key: string, value: string | null) => void, removeFetchGraphQlHeader: (key: string) => void, setFetchGraphQlHeaders: (header: import('@adobe-commerce/fetch-graphql').Header | ((prev: import('@adobe-commerce/fetch-graphql').Header) => import('@adobe-commerce/fetch-graphql').Header)) => void, getFetchGraphQlHeader: (key: string) => string | null | undefined, fetchGraphQl: <T = any>(query: string, options?: import('@adobe-commerce/fetch-graphql').FetchOptions | undefined) => Promise<{
10
10
  errors?: import('@adobe-commerce/fetch-graphql').FetchQueryError | undefined;
11
11
  data: T;
12
12
  }>, getConfig: () => {
package/api.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{f as p,g as h,r as c,c as m,s as f,a as l,b as n}from"./chunks/search.js";import{c as g,i as G}from"./chunks/initialize.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"./fragments.js";import"./chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";export{g as config,p as fetchGraphQl,h as getConfig,G as initialize,c as removeFetchGraphQlHeader,m as search,f as setEndpoint,l as setFetchGraphQlHeader,n as setFetchGraphQlHeaders};
3
+ import{f as p,c as h,g as c,r as m,d,s as f,a as l,b as g}from"./chunks/search.js";import{c as G,i as Q}from"./chunks/initialize.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"./fragments.js";import"./chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";export{G as config,p as fetchGraphQl,h as getConfig,c as getFetchGraphQlHeader,Q as initialize,m as removeFetchGraphQlHeader,d as search,f as setEndpoint,l as setFetchGraphQlHeader,g as setFetchGraphQlHeaders};
4
4
  //# sourceMappingURL=api.js.map
package/chunks/search.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{merge as ee}from"@dropins/tools/lib.js";import{c as re}from"./initialize.js";import{events as p}from"@dropins/tools/event-bus.js";import{ProductView as ne,Facet as ie}from"../fragments.js";import{S as oe,P as se,u as ue,b as le,d as te,e as ce}from"./acdlEvents.js";import{FetchGraphQL as me}from"@dropins/tools/fetch-graphql.js";const{setEndpoint:be,setFetchGraphQlHeader:Se,removeFetchGraphQlHeader:xe,setFetchGraphQlHeaders:$e,fetchGraphQl:pe,getConfig:ke}=new me().getMethods(),ge=e=>{var r,o,n,s,t,l,u,g,f,c,h,m,_,P,v,I,w,C,b,S,x,$,k,F,D,T,z,A,E,Q,U,G,K,H,M,O,L,N,Y,j,B,J,W,X,Z,q,V,y,a;if(!e)return{id:"",name:"",sku:"",shortDescription:"",url:"",urlKey:"",metaTitle:"",metaKeywords:"",metaDescription:"",lowStock:!1,links:[],images:[],description:"",externalId:"",inputOptions:[],addToCartAllowed:!1,price:void 0,priceRange:void 0,inStock:!1,typename:""};const i={id:(e==null?void 0:e.id)||"",name:(e==null?void 0:e.name)||"",sku:(e==null?void 0:e.sku)||"",shortDescription:(e==null?void 0:e.shortDescription)||"",url:(e==null?void 0:e.url)||"",urlKey:(e==null?void 0:e.urlKey)||"",metaTitle:(e==null?void 0:e.metaTitle)||"",metaKeywords:(e==null?void 0:e.metaKeywords)||"",metaDescription:(e==null?void 0:e.metaDescription)||"",lowStock:(e==null?void 0:e.lowStock)||!1,links:(e==null?void 0:e.links)||[],images:((r=e==null?void 0:e.images)==null?void 0:r.map(R=>{var d;return{label:R.label||"",roles:R.roles||[],url:((d=R.url)==null?void 0:d.replace(/^https?:\/\//,"//"))||""}}))||[],description:(e==null?void 0:e.description)||"",externalId:(e==null?void 0:e.externalId)||"",inputOptions:(e==null?void 0:e.inputOptions)||[],addToCartAllowed:(e==null?void 0:e.addToCartAllowed)||!1,price:e.price?{final:{amount:{value:((s=(n=(o=e==null?void 0:e.price)==null?void 0:o.final)==null?void 0:n.amount)==null?void 0:s.value)||0,currency:((u=(l=(t=e==null?void 0:e.price)==null?void 0:t.final)==null?void 0:l.amount)==null?void 0:u.currency)||""}},regular:{amount:{value:((c=(f=(g=e==null?void 0:e.price)==null?void 0:g.regular)==null?void 0:f.amount)==null?void 0:c.value)||0,currency:((_=(m=(h=e==null?void 0:e.price)==null?void 0:h.regular)==null?void 0:m.amount)==null?void 0:_.currency)||""}},roles:((P=e==null?void 0:e.price)==null?void 0:P.roles)||[]}:void 0,priceRange:e!=null&&e.priceRange?{minimum:{final:{amount:{value:((C=(w=(I=(v=e==null?void 0:e.priceRange)==null?void 0:v.minimum)==null?void 0:I.final)==null?void 0:w.amount)==null?void 0:C.value)||0,currency:(($=(x=(S=(b=e==null?void 0:e.priceRange)==null?void 0:b.minimum)==null?void 0:S.final)==null?void 0:x.amount)==null?void 0:$.currency)||""}},regular:{amount:{value:((T=(D=(F=(k=e==null?void 0:e.priceRange)==null?void 0:k.minimum)==null?void 0:F.regular)==null?void 0:D.amount)==null?void 0:T.value)||0,currency:((Q=(E=(A=(z=e==null?void 0:e.priceRange)==null?void 0:z.minimum)==null?void 0:A.regular)==null?void 0:E.amount)==null?void 0:Q.currency)||""}}},maximum:{final:{amount:{value:((H=(K=(G=(U=e==null?void 0:e.priceRange)==null?void 0:U.maximum)==null?void 0:G.final)==null?void 0:K.amount)==null?void 0:H.value)||0,currency:((N=(L=(O=(M=e==null?void 0:e.priceRange)==null?void 0:M.maximum)==null?void 0:O.final)==null?void 0:L.amount)==null?void 0:N.currency)||""}},regular:{amount:{value:((J=(B=(j=(Y=e==null?void 0:e.priceRange)==null?void 0:Y.maximum)==null?void 0:j.regular)==null?void 0:B.amount)==null?void 0:J.value)||0,currency:((q=(Z=(X=(W=e==null?void 0:e.priceRange)==null?void 0:W.maximum)==null?void 0:X.regular)==null?void 0:Z.amount)==null?void 0:q.currency)||""}}}}:void 0,inStock:(e==null?void 0:e.inStock)||!1,typename:(e==null?void 0:e.__typename)||""};return ee(i,(a=(y=(V=re.getConfig().models)==null?void 0:V.Product)==null?void 0:y.transformer)==null?void 0:a.call(y,e))};function fe(e,i){var n,s,t,l,u,g,f,c,h;const r=e==null?void 0:e.productSearch,o={facets:ye((r==null?void 0:r.facets)||[],i),items:(r==null?void 0:r.items.map(m=>ge(m==null?void 0:m.productView)))||[],pageInfo:{currentPage:((n=r==null?void 0:r.page_info)==null?void 0:n.current_page)||1,totalPages:((s=r==null?void 0:r.page_info)==null?void 0:s.total_pages)||1,totalItems:((t=r==null?void 0:r.page_info)==null?void 0:t.total_items)||0,pageSize:((l=r==null?void 0:r.page_info)==null?void 0:l.page_size)||10},totalCount:(r==null?void 0:r.total_count)||0,metadata:{filterableAttributes:((u=e==null?void 0:e.attributeMetadata)==null?void 0:u.filterableInSearch)||[],sortableAttributes:he(((g=e==null?void 0:e.attributeMetadata)==null?void 0:g.sortable)||[],i)}};return ee(o,(h=(c=(f=re.getConfig().models)==null?void 0:f.ProductSearchResult)==null?void 0:c.transformer)==null?void 0:h.call(c,e))}function he(e=[],i){return!e||e.length===0?[]:e.filter(r=>{var o;return r.attribute==="position"?(o=i==null?void 0:i.filter)==null?void 0:o.some(s=>s.attribute==="categoryPath"):!0}).map(r=>({...r,bidirectional:r.attribute==="price"}))}function ye(e=[],i){var o;return!e||e.length===0?[]:((o=i==null?void 0:i.filter)==null?void 0:o.some(n=>n.attribute==="categoryPath"))?e.filter(n=>n.attribute!=="categories"):e}const Re=`
3
+ import{merge as ee}from"@dropins/tools/lib.js";import{c as re}from"./initialize.js";import{events as p}from"@dropins/tools/event-bus.js";import{ProductView as ne,Facet as ie}from"../fragments.js";import{S as oe,P as se,u as ue,b as le,d as te,e as ce}from"./acdlEvents.js";import{FetchGraphQL as me}from"@dropins/tools/fetch-graphql.js";const{setEndpoint:be,setFetchGraphQlHeader:Se,removeFetchGraphQlHeader:xe,setFetchGraphQlHeaders:$e,getFetchGraphQlHeader:ke,fetchGraphQl:pe,getConfig:Fe}=new me().getMethods(),ge=e=>{var r,o,n,s,t,l,u,g,f,c,h,m,_,P,v,I,w,C,b,S,x,$,k,F,D,T,z,A,Q,E,G,U,H,K,M,O,L,N,Y,j,B,J,W,X,Z,q,V,y,a;if(!e)return{id:"",name:"",sku:"",shortDescription:"",url:"",urlKey:"",metaTitle:"",metaKeywords:"",metaDescription:"",lowStock:!1,links:[],images:[],description:"",externalId:"",inputOptions:[],addToCartAllowed:!1,price:void 0,priceRange:void 0,inStock:!1,typename:""};const i={id:(e==null?void 0:e.id)||"",name:(e==null?void 0:e.name)||"",sku:(e==null?void 0:e.sku)||"",shortDescription:(e==null?void 0:e.shortDescription)||"",url:(e==null?void 0:e.url)||"",urlKey:(e==null?void 0:e.urlKey)||"",metaTitle:(e==null?void 0:e.metaTitle)||"",metaKeywords:(e==null?void 0:e.metaKeywords)||"",metaDescription:(e==null?void 0:e.metaDescription)||"",lowStock:(e==null?void 0:e.lowStock)||!1,links:(e==null?void 0:e.links)||[],images:((r=e==null?void 0:e.images)==null?void 0:r.map(R=>{var d;return{label:R.label||"",roles:R.roles||[],url:((d=R.url)==null?void 0:d.replace(/^https?:\/\//,"//"))||""}}))||[],description:(e==null?void 0:e.description)||"",externalId:(e==null?void 0:e.externalId)||"",inputOptions:(e==null?void 0:e.inputOptions)||[],addToCartAllowed:(e==null?void 0:e.addToCartAllowed)||!1,price:e.price?{final:{amount:{value:((s=(n=(o=e==null?void 0:e.price)==null?void 0:o.final)==null?void 0:n.amount)==null?void 0:s.value)||0,currency:((u=(l=(t=e==null?void 0:e.price)==null?void 0:t.final)==null?void 0:l.amount)==null?void 0:u.currency)||""}},regular:{amount:{value:((c=(f=(g=e==null?void 0:e.price)==null?void 0:g.regular)==null?void 0:f.amount)==null?void 0:c.value)||0,currency:((_=(m=(h=e==null?void 0:e.price)==null?void 0:h.regular)==null?void 0:m.amount)==null?void 0:_.currency)||""}},roles:((P=e==null?void 0:e.price)==null?void 0:P.roles)||[]}:void 0,priceRange:e!=null&&e.priceRange?{minimum:{final:{amount:{value:((C=(w=(I=(v=e==null?void 0:e.priceRange)==null?void 0:v.minimum)==null?void 0:I.final)==null?void 0:w.amount)==null?void 0:C.value)||0,currency:(($=(x=(S=(b=e==null?void 0:e.priceRange)==null?void 0:b.minimum)==null?void 0:S.final)==null?void 0:x.amount)==null?void 0:$.currency)||""}},regular:{amount:{value:((T=(D=(F=(k=e==null?void 0:e.priceRange)==null?void 0:k.minimum)==null?void 0:F.regular)==null?void 0:D.amount)==null?void 0:T.value)||0,currency:((E=(Q=(A=(z=e==null?void 0:e.priceRange)==null?void 0:z.minimum)==null?void 0:A.regular)==null?void 0:Q.amount)==null?void 0:E.currency)||""}}},maximum:{final:{amount:{value:((K=(H=(U=(G=e==null?void 0:e.priceRange)==null?void 0:G.maximum)==null?void 0:U.final)==null?void 0:H.amount)==null?void 0:K.value)||0,currency:((N=(L=(O=(M=e==null?void 0:e.priceRange)==null?void 0:M.maximum)==null?void 0:O.final)==null?void 0:L.amount)==null?void 0:N.currency)||""}},regular:{amount:{value:((J=(B=(j=(Y=e==null?void 0:e.priceRange)==null?void 0:Y.maximum)==null?void 0:j.regular)==null?void 0:B.amount)==null?void 0:J.value)||0,currency:((q=(Z=(X=(W=e==null?void 0:e.priceRange)==null?void 0:W.maximum)==null?void 0:X.regular)==null?void 0:Z.amount)==null?void 0:q.currency)||""}}}}:void 0,inStock:(e==null?void 0:e.inStock)||!1,typename:(e==null?void 0:e.__typename)||""};return ee(i,(a=(y=(V=re.getConfig().models)==null?void 0:V.Product)==null?void 0:y.transformer)==null?void 0:a.call(y,e))};function fe(e,i){var n,s,t,l,u,g,f,c,h;const r=e==null?void 0:e.productSearch,o={facets:ye((r==null?void 0:r.facets)||[],i),items:(r==null?void 0:r.items.map(m=>ge(m==null?void 0:m.productView)))||[],pageInfo:{currentPage:((n=r==null?void 0:r.page_info)==null?void 0:n.current_page)||1,totalPages:((s=r==null?void 0:r.page_info)==null?void 0:s.total_pages)||1,totalItems:((t=r==null?void 0:r.page_info)==null?void 0:t.total_items)||0,pageSize:((l=r==null?void 0:r.page_info)==null?void 0:l.page_size)||10},totalCount:(r==null?void 0:r.total_count)||0,metadata:{filterableAttributes:((u=e==null?void 0:e.attributeMetadata)==null?void 0:u.filterableInSearch)||[],sortableAttributes:he(((g=e==null?void 0:e.attributeMetadata)==null?void 0:g.sortable)||[],i)}};return ee(o,(h=(c=(f=re.getConfig().models)==null?void 0:f.ProductSearchResult)==null?void 0:c.transformer)==null?void 0:h.call(c,e))}function he(e=[],i){return!e||e.length===0?[]:e.filter(r=>{var o;return r.attribute==="position"?(o=i==null?void 0:i.filter)==null?void 0:o.some(s=>s.attribute==="categoryPath"):!0}).map(r=>({...r,bidirectional:r.attribute==="price"}))}function ye(e=[],i){var o;return!e||e.length===0?[]:((o=i==null?void 0:i.filter)==null?void 0:o.some(n=>n.attribute==="categoryPath"))?e.filter(n=>n.attribute!=="categories"):e}const Re=`
4
4
  query productSearch(
5
5
  $phrase: String!
6
6
  $pageSize: Int
@@ -46,5 +46,5 @@ import{merge as ee}from"@dropins/tools/lib.js";import{c as re}from"./initialize.
46
46
  }
47
47
  ${ne}
48
48
  ${ie}
49
- `,Fe=async(e,i={})=>{const r=i.scope==="search"?void 0:i.scope,o={request:e||{},result:{facets:[],pageInfo:{currentPage:0,totalPages:0,totalItems:0,pageSize:0},items:[],totalCount:0,suggestions:[],metadata:{filterableAttributes:[],sortableAttributes:[]}}};if(e===null)return p.emit("search/result",o,{scope:r}),o.result;p.emit("search/loading",!0,{scope:r});try{const n=r==="popover"?oe:se,s=window.crypto.randomUUID();ue(n,s,e.phrase||"",e.filter||[],e.pageSize||0,e.currentPage||0,e.sort||[]),le(n);const{errors:t,data:l}=await pe(Re,{method:"GET",variables:{...e}});if(t&&!l)throw new Error("Error fetching product search");const u=fe(l,e);return te(n,s,u),ce(n),p.emit("search/result",{request:e,result:u},{scope:r}),u}catch(n){throw p.emit("search/error",n.message,{scope:r}),p.emit("search/result",o,{scope:r}),n}finally{p.emit("search/loading",!1,{scope:r})}};export{Se as a,$e as b,Fe as c,pe as f,ke as g,xe as r,be as s};
49
+ `,De=async(e,i={})=>{const r=i.scope==="search"?void 0:i.scope,o={request:e||{},result:{facets:[],pageInfo:{currentPage:0,totalPages:0,totalItems:0,pageSize:0},items:[],totalCount:0,suggestions:[],metadata:{filterableAttributes:[],sortableAttributes:[]}}};if(e===null)return p.emit("search/result",o,{scope:r}),o.result;p.emit("search/loading",!0,{scope:r});try{const n=r==="popover"?oe:se,s=window.crypto.randomUUID();ue(n,s,e.phrase||"",e.filter||[],e.pageSize||0,e.currentPage||0,e.sort||[]),le(n);const{errors:t,data:l}=await pe(Re,{method:"GET",variables:{...e}});if(t&&!l)throw new Error("Error fetching product search");const u=fe(l,e);return te(n,s,u),ce(n),p.emit("search/result",{request:e,result:u},{scope:r}),u}catch(n){throw p.emit("search/error",n.message,{scope:r}),p.emit("search/result",o,{scope:r}),n}finally{p.emit("search/loading",!1,{scope:r})}};export{Se as a,$e as b,Fe as c,De as d,pe as f,ke as g,xe as r,be as s};
50
50
  //# sourceMappingURL=search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sources":["/@dropins/storefront-product-discovery/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-product-discovery/src/data/transforms/product.ts","/@dropins/storefront-product-discovery/src/data/transforms/api.ts","/@dropins/storefront-product-discovery/src/api/search/graphql/search.graphql.ts","/@dropins/storefront-product-discovery/src/api/search/search.ts"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\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 * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { config } from '@/plp/api/initialize/initialize';\nimport { Product } from '../models/product';\n\nexport const transformProduct = (data: any): Product | null => {\n // check if data is null or undefined, and if so return an empty object\n if (!data) {\n return {\n id: '',\n name: '',\n sku: '',\n shortDescription: '',\n url: '',\n urlKey: '',\n metaTitle: '',\n metaKeywords: '',\n metaDescription: '',\n lowStock: false,\n links: [],\n images: [],\n description: '',\n externalId: '',\n inputOptions: [],\n addToCartAllowed: false,\n price: undefined,\n priceRange: undefined,\n inStock: false,\n typename: '',\n };\n }\n\n const transformedProduct = {\n id: data?.id || '',\n name: data?.name || '',\n sku: data?.sku || '',\n shortDescription: data?.shortDescription || '',\n url: data?.url || '',\n urlKey: data?.urlKey || '',\n metaTitle: data?.metaTitle || '',\n metaKeywords: data?.metaKeywords || '',\n metaDescription: data?.metaDescription || '',\n lowStock: data?.lowStock || false,\n links: data?.links || [],\n images:\n data?.images?.map((image: any) => ({\n label: image.label || '',\n roles: image.roles || [],\n url: image.url?.replace(/^https?:\\/\\//, '//') || '',\n })) || [],\n description: data?.description || '',\n externalId: data?.externalId || '',\n inputOptions: data?.inputOptions || [],\n addToCartAllowed: data?.addToCartAllowed || false,\n price: data.price\n ? {\n final: {\n amount: {\n value: data?.price?.final?.amount?.value || 0,\n currency: data?.price?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.price?.regular?.amount?.value || 0,\n currency: data?.price?.regular?.amount?.currency || '',\n },\n },\n roles: data?.price?.roles || [],\n }\n : undefined,\n priceRange: data?.priceRange\n ? {\n minimum: {\n final: {\n amount: {\n value: data?.priceRange?.minimum?.final?.amount?.value || 0,\n currency: data?.priceRange?.minimum?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.minimum?.regular?.amount?.value || 0,\n currency: data?.priceRange?.minimum?.regular?.amount?.currency || '',\n },\n },\n },\n maximum: {\n final: {\n amount: {\n value: data?.priceRange?.maximum?.final?.amount?.value || 0,\n currency: data?.priceRange?.maximum?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.maximum?.regular?.amount?.value || 0,\n currency: data?.priceRange?.maximum?.regular?.amount?.currency || '',\n },\n },\n },\n }\n : undefined,\n inStock: data?.inStock || false,\n typename: data?.__typename || '',\n };\n\n return merge(\n transformedProduct, // default transformer\n config.getConfig().models?.Product?.transformer?.(data), // custom transformer\n )\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { config } from '@/plp/api/initialize/initialize';\nimport { ProductSearchResult, SearchVariables } from '@/plp/data/models';\nimport { Product } from '@/plp/data/models/product';\n\nimport { transformProduct } from './product';\n\n\nexport function transformProductSearchResponse(data: any, searchVariables?: SearchVariables): ProductSearchResult {\n const productSearch = data?.productSearch;\n\n const transformedResponse: ProductSearchResult = {\n facets: transformFacets(productSearch?.facets || [], searchVariables),\n items: productSearch?.items.map((product: any) => transformProduct(product?.productView)) || [],\n pageInfo: {\n currentPage: productSearch?.page_info?.current_page || 1,\n totalPages: productSearch?.page_info?.total_pages || 1,\n totalItems: productSearch?.page_info?.total_items || 0,\n pageSize: productSearch?.page_info?.page_size || 10, //replace with default constant\n },\n totalCount: productSearch?.total_count || 0,\n metadata: {\n filterableAttributes: data?.attributeMetadata?.filterableInSearch || [],\n sortableAttributes: transformSortAttributes(data?.attributeMetadata?.sortable || [], searchVariables),\n }\n };\n return merge(\n transformedResponse, // default transformer\n config.getConfig().models?.ProductSearchResult?.transformer?.(data), // custom transformer\n );\n}\n\nexport const transformSearchResultProducts = (searchResponse: { productSearch: { items: any[] } }): Product[] =>\n searchResponse?.productSearch?.items?.reduce<Product[]>((returnedProductList, productItem) => {\n if (!productItem?.productView) return returnedProductList; // Skip if no productView and product is null\n\n const transformed = transformProduct(productItem.productView);\n if (transformed) {\n returnedProductList.push(transformed);\n }\n\n return returnedProductList;\n }, []) || [];\n\nfunction transformSortAttributes(sortableAttributes: any[] = [], searchVariables?: SearchVariables): any[] {\n if (!sortableAttributes || sortableAttributes.length === 0) {\n return [];\n }\n\n return sortableAttributes\n .filter((option) => {\n // Only include position attribute if there's a category filter\n if (option.attribute === 'position') {\n const hasCategoryFilter = searchVariables?.filter?.some(\n (filter) => filter.attribute === 'categoryPath'\n );\n return hasCategoryFilter;\n }\n\n // Include all other attributes\n return true;\n })\n .map((option) => ({\n ...option,\n bidirectional: option.attribute === 'price',\n }));\n}\n\nfunction transformFacets(facets: any[] = [], searchVariables?: SearchVariables): any[] {\n if (!facets || facets.length === 0) {\n return [];\n }\n\n const hasCategoryPathFilter = searchVariables?.filter?.some(\n (filter) => filter.attribute === 'categoryPath'\n );\n\n // if hasCategoryPathFilter, then we need to remove facets with attribute 'categories'\n if (hasCategoryPathFilter) {\n return facets.filter((facet) => facet.attribute !== 'categories');\n }\n\n return facets;\n}\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { Facet, ProductView } from '../../graphql/fragments.graphql';\n\nconst PRODUCT_SEARCH_QUERY = /* GraphQL */ `\n query productSearch(\n $phrase: String!\n $pageSize: Int\n $currentPage: Int = 1\n $filter: [SearchClauseInput!]\n $sort: [ProductSearchSortInput!]\n $context: QueryContextInput\n ) {\n attributeMetadata {\n sortable {\n label\n attribute\n numeric\n }\n filterableInSearch {\n label\n attribute\n numeric\n }\n }\n\n productSearch(\n phrase: $phrase\n page_size: $pageSize\n current_page: $currentPage\n filter: $filter\n sort: $sort\n context: $context\n ) {\n total_count\n items {\n ...ProductView\n }\n facets {\n ...Facet\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n }\n }\n ${ProductView}\n ${Facet}\n`;\n\nexport { PRODUCT_SEARCH_QUERY };\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { ProductSearchResult, Scope, SearchVariables } from '@/plp/data/models';\nimport { fetchGraphQl } from '@/plp/api';\nimport { transformProductSearchResponse } from '@/plp/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { PRODUCT_SEARCH_QUERY } from './graphql/search.graphql';\nimport { \n searchRequestSent, \n searchResponseReceived, \n updateSearchInputCtx,\n updateSearchResultsCtx,\n SEARCH_UNIT_ID, \n PLP_UNIT_ID,\n} from '@/plp/utils/acdlEvents';\n\ntype SearchOptions = {\n scope?: Scope;\n}\n\nexport const search = async (request: SearchVariables | null, options: SearchOptions = {}): Promise<ProductSearchResult> => {\n const scope = options.scope === 'search' ? undefined : options.scope;\n\n // empty result\n const emptyResult = {\n request: request || {} ,\n result: {\n facets: [],\n pageInfo: { currentPage: 0, totalPages: 0, totalItems: 0, pageSize: 0 },\n items: [],\n totalCount: 0,\n suggestions: [],\n metadata: {\n filterableAttributes: [],\n sortableAttributes: []\n }\n }\n };\n\n // clear search results if no request are provided\n if (request === null) {\n events.emit('search/result', emptyResult, { scope });\n return emptyResult.result;\n }\n\n\n // Emit loading state\n events.emit('search/loading', true, { scope });\n\n try {\n const acdlUnitId = scope === 'popover' ? SEARCH_UNIT_ID : PLP_UNIT_ID;\n const searchRequestId = window.crypto.randomUUID();\n\n // Update search input context in ACDL\n updateSearchInputCtx(\n acdlUnitId,\n searchRequestId,\n request.phrase || '',\n request.filter || [],\n request.pageSize || 0,\n request.currentPage || 0,\n request.sort || [],\n );\n\n // Publish search request event to ACDL\n searchRequestSent(acdlUnitId);\n\n // Execute search with validated request\n const { errors, data } = await fetchGraphQl(PRODUCT_SEARCH_QUERY, {\n method: 'GET',\n variables: { ...request },\n });\n\n if (errors && !data) {\n throw new Error('Error fetching product search');\n }\n\n const result = transformProductSearchResponse(data, request);\n\n // Update search results context in ACDL\n updateSearchResultsCtx(acdlUnitId, searchRequestId, result);\n\n // Publish search response event to ACDL\n searchResponseReceived(acdlUnitId)\n\n // Emit single event with result and metadata\n events.emit('search/result', { request, result }, { scope });\n\n return result;\n\n } catch (error) {\n // Emit error event\n events.emit('search/error', (error as Error).message, { scope });\n\n // Emit result event with empty result\n events.emit('search/result', emptyResult, { scope });\n\n throw error;\n } finally {\n // Reset loading state\n events.emit('search/loading', false, { scope });\n }\n};"],"names":["setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","transformProduct","data","transformedProduct","_a","image","_d","_c","_b","_g","_f","_e","_j","_i","_h","_m","_l","_k","_n","_r","_q","_p","_o","_v","_u","_t","_s","_z","_y","_x","_w","_D","_C","_B","_A","_H","_G","_F","_E","_L","_K","_J","_I","_P","_O","_N","_M","_T","_S","_R","_Q","merge","_W","_V","_U","config","transformProductSearchResponse","searchVariables","productSearch","transformedResponse","transformFacets","product","transformSortAttributes","sortableAttributes","option","filter","facets","facet","PRODUCT_SEARCH_QUERY","ProductView","Facet","search","request","options","scope","emptyResult","events","acdlUnitId","SEARCH_UNIT_ID","PLP_UNIT_ID","searchRequestId","updateSearchInputCtx","searchRequestSent","errors","result","updateSearchResultsCtx","searchResponseReceived","error"],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sources":["/@dropins/storefront-product-discovery/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-product-discovery/src/data/transforms/product.ts","/@dropins/storefront-product-discovery/src/data/transforms/api.ts","/@dropins/storefront-product-discovery/src/api/search/graphql/search.graphql.ts","/@dropins/storefront-product-discovery/src/api/search/search.ts"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n getFetchGraphQlHeader,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { config } from '@/plp/api/initialize/initialize';\nimport { Product } from '../models/product';\n\nexport const transformProduct = (data: any): Product | null => {\n // check if data is null or undefined, and if so return an empty object\n if (!data) {\n return {\n id: '',\n name: '',\n sku: '',\n shortDescription: '',\n url: '',\n urlKey: '',\n metaTitle: '',\n metaKeywords: '',\n metaDescription: '',\n lowStock: false,\n links: [],\n images: [],\n description: '',\n externalId: '',\n inputOptions: [],\n addToCartAllowed: false,\n price: undefined,\n priceRange: undefined,\n inStock: false,\n typename: '',\n };\n }\n\n const transformedProduct = {\n id: data?.id || '',\n name: data?.name || '',\n sku: data?.sku || '',\n shortDescription: data?.shortDescription || '',\n url: data?.url || '',\n urlKey: data?.urlKey || '',\n metaTitle: data?.metaTitle || '',\n metaKeywords: data?.metaKeywords || '',\n metaDescription: data?.metaDescription || '',\n lowStock: data?.lowStock || false,\n links: data?.links || [],\n images:\n data?.images?.map((image: any) => ({\n label: image.label || '',\n roles: image.roles || [],\n url: image.url?.replace(/^https?:\\/\\//, '//') || '',\n })) || [],\n description: data?.description || '',\n externalId: data?.externalId || '',\n inputOptions: data?.inputOptions || [],\n addToCartAllowed: data?.addToCartAllowed || false,\n price: data.price\n ? {\n final: {\n amount: {\n value: data?.price?.final?.amount?.value || 0,\n currency: data?.price?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.price?.regular?.amount?.value || 0,\n currency: data?.price?.regular?.amount?.currency || '',\n },\n },\n roles: data?.price?.roles || [],\n }\n : undefined,\n priceRange: data?.priceRange\n ? {\n minimum: {\n final: {\n amount: {\n value: data?.priceRange?.minimum?.final?.amount?.value || 0,\n currency: data?.priceRange?.minimum?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.minimum?.regular?.amount?.value || 0,\n currency: data?.priceRange?.minimum?.regular?.amount?.currency || '',\n },\n },\n },\n maximum: {\n final: {\n amount: {\n value: data?.priceRange?.maximum?.final?.amount?.value || 0,\n currency: data?.priceRange?.maximum?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.maximum?.regular?.amount?.value || 0,\n currency: data?.priceRange?.maximum?.regular?.amount?.currency || '',\n },\n },\n },\n }\n : undefined,\n inStock: data?.inStock || false,\n typename: data?.__typename || '',\n };\n\n return merge(\n transformedProduct, // default transformer\n config.getConfig().models?.Product?.transformer?.(data), // custom transformer\n )\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { config } from '@/plp/api/initialize/initialize';\nimport { ProductSearchResult, SearchVariables } from '@/plp/data/models';\nimport { Product } from '@/plp/data/models/product';\n\nimport { transformProduct } from './product';\n\n\nexport function transformProductSearchResponse(data: any, searchVariables?: SearchVariables): ProductSearchResult {\n const productSearch = data?.productSearch;\n\n const transformedResponse: ProductSearchResult = {\n facets: transformFacets(productSearch?.facets || [], searchVariables),\n items: productSearch?.items.map((product: any) => transformProduct(product?.productView)) || [],\n pageInfo: {\n currentPage: productSearch?.page_info?.current_page || 1,\n totalPages: productSearch?.page_info?.total_pages || 1,\n totalItems: productSearch?.page_info?.total_items || 0,\n pageSize: productSearch?.page_info?.page_size || 10, //replace with default constant\n },\n totalCount: productSearch?.total_count || 0,\n metadata: {\n filterableAttributes: data?.attributeMetadata?.filterableInSearch || [],\n sortableAttributes: transformSortAttributes(data?.attributeMetadata?.sortable || [], searchVariables),\n }\n };\n return merge(\n transformedResponse, // default transformer\n config.getConfig().models?.ProductSearchResult?.transformer?.(data), // custom transformer\n );\n}\n\nexport const transformSearchResultProducts = (searchResponse: { productSearch: { items: any[] } }): Product[] =>\n searchResponse?.productSearch?.items?.reduce<Product[]>((returnedProductList, productItem) => {\n if (!productItem?.productView) return returnedProductList; // Skip if no productView and product is null\n\n const transformed = transformProduct(productItem.productView);\n if (transformed) {\n returnedProductList.push(transformed);\n }\n\n return returnedProductList;\n }, []) || [];\n\nfunction transformSortAttributes(sortableAttributes: any[] = [], searchVariables?: SearchVariables): any[] {\n if (!sortableAttributes || sortableAttributes.length === 0) {\n return [];\n }\n\n return sortableAttributes\n .filter((option) => {\n // Only include position attribute if there's a category filter\n if (option.attribute === 'position') {\n const hasCategoryFilter = searchVariables?.filter?.some(\n (filter) => filter.attribute === 'categoryPath'\n );\n return hasCategoryFilter;\n }\n\n // Include all other attributes\n return true;\n })\n .map((option) => ({\n ...option,\n bidirectional: option.attribute === 'price',\n }));\n}\n\nfunction transformFacets(facets: any[] = [], searchVariables?: SearchVariables): any[] {\n if (!facets || facets.length === 0) {\n return [];\n }\n\n const hasCategoryPathFilter = searchVariables?.filter?.some(\n (filter) => filter.attribute === 'categoryPath'\n );\n\n // if hasCategoryPathFilter, then we need to remove facets with attribute 'categories'\n if (hasCategoryPathFilter) {\n return facets.filter((facet) => facet.attribute !== 'categories');\n }\n\n return facets;\n}\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { Facet, ProductView } from '../../graphql/fragments.graphql';\n\nconst PRODUCT_SEARCH_QUERY = /* GraphQL */ `\n query productSearch(\n $phrase: String!\n $pageSize: Int\n $currentPage: Int = 1\n $filter: [SearchClauseInput!]\n $sort: [ProductSearchSortInput!]\n $context: QueryContextInput\n ) {\n attributeMetadata {\n sortable {\n label\n attribute\n numeric\n }\n filterableInSearch {\n label\n attribute\n numeric\n }\n }\n\n productSearch(\n phrase: $phrase\n page_size: $pageSize\n current_page: $currentPage\n filter: $filter\n sort: $sort\n context: $context\n ) {\n total_count\n items {\n ...ProductView\n }\n facets {\n ...Facet\n }\n page_info {\n current_page\n page_size\n total_pages\n }\n }\n }\n ${ProductView}\n ${Facet}\n`;\n\nexport { PRODUCT_SEARCH_QUERY };\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { ProductSearchResult, Scope, SearchVariables } from '@/plp/data/models';\nimport { fetchGraphQl } from '@/plp/api';\nimport { transformProductSearchResponse } from '@/plp/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { PRODUCT_SEARCH_QUERY } from './graphql/search.graphql';\nimport { \n searchRequestSent, \n searchResponseReceived, \n updateSearchInputCtx,\n updateSearchResultsCtx,\n SEARCH_UNIT_ID, \n PLP_UNIT_ID,\n} from '@/plp/utils/acdlEvents';\n\ntype SearchOptions = {\n scope?: Scope;\n}\n\nexport const search = async (request: SearchVariables | null, options: SearchOptions = {}): Promise<ProductSearchResult> => {\n const scope = options.scope === 'search' ? undefined : options.scope;\n\n // empty result\n const emptyResult = {\n request: request || {} ,\n result: {\n facets: [],\n pageInfo: { currentPage: 0, totalPages: 0, totalItems: 0, pageSize: 0 },\n items: [],\n totalCount: 0,\n suggestions: [],\n metadata: {\n filterableAttributes: [],\n sortableAttributes: []\n }\n }\n };\n\n // clear search results if no request are provided\n if (request === null) {\n events.emit('search/result', emptyResult, { scope });\n return emptyResult.result;\n }\n\n\n // Emit loading state\n events.emit('search/loading', true, { scope });\n\n try {\n const acdlUnitId = scope === 'popover' ? SEARCH_UNIT_ID : PLP_UNIT_ID;\n const searchRequestId = window.crypto.randomUUID();\n\n // Update search input context in ACDL\n updateSearchInputCtx(\n acdlUnitId,\n searchRequestId,\n request.phrase || '',\n request.filter || [],\n request.pageSize || 0,\n request.currentPage || 0,\n request.sort || [],\n );\n\n // Publish search request event to ACDL\n searchRequestSent(acdlUnitId);\n\n // Execute search with validated request\n const { errors, data } = await fetchGraphQl(PRODUCT_SEARCH_QUERY, {\n method: 'GET',\n variables: { ...request },\n });\n\n if (errors && !data) {\n throw new Error('Error fetching product search');\n }\n\n const result = transformProductSearchResponse(data, request);\n\n // Update search results context in ACDL\n updateSearchResultsCtx(acdlUnitId, searchRequestId, result);\n\n // Publish search response event to ACDL\n searchResponseReceived(acdlUnitId)\n\n // Emit single event with result and metadata\n events.emit('search/result', { request, result }, { scope });\n\n return result;\n\n } catch (error) {\n // Emit error event\n events.emit('search/error', (error as Error).message, { scope });\n\n // Emit result event with empty result\n events.emit('search/result', emptyResult, { scope });\n\n throw error;\n } finally {\n // Reset loading state\n events.emit('search/loading', false, { scope });\n }\n};"],"names":["setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","getFetchGraphQlHeader","fetchGraphQl","getConfig","FetchGraphQL","transformProduct","data","transformedProduct","_a","image","_d","_c","_b","_g","_f","_e","_j","_i","_h","_m","_l","_k","_n","_r","_q","_p","_o","_v","_u","_t","_s","_z","_y","_x","_w","_D","_C","_B","_A","_H","_G","_F","_E","_L","_K","_J","_I","_P","_O","_N","_M","_T","_S","_R","_Q","merge","_W","_V","_U","config","transformProductSearchResponse","searchVariables","productSearch","transformedResponse","transformFacets","product","transformSortAttributes","sortableAttributes","option","filter","facets","facet","PRODUCT_SEARCH_QUERY","ProductView","Facet","search","request","options","scope","emptyResult","events","acdlUnitId","SEARCH_UNIT_ID","PLP_UNIT_ID","searchRequestId","updateSearchInputCtx","searchRequestSent","errors","result","updateSearchResultsCtx","searchResponseReceived","error"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as L,jsx as a,Fragment as N}from"@dropins/tools/preact-jsx-runtime.js";import*as h from"@dropins/tools/preact-compat.js";import{useState as C,useEffect as j}from"@dropins/tools/preact-compat.js";import{classes as z,VComponent as E,Slot as y}from"@dropins/tools/lib.js";import{Button as R,Icon as b,PriceRange as A,Checkbox as T,RadioButton as V}from"@dropins/tools/components.js";/* empty css */import{useText as $}from"@dropins/tools/i18n.js";import{events as W}from"@dropins/tools/event-bus.js";import{c as H}from"../chunks/search.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const Y=n=>h.createElement("svg",{id:"Icon_Add_Base","data-name":"Icon \\u2013 Add \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...n},h.createElement("g",{id:"Large"},h.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),h.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},h.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_579","data-name":"Line 579",y2:12.7,transform:"translate(2.216 -4.087)",fill:"none",stroke:"currentColor"}),h.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_580","data-name":"Line 580",x2:12.7,transform:"translate(-4.079 2.263)",fill:"none",stroke:"currentColor"})))),G=n=>h.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},h.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),h.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),J=n=>h.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},h.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),K=({numberOfOptionsConfig:n=5,header:e,buckets:s,last:u})=>{const g=$({showMore:"Search.Facet.showMore",showLess:"Search.Facet.showLess"}),f=n,[p,d]=C(s.length<f),v=p?s.length:f;return L("div",{className:z(["product-discovery-facet",["product-discovery-facet--last",u]]),children:[a(E,{className:"product-discovery-facet__header",node:e}),s.slice(0,v).map((w,B)=>a(E,{className:"product-discovery-facet__bucket",node:w},B)),!p&&s.length>f&&a(R,{variant:"tertiary",icon:a(b,{source:Y,size:"24"}),onClick:()=>d(!p),children:g.showMore}),p&&s.length>f&&a(R,{variant:"tertiary",icon:a(b,{source:J,size:"24"}),onClick:()=>d(!p),children:g.showLess})]})},Q=({selectedFacets:n,facets:e})=>L(N,{children:[a(E,{className:"product-discovery-facet-list__selected-filters",node:n}),a(E,{className:"product-discovery-facet-list__facet-options",node:e})]}),X="no",Z="yes",I=n=>{const e=n.buckets.find(s=>s.selected);return e?{attribute:n.attribute,range:{from:e.from,to:e.to}}:null},ee=n=>{const e=n.buckets.reduce((s,u)=>(u.selected&&s.push(u.title),s),[]);return e.length===0?null:{attribute:n.attribute,in:e}},te=n=>{var e;switch((e=n.buckets[0])==null?void 0:e.__typename){case"RangeBucket":return I(n);case"ScalarBucket":case"CategoryView":return ee(n)}},ne=n=>{var s,u,g,f,p,d,v,w,B,k,x;const e=n[0];return(g=(u=(s=e==null?void 0:e.price)==null?void 0:s.regular)==null?void 0:u.amount)!=null&&g.currency?e.price.regular.amount.currency:(v=(d=(p=(f=e==null?void 0:e.priceRange)==null?void 0:f.minimum)==null?void 0:p.regular)==null?void 0:d.amount)!=null&&v.currency?(x=(k=(B=(w=e==null?void 0:e.priceRange)==null?void 0:w.minimum)==null?void 0:B.regular)==null?void 0:k.amount)==null?void 0:x.currency:"USD"},re=(n,e,s)=>(e==null?void 0:e.attribute)==="price"?n.from===0?L("div",{style:"display:flex",children:[a(A,{amount:n.from,currency:s||"USD"}),a("span",{style:"padding: 0 2px",children:"-"}),a(A,{amount:n.to,currency:s||"USD"})]}):a(A,{minimumAmount:n.from,maximumAmount:n.to,currency:s||"USD",display:"dash"}):n.title,ce=(n,e)=>n.title===X?`Not ${e.title}`:n.title===Z?e.title:n.title,O=(n,e,s)=>{switch(n.__typename){case"RangeBucket":return re(n,e,s);case"ScalarBucket":case"CategoryView":return ce(n,e)}},Fe=({scope:n,slots:e})=>{const s=$({clearAll:"Search.Facet.clearAll"}),[u,g]=C([]),[f,p]=C(null),[d,v]=C(),w=t=>{var o;const i=((o=d==null?void 0:d.filter)==null?void 0:o.filter(c=>c.attribute==="categoryPath"))||[];H({...t,filter:[...i,...t.filter||[]]},{scope:n})},B=t=>{if(!t||!t.result.facets&&!t.result.items&&!t.request.filter){g([]);return}v(t.request);const{facets:i,items:o}=t.result;p(ne(o));const c=t.request.filter;if(i){const r=i.map(l=>{const S=l.buckets.map(F=>{F.selected=!1;const m=c==null?void 0:c.find(_=>_.attribute===l.attribute);if(m){const _=m.range;(_&&F.from===_.from&&F.to===_.to||m.in&&m.in.includes(F.title))&&(F.selected=!0)}return F});return l.buckets=S,l});g(r)}},k=t=>{const i=u.map(c=>{const r=t.find(l=>l.attribute===c.attribute);return r||c}),o=i.reduce((c,r)=>{const l=te(r);return l&&c.push(l),c},[]);g(i),d&&w({...d,filter:o})},x=(t,i)=>{const o=t.buckets.map(r=>(r.title===i&&(r.selected=!1),r)),c=t;c.buckets=o,k([c])},q=()=>{const t=u.map(i=>{const o=i.buckets.map(c=>(c.selected=!1,c));return i.buckets=o,i});g(t),d&&w({...d,filter:[]})},M=(t,i)=>{const o=i.buckets.map(r=>{var l;return((l=i.buckets[0])==null?void 0:l.__typename)==="RangeBucket"&&(r.selected=!1),r.title===t.target.value&&(r.selected=t.target.checked),r}),c=i;c.buckets=o,k([c])},P=(t,i)=>{const o=a("span",{children:t.title}),c=t.buckets.map(r=>{var F;const l=O(r,t,f),S=m=>L(y,{name:"FacetBucketLabel",slot:e==null?void 0:e.FacetBucketLabel,context:{data:r},children:[l," ",m?`(${m})`:""]});switch((F=t.buckets[0])==null?void 0:F.__typename){case"RangeBucket":return a(y,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:r},children:a(V,{"data-testid":`${r.title}-radio`,label:S(),name:t.attribute,value:r.title,checked:r.selected,onChange:m=>{M(m,t)}})});case"ScalarBucket":case"CategoryView":return a(y,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:r},children:a(T,{"data-testid":`${r.title}-checkbox`,label:S(r.count),name:t.attribute,value:r.title,checked:r.selected,onChange:m=>{M(m,t)}})});default:return null}}).filter(r=>r!==null);return a(K,{header:o,buckets:c,last:i===u.length-1})},D=()=>a(y,{name:"Facets",slot:e==null?void 0:e.Facets,context:{data:u},children:u.map((t,i)=>t.buckets.length>0?a(N,{children:a(y,{name:"Facet",slot:e==null?void 0:e.Facet,context:{data:t},children:P(t,i)})}):null)}),U=()=>{const t=u.reduce((c,r)=>(r.buckets.filter(S=>S.selected).length>0&&c.push(r),c),[]),i=t.map(c=>c.buckets.map(r=>{if(r.selected){const l=O(r,c,f);return a(R,{"data-testid":`${r.title}-selected-btn`,"aria-label":`Remove ${c.title} filter: ${r.title}`,variant:"secondary",children:L(N,{children:[a("span",{children:l}),a(b,{source:G,size:"16"})]}),onClick:()=>{x(c,r.title)}})}return null})),o=i.length>0?a(R,{variant:"secondary",onClick:()=>{q()},children:a("span",{children:s.clearAll})}):null;return L(y,{name:"SelectedFacets",slot:e==null?void 0:e.SelectedFacets,context:{data:t},children:[i,o]})};return j(()=>{const t=W.on("search/result",B,{eager:!0,scope:n});return()=>{t==null||t.off()}},[]),a(Q,{selectedFacets:U(),facets:D()})};export{Fe as Facets,Fe as default};
3
+ import{jsxs as L,jsx as a,Fragment as N}from"@dropins/tools/preact-jsx-runtime.js";import*as h from"@dropins/tools/preact-compat.js";import{useState as C,useEffect as j}from"@dropins/tools/preact-compat.js";import{classes as z,VComponent as E,Slot as y}from"@dropins/tools/lib.js";import{Button as R,Icon as b,PriceRange as A,Checkbox as T,RadioButton as V}from"@dropins/tools/components.js";/* empty css */import{useText as $}from"@dropins/tools/i18n.js";import{events as W}from"@dropins/tools/event-bus.js";import{d as H}from"../chunks/search.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const Y=n=>h.createElement("svg",{id:"Icon_Add_Base","data-name":"Icon \\u2013 Add \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...n},h.createElement("g",{id:"Large"},h.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),h.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},h.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_579","data-name":"Line 579",y2:12.7,transform:"translate(2.216 -4.087)",fill:"none",stroke:"currentColor"}),h.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_580","data-name":"Line 580",x2:12.7,transform:"translate(-4.079 2.263)",fill:"none",stroke:"currentColor"})))),G=n=>h.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},h.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),h.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),J=n=>h.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},h.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),K=({numberOfOptionsConfig:n=5,header:e,buckets:s,last:d})=>{const g=$({showMore:"Search.Facet.showMore",showLess:"Search.Facet.showLess"}),f=n,[p,u]=C(s.length<f),v=p?s.length:f;return L("div",{className:z(["product-discovery-facet",["product-discovery-facet--last",d]]),children:[a(E,{className:"product-discovery-facet__header",node:e}),s.slice(0,v).map((w,B)=>a(E,{className:"product-discovery-facet__bucket",node:w},B)),!p&&s.length>f&&a(R,{variant:"tertiary",icon:a(b,{source:Y,size:"24"}),onClick:()=>u(!p),children:g.showMore}),p&&s.length>f&&a(R,{variant:"tertiary",icon:a(b,{source:J,size:"24"}),onClick:()=>u(!p),children:g.showLess})]})},Q=({selectedFacets:n,facets:e})=>L(N,{children:[a(E,{className:"product-discovery-facet-list__selected-filters",node:n}),a(E,{className:"product-discovery-facet-list__facet-options",node:e})]}),X="no",Z="yes",I=n=>{const e=n.buckets.find(s=>s.selected);return e?{attribute:n.attribute,range:{from:e.from,to:e.to}}:null},ee=n=>{const e=n.buckets.reduce((s,d)=>(d.selected&&s.push(d.title),s),[]);return e.length===0?null:{attribute:n.attribute,in:e}},te=n=>{var e;switch((e=n.buckets[0])==null?void 0:e.__typename){case"RangeBucket":return I(n);case"ScalarBucket":case"CategoryView":return ee(n)}},ne=n=>{var s,d,g,f,p,u,v,w,B,k,x;const e=n[0];return(g=(d=(s=e==null?void 0:e.price)==null?void 0:s.regular)==null?void 0:d.amount)!=null&&g.currency?e.price.regular.amount.currency:(v=(u=(p=(f=e==null?void 0:e.priceRange)==null?void 0:f.minimum)==null?void 0:p.regular)==null?void 0:u.amount)!=null&&v.currency?(x=(k=(B=(w=e==null?void 0:e.priceRange)==null?void 0:w.minimum)==null?void 0:B.regular)==null?void 0:k.amount)==null?void 0:x.currency:"USD"},re=(n,e,s)=>(e==null?void 0:e.attribute)==="price"?n.from===0?L("div",{style:"display:flex",children:[a(A,{amount:n.from,currency:s||"USD"}),a("span",{style:"padding: 0 2px",children:"-"}),a(A,{amount:n.to,currency:s||"USD"})]}):a(A,{minimumAmount:n.from,maximumAmount:n.to,currency:s||"USD",display:"dash"}):n.title,ce=(n,e)=>n.title===X?`Not ${e.title}`:n.title===Z?e.title:n.title,O=(n,e,s)=>{switch(n.__typename){case"RangeBucket":return re(n,e,s);case"ScalarBucket":case"CategoryView":return ce(n,e)}},Fe=({scope:n,slots:e})=>{const s=$({clearAll:"Search.Facet.clearAll"}),[d,g]=C([]),[f,p]=C(null),[u,v]=C(),w=t=>{var o;const i=((o=u==null?void 0:u.filter)==null?void 0:o.filter(c=>c.attribute==="categoryPath"))||[];H({...t,filter:[...i,...t.filter||[]]},{scope:n})},B=t=>{if(!t||!t.result.facets&&!t.result.items&&!t.request.filter){g([]);return}v(t.request);const{facets:i,items:o}=t.result;p(ne(o));const c=t.request.filter;if(i){const r=i.map(l=>{const S=l.buckets.map(F=>{F.selected=!1;const m=c==null?void 0:c.find(_=>_.attribute===l.attribute);if(m){const _=m.range;(_&&F.from===_.from&&F.to===_.to||m.in&&m.in.includes(F.title))&&(F.selected=!0)}return F});return l.buckets=S,l});g(r)}},k=t=>{const i=d.map(c=>{const r=t.find(l=>l.attribute===c.attribute);return r||c}),o=i.reduce((c,r)=>{const l=te(r);return l&&c.push(l),c},[]);g(i),u&&w({...u,filter:o})},x=(t,i)=>{const o=t.buckets.map(r=>(r.title===i&&(r.selected=!1),r)),c=t;c.buckets=o,k([c])},q=()=>{const t=d.map(i=>{const o=i.buckets.map(c=>(c.selected=!1,c));return i.buckets=o,i});g(t),u&&w({...u,filter:[]})},M=(t,i)=>{const o=i.buckets.map(r=>{var l;return((l=i.buckets[0])==null?void 0:l.__typename)==="RangeBucket"&&(r.selected=!1),r.title===t.target.value&&(r.selected=t.target.checked),r}),c=i;c.buckets=o,k([c])},P=(t,i)=>{const o=a("span",{children:t.title}),c=t.buckets.map(r=>{var F;const l=O(r,t,f),S=m=>L(y,{name:"FacetBucketLabel",slot:e==null?void 0:e.FacetBucketLabel,context:{data:r},children:[l," ",m?`(${m})`:""]});switch((F=t.buckets[0])==null?void 0:F.__typename){case"RangeBucket":return a(y,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:r},children:a(V,{"data-testid":`${r.title}-radio`,label:S(),name:t.attribute,value:r.title,checked:r.selected,onChange:m=>{M(m,t)}})});case"ScalarBucket":case"CategoryView":return a(y,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:r},children:a(T,{"data-testid":`${r.title}-checkbox`,label:S(r.count),name:t.attribute,value:r.title,checked:r.selected,onChange:m=>{M(m,t)}})});default:return null}}).filter(r=>r!==null);return a(K,{header:o,buckets:c,last:i===d.length-1})},D=()=>a(y,{name:"Facets",slot:e==null?void 0:e.Facets,context:{data:d},children:d.map((t,i)=>t.buckets.length>0?a(N,{children:a(y,{name:"Facet",slot:e==null?void 0:e.Facet,context:{data:t},children:P(t,i)})}):null)}),U=()=>{const t=d.reduce((c,r)=>(r.buckets.filter(S=>S.selected).length>0&&c.push(r),c),[]),i=t.map(c=>c.buckets.map(r=>{if(r.selected){const l=O(r,c,f);return a(R,{"data-testid":`${r.title}-selected-btn`,"aria-label":`Remove ${c.title} filter: ${r.title}`,variant:"secondary",children:L(N,{children:[a("span",{children:l}),a(b,{source:G,size:"16"})]}),onClick:()=>{x(c,r.title)}})}return null})),o=i.length>0?a(R,{variant:"secondary",onClick:()=>{q()},children:a("span",{children:s.clearAll})}):null;return L(y,{name:"SelectedFacets",slot:e==null?void 0:e.SelectedFacets,context:{data:t},children:[i,o]})};return j(()=>{const t=W.on("search/result",B,{eager:!0,scope:n});return()=>{t==null||t.off()}},[]),a(Q,{selectedFacets:U(),facets:D()})};export{Fe as Facets,Fe as default};
4
4
  //# sourceMappingURL=Facets.js.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as S}from"@dropins/tools/preact-jsx-runtime.js";import{useState as o,useEffect as b}from"@dropins/tools/preact-compat.js";import{Pagination as h}from"@dropins/tools/components.js";import{events as x}from"@dropins/tools/event-bus.js";import{c as I}from"../chunks/search.js";import"@dropins/tools/lib.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const A=({scope:s,onPageChange:r})=>{const[a,f]=o(),[n,l]=o(),[p,g]=o({});b(()=>{const t=x.on("search/result",e=>{var i,u,c,m;g(e.request),f((u=(i=e.result)==null?void 0:i.pageInfo)==null?void 0:u.currentPage),l((m=(c=e.result)==null?void 0:c.pageInfo)==null?void 0:m.totalPages)},{eager:!0,scope:s});return()=>{t==null||t.off()}},[]);const P=async t=>{r==null||r(t),I({...p,currentPage:t},{scope:s})};return!a||!n?null:S(h,{currentPage:a,totalPages:n,onChange:P})};export{A as Pagination,A as default};
3
+ import{jsx as S}from"@dropins/tools/preact-jsx-runtime.js";import{useState as o,useEffect as b}from"@dropins/tools/preact-compat.js";import{Pagination as h}from"@dropins/tools/components.js";import{events as x}from"@dropins/tools/event-bus.js";import{d as I}from"../chunks/search.js";import"@dropins/tools/lib.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const A=({scope:s,onPageChange:r})=>{const[a,f]=o(),[n,l]=o(),[p,g]=o({});b(()=>{const t=x.on("search/result",e=>{var i,u,m,c;g(e.request),f((u=(i=e.result)==null?void 0:i.pageInfo)==null?void 0:u.currentPage),l((c=(m=e.result)==null?void 0:m.pageInfo)==null?void 0:c.totalPages)},{eager:!0,scope:s});return()=>{t==null||t.off()}},[]);const P=async t=>{r==null||r(t),I({...p,currentPage:t},{scope:s})};return!a||!n?null:S(h,{currentPage:a,totalPages:n,onChange:P})};export{A as Pagination,A as default};
4
4
  //# sourceMappingURL=Pagination.js.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as g}from"@dropins/tools/preact-jsx-runtime.js";import{useState as n,useEffect as $}from"@dropins/tools/preact-compat.js";import{Picker as w}from"@dropins/tools/components.js";import{events as x}from"@dropins/tools/event-bus.js";import{c as p}from"../chunks/search.js";import{useText as T}from"@dropins/tools/i18n.js";import"@dropins/tools/lib.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const j=({scope:t,onSortChange:e})=>{const r=T({sortLabel:"Search.SortBy.title",lowToHigh:"Search.SortBy.lowToHigh",highToLow:"Search.SortBy.highToLow"}),[s,u]=n([]),[f,S]=n("relevance_DESC"),[b,h]=n({});$(()=>{const i=x.on("search/result",o=>{var a,c;if(h(o.request),(c=(a=o.result)==null?void 0:a.metadata)!=null&&c.sortableAttributes&&(u([...o.result.metadata.sortableAttributes]),o.request.sort)){const l=L(o.request.sort);l&&S(l)}},{eager:!0,scope:t});return()=>{i==null||i.off()}},[]);const m=async i=>{e==null||e(i[0]),p({...b,sort:i,currentPage:1},{scope:t})};return g(w,{required:!0,floatingLabel:r.sortLabel,...d(s,r),value:f,handleSelect:i=>{const{value:o}=i.target,a=C(o);m(a)}})};function d(t,e){const r=[];return t.forEach((s,u)=>{s.bidirectional?r.splice(u+r.length,0,{text:`${s.label}: ${e.lowToHigh}`,value:`${s.attribute}_ASC`},{text:`${s.label}: ${e.highToLow}`,value:`${s.attribute}_DESC`}):r.splice(u+r.length,0,{text:s.label,value:`${s.attribute}_DESC`})}),{options:r}}function C(t){const e=t.indexOf("_");return[{attribute:t.substring(0,e),direction:t.substring(e+1)==="ASC"?"ASC":"DESC"}]}function L(t){return t.length>0&&t[0]?`${t[0].attribute}_${t[0].direction}`:""}export{j as SortBy,j as default};
3
+ import{jsx as g}from"@dropins/tools/preact-jsx-runtime.js";import{useState as n,useEffect as $}from"@dropins/tools/preact-compat.js";import{Picker as w}from"@dropins/tools/components.js";import{events as x}from"@dropins/tools/event-bus.js";import{d}from"../chunks/search.js";import{useText as p}from"@dropins/tools/i18n.js";import"@dropins/tools/lib.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const j=({scope:t,onSortChange:e})=>{const r=p({sortLabel:"Search.SortBy.title",lowToHigh:"Search.SortBy.lowToHigh",highToLow:"Search.SortBy.highToLow"}),[s,u]=n([]),[f,S]=n("relevance_DESC"),[b,h]=n({});$(()=>{const i=x.on("search/result",o=>{var a,c;if(h(o.request),(c=(a=o.result)==null?void 0:a.metadata)!=null&&c.sortableAttributes&&(u([...o.result.metadata.sortableAttributes]),o.request.sort)){const l=L(o.request.sort);l&&S(l)}},{eager:!0,scope:t});return()=>{i==null||i.off()}},[]);const m=async i=>{e==null||e(i[0]),d({...b,sort:i,currentPage:1},{scope:t})};return g(w,{required:!0,floatingLabel:r.sortLabel,...T(s,r),value:f,handleSelect:i=>{const{value:o}=i.target,a=C(o);m(a)}})};function T(t,e){const r=[];return t.forEach((s,u)=>{s.bidirectional?r.splice(u+r.length,0,{text:`${s.label}: ${e.lowToHigh}`,value:`${s.attribute}_ASC`},{text:`${s.label}: ${e.highToLow}`,value:`${s.attribute}_DESC`}):r.splice(u+r.length,0,{text:s.label,value:`${s.attribute}_DESC`})}),{options:r}}function C(t){const e=t.indexOf("_");return[{attribute:t.substring(0,e),direction:t.substring(e+1)==="ASC"?"ASC":"DESC"}]}function L(t){return t.length>0&&t[0]?`${t[0].attribute}_${t[0].direction}`:""}export{j as SortBy,j as default};
4
4
  //# sourceMappingURL=SortBy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SortBy.js","sources":["/@dropins/storefront-product-discovery/src/containers/SortBy/SortBy.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useState, useEffect } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { Picker } from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Scope, SearchVariables, SortOrder } from '@/plp/data/models';\nimport { search } from '@/plp/api';\n\nexport interface SortByProps extends HTMLAttributes<HTMLDivElement> {\n scope?: Scope;\n onSortChange?: (value: SortOrder | null) => void;\n}\n\nexport const SortBy: Container<SortByProps> = ({ scope, onSortChange }) => {\n const labels = useText({\n sortLabel: 'Search.SortBy.title',\n lowToHigh: 'Search.SortBy.lowToHigh',\n highToLow: 'Search.SortBy.highToLow',\n });\n\n\n const [sortOptions, setSortOptions] = useState<any[]>([]);\n const [current, setCurrent] = useState('relevance_DESC');\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>({});\n\n useEffect(() => {\n // Listen for search results\n const searchEvent = events.on('search/result', (payload) => {\n setCurrentSearchVariables(payload.request);\n\n // Configure sort options from metadata\n if (payload.result?.metadata?.sortableAttributes) {\n setSortOptions([...payload.result.metadata.sortableAttributes]);\n\n // Set current sort value from request\n if (payload.request.sort) {\n const sortValue = getSortValue(payload.request.sort);\n\n if (sortValue) {\n setCurrent(sortValue);\n }\n }\n }\n }, { eager: true, scope });\n\n return () => {\n searchEvent?.off();\n };\n }, []);\n\n const handleSortChange = async (value: SortOrder[]): Promise<void> => {\n onSortChange?.(value[0]!);\n\n search({ ...currentSearchVariables, sort: value, currentPage: 1 }, { scope });\n };\n\n return (\n <Picker\n required\n floatingLabel={labels.sortLabel}\n {...getSortOptions(sortOptions, labels)}\n value={current}\n handleSelect={(event) => {\n const { value } = event.target as HTMLSelectElement;\n const next = getSortSearchVariables(value);\n handleSortChange(next);\n }}\n />\n );\n};\n\n/** Utility functions */\n\nfunction getSortOptions(sortOptions: any, labels: any): any {\n // if sortOption is bidirectional, then we need to add two options: lowToHigh and highToLow\n const options: any[] = [];\n \n sortOptions.forEach((option: any, index: number) => {\n if (option.bidirectional) {\n // Insert the two options at the current position\n options.splice(index + options.length, 0,\n { text: `${option.label}: ${labels.lowToHigh}`, value: `${option.attribute}_ASC` },\n { text: `${option.label}: ${labels.highToLow}`, value: `${option.attribute}_DESC` }\n );\n } else {\n // Add single option at the current position\n options.splice(index + options.length, 0,\n { text: option.label, value: `${option.attribute}_DESC` }\n );\n }\n });\n\n return { options };\n}\n\n\nfunction getSortSearchVariables(sortValue: string): SortOrder[] {\n const index = sortValue.indexOf('_');\n const newSort: SortOrder[] = [\n {\n attribute: sortValue.substring(0, index) as string,\n direction: sortValue.substring(index + 1) === 'ASC' ? 'ASC' : 'DESC',\n },\n ];\n return newSort;\n}\n\nfunction getSortValue(sort: SortOrder[]) {\n if (sort.length > 0 && sort[0]) {\n return `${sort[0].attribute}_${sort[0].direction}`;\n }\n return '';\n}\n"],"names":["SortBy","scope","onSortChange","labels","useText","sortOptions","setSortOptions","useState","current","setCurrent","currentSearchVariables","setCurrentSearchVariables","useEffect","searchEvent","events","payload","_b","_a","sortValue","getSortValue","handleSortChange","value","search","jsx","Picker","getSortOptions","event","next","getSortSearchVariables","options","option","index","sort"],"mappings":"ueAsBO,MAAMA,EAAiC,CAAC,CAAE,MAAAC,EAAO,aAAAC,KAAmB,CACzE,MAAMC,EAASC,EAAQ,CACrB,UAAW,sBACX,UAAW,0BACX,UAAW,yBAAA,CACZ,EAGK,CAACC,EAAaC,CAAc,EAAIC,EAAgB,CAAA,CAAE,EAClD,CAACC,EAASC,CAAU,EAAIF,EAAS,gBAAgB,EACjD,CAACG,EAAwBC,CAAyB,EAAIJ,EAA0B,CAAA,CAAE,EAExFK,EAAU,IAAM,CAEd,MAAMC,EAAcC,EAAO,GAAG,gBAAkBC,GAAY,SAI1D,GAHAJ,EAA0BI,EAAQ,OAAO,GAGrCC,GAAAC,EAAAF,EAAQ,SAAR,YAAAE,EAAgB,WAAhB,MAAAD,EAA0B,qBAC5BV,EAAe,CAAC,GAAGS,EAAQ,OAAO,SAAS,kBAAkB,CAAC,EAG1DA,EAAQ,QAAQ,MAAM,CACxB,MAAMG,EAAYC,EAAaJ,EAAQ,QAAQ,IAAI,EAE/CG,GACFT,EAAWS,CAAS,CAExB,CAEJ,EAAG,CAAE,MAAO,GAAM,MAAAjB,EAAO,EAEzB,MAAO,IAAM,CACXY,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAEL,MAAMO,EAAmB,MAAOC,GAAsC,CACpEnB,GAAA,MAAAA,EAAemB,EAAM,CAAC,GAEtBC,EAAO,CAAE,GAAGZ,EAAwB,KAAMW,EAAO,YAAa,CAAA,EAAK,CAAE,MAAApB,EAAO,CAC9E,EAEA,OACEsB,EAACC,EAAA,CACC,SAAQ,GACR,cAAerB,EAAO,UACrB,GAAGsB,EAAepB,EAAaF,CAAM,EACtC,MAAOK,EACP,aAAekB,GAAU,CACvB,KAAM,CAAE,MAAAL,GAAUK,EAAM,OAClBC,EAAOC,EAAuBP,CAAK,EACzCD,EAAiBO,CAAI,CACvB,CAAA,CAAA,CAGN,EAIA,SAASF,EAAepB,EAAkBF,EAAkB,CAE1D,MAAM0B,EAAiB,CAAA,EAEvB,OAAAxB,EAAY,QAAQ,CAACyB,EAAaC,IAAkB,CAC9CD,EAAO,cAETD,EAAQ,OAAOE,EAAQF,EAAQ,OAAQ,EACrC,CAAE,KAAM,GAAGC,EAAO,KAAK,KAAK3B,EAAO,SAAS,GAAI,MAAO,GAAG2B,EAAO,SAAS,MAAA,EAC1E,CAAE,KAAM,GAAGA,EAAO,KAAK,KAAK3B,EAAO,SAAS,GAAI,MAAO,GAAG2B,EAAO,SAAS,OAAA,CAAQ,EAIpFD,EAAQ,OAAOE,EAAQF,EAAQ,OAAQ,EACrC,CAAE,KAAMC,EAAO,MAAO,MAAO,GAAGA,EAAO,SAAS,OAAA,CAAQ,CAG9D,CAAC,EAEM,CAAE,QAAAD,CAAA,CACX,CAGA,SAASD,EAAuBV,EAAgC,CAC9D,MAAMa,EAAQb,EAAU,QAAQ,GAAG,EAOnC,MAN6B,CAC3B,CACE,UAAWA,EAAU,UAAU,EAAGa,CAAK,EACvC,UAAWb,EAAU,UAAUa,EAAQ,CAAC,IAAM,MAAQ,MAAQ,MAAA,CAChE,CAGJ,CAEA,SAASZ,EAAaa,EAAmB,CACvC,OAAIA,EAAK,OAAS,GAAKA,EAAK,CAAC,EACpB,GAAGA,EAAK,CAAC,EAAE,SAAS,IAAIA,EAAK,CAAC,EAAE,SAAS,GAE3C,EACT"}
1
+ {"version":3,"file":"SortBy.js","sources":["/@dropins/storefront-product-discovery/src/containers/SortBy/SortBy.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useState, useEffect } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { Picker } from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Scope, SearchVariables, SortOrder } from '@/plp/data/models';\nimport { search } from '@/plp/api';\n\nexport interface SortByProps extends HTMLAttributes<HTMLDivElement> {\n scope?: Scope;\n onSortChange?: (value: SortOrder | null) => void;\n}\n\nexport const SortBy: Container<SortByProps> = ({ scope, onSortChange }) => {\n const labels = useText({\n sortLabel: 'Search.SortBy.title',\n lowToHigh: 'Search.SortBy.lowToHigh',\n highToLow: 'Search.SortBy.highToLow',\n });\n\n\n const [sortOptions, setSortOptions] = useState<any[]>([]);\n const [current, setCurrent] = useState('relevance_DESC');\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>({});\n\n useEffect(() => {\n // Listen for search results\n const searchEvent = events.on('search/result', (payload) => {\n setCurrentSearchVariables(payload.request);\n\n // Configure sort options from metadata\n if (payload.result?.metadata?.sortableAttributes) {\n setSortOptions([...payload.result.metadata.sortableAttributes]);\n\n // Set current sort value from request\n if (payload.request.sort) {\n const sortValue = getSortValue(payload.request.sort);\n\n if (sortValue) {\n setCurrent(sortValue);\n }\n }\n }\n }, { eager: true, scope });\n\n return () => {\n searchEvent?.off();\n };\n }, []);\n\n const handleSortChange = async (value: SortOrder[]): Promise<void> => {\n onSortChange?.(value[0]!);\n\n search({ ...currentSearchVariables, sort: value, currentPage: 1 }, { scope });\n };\n\n return (\n <Picker\n required\n floatingLabel={labels.sortLabel}\n {...getSortOptions(sortOptions, labels)}\n value={current}\n handleSelect={(event) => {\n const { value } = event.target as HTMLSelectElement;\n const next = getSortSearchVariables(value);\n handleSortChange(next);\n }}\n />\n );\n};\n\n/** Utility functions */\n\nfunction getSortOptions(sortOptions: any, labels: any): any {\n // if sortOption is bidirectional, then we need to add two options: lowToHigh and highToLow\n const options: any[] = [];\n \n sortOptions.forEach((option: any, index: number) => {\n if (option.bidirectional) {\n // Insert the two options at the current position\n options.splice(index + options.length, 0,\n { text: `${option.label}: ${labels.lowToHigh}`, value: `${option.attribute}_ASC` },\n { text: `${option.label}: ${labels.highToLow}`, value: `${option.attribute}_DESC` }\n );\n } else {\n // Add single option at the current position\n options.splice(index + options.length, 0,\n { text: option.label, value: `${option.attribute}_DESC` }\n );\n }\n });\n\n return { options };\n}\n\n\nfunction getSortSearchVariables(sortValue: string): SortOrder[] {\n const index = sortValue.indexOf('_');\n const newSort: SortOrder[] = [\n {\n attribute: sortValue.substring(0, index) as string,\n direction: sortValue.substring(index + 1) === 'ASC' ? 'ASC' : 'DESC',\n },\n ];\n return newSort;\n}\n\nfunction getSortValue(sort: SortOrder[]) {\n if (sort.length > 0 && sort[0]) {\n return `${sort[0].attribute}_${sort[0].direction}`;\n }\n return '';\n}\n"],"names":["SortBy","scope","onSortChange","labels","useText","sortOptions","setSortOptions","useState","current","setCurrent","currentSearchVariables","setCurrentSearchVariables","useEffect","searchEvent","events","payload","_b","_a","sortValue","getSortValue","handleSortChange","value","search","jsx","Picker","getSortOptions","event","next","getSortSearchVariables","options","option","index","sort"],"mappings":"keAsBO,MAAMA,EAAiC,CAAC,CAAE,MAAAC,EAAO,aAAAC,KAAmB,CACzE,MAAMC,EAASC,EAAQ,CACrB,UAAW,sBACX,UAAW,0BACX,UAAW,yBAAA,CACZ,EAGK,CAACC,EAAaC,CAAc,EAAIC,EAAgB,CAAA,CAAE,EAClD,CAACC,EAASC,CAAU,EAAIF,EAAS,gBAAgB,EACjD,CAACG,EAAwBC,CAAyB,EAAIJ,EAA0B,CAAA,CAAE,EAExFK,EAAU,IAAM,CAEd,MAAMC,EAAcC,EAAO,GAAG,gBAAkBC,GAAY,SAI1D,GAHAJ,EAA0BI,EAAQ,OAAO,GAGrCC,GAAAC,EAAAF,EAAQ,SAAR,YAAAE,EAAgB,WAAhB,MAAAD,EAA0B,qBAC5BV,EAAe,CAAC,GAAGS,EAAQ,OAAO,SAAS,kBAAkB,CAAC,EAG1DA,EAAQ,QAAQ,MAAM,CACxB,MAAMG,EAAYC,EAAaJ,EAAQ,QAAQ,IAAI,EAE/CG,GACFT,EAAWS,CAAS,CAExB,CAEJ,EAAG,CAAE,MAAO,GAAM,MAAAjB,EAAO,EAEzB,MAAO,IAAM,CACXY,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAEL,MAAMO,EAAmB,MAAOC,GAAsC,CACpEnB,GAAA,MAAAA,EAAemB,EAAM,CAAC,GAEtBC,EAAO,CAAE,GAAGZ,EAAwB,KAAMW,EAAO,YAAa,CAAA,EAAK,CAAE,MAAApB,EAAO,CAC9E,EAEA,OACEsB,EAACC,EAAA,CACC,SAAQ,GACR,cAAerB,EAAO,UACrB,GAAGsB,EAAepB,EAAaF,CAAM,EACtC,MAAOK,EACP,aAAekB,GAAU,CACvB,KAAM,CAAE,MAAAL,GAAUK,EAAM,OAClBC,EAAOC,EAAuBP,CAAK,EACzCD,EAAiBO,CAAI,CACvB,CAAA,CAAA,CAGN,EAIA,SAASF,EAAepB,EAAkBF,EAAkB,CAE1D,MAAM0B,EAAiB,CAAA,EAEvB,OAAAxB,EAAY,QAAQ,CAACyB,EAAaC,IAAkB,CAC9CD,EAAO,cAETD,EAAQ,OAAOE,EAAQF,EAAQ,OAAQ,EACrC,CAAE,KAAM,GAAGC,EAAO,KAAK,KAAK3B,EAAO,SAAS,GAAI,MAAO,GAAG2B,EAAO,SAAS,MAAA,EAC1E,CAAE,KAAM,GAAGA,EAAO,KAAK,KAAK3B,EAAO,SAAS,GAAI,MAAO,GAAG2B,EAAO,SAAS,OAAA,CAAQ,EAIpFD,EAAQ,OAAOE,EAAQF,EAAQ,OAAQ,EACrC,CAAE,KAAMC,EAAO,MAAO,MAAO,GAAGA,EAAO,SAAS,OAAA,CAAQ,CAG9D,CAAC,EAEM,CAAE,QAAAD,CAAA,CACX,CAGA,SAASD,EAAuBV,EAAgC,CAC9D,MAAMa,EAAQb,EAAU,QAAQ,GAAG,EAOnC,MAN6B,CAC3B,CACE,UAAWA,EAAU,UAAU,EAAGa,CAAK,EACvC,UAAWb,EAAU,UAAUa,EAAQ,CAAC,IAAM,MAAQ,MAAQ,MAAA,CAChE,CAGJ,CAEA,SAASZ,EAAaa,EAAmB,CACvC,OAAIA,EAAK,OAAS,GAAKA,EAAK,CAAC,EACpB,GAAGA,EAAK,CAAC,EAAE,SAAS,IAAIA,EAAK,CAAC,EAAE,SAAS,GAE3C,EACT"}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name": "@dropins/storefront-product-discovery", "version": "2.0.0-alpha12", "@dropins/tools": "^1.4.0", "license": "SEE LICENSE IN LICENSE.md"}
1
+ {"name": "@dropins/storefront-product-discovery", "version": "2.1.0-alpha001", "@dropins/tools": "^1.4.0", "license": "SEE LICENSE IN LICENSE.md"}