@dropins/storefront-product-discovery 3.1.1-alpha1 → 3.1.1-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api.js +161 -1
- package/api.js.map +1 -1
- package/chunks/components.js +4 -0
- package/chunks/components.js.map +1 -0
- package/containers/Facets/utils/facetUtils.d.ts +2 -7
- package/containers/Facets.js +1 -1
- package/containers/Facets.js.map +1 -1
- package/containers/Pagination.js +1 -1
- package/containers/Pagination.js.map +1 -1
- package/containers/SearchResults.js +1 -1
- package/containers/SearchResults.js.map +1 -1
- package/containers/SortBy.js +1 -1
- package/containers/SortBy.js.map +1 -1
- package/fragments.js +1 -115
- package/fragments.js.map +1 -1
- package/i18n/en_US.json.d.ts +5 -1
- package/package.json +1 -1
- package/render.js +2 -2
- package/render.js.map +1 -1
- package/chunks/acdlEvents.js +0 -4
- package/chunks/acdlEvents.js.map +0 -1
- package/chunks/initialize.js +0 -4
- package/chunks/initialize.js.map +0 -1
- package/chunks/search.js +0 -50
- package/chunks/search.js.map +0 -1
- package/containers/Facets/utils/categoryFacetUtils.d.ts +0 -39
package/api.js
CHANGED
|
@@ -1,4 +1,164 @@
|
|
|
1
1
|
/*! Copyright 2026 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{
|
|
3
|
+
import{events as h}from"@dropins/tools/event-bus.js";import{Initializer as fe,merge as ce}from"@dropins/tools/lib.js";import{FetchGraphQL as me}from"@dropins/tools/fetch-graphql.js";const ie=new fe({init:async e=>{const o={};ie.config.setConfig({...o,...e})},listeners:()=>[]}),le=ie.config,{setEndpoint:Ge,setFetchGraphQlHeader:Ke,removeFetchGraphQlHeader:Ve,setFetchGraphQlHeaders:Me,getFetchGraphQlHeader:Be,fetchGraphQl:he,getConfig:Xe}=new me().getMethods(),y=e=>!e||!Intl.supportedValuesOf("currency").includes(e)?"USD":e,ye=e=>{var n,t,r,c,u,l,s,i,g,p,C,m,b,w,I,P,E,x,k,T,D,U,A,a,F,L,$,H,N,O,z,Q,G,K,V,M,B,X,q,W,Y,j,J,Z,d,ee,ne,re,_,oe;if(!e)return{id:"",name:"",sku:"",shortDescription:"",url:"",urlKey:"",metaTitle:"",metaKeywords:"",metaDescription:"",lowStock:!1,links:[],attributes:[],images:[],description:"",externalId:"",inputOptions:[],addToCartAllowed:!1,price:void 0,priceRange:void 0,inStock:!1,typename:""};const o={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)||[],attributes:((n=e==null?void 0:e.attributes)==null?void 0:n.map(f=>({label:f.label||"",name:f.name||"",roles:f.roles||[],value:f.value??null})))||[],images:((t=e==null?void 0:e.images)==null?void 0:t.map(f=>{var te;return{label:f.label||"",roles:f.roles||[],url:((te=f.url)==null?void 0:te.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:((u=(c=(r=e==null?void 0:e.price)==null?void 0:r.final)==null?void 0:c.amount)==null?void 0:u.value)||0,currency:y((i=(s=(l=e==null?void 0:e.price)==null?void 0:l.final)==null?void 0:s.amount)==null?void 0:i.currency)}},regular:{amount:{value:((C=(p=(g=e==null?void 0:e.price)==null?void 0:g.regular)==null?void 0:p.amount)==null?void 0:C.value)||0,currency:y((w=(b=(m=e==null?void 0:e.price)==null?void 0:m.regular)==null?void 0:b.amount)==null?void 0:w.currency)}},roles:((I=e==null?void 0:e.price)==null?void 0:I.roles)||[]}:void 0,priceRange:e!=null&&e.priceRange?{minimum:{final:{amount:{value:((k=(x=(E=(P=e==null?void 0:e.priceRange)==null?void 0:P.minimum)==null?void 0:E.final)==null?void 0:x.amount)==null?void 0:k.value)||0,currency:y((A=(U=(D=(T=e==null?void 0:e.priceRange)==null?void 0:T.minimum)==null?void 0:D.final)==null?void 0:U.amount)==null?void 0:A.currency)}},regular:{amount:{value:(($=(L=(F=(a=e==null?void 0:e.priceRange)==null?void 0:a.minimum)==null?void 0:F.regular)==null?void 0:L.amount)==null?void 0:$.value)||0,currency:y((z=(O=(N=(H=e==null?void 0:e.priceRange)==null?void 0:H.minimum)==null?void 0:N.regular)==null?void 0:O.amount)==null?void 0:z.currency)}}},maximum:{final:{amount:{value:((V=(K=(G=(Q=e==null?void 0:e.priceRange)==null?void 0:Q.maximum)==null?void 0:G.final)==null?void 0:K.amount)==null?void 0:V.value)||0,currency:y((q=(X=(B=(M=e==null?void 0:e.priceRange)==null?void 0:M.maximum)==null?void 0:B.final)==null?void 0:X.amount)==null?void 0:q.currency)}},regular:{amount:{value:((J=(j=(Y=(W=e==null?void 0:e.priceRange)==null?void 0:W.maximum)==null?void 0:Y.regular)==null?void 0:j.amount)==null?void 0:J.value)||0,currency:y((ne=(ee=(d=(Z=e==null?void 0:e.priceRange)==null?void 0:Z.maximum)==null?void 0:d.regular)==null?void 0:ee.amount)==null?void 0:ne.currency)}}}}:void 0,inStock:(e==null?void 0:e.inStock)||!1,typename:(e==null?void 0:e.__typename)||""};return ce(o,(oe=(_=(re=le.getConfig().models)==null?void 0:re.Product)==null?void 0:_.transformer)==null?void 0:oe.call(_,e))};function Ce(e,o){var r,c,u,l,s,i,g,p,C;const n=e==null?void 0:e.productSearch,t={facets:Se((n==null?void 0:n.facets)||[],o),items:(n==null?void 0:n.items.map(m=>ye(m==null?void 0:m.productView)))||[],pageInfo:{currentPage:((r=n==null?void 0:n.page_info)==null?void 0:r.current_page)||1,totalPages:((c=n==null?void 0:n.page_info)==null?void 0:c.total_pages)||1,totalItems:((u=n==null?void 0:n.page_info)==null?void 0:u.total_items)||0,pageSize:((l=n==null?void 0:n.page_info)==null?void 0:l.page_size)||10},totalCount:(n==null?void 0:n.total_count)||0,metadata:{filterableAttributes:((s=e==null?void 0:e.attributeMetadata)==null?void 0:s.filterableInSearch)||[],sortableAttributes:Re(((i=e==null?void 0:e.attributeMetadata)==null?void 0:i.sortable)||[],o)}};return ce(t,(C=(p=(g=le.getConfig().models)==null?void 0:g.ProductSearchResult)==null?void 0:p.transformer)==null?void 0:C.call(p,e))}function Re(e=[],o){return!e||e.length===0?[]:e.filter(n=>{var t;return n.attribute==="position"?(t=o==null?void 0:o.filter)==null?void 0:t.some(c=>c.attribute==="categoryPath"):!0}).map(n=>({...n,bidirectional:n.attribute==="price"}))}function Se(e=[],o){var t;return!e||e.length===0?[]:((t=o==null?void 0:o.filter)==null?void 0:t.some(r=>r.attribute==="categoryPath"))?e.filter(r=>r.attribute!=="categories"):e}const _e=`
|
|
4
|
+
fragment Facet on Aggregation {
|
|
5
|
+
title
|
|
6
|
+
attribute
|
|
7
|
+
buckets {
|
|
8
|
+
title
|
|
9
|
+
__typename
|
|
10
|
+
... on CategoryView {
|
|
11
|
+
name
|
|
12
|
+
count
|
|
13
|
+
path
|
|
14
|
+
}
|
|
15
|
+
... on ScalarBucket {
|
|
16
|
+
count
|
|
17
|
+
}
|
|
18
|
+
... on RangeBucket {
|
|
19
|
+
from
|
|
20
|
+
to
|
|
21
|
+
count
|
|
22
|
+
}
|
|
23
|
+
... on StatsBucket {
|
|
24
|
+
min
|
|
25
|
+
max
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
`,ve=`
|
|
30
|
+
fragment ProductView on ProductSearchItem {
|
|
31
|
+
productView {
|
|
32
|
+
__typename
|
|
33
|
+
sku
|
|
34
|
+
name
|
|
35
|
+
inStock
|
|
36
|
+
url
|
|
37
|
+
urlKey
|
|
38
|
+
attributes(roles: []) {
|
|
39
|
+
name
|
|
40
|
+
label
|
|
41
|
+
value
|
|
42
|
+
roles
|
|
43
|
+
}
|
|
44
|
+
images {
|
|
45
|
+
label
|
|
46
|
+
url
|
|
47
|
+
roles
|
|
48
|
+
}
|
|
49
|
+
... on ComplexProductView {
|
|
50
|
+
priceRange {
|
|
51
|
+
maximum {
|
|
52
|
+
final {
|
|
53
|
+
amount {
|
|
54
|
+
value
|
|
55
|
+
currency
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
regular {
|
|
59
|
+
amount {
|
|
60
|
+
value
|
|
61
|
+
currency
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
minimum {
|
|
66
|
+
final {
|
|
67
|
+
amount {
|
|
68
|
+
value
|
|
69
|
+
currency
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
regular {
|
|
73
|
+
amount {
|
|
74
|
+
value
|
|
75
|
+
currency
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
options {
|
|
81
|
+
id
|
|
82
|
+
title
|
|
83
|
+
values {
|
|
84
|
+
title
|
|
85
|
+
... on ProductViewOptionValueSwatch {
|
|
86
|
+
id
|
|
87
|
+
inStock
|
|
88
|
+
type
|
|
89
|
+
value
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
... on SimpleProductView {
|
|
95
|
+
price {
|
|
96
|
+
final {
|
|
97
|
+
amount {
|
|
98
|
+
value
|
|
99
|
+
currency
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
regular {
|
|
103
|
+
amount {
|
|
104
|
+
value
|
|
105
|
+
currency
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
highlights {
|
|
112
|
+
attribute
|
|
113
|
+
value
|
|
114
|
+
matched_words
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
`,be=`
|
|
118
|
+
query productSearch(
|
|
119
|
+
$phrase: String!
|
|
120
|
+
$pageSize: Int
|
|
121
|
+
$currentPage: Int = 1
|
|
122
|
+
$filter: [SearchClauseInput!]
|
|
123
|
+
$sort: [ProductSearchSortInput!]
|
|
124
|
+
$context: QueryContextInput
|
|
125
|
+
) {
|
|
126
|
+
attributeMetadata {
|
|
127
|
+
sortable {
|
|
128
|
+
label
|
|
129
|
+
attribute
|
|
130
|
+
numeric
|
|
131
|
+
}
|
|
132
|
+
filterableInSearch {
|
|
133
|
+
label
|
|
134
|
+
attribute
|
|
135
|
+
numeric
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
productSearch(
|
|
140
|
+
phrase: $phrase
|
|
141
|
+
page_size: $pageSize
|
|
142
|
+
current_page: $currentPage
|
|
143
|
+
filter: $filter
|
|
144
|
+
sort: $sort
|
|
145
|
+
context: $context
|
|
146
|
+
) {
|
|
147
|
+
total_count
|
|
148
|
+
items {
|
|
149
|
+
...ProductView
|
|
150
|
+
}
|
|
151
|
+
facets {
|
|
152
|
+
...Facet
|
|
153
|
+
}
|
|
154
|
+
page_info {
|
|
155
|
+
current_page
|
|
156
|
+
page_size
|
|
157
|
+
total_pages
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
${ve}
|
|
162
|
+
${_e}
|
|
163
|
+
`,se="searchInputContext",ue="searchResultsContext",we="livesearch-plp",Ie="livesearch-popover",Pe="search-product-click",Ee="search-request-sent",xe="search-response-received",ke="search-results-view",Te="category-results-view",De="channelContext";function R(){return window.adobeDataLayer=window.adobeDataLayer||[],window.adobeDataLayer}function pe(e){const o=R();return o.getState?o.getState(e):{}}function v(e,o){const n=R();n.push({[e]:null}),n.push({[e]:o})}function Ue(){return{_id:"https://ns.adobe.com/xdm/channels/web",_type:"https://ns.adobe.com/xdm/channel-types/web"}}function ge(){v(De,Ue())}function S(e,o){R().push(t=>{const r=t.getState?t.getState():{};t.push({event:e,eventInfo:{...r,...o}})})}const Ae=e=>{ge(),S(Ee,{searchUnitId:e})},ae=e=>{ge(),S(xe,{searchUnitId:e})},qe=e=>{S(Te,{searchUnitId:e})},We=e=>{S(ke,{searchUnitId:e})},Ye=(e,o)=>{S(Pe,{sku:e,searchUnitId:o})},Fe=(e,o,n,t,r,c,u)=>{if(!R)return;const s=pe(se)||{};s!=null&&s.units||(s.units=[]);const i={searchUnitId:e,searchRequestId:o,queryTypes:["products","suggestions"],phrase:n,pageSize:r,currentPage:c,filter:t,sort:u},g=s.units.findIndex(p=>p.searchUnitId===e);g<0?s.units.push(i):s.units[g]=i,v(se,s)},Le=(e,o,n)=>{var l,s;if(!R)return;const r=pe(ue)||{};r!=null&&r.units||(r.units=[]);const c=r.units.findIndex(i=>i.searchUnitId===e),u={searchUnitId:e,searchRequestId:o,products:$e(n.items),categories:[],suggestions:He(n.suggestions),page:((l=n==null?void 0:n.pageInfo)==null?void 0:l.currentPage)||1,perPage:((s=n==null?void 0:n.pageInfo)==null?void 0:s.pageSize)||20,facets:Ne(n.facets)};c<0?r.units.push(u):r.units[c]=u,v(ue,r)},$e=e=>e?e.map((n,t)=>{var r,c,u,l,s,i,g,p;return{name:n==null?void 0:n.name,sku:n==null?void 0:n.sku,url:(n==null?void 0:n.url)??"",imageUrl:((r=n==null?void 0:n.images[0])==null?void 0:r.url)??"",price:((l=(u=(c=n==null?void 0:n.price)==null?void 0:c.final)==null?void 0:u.amount)==null?void 0:l.value)??((p=(g=(i=(s=n==null?void 0:n.priceRange)==null?void 0:s.minimum)==null?void 0:i.regular)==null?void 0:g.amount)==null?void 0:p.value),rank:t}}):[],He=e=>e?e.map((n,t)=>({suggestion:n,rank:t})):[],Ne=e=>e?e.map(n=>({attribute:n==null?void 0:n.attribute,title:n==null?void 0:n.title,type:(n==null?void 0:n.type)||"PINNED",buckets:n==null?void 0:n.buckets.map(t=>t)})):[],je=async(e,o={})=>{const n=o.scope==="search"?void 0:o.scope,t={request:e||{},result:{facets:[],pageInfo:{currentPage:0,totalPages:0,totalItems:0,pageSize:0},items:[],totalCount:0,suggestions:[],metadata:{filterableAttributes:[],sortableAttributes:[]}}};if(e===null)return h.emit("search/result",t,{scope:n}),t.result;h.emit("search/loading",!0,{scope:n});try{const r=n==="popover"?Ie:we,c=window.crypto.randomUUID(),u={...e,phrase:e.phrase??"",currentPage:e.currentPage??1,sort:e.sort??[],filter:e.filter??[]};Fe(r,c,u.phrase||"",u.filter||[],u.pageSize||0,u.currentPage||0,u.sort||[]),Ae(r);const{errors:l,data:s}=await he(be,{method:"GET",variables:{...u}});if(l&&!s)throw new Error("Error fetching product search");const i=Ce(s,u);return Le(r,c,i),ae(r),h.emit("search/result",{request:u,result:i},{scope:n}),i}catch(r){throw h.emit("search/error",r.message,{scope:n}),h.emit("search/result",t,{scope:n}),r}finally{h.emit("search/loading",!1,{scope:n})}};export{_e as F,ve as P,Ie as S,Ye as a,we as b,qe as c,le as config,he as fetchGraphQl,Xe as getConfig,Be as getFetchGraphQlHeader,ie as initialize,Ve as removeFetchGraphQlHeader,We as s,je as search,Ge as setEndpoint,Ke as setFetchGraphQlHeader,Me as setFetchGraphQlHeaders};
|
|
4
164
|
//# sourceMappingURL=api.js.map
|
package/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"api.js","sources":["/@dropins/storefront-product-discovery/src/api/initialize/initialize.ts","/@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/graphql/fragments.graphql.ts","/@dropins/storefront-product-discovery/src/api/search/graphql/search.graphql.ts","/@dropins/storefront-product-discovery/src/utils/acdlEvents.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 { Initializer, Model } from '@adobe-commerce/elsie/lib';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { Product } from '@/plp/data/models/product';\nimport { ProductSearchResult } from '@/plp/data/models';\n\ntype ConfigProps = {\n langDefinitions?: Lang;\n\n models?: {\n Product?: Model<Product>\n ProductSearchResult?: Model<ProductSearchResult>\n }\n};\n\nexport const initialize = new Initializer<ConfigProps>({\n init: async (config) => {\n const defaultConfig = {};\n\n initialize.config.setConfig({ ...defaultConfig, ...config });\n },\n\n listeners: () => [],\n});\n\nexport const config = initialize.config;\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 { 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\nconst getCurrency = (currency?: string) => {\n if (!currency || !Intl.supportedValuesOf(\"currency\").includes(currency)) {\n return 'USD';\n }\n return currency;\n};\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 attributes: [],\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 attributes:\n data?.attributes?.map((attr: any) => ({\n label: attr.label || '',\n name: attr.name || '',\n roles: attr.roles || [],\n value: attr.value ?? null,\n })) || [],\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: getCurrency(data?.price?.final?.amount?.currency),\n },\n },\n regular: {\n amount: {\n value: data?.price?.regular?.amount?.value || 0,\n currency: getCurrency(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: getCurrency(data?.priceRange?.minimum?.final?.amount?.currency),\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.minimum?.regular?.amount?.value || 0,\n currency: getCurrency(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: getCurrency(data?.priceRange?.maximum?.final?.amount?.currency),\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.maximum?.regular?.amount?.value || 0,\n currency: getCurrency(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\nconst Facet = /* GraphQL */ `\n fragment Facet on Aggregation {\n title\n attribute\n buckets {\n title\n __typename\n ... on CategoryView {\n name\n count\n path\n }\n ... on ScalarBucket {\n count\n }\n ... on RangeBucket {\n from\n to\n count\n }\n ... on StatsBucket {\n min\n max\n }\n }\n }\n`;\n\nconst ProductView = /* GraphQL */ `\n fragment ProductView on ProductSearchItem {\n productView {\n __typename\n sku\n name\n inStock\n url\n urlKey\n attributes(roles: []) {\n name\n label\n value\n roles\n }\n images {\n label\n url\n roles\n }\n ... on ComplexProductView {\n priceRange {\n maximum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n minimum {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n }\n options {\n id\n title\n values {\n title\n ... on ProductViewOptionValueSwatch {\n id\n inStock\n type\n value\n }\n }\n }\n }\n ... on SimpleProductView {\n price {\n final {\n amount {\n value\n currency\n }\n }\n regular {\n amount {\n value\n currency\n }\n }\n }\n }\n }\n highlights {\n attribute\n value\n matched_words\n }\n }\n`;\n\nexport { Facet, ProductView };\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 { ProductSearchResponse } from '@/plp/data/models/api';\nimport {\n SearchFilter,\n SearchInput,\n SearchInputUnit,\n SearchSort,\n SearchResults,\n SearchResultUnit,\n SearchResultSuggestion,\n SearchFacetContext,\n SearchBucket,\n SearchResultProduct,\n} from '@/plp/data/models/acdl';\n\nconst SEARCH_INPUT_CONTEXT = 'searchInputContext';\nconst SEARCH_RESULTS_CONTEXT = 'searchResultsContext';\nconst PLP_UNIT_ID = 'livesearch-plp';\nconst SEARCH_UNIT_ID = 'livesearch-popover';\n//const SEARCH_CATEGORY_CLICK = 'search-category-click';\nconst SEARCH_PRODUCT_CLICK = 'search-product-click';\nconst SEARCH_REQUEST_SENT = 'search-request-sent';\nconst SEARCH_RESPONSE_RECEIVED = 'search-response-received';\nconst SEARCH_RESULTS_VIEW = 'search-results-view';\nconst CATEGORY_RESULTS_VIEW = 'category-results-view';\nconst CHANNEL_CONTEXT = 'channelContext';\n\nfunction getAdobeDataLayer() {\n // @ts-ignore\n window.adobeDataLayer = window.adobeDataLayer || [];\n // @ts-ignore\n return window.adobeDataLayer;\n}\n\n// Get a context from ACDL\nfunction getContext<T>(name?: string): T {\n const adobeDataLayer = getAdobeDataLayer();\n return adobeDataLayer.getState ? adobeDataLayer.getState(name) : ({} as T);\n}\n\nfunction setContext(name: string, data: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n // Clear existing context\n adobeDataLayer.push({\n [name]: null,\n });\n\n // Set new context\n adobeDataLayer.push({\n [name]: data,\n });\n}\n\nfunction getChannelContext() {\n return {\n _id: \"https://ns.adobe.com/xdm/channels/web\",\n _type: \"https://ns.adobe.com/xdm/channel-types/web\",\n };\n}\n\nfunction setChannelContext() {\n setContext(CHANNEL_CONTEXT, getChannelContext());\n}\n\nfunction pushEvent(event: string, additionalContext?: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n adobeDataLayer.push((acdl: any) => {\n const state = acdl.getState ? acdl.getState() : {};\n\n acdl.push({\n event,\n eventInfo: {\n ...state,\n ...additionalContext,\n },\n });\n });\n}\n\nconst searchRequestSent = (searchUnitId: string) => {\n setChannelContext();\n pushEvent(SEARCH_REQUEST_SENT, { searchUnitId });\n};\n\nconst searchResponseReceived = (searchUnitId: string) => {\n setChannelContext();\n pushEvent(SEARCH_RESPONSE_RECEIVED, { searchUnitId });\n};\n\nconst categoryResultsView = (searchUnitId: string) => {\n pushEvent(CATEGORY_RESULTS_VIEW, { searchUnitId });\n};\n\nconst searchResultsView = (searchUnitId: string) => {\n pushEvent(SEARCH_RESULTS_VIEW, { searchUnitId });\n};\n\nconst searchProductClick = (sku: string, searchUnitId: string) => {\n pushEvent(SEARCH_PRODUCT_CLICK, { sku, searchUnitId });\n};\n\nconst updateSearchInputCtx = (\n searchUnitId: string,\n searchRequestId: string,\n phrase: string,\n filters: Array<SearchFilter>,\n pageSize: number,\n currentPage: number,\n sort: Array<SearchSort>,\n): void => {\n const acdl = getAdobeDataLayer;\n if (!acdl) {\n // don't break search if events are broken/not loading\n return;\n }\n\n const searchInputCtx: SearchInput = getContext(SEARCH_INPUT_CONTEXT) || {};\n if (!searchInputCtx?.units) {\n searchInputCtx.units = [];\n }\n\n // create search input unit\n const searchInputUnit: SearchInputUnit = {\n searchUnitId,\n searchRequestId,\n queryTypes: ['products', 'suggestions'],\n phrase,\n pageSize,\n currentPage,\n filter: filters,\n sort,\n };\n\n // find search input unit index\n const searchInputUnitIndex = searchInputCtx.units.findIndex((unit) => unit.searchUnitId === searchUnitId);\n\n // update search input unit\n if (searchInputUnitIndex < 0) {\n searchInputCtx.units.push(searchInputUnit);\n } else {\n searchInputCtx.units[searchInputUnitIndex] = searchInputUnit;\n }\n\n setContext(SEARCH_INPUT_CONTEXT, searchInputCtx);\n};\n\nconst updateSearchResultsCtx = (\n searchUnitId: string,\n searchRequestId: string,\n results: ProductSearchResponse['productSearch'],\n): void => {\n const acdl = getAdobeDataLayer;\n if (!acdl) {\n // don't break search if events are broken/not loading\n return;\n }\n const searchResultsCtx: SearchResults = getContext(SEARCH_RESULTS_CONTEXT) || {};\n if (!searchResultsCtx?.units) {\n searchResultsCtx.units = [];\n }\n\n // find search result unit index\n const searchResultUnitIndex = searchResultsCtx.units.findIndex((unit) => unit.searchUnitId === searchUnitId);\n\n // create search result unit\n const searchResultUnit: SearchResultUnit = {\n searchUnitId,\n searchRequestId,\n products: createProducts(results.items),\n categories: [],\n suggestions: createSuggestions(results.suggestions),\n page: results?.pageInfo?.currentPage || 1,\n perPage: results?.pageInfo?.pageSize || 20,\n facets: createFacets(results.facets as SearchFacetContext[]),\n };\n\n // update search result unit\n if (searchResultUnitIndex < 0) {\n searchResultsCtx.units.push(searchResultUnit);\n } else {\n searchResultsCtx.units[searchResultUnitIndex] = searchResultUnit;\n }\n\n setContext(SEARCH_RESULTS_CONTEXT, searchResultsCtx);\n};\n\nconst createProducts = (items: ProductSearchResponse['productSearch']['items']): SearchResultProduct[] => {\n if (!items) {\n return [];\n }\n\n const products: SearchResultProduct[] = items.map((item, index) => ({\n name: item?.name,\n sku: item?.sku,\n url: item?.url ?? '',\n imageUrl: item?.images[0]?.url ?? '',\n price: item?.price?.final?.amount?.value ?? item?.priceRange?.minimum?.regular?.amount?.value,\n rank: index,\n }));\n\n return products;\n};\n\nconst createSuggestions = (items: ProductSearchResponse['productSearch']['suggestions']): SearchResultSuggestion[] => {\n if (!items) {\n return [];\n }\n\n const suggestions: SearchResultSuggestion[] = items.map((suggestion, index) => ({\n suggestion,\n rank: index,\n }));\n\n return suggestions;\n};\n\nconst createFacets = (items: SearchFacetContext[]): SearchFacetContext[] => {\n if (!items) {\n return [];\n }\n\n const facets = items.map<SearchFacetContext>((item) => ({\n attribute: item?.attribute,\n title: item?.title,\n type: item?.type || 'PINNED',\n buckets: item?.buckets.map<SearchBucket>((bucket: any) => bucket),\n }));\n\n return facets;\n};\n\nexport {\n searchRequestSent,\n searchResponseReceived,\n categoryResultsView,\n searchResultsView,\n searchProductClick,\n updateSearchInputCtx,\n updateSearchResultsCtx,\n PLP_UNIT_ID,\n SEARCH_UNIT_ID,\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 { 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 (\n request: SearchVariables | null,\n options: SearchOptions = {},\n): Promise<ProductSearchResult> => {\n const scope = options.scope === 'search' ? undefined : options.scope;\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 const resolvedRequest: SearchVariables = {\n ...request,\n phrase: request.phrase ?? '',\n currentPage: request.currentPage ?? 1,\n sort: request.sort ?? [],\n filter: request.filter ?? [],\n };\n\n updateSearchInputCtx(\n acdlUnitId,\n searchRequestId,\n resolvedRequest.phrase || '',\n resolvedRequest.filter || [],\n resolvedRequest.pageSize || 0,\n resolvedRequest.currentPage || 0,\n resolvedRequest.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: { ...resolvedRequest },\n });\n\n if (errors && !data) {\n throw new Error('Error fetching product search');\n }\n\n const result = transformProductSearchResponse(data, resolvedRequest);\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: resolvedRequest, 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":["initialize","Initializer","config","defaultConfig","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","getFetchGraphQlHeader","fetchGraphQl","getConfig","FetchGraphQL","getCurrency","currency","transformProduct","data","transformedProduct","_a","attr","_b","image","_e","_d","_c","_h","_g","_f","_k","_j","_i","_n","_m","_l","_o","_s","_r","_q","_p","_w","_v","_u","_t","_A","_z","_y","_x","_E","_D","_C","_B","_I","_H","_G","_F","_M","_L","_K","_J","_Q","_P","_O","_N","_U","_T","_S","_R","merge","_X","_W","_V","transformProductSearchResponse","searchVariables","productSearch","transformedResponse","transformFacets","product","transformSortAttributes","sortableAttributes","option","filter","facets","facet","Facet","ProductView","PRODUCT_SEARCH_QUERY","SEARCH_INPUT_CONTEXT","SEARCH_RESULTS_CONTEXT","PLP_UNIT_ID","SEARCH_UNIT_ID","SEARCH_PRODUCT_CLICK","SEARCH_REQUEST_SENT","SEARCH_RESPONSE_RECEIVED","SEARCH_RESULTS_VIEW","CATEGORY_RESULTS_VIEW","CHANNEL_CONTEXT","getAdobeDataLayer","getContext","name","adobeDataLayer","setContext","getChannelContext","setChannelContext","pushEvent","event","additionalContext","acdl","state","searchRequestSent","searchUnitId","searchResponseReceived","categoryResultsView","searchResultsView","searchProductClick","sku","updateSearchInputCtx","searchRequestId","phrase","filters","pageSize","currentPage","sort","searchInputCtx","searchInputUnit","searchInputUnitIndex","unit","updateSearchResultsCtx","results","searchResultsCtx","searchResultUnitIndex","searchResultUnit","createProducts","createSuggestions","createFacets","items","item","index","suggestion","bucket","search","request","options","scope","emptyResult","events","acdlUnitId","resolvedRequest","errors","result","error"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2026 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
import{VComponent as c,classes as p}from"@dropins/tools/lib.js";import{useText as w}from"@dropins/tools/i18n.js";import{jsxs as h,jsx as r,Fragment as _}from"@dropins/tools/preact-jsx-runtime.js";import*as e from"@dropins/tools/preact-compat.js";import{useState as E}from"@dropins/tools/preact-compat.js";import{InLineAlert as k,Icon as d,Button as g}from"@dropins/tools/components.js";const A=({productList:t,header:n,footer:o,imageWidth:l,imageHeight:a})=>h("div",{className:"product-discovery-product-list",style:{"--imageWidth":l,"--imageHeight":a},children:[n&&r("div",{className:"product-discovery-product-list__header",children:n}),r("div",{className:"product-discovery-product-list__grid",children:t&&r(c,{node:t})}),o&&r("div",{className:"product-discovery-product-list__footer",children:o})]}),L=t=>e.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",...t},e.createElement("g",{id:"Large"},e.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),e.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},e.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"}),e.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"})))),H=t=>e.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},e.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),e.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),y=t=>e.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},e.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),x=t=>e.createElement("svg",{id:"Icon_Warning_Base",width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},e.createElement("g",{clipPath:"url(#clip0_841_1324)"},e.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M11.9949 2.30237L0.802734 21.6977H23.1977L11.9949 2.30237Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),e.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M12.4336 10.5504L12.3373 14.4766H11.6632L11.5669 10.5504V9.51273H12.4336V10.5504ZM11.5883 18.2636V17.2687H12.4229V18.2636H11.5883Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"})),e.createElement("defs",null,e.createElement("clipPath",{id:"clip0_841_1324"},e.createElement("rect",{width:24,height:21,fill:"white",transform:"translate(0 1.5)",strokeWidth:1})))),W=({alertMessage:t=""})=>r("div",{className:p(["product-discovery-search-alert-message__wrapper"]),children:r("div",{className:"product-discovery-search-alert-message__content",children:r(k,{heading:t,type:"warning",icon:r(d,{source:x,size:"24"}),onDismiss:void 0})})}),F=({numberOfOptionsConfig:t=5,header:n,buckets:o,last:l})=>{const a=w({showMore:"Search.Facet.showMore",showLess:"Search.Facet.showLess"}),i=t,[s,m]=E(o.length<i),f=s?o.length:i;return h("div",{className:p(["product-discovery-facet",["product-discovery-facet--last",l]]),children:[r(c,{className:"product-discovery-facet__header",node:n}),o.slice(0,f).map((v,u)=>r(c,{className:"product-discovery-facet__bucket",node:v},u)),!s&&o.length>i&&r(g,{variant:"tertiary",icon:r(d,{source:L,size:"24"}),onClick:()=>m(!s),children:a.showMore}),s&&o.length>i&&r(g,{variant:"tertiary",icon:r(d,{source:y,size:"24"}),onClick:()=>m(!s),children:a.showLess})]})},P=({selectedFacets:t,facets:n})=>h(_,{children:[r(c,{className:"product-discovery-facet-list__selected-filters",node:t}),r(c,{className:"product-discovery-facet-list__facet-options",node:n})]});export{P as F,A as P,W as S,H as a,F as b};
|
|
4
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sources":["/@dropins/storefront-product-discovery/src/components/ProductList/ProductList.tsx","../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Close.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Minus.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Warning.svg","/@dropins/storefront-product-discovery/src/components/SearchAlertMessage/SearchAlertMessage.tsx","/@dropins/storefront-product-discovery/src/components/Facet/Facet.tsx","/@dropins/storefront-product-discovery/src/components/FacetList/FacetList.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 { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/plp/components/ProductList/ProductList.css';\n\nexport interface ProductListProps extends HTMLAttributes<HTMLDivElement> {\n productList?: VNode[];\n header?: VNode;\n footer?: VNode;\n imageWidth?: number;\n imageHeight?: number;\n}\n\nexport const ProductList: FunctionComponent<ProductListProps> = ({ productList, header, footer, imageWidth, imageHeight }) => {\n return (\n <div className={'product-discovery-product-list'} style={{ '--imageWidth': imageWidth, '--imageHeight': imageHeight }}>\n {header && <div className=\"product-discovery-product-list__header\">{header}</div>}\n <div className=\"product-discovery-product-list__grid\">{productList && <VComponent node={productList} />}</div>\n {footer && <div className=\"product-discovery-product-list__footer\">{footer}</div>}\n </div>\n );\n};\n","import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.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\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.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\" }), /* @__PURE__ */ React.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\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgClose = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 5.64001L5.62988 18.37\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 18.37L5.62988 5.64001\", stroke: \"currentColor\" }));\nexport default SvgClose;\n","import * as React from \"react\";\nconst SvgMinus = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.3332 11.75H6.6665\", strokeWidth: 1, strokeLinecap: \"square\", strokeLinejoin: \"round\", vectorEffect: \"non-scaling-stroke\", fill: \"none\", stroke: \"currentColor\" }));\nexport default SvgMinus;\n","import * as React from \"react\";\nconst SvgWarning = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Warning_Base\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_841_1324)\" }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M11.9949 2.30237L0.802734 21.6977H23.1977L11.9949 2.30237Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M12.4336 10.5504L12.3373 14.4766H11.6632L11.5669 10.5504V9.51273H12.4336V10.5504ZM11.5883 18.2636V17.2687H12.4229V18.2636H11.5883Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_841_1324\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 24, height: 21, fill: \"white\", transform: \"translate(0 1.5)\", strokeWidth: 1 }))));\nexport default SvgWarning;\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 { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport '@/plp/components/SearchAlertMessage/SearchAlertMessage.css';\nimport { Icon, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { Warning } from '@adobe-commerce/elsie/icons';\n\nexport interface SearchAlertMessageProps extends HTMLAttributes<HTMLDivElement> {\n alertMessage?: string;\n}\n\nexport const SearchAlertMessage: FunctionComponent<SearchAlertMessageProps> = ({ alertMessage = '' }) => {\n return (\n <div className={classes(['product-discovery-search-alert-message__wrapper'])}>\n <div className=\"product-discovery-search-alert-message__content\">\n <InLineAlert\n heading={alertMessage}\n type={'warning'}\n icon={<Icon source={Warning} size=\"24\" />}\n onDismiss={undefined}\n />\n </div>\n </div>\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 { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport { Button, Icon } from '@adobe-commerce/elsie/components';\nimport { Minus, Add } from '@adobe-commerce/elsie/icons';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/plp/components/Facet/Facet.css';\n\nexport interface FacetProps extends HTMLAttributes<HTMLDivElement> {\n numberOfOptionsConfig?: number;\n header: VNode;\n buckets: VNode[];\n last?: boolean;\n} \n\nexport const Facet: FunctionComponent<FacetProps> = ({ numberOfOptionsConfig = 5, header, buckets, last }) => {\n const translations = useText({\n showMore: 'Search.Facet.showMore',\n showLess: 'Search.Facet.showLess',\n });\n const numberOfOptionsShown = numberOfOptionsConfig;\n const [showMore, setShowMore] = useState(buckets.length < numberOfOptionsShown);\n\n const numberOfOptions = showMore ? buckets.length : numberOfOptionsShown;\n\n return (\n <div className={classes(['product-discovery-facet', ['product-discovery-facet--last', last]])}>\n <VComponent className=\"product-discovery-facet__header\" node={header} />\n {buckets.slice(0, numberOfOptions).map((bucket, index) => {\n return <VComponent key={index} className=\"product-discovery-facet__bucket\" node={bucket} />;\n })}\n {!showMore && buckets.length > numberOfOptionsShown && (\n <Button variant=\"tertiary\" icon={<Icon source={Add} size=\"24\" />} onClick={(): void => setShowMore(!showMore)}>\n {translations.showMore}\n </Button>\n )}\n {showMore && buckets.length > numberOfOptionsShown && (\n <Button\n variant=\"tertiary\"\n icon={<Icon source={Minus} size=\"24\" />}\n onClick={(): void => setShowMore(!showMore)}\n >\n {translations.showLess}\n </Button>\n )}\n </div>\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 { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/plp/components/FacetList/FacetList.css';\n\nexport interface FacetListProps extends HTMLAttributes<HTMLDivElement> {\n selectedFacets: VNode;\n facets: VNode;\n}\n\nexport const FacetList: FunctionComponent<FacetListProps> = ({ selectedFacets, facets }) => {\n return (\n <>\n <VComponent className=\"product-discovery-facet-list__selected-filters\" node={selectedFacets} />\n <VComponent className=\"product-discovery-facet-list__facet-options\" node={facets} />\n </>\n );\n};\n"],"names":["ProductList","productList","header","footer","imageWidth","imageHeight","jsxs","jsx","VComponent","SvgAdd","props","React","SvgClose","SvgMinus","SvgWarning","SearchAlertMessage","alertMessage","classes","InLineAlert","Icon","Warning","Facet","numberOfOptionsConfig","buckets","last","translations","useText","numberOfOptionsShown","showMore","setShowMore","useState","numberOfOptions","bucket","index","Button","Add","Minus","FacetList","selectedFacets","facets","Fragment"],"mappings":"kYAsBO,MAAMA,EAAmD,CAAC,CAAE,YAAAC,EAAa,OAAAC,EAAQ,OAAAC,EAAQ,WAAAC,EAAY,YAAAC,KAExGC,EAAC,MAAA,CAAI,UAAW,iCAAkC,MAAO,CAAE,eAAgBF,EAAY,gBAAiBC,CAAA,EACrG,SAAA,CAAAH,GAAUK,EAAC,MAAA,CAAI,UAAU,yCAA0C,SAAAL,EAAO,EAC3EK,EAAC,OAAI,UAAU,uCAAwC,YAAeA,EAACC,EAAA,CAAW,KAAMP,CAAA,CAAa,CAAA,CAAG,EACvGE,GAAUI,EAAC,MAAA,CAAI,UAAU,yCAA0C,SAAAJ,CAAA,CAAO,CAAA,EAC7E,EC3BEM,EAAUC,GAA0BC,EAAM,cAAc,MAAO,CAAE,GAAI,gBAAiB,YAAa,gCAAiC,MAAO,6BAA8B,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,GAAGD,GAAyBC,EAAM,cAAc,IAAK,CAAE,GAAI,OAAO,EAAoBA,EAAM,cAAc,OAAQ,CAAE,GAAI,iBAAkB,YAAa,iBAAkB,MAAO,GAAI,OAAQ,GAAI,KAAM,OAAQ,QAAS,CAAC,CAAE,EAAmBA,EAAM,cAAc,IAAK,CAAE,GAAI,WAAY,YAAa,WAAY,UAAW,wBAAwB,EAAoBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,GAAI,WAAY,YAAa,WAAY,GAAI,KAAM,UAAW,0BAA2B,KAAM,OAAQ,OAAQ,cAAc,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,GAAI,WAAY,YAAa,WAAY,GAAI,KAAM,UAAW,0BAA2B,KAAM,OAAQ,OAAQ,eAAgB,CAAC,CAAC,CAAC,ECAt9BC,EAAYF,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,iCAAkC,OAAQ,cAAc,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,iCAAkC,OAAQ,eAAgB,CAAC,ECAjdE,EAAYH,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,EAAG,wBAAyB,YAAa,EAAG,cAAe,SAAU,eAAgB,QAAS,aAAc,qBAAsB,KAAM,OAAQ,OAAQ,cAAc,CAAE,CAAC,ECAtYG,EAAcJ,GAA0BC,EAAM,cAAc,MAAO,CAAE,GAAI,oBAAqB,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,GAAyBC,EAAM,cAAc,IAAK,CAAE,SAAU,sBAAsB,EAAoBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,6DAA8D,OAAQ,eAAgB,YAAa,EAAG,cAAe,QAAS,eAAgB,OAAO,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,qIAAsI,OAAQ,eAAgB,YAAa,EAAG,cAAe,QAAS,eAAgB,OAAO,CAAE,CAAC,EAAmBA,EAAM,cAAc,OAAQ,KAAsBA,EAAM,cAAc,WAAY,CAAE,GAAI,gBAAgB,EAAoBA,EAAM,cAAc,OAAQ,CAAE,MAAO,GAAI,OAAQ,GAAI,KAAM,QAAS,UAAW,mBAAoB,YAAa,EAAG,CAAC,CAAC,CAAC,ECmB3jCI,EAAiE,CAAC,CAAE,aAAAC,EAAe,MAE5FT,EAAC,MAAA,CAAI,UAAWU,EAAQ,CAAC,iDAAiD,CAAC,EACzE,SAAAV,EAAC,MAAA,CAAI,UAAU,kDACb,SAAAA,EAACW,EAAA,CACC,QAASF,EACT,KAAM,UACN,KAAMT,EAACY,EAAA,CAAK,OAAQC,EAAS,KAAK,KAAK,EACvC,UAAW,MAAA,CAAA,EAEf,CAAA,CACF,ECCSC,EAAuC,CAAC,CAAE,sBAAAC,EAAwB,EAAG,OAAApB,EAAQ,QAAAqB,EAAS,KAAAC,KAAW,CAC5G,MAAMC,EAAeC,EAAQ,CAC3B,SAAU,wBACV,SAAU,uBAAA,CACX,EACKC,EAAuBL,EACvB,CAACM,EAAUC,CAAW,EAAIC,EAASP,EAAQ,OAASI,CAAoB,EAExEI,EAAkBH,EAAWL,EAAQ,OAASI,EAEpD,OACErB,EAAC,MAAA,CAAI,UAAWW,EAAQ,CAAC,0BAA2B,CAAC,gCAAiCO,CAAI,CAAC,CAAC,EAC1F,SAAA,CAAAjB,EAACC,EAAA,CAAW,UAAU,kCAAkC,KAAMN,EAAQ,EACrEqB,EAAQ,MAAM,EAAGQ,CAAe,EAAE,IAAI,CAACC,EAAQC,MACtCzB,EAAA,CAAuB,UAAU,kCAAkC,KAAMwB,GAAzDC,CAAiE,CAC1F,EACA,CAACL,GAAYL,EAAQ,OAASI,KAC5BO,EAAA,CAAO,QAAQ,WAAW,KAAM3B,EAACY,EAAA,CAAK,OAAQgB,EAAK,KAAK,IAAA,CAAK,EAAI,QAAS,IAAYN,EAAY,CAACD,CAAQ,EACzG,SAAAH,EAAa,QAAA,CAChB,EAEDG,GAAYL,EAAQ,OAASI,GAC5BpB,EAAC2B,EAAA,CACC,QAAQ,WACR,KAAM3B,EAACY,EAAA,CAAK,OAAQiB,EAAO,KAAK,KAAK,EACrC,QAAS,IAAYP,EAAY,CAACD,CAAQ,EAEzC,SAAAH,EAAa,QAAA,CAAA,CAChB,EAEJ,CAEJ,ECrCaY,EAA+C,CAAC,CAAE,eAAAC,EAAgB,OAAAC,KAE3EjC,EAAAkC,EAAA,CACE,SAAA,CAAAjC,EAACC,EAAA,CAAW,UAAU,iDAAiD,KAAM8B,EAAgB,EAC7F/B,EAACC,EAAA,CAAW,UAAU,8CAA8C,KAAM+B,CAAA,CAAQ,CAAA,EACpF","x_google_ignoreList":[1,2,3,4]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SearchFacet
|
|
1
|
+
import { SearchFacet } from '../../../data/models/api';
|
|
2
2
|
import { Product } from '../../../data/models/product';
|
|
3
3
|
|
|
4
4
|
declare const getFilterSelection: (facet: SearchFacet) => {
|
|
@@ -11,12 +11,7 @@ declare const getFilterSelection: (facet: SearchFacet) => {
|
|
|
11
11
|
attribute: string;
|
|
12
12
|
in: string[];
|
|
13
13
|
} | null | undefined;
|
|
14
|
-
/**
|
|
15
|
-
* Returns whether a facet bucket is selected according to the given filter.
|
|
16
|
-
* Handles range buckets, scalar/category in-list selection, and category parent selection when a child is selected.
|
|
17
|
-
*/
|
|
18
|
-
declare const isBucketSelected: (bucket: any, facet: SearchFacet, selectedFilter: SearchFilter | undefined) => boolean;
|
|
19
14
|
declare const getCurrencyType: (items: Product[]) => string;
|
|
20
15
|
declare const getBucketLabel: (bucket: any, facet: SearchFacet, currency: string | null) => any;
|
|
21
|
-
export { getBucketLabel, getCurrencyType, getFilterSelection
|
|
16
|
+
export { getBucketLabel, getCurrencyType, getFilterSelection };
|
|
22
17
|
//# sourceMappingURL=facetUtils.d.ts.map
|
package/containers/Facets.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2026 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as $,jsx as u,Fragment as H}from"@dropins/tools/preact-jsx-runtime.js";import*as x from"@dropins/tools/preact-compat.js";import{useState as W,useRef as V,useEffect as I}from"@dropins/tools/preact-compat.js";import{classes as se,VComponent as j,Slot as T}from"@dropins/tools/lib.js";import{Button as q,Icon as K,PriceRange as k,Checkbox as ce,RadioButton as le}from"@dropins/tools/components.js";/* empty css */import{useText as J}from"@dropins/tools/i18n.js";import{events as oe}from"@dropins/tools/event-bus.js";import{d as de}from"../chunks/search.js";import"../chunks/initialize.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const ue=t=>x.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",...t},x.createElement("g",{id:"Large"},x.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),x.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},x.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"}),x.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"})))),he=t=>x.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},x.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),x.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),pe=t=>x.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},x.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),me=({numberOfOptionsConfig:t=5,header:e,buckets:n,last:r})=>{const c=J({showMore:"Search.Facet.showMore",showLess:"Search.Facet.showLess"}),l=t,[g,s]=W(n.length<l),S=g?n.length:l;return $("div",{className:se(["product-discovery-facet",["product-discovery-facet--last",r]]),children:[u(j,{className:"product-discovery-facet__header",node:e}),n.slice(0,S).map((o,h)=>u(j,{className:"product-discovery-facet__bucket",node:o},h)),!g&&n.length>l&&u(q,{variant:"tertiary",icon:u(K,{source:ue,size:"24"}),onClick:()=>s(!g),children:c.showMore}),g&&n.length>l&&u(q,{variant:"tertiary",icon:u(K,{source:pe,size:"24"}),onClick:()=>s(!g),children:c.showLess})]})},fe=({selectedFacets:t,facets:e})=>$(H,{children:[u(j,{className:"product-discovery-facet-list__selected-filters",node:t}),u(j,{className:"product-discovery-facet-list__facet-options",node:e})]}),ge="no",Ce="yes",ye=t=>{const e=t.buckets.find(n=>n.selected);return e?{attribute:t.attribute,range:{from:e.from,to:e.to}}:null},we=t=>{const e=t.buckets.reduce((n,r)=>{if(r.selected){if(t.attribute==="categories"&&r.isChild===!1){const c=r.path;if(t.buckets.some(g=>{var s;return g.selected&&g.isChild===!0&&((s=g.path)==null?void 0:s.startsWith(c+"/"))}))return n}n.push(r.title)}return n},[]);return e.length===0?null:{attribute:t.attribute,in:e}},Y=t=>{var e;switch((e=t.buckets[0])==null?void 0:e.__typename){case"RangeBucket":return ye(t);case"ScalarBucket":case"CategoryView":return we(t);default:return}},_e=(t,e,n)=>{var r;if(!n)return!1;if(n.range&&t.from===n.range.from&&t.to===n.range.to||n.in&&n.in.includes(t.title))return!0;if(e.attribute==="categories"&&t.isChild===!1){const c=t.path;if((r=n.in)==null?void 0:r.some(g=>g.startsWith(c+"/")))return!0}return!1},Fe=t=>{var n,r,c,l,g,s,S,o,h,v,N;const e=t[0];return(c=(r=(n=e==null?void 0:e.price)==null?void 0:n.regular)==null?void 0:r.amount)!=null&&c.currency?e.price.regular.amount.currency:(S=(s=(g=(l=e==null?void 0:e.priceRange)==null?void 0:l.minimum)==null?void 0:g.regular)==null?void 0:s.amount)!=null&&S.currency?(N=(v=(h=(o=e==null?void 0:e.priceRange)==null?void 0:o.minimum)==null?void 0:h.regular)==null?void 0:v.amount)==null?void 0:N.currency:"USD"},ve=(t,e,n)=>(e==null?void 0:e.attribute)==="price"?t.from===0?$("div",{style:"display:flex",children:[u(k,{amount:t.from,currency:n||"USD"}),u("span",{style:"padding: 0 2px",children:"-"}),u(k,{amount:t.to,currency:n||"USD"})]}):u(k,{minimumAmount:t.from,maximumAmount:t.to,currency:n||"USD",display:"dash"}):t.title,Se=(t,e)=>t.title===ge?`Not ${e.title}`:t.title===Ce?e.title:e.attribute==="categories"?t.name??"":t.title,G=(t,e,n)=>{switch(t.__typename){case"RangeBucket":return ve(t,e,n);case"ScalarBucket":case"CategoryView":return Se(t,e)}};function Be(t,e){t!=null&&t.length&&t.forEach(n=>{if((n==null?void 0:n.path)==null)return;const r=e.current.get(n.path),c=n.name!=null&&n.name!=="";r!=null&&r.name&&!c||e.current.set(n.path,n)})}function Pe(t,e){t!=null&&t.length&&t.forEach(n=>{const r=n.path??n.title;if(r==null)return;const c=n.name!=null&&n.name!=="",l=e.current.get(r);l!=null&&l.name&&!c||e.current.set(r,{title:n.title,__typename:n.__typename??"CategoryView",name:n.name,count:n.count,path:n.path??n.title,isChild:!!n.isChild,parentPath:n.parentPath})})}function Ee(t,e){t&&t.forEach(n=>{n.attribute==="categories"&&n.buckets.forEach(r=>{r.isChild&&r.parentPath&&(e.current.has(r.parentPath)||e.current.set(r.parentPath,new Map),e.current.get(r.parentPath).set(r.path,{title:r.title,__typename:r.__typename,name:r.name,displayName:r.displayName,count:r.count,path:r.path,isChild:r.isChild,parentPath:r.parentPath}))})})}function xe(t,e,n){const r=e.find(o=>o.includes("/"));if(!r)return t;const c=r.split("/")[0]??"",l=c?n(c):void 0;if(!l||l.size===0)return t;const g=new Set(t.map(o=>o.path)),s=[],S=[];return t.forEach(o=>{const h=l.get(o.path);h&&o.isChild?s.push({...o,count:h.count,displayName:h.displayName,name:h.name}):s.push(o)}),l.forEach((o,h)=>{g.has(h)||S.push(o)}),[...s,...S]}function Le(t,e,n){let r=t;for(const c of e){const l=n(c),g=r.find(s=>(s.path??s.title)===c);if(l)if(g)!g.name&&l.name&&(r=r.map(s=>(s.path??s.title)===c?{...s,name:l.name,count:s.count??l.count}:s));else{const s=!c.includes("/"),S={...l,isChild:!s,parentPath:s?void 0:c.split("/").slice(0,-1).join("/"),selected:!1};if(s)r=[S,...r];else{const o=c.split("/").slice(0,-1).join("/"),h=r.findIndex(N=>(N.path??N.title)===o),v=h>=0?h+1:0;r=[...r.slice(0,v),S,...r.slice(v)]}}}return r}function Ne(t,e,n){return t.map(r=>{const c=r.parentPath;return r.isChild&&c!=null&&!e(c)&&!n(c)?{...r,isChild:!1,parentPath:void 0}:r})}function Re(t,e,n,r,c){const l=e==null?void 0:e.find(o=>o.attribute==="categories"),g=(l==null?void 0:l.in)||[];let s=xe(t,g,o=>r.current.get(o));if(n&&c.current.size>0){const h=((l==null?void 0:l.in)??[])[0];if(h&&typeof h=="string"){const v=h.includes("/")?h.split("/")[0]:null,U=[v??h,v&&h!==v?h:null].filter(O=>typeof O=="string");s=Le(s,U,O=>c.current.get(O))}}const S=new Set(s.map(o=>o.path??o.title));return s=Ne(s,o=>S.has(o),o=>c.current.has(o)),s}const ke=({scope:t,slots:e})=>{const n=J({clearAll:"Search.Facet.clearAll"}),[r,c]=W([]),[l,g]=W(null),[s,S]=W(),[o,h]=W(null),v=V(null),N=V(new Map),M=V(new Map),U=V(new Map),O=i=>{const p=new Set(r.map(a=>a.attribute)),d=[...((s==null?void 0:s.filter)||[]).filter(a=>!p.has(a.attribute)),...i.filter||[]];de({...i,filter:d},{scope:t})},Q=i=>{if(!i||!i.result.facets&&!i.result.items&&!i.request.filter){c([]);return}S(i.request),Be(i.rawCategoriesBuckets,M);const{facets:p,items:w}=i.result;g(Fe(w));const d=i.request.filter;if(p){const a=d==null?void 0:d.some(y=>y.attribute==="categories"),C=p.find(y=>y.attribute==="categories");Pe(C==null?void 0:C.buckets,U),Ee(p,N);const _=p.map(y=>{const B=y.attribute==="categories"?Re(y.buckets,d,!!a,N,U):y.buckets,P=d==null?void 0:d.find(F=>F.attribute===y.attribute),R=B.map(F=>({...F,selected:_e(F,y,P)}));return{...y,buckets:R}});c(_)}},X=i=>{c(p=>{const w=p.map(a=>{const C=i.find(_=>_.attribute===a.attribute);return C||a}),d=w.reduce((a,C)=>{const _=Y(C);return _&&a.push(_),a},[]);return h(d),w})},b=(i,p)=>{const w=i.buckets.find(y=>y.title===p),a=i.attribute==="categories"&&w&&w.isChild===!1?w.path:null,C=i.buckets.map(y=>{if(y.title===p)return{...y,selected:!1};if(a){const B=y.path??y.title;if(B===a||typeof B=="string"&&B.startsWith(a+"/"))return{...y,selected:!1}}return y}),_={...i,buckets:C};X([_])},ee=()=>{const i=r.map(p=>{const w=p.buckets.map(d=>({...d,selected:!1}));return{...p,buckets:w}});c(i),h([])},D=(i,p)=>{const w=i.target.value,d=i.target.checked;c(a=>{const C=a.find(f=>f.attribute===p);if(!C)return a;const _=C.buckets.find(f=>f.title===w),B=p==="categories"&&_&&_.isChild===!1&&!d?_.path:null,P=C.buckets.map(f=>{var E;if(((E=C.buckets[0])==null?void 0:E.__typename)==="RangeBucket")return f.title===w?{...f,selected:d}:{...f,selected:!1};if(p==="categories")return f.title===w?{...f,selected:d}:{...f,selected:!1};if(f.title===w)return{...f,selected:d};if(B){const L=f.path??f.title;if(L===B||typeof L=="string"&&L.startsWith(B+"/"))return{...f,selected:!1}}return{...f}});let R=P;if(p==="categories"&&M.current.size>0){const f=d&&_&&_.isChild===!1,E=f?_.path??w:null;if(f&&E){const L=E.split("/").length,z=Array.from(M.current.values()).filter(m=>(m==null?void 0:m.path)&&m.path.startsWith(E+"/")&&m.path.split("/").length===L+1);if(z.length>0){const m=P.find(A=>A.path===E||A.title===E),ie=z.map(A=>({title:A.title,__typename:A.__typename??"CategoryView",name:A.name,count:A.count,path:A.path,isChild:!0,parentPath:E,selected:!1}));m&&(R=[m,...ie])}}else if(B){const L=new Set(P.filter(m=>m.selected).map(m=>m.path??m.title)),z=Array.from(M.current.values()).filter(m=>(m==null?void 0:m.path)&&typeof m.path=="string"&&m.path.length>0&&!m.path.includes("/"));z.length>0&&(R=z.map(m=>({title:m.title,__typename:m.__typename??"CategoryView",name:m.name,count:m.count,path:m.path,isChild:!1,selected:L.has(m.path)})))}}const F={...C,buckets:R},Z=a.map(f=>f.attribute===p?F:f),ae=Z.reduce((f,E)=>{const L=Y(E);return L&&f.push(L),f},[]);return h(ae),Z})},te=(i,p)=>{const w=u("span",{children:i.title}),d=i.buckets.map(a=>{var R;const C=G(a,i,l),_=a.isChild===!0,y=F=>F!=null&&Number(F)!==0,B=F=>$(T,{name:"FacetBucketLabel",slot:e==null?void 0:e.FacetBucketLabel,context:{data:a},children:[C," ",y(F)?`(${F})`:""]});let P=null;switch((R=i.buckets[0])==null?void 0:R.__typename){case"RangeBucket":P=u(T,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:a},children:u(le,{"data-testid":`${a.title}-radio`,label:B(),name:i.attribute,value:a.title,checked:a.selected,onChange:F=>{D(F,i.attribute)}})});break;case"CategoryView":if(!C)return null;P=u(T,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:a},children:$("button",{type:"button",className:`product-discovery-facet__category-link${a.selected?" product-discovery-facet__category-link--selected":""}`,"data-testid":`${a.title}-link`,onClick:()=>{D({target:{value:a.title,checked:!a.selected}},i.attribute)},children:[C," ",y(a.count)?`(${a.count})`:""]})});break;case"ScalarBucket":P=u(T,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:a},children:u(ce,{id:`${i.attribute}-${a.title.replace(/[^a-zA-Z0-9_-]/g,"")}`,"data-testid":`${a.title}-checkbox`,label:B(a.count),name:`${i.attribute}-${a.title.replace(/[^a-zA-Z0-9_-]/g,"")}`,value:a.title,checked:a.selected,onChange:F=>{D(F,i.attribute)}})});break;default:return null}return _&&P?u("div",{className:"product-discovery-facet__bucket--child",children:P}):P}).filter(a=>a!==null);return u(me,{header:w,buckets:d,last:p===r.length-1})},ne=()=>u(T,{name:"Facets",slot:e==null?void 0:e.Facets,context:{data:r},children:r.map((i,p)=>i.buckets.length>0?u(H,{children:u(T,{name:"Facet",slot:e==null?void 0:e.Facet,context:{data:i},children:te(i,p)})}):null)}),re=()=>{const i=r.reduce((d,a)=>(a.buckets.filter(_=>_.selected).length>0&&a.attribute!=="categories"&&d.push(a),d),[]),p=i.map(d=>d.buckets.map(a=>{if(a.selected){const C=G(a,d,l);return u(q,{"data-testid":`${a.title}-selected-btn`,"aria-label":`Remove ${d.title} filter: ${a.title}`,variant:"secondary",children:$(H,{children:[u("span",{children:C}),u(K,{source:he,size:"16"})]}),onClick:()=>{b(d,a.title)}})}return null})),w=p.length>0?u(q,{variant:"secondary",onClick:()=>{ee()},children:u("span",{children:n.clearAll})}):null;return $(T,{name:"SelectedFacets",slot:e==null?void 0:e.SelectedFacets,context:{data:i},children:[p,w]})};return I(()=>{const i=oe.on("search/result",Q,{eager:!0,scope:t});return()=>{i==null||i.off()}},[]),I(()=>{if(o!==null)return v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{s&&O({...s,filter:o,currentPage:1}),h(null)},150),()=>{v.current&&clearTimeout(v.current)}},[o,s]),u(fe,{selectedFacets:re(),facets:ne()})};export{ke as Facets,ke as default};
|
|
3
|
+
import{jsxs as _,jsx as i,Fragment as N}from"@dropins/tools/preact-jsx-runtime.js";import{useState as w,useRef as W,useEffect as T}from"@dropins/tools/preact-compat.js";import{Slot as y}from"@dropins/tools/lib.js";import{PriceRange as A,Button as O,Icon as Y,Checkbox as G,RadioButton as H}from"@dropins/tools/components.js";import{F as J,a as K,b as M}from"../chunks/components.js";import{events as Q}from"@dropins/tools/event-bus.js";import{search as X}from"../api.js";import{useText as I}from"@dropins/tools/i18n.js";import"@dropins/tools/fetch-graphql.js";const ee="no",te="yes",re=n=>{const e=n.buckets.find(u=>u.selected);return e?{attribute:n.attribute,range:{from:e.from,to:e.to}}:null},ne=n=>{const e=n.buckets.reduce((u,g)=>(g.selected&&u.push(g.title),u),[]);return e.length===0?null:{attribute:n.attribute,in:e}},q=n=>{var e;switch((e=n.buckets[0])==null?void 0:e.__typename){case"RangeBucket":return re(n);case"ScalarBucket":case"CategoryView":return ne(n)}},ce=n=>{var u,g,p,R,x,F,C,b,B,f,L;const e=n[0];return(p=(g=(u=e==null?void 0:e.price)==null?void 0:u.regular)==null?void 0:g.amount)!=null&&p.currency?e.price.regular.amount.currency:(C=(F=(x=(R=e==null?void 0:e.priceRange)==null?void 0:R.minimum)==null?void 0:x.regular)==null?void 0:F.amount)!=null&&C.currency?(L=(f=(B=(b=e==null?void 0:e.priceRange)==null?void 0:b.minimum)==null?void 0:B.regular)==null?void 0:f.amount)==null?void 0:L.currency:"USD"},ae=(n,e,u)=>(e==null?void 0:e.attribute)==="price"?n.from===0?_("div",{style:"display:flex",children:[i(A,{amount:n.from,currency:u||"USD"}),i("span",{style:"padding: 0 2px",children:"-"}),i(A,{amount:n.to,currency:u||"USD"})]}):i(A,{minimumAmount:n.from,maximumAmount:n.to,currency:u||"USD",display:"dash"}):n.title,ie=(n,e)=>n.title===ee?`Not ${e.title}`:n.title===te?e.title:n.title,D=(n,e,u)=>{switch(n.__typename){case"RangeBucket":return ae(n,e,u);case"ScalarBucket":case"CategoryView":return ie(n,e)}},pe=({scope:n,slots:e})=>{const u=I({clearAll:"Search.Facet.clearAll"}),[g,p]=w([]),[R,x]=w(null),[F,C]=w(),[b,B]=w(null),f=W(null),L=r=>{const a=new Set(g.map(t=>t.attribute)),c=[...((F==null?void 0:F.filter)||[]).filter(t=>!a.has(t.attribute)),...r.filter||[]];X({...r,filter:c},{scope:n})},U=r=>{if(!r||!r.result.facets&&!r.result.items&&!r.request.filter){p([]);return}C(r.request);const{facets:a,items:s}=r.result;x(ce(s));const c=r.request.filter;if(a){const t=a.map(l=>{const m=l.buckets.map(h=>{const o=c==null?void 0:c.find(S=>S.attribute===l.attribute);if(o){const S=o.range;if(S&&h.from===S.from&&h.to===S.to)return{...h,selected:!0};if(o.in&&o.in.includes(h.title))return{...h,selected:!0}}return{...h,selected:!1}});return{...l,buckets:m}});p(t)}},z=r=>{p(a=>{const s=a.map(t=>{const l=r.find(m=>m.attribute===t.attribute);return l||t}),c=s.reduce((t,l)=>{const m=q(l);return m&&t.push(m),t},[]);return B(c),s})},E=(r,a)=>{const s=r.buckets.map(t=>t.title===a?{...t,selected:!1}:t),c={...r,buckets:s};z([c])},P=()=>{const r=g.map(a=>{const s=a.buckets.map(c=>({...c,selected:!1}));return{...a,buckets:s}});p(r),B([])},$=(r,a)=>{const s=r.target.value,c=r.target.checked;p(t=>{const l=t.find(d=>d.attribute===a);if(!l)return t;const m=l.buckets.map(d=>{var k;return((k=l.buckets[0])==null?void 0:k.__typename)==="RangeBucket"?d.title===s?{...d,selected:c}:{...d,selected:!1}:d.title===s?{...d,selected:c}:{...d}}),h={...l,buckets:m},o=t.map(d=>d.attribute===a?h:d),S=o.reduce((d,k)=>{const v=q(k);return v&&d.push(v),d},[]);return B(S),o})},V=(r,a)=>{const s=i("span",{children:r.title}),c=r.buckets.map(t=>{var h;const l=D(t,r,R),m=o=>_(y,{name:"FacetBucketLabel",slot:e==null?void 0:e.FacetBucketLabel,context:{data:t},children:[l," ",o?`(${o})`:""]});switch((h=r.buckets[0])==null?void 0:h.__typename){case"RangeBucket":return i(y,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:t},children:i(H,{"data-testid":`${t.title}-radio`,label:m(),name:r.attribute,value:t.title,checked:t.selected,onChange:o=>{$(o,r.attribute)}})});case"ScalarBucket":case"CategoryView":return i(y,{name:"FacetBucket",slot:e==null?void 0:e.FacetBucket,context:{data:t},children:i(G,{id:`${r.attribute}-${t.title.replace(/[^a-zA-Z0-9_-]/g,"")}`,"data-testid":`${t.title}-checkbox`,label:m(t.count),name:`${r.attribute}-${t.title.replace(/[^a-zA-Z0-9_-]/g,"")}`,value:t.title,checked:t.selected,onChange:o=>{$(o,r.attribute)}})});default:return null}}).filter(t=>t!==null);return i(M,{header:s,buckets:c,last:a===g.length-1})},j=()=>i(y,{name:"Facets",slot:e==null?void 0:e.Facets,context:{data:g},children:g.map((r,a)=>r.buckets.length>0?i(N,{children:i(y,{name:"Facet",slot:e==null?void 0:e.Facet,context:{data:r},children:V(r,a)})}):null)}),Z=()=>{const r=g.reduce((c,t)=>(t.buckets.filter(m=>m.selected).length>0&&c.push(t),c),[]),a=r.map(c=>c.buckets.map(t=>{if(t.selected){const l=D(t,c,R);return i(O,{"data-testid":`${t.title}-selected-btn`,"aria-label":`Remove ${c.title} filter: ${t.title}`,variant:"secondary",children:_(N,{children:[i("span",{children:l}),i(Y,{source:K,size:"16"})]}),onClick:()=>{E(c,t.title)}})}return null})),s=a.length>0?i(O,{variant:"secondary",onClick:()=>{P()},children:i("span",{children:u.clearAll})}):null;return _(y,{name:"SelectedFacets",slot:e==null?void 0:e.SelectedFacets,context:{data:r},children:[a,s]})};return T(()=>{const r=Q.on("search/result",U,{eager:!0,scope:n});return()=>{r==null||r.off()}},[]),T(()=>{if(b!==null)return f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{F&&L({...F,filter:b,currentPage:1}),B(null)},150),()=>{f.current&&clearTimeout(f.current)}},[b,F]),i(J,{selectedFacets:Z(),facets:j()})};export{pe as Facets,pe as default};
|
|
4
4
|
//# sourceMappingURL=Facets.js.map
|