@dropins/storefront-product-discovery 2.0.0-alpha002 → 2.0.0-alpha003
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/containers/Facets.js +1 -1
- package/containers/Facets.js.map +1 -1
- package/package.json +1 -1
- package/render.js +1 -1
package/containers/Facets.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as
|
|
3
|
+
import{jsxs as F,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 z}from"@dropins/tools/preact-compat.js";import{VComponent as E,Slot as B}from"@dropins/tools/lib.js";import{Button as R,Icon as b,PriceRange as A,Divider as T,Checkbox as W,RadioButton as H}from"@dropins/tools/components.js";/* empty css */import{useText as q}from"@dropins/tools/i18n.js";import{events as Y}from"@dropins/tools/event-bus.js";import{d as O}from"../chunks/search.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const G=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"})))),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",{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"})),K=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"})),Q=({numberOfOptionsConfig:n=5,header:r,buckets:c})=>{const g=q({showMore:"Search.Facet.showMore",showLess:"Search.Facet.showLess"}),u=n,[d,p]=C(c.length<u),w=d?c.length:u;return F("div",{children:[a(E,{className:"product-discovery-facet__header",node:r}),c.slice(0,w).map((f,S)=>a(E,{className:"product-discovery-facet__bucket",node:f},S)),!d&&c.length>u&&a(R,{variant:"tertiary",icon:a(b,{source:G,size:"24"}),onClick:()=>p(!d),children:g.showMore}),d&&c.length>u&&a(R,{variant:"tertiary",icon:a(b,{source:K,size:"24"}),onClick:()=>p(!d),children:g.showLess})]})},X=({selectedFacets:n,facets:r})=>F(N,{children:[a(E,{className:"product-discovery-facet-list__selected-filters",node:n}),a(E,{className:"product-discovery-facet-list__facet-options",node:r})]}),Z="no",I="yes",ee=n=>{const r=n.buckets.find(c=>c.selected);return r?{attribute:n.attribute,range:{from:r.from,to:r.to}}:null},te=n=>{const r=n.buckets.reduce((c,g)=>(g.selected&&c.push(g.title),c),[]);return r.length===0?null:{attribute:n.attribute,in:r}},ne=n=>{var r;switch((r=n.buckets[0])==null?void 0:r.__typename){case"RangeBucket":return ee(n);case"ScalarBucket":case"CategoryView":return te(n)}},re=n=>{var c,g,u,d,p,w,f,S,y,_,L;const r=n[0];return(u=(g=(c=r==null?void 0:r.price)==null?void 0:c.regular)==null?void 0:g.amount)!=null&&u.currency?r.price.regular.amount.currency:(f=(w=(p=(d=r==null?void 0:r.priceRange)==null?void 0:d.minimum)==null?void 0:p.regular)==null?void 0:w.amount)!=null&&f.currency?(L=(_=(y=(S=r==null?void 0:r.priceRange)==null?void 0:S.minimum)==null?void 0:y.regular)==null?void 0:_.amount)==null?void 0:L.currency:"USD"},ce=(n,r,c)=>(r==null?void 0:r.attribute)==="price"?n.from===0?F("div",{style:"display:flex",children:[a(A,{amount:n.from,currency:c||"USD"}),a("span",{style:"padding: 0 2px",children:"-"}),a(A,{amount:n.to,currency:c||"USD"})]}):a(A,{minimumAmount:n.from,maximumAmount:n.to,currency:c||"USD",display:"dash"}):n.title,ae=(n,r)=>n.title===Z?`Not ${r.title}`:n.title===I?r.title:n.title,$=(n,r,c)=>{switch(n.__typename){case"RangeBucket":return ce(n,r,c);case"ScalarBucket":case"CategoryView":return ae(n,r)}},Fe=({rootCategory:n,scope:r,slots:c})=>{const g=q({clearAll:"Search.Facet.clearAll"}),[u,d]=C([]),[p,w]=C(null),[f,S]=C(),y=e=>{n?O({...e,filter:[{attribute:"categoryPath",eq:n},...e.filter||[]]},{scope:r}):O(e,{scope:r})},_=e=>{if(!e||!e.result.facets&&!e.result.items&&!e.request.filter){d([]);return}S(e.request);const{facets:s,items:m}=e.result;w(re(m));const t=e.request.filter;if(s){const i=s.map(l=>{const v=l.buckets.map(o=>{o.selected=!1;const x=t==null?void 0:t.find(k=>k.attribute===l.attribute);if(x){const k=x.range;(k&&o.from===k.from&&o.to===k.to||x.in&&x.in.includes(o.title))&&(o.selected=!0)}return o});return l.buckets=v,l});d(i)}},L=e=>{const s=u.map(t=>{const i=e.find(l=>l.attribute===t.attribute);return i||t}),m=s.reduce((t,i)=>{const l=ne(i);return l&&t.push(l),t},[]);d(s),f&&y({...f,filter:m})},D=(e,s)=>{const m=e.buckets.map(i=>(i.title===s&&(i.selected=!1),i)),t=e;t.buckets=m,L([t])},P=()=>{const e=u.map(s=>{const m=s.buckets.map(t=>(t.selected=!1,t));return s.buckets=m,s});d(e),f&&y({...f,filter:[]})},M=(e,s)=>{const m=s.buckets.map(i=>{var l;return((l=s.buckets[0])==null?void 0:l.__typename)==="RangeBucket"&&(i.selected=!1),i.title===e.target.value&&(i.selected=e.target.checked),i}),t=s;t.buckets=m,L([t])},U=e=>{const s=a("span",{children:e.title}),m=e.buckets.map(t=>{var v;const i=$(t,e,p),l=o=>F(B,{name:"FacetBucketLabel",slot:c==null?void 0:c.FacetBucketLabel,context:{data:t},children:[i," ",o?`(${o})`:""]});switch((v=e.buckets[0])==null?void 0:v.__typename){case"RangeBucket":return a(B,{name:"FacetBucket",slot:c==null?void 0:c.FacetBucket,context:{data:t},children:a(H,{"data-testid":`${t.title}-radio`,label:l(),name:e.attribute,value:t.title,checked:t.selected,onChange:o=>{M(o,e)}})});case"ScalarBucket":case"CategoryView":return a(B,{name:"FacetBucket",slot:c==null?void 0:c.FacetBucket,context:{data:t},children:a(W,{"data-testid":`${t.title}-checkbox`,label:l(t.count),name:e.attribute,value:t.title,checked:t.selected,onChange:o=>{M(o,e)}})});default:return null}}).filter(t=>t!==null);return a(Q,{header:s,buckets:m})},V=()=>a(B,{name:"Facets",slot:c==null?void 0:c.Facets,context:{data:u},children:u.map(e=>e.buckets.length>0?F(N,{children:[a(B,{name:"Facet",slot:c==null?void 0:c.Facet,context:{data:e},children:U(e)}),a(T,{variant:"secondary"})]}):null)}),j=()=>{const e=u.reduce((t,i)=>(i.buckets.filter(v=>v.selected).length>0&&t.push(i),t),[]),s=e.map(t=>t.buckets.map(i=>{if(i.selected){const l=$(i,t,p);return a(R,{"data-testid":`${i.title}-selected-btn`,"aria-label":`Remove ${t.title} filter: ${i.title}`,variant:"secondary",children:F(N,{children:[a("span",{children:l}),a(b,{source:J,size:"16"})]}),onClick:()=>{D(t,i.title)}})}return null})),m=s.length>0?a(R,{variant:"secondary",onClick:()=>{P()},children:a("span",{children:g.clearAll})}):null;return F(B,{name:"SelectedFacets",slot:c==null?void 0:c.SelectedFacets,context:{data:e},children:[s,m]})};return z(()=>{const e=Y.on("search/result",_,{eager:!0,scope:r});return()=>{e==null||e.off()}},[]),a(X,{selectedFacets:j(),facets:V()})};export{Fe as Facets,Fe as default};
|
|
4
4
|
//# sourceMappingURL=Facets.js.map
|
package/containers/Facets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Facets.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Burger.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Close.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Minus.svg","/@dropins/storefront-product-discovery/src/components/Facet/Facet.tsx","/@dropins/storefront-product-discovery/src/components/FacetList/FacetList.tsx","/@dropins/storefront-product-discovery/src/containers/Facets/utils/facetUtils.tsx","/@dropins/storefront-product-discovery/src/containers/Facets/Facets.tsx"],"sourcesContent":["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 SvgBurger = (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: \"M3 12H21\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M3 6H21\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M3 18H21\", stroke: \"currentColor\" }));\nexport default SvgBurger;\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.5, strokeLinecap: \"square\", strokeLinejoin: \"round\", vectorEffect: \"non-scaling-stroke\", fill: \"none\", stroke: \"currentColor\" }));\nexport default SvgMinus;\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 '@/plp/components/Facet/Facet.css';\nimport { Button, Icon } from '@adobe-commerce/elsie/components';\nimport { Minus, Add } from '@adobe-commerce/elsie/icons';\nimport { VComponent } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport interface FacetProps extends HTMLAttributes<HTMLDivElement> {\n numberOfOptionsConfig?: number;\n header: VNode;\n buckets: VNode[];\n}\n\nexport const Facet: FunctionComponent<FacetProps> = ({ numberOfOptionsConfig = 5, header, buckets }) => {\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>\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, useState } from 'preact/compat';\nimport '@/plp/components/FacetList/FacetList.css';\nimport { ActionButton, Icon } from '@adobe-commerce/elsie/components';\nimport { Burger } from '@adobe-commerce/elsie/icons';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\n\nexport interface FacetListProps extends HTMLAttributes<HTMLDivElement> {\n selectedFacets: VNode;\n facets: VNode;\n}\n\nexport const FacetList: FunctionComponent<FacetListProps> = ({ selectedFacets, facets }) => {\n const [showFilters, setShowFilters] = useState(true);\n\n const handleShowFilters = () => {\n setShowFilters(!showFilters);\n };\n\n return (\n <div className=\"product-discovery-facet-list\">\n <div className=\"product-discovery-facet-list__show-filters-button\">\n <ActionButton\n onClick={() => {\n handleShowFilters();\n }}\n >\n <Icon source={Burger} size=\"16\" />\n <span>Filters</span>\n </ActionButton>\n </div>\n <VComponent className=\"product-discovery-facet-list__selected-filters\" node={selectedFacets} />\n <VComponent\n className={classes([\n 'product-discovery-facet-list__facet-options',\n ['product-discovery-facet-list__facet-options--hidden', showFilters],\n ])}\n node={facets}\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 { SearchFacet } from '@/plp/data/models/api';\nimport { Product } from '@/plp/data/models/product';\nimport { PriceRange } from '@adobe-commerce/elsie/components';\n\nconst BOOLEAN_NO = 'no';\nconst BOOLEAN_YES = 'yes';\n\nconst getRangeFacetFilter = (facet: SearchFacet) => {\n const selectedRange = facet.buckets.find((bucket) => bucket.selected);\n if (!selectedRange) {\n return null;\n }\n return {\n attribute: facet.attribute,\n range: {\n from: selectedRange.from,\n to: selectedRange.to,\n },\n };\n};\n\nconst getScalarFacetFilter = (facet: SearchFacet) => {\n const scalarSelections = facet.buckets.reduce((accu, curr) => {\n if (curr.selected) {\n accu.push(curr.title);\n }\n return accu;\n }, [] as string[]);\n if (scalarSelections.length === 0) {\n return null;\n }\n return {\n attribute: facet.attribute,\n in: scalarSelections,\n };\n};\n\nconst getFilterSelection = (facet: SearchFacet) => {\n switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return getRangeFacetFilter(facet);\n case 'ScalarBucket':\n case 'CategoryView':\n return getScalarFacetFilter(facet);\n default:\n break;\n }\n};\n\nconst getCurrencyType = (items: Product[]) => {\n const firstItem = items[0];\n if (firstItem?.price?.regular?.amount?.currency) {\n return firstItem.price.regular.amount.currency;\n } else if (firstItem?.priceRange?.minimum?.regular?.amount?.currency) {\n return firstItem?.priceRange?.minimum?.regular?.amount?.currency;\n }\n return 'USD'; // Default currency if not found\n};\n\nconst getRangeBucketLabel = (bucket: any, facet: SearchFacet, currency: string | null) => {\n if (facet?.attribute === 'price') {\n //Temp fix for Price range not handling value when minumum is zero\n if (bucket.from === 0) {\n return (\n <div style={'display:flex'}>\n <PriceRange amount={bucket.from} currency={currency || 'USD'} />\n <span style={'padding: 0 2px'}>{'-'}</span>\n <PriceRange amount={bucket.to} currency={currency || 'USD'} />\n </div>\n );\n }\n return (\n <PriceRange minimumAmount={bucket.from} maximumAmount={bucket.to} currency={currency || 'USD'} display=\"dash\" />\n );\n }\n return bucket.title;\n};\n\nconst getScalarBucketLabel = (bucket: any, facet: SearchFacet) => {\n if (bucket.title === BOOLEAN_NO) {\n return `Not ${facet.title}`;\n } else if (bucket.title === BOOLEAN_YES) {\n return facet.title;\n }\n return bucket.title;\n};\n\nconst getBucketLabel = (bucket: any, facet: SearchFacet, currency: string | null) => {\n switch (bucket.__typename) {\n case 'RangeBucket':\n return getRangeBucketLabel(bucket, facet, currency);\n case 'ScalarBucket':\n case 'CategoryView':\n return getScalarBucketLabel(bucket, facet);\n default:\n break;\n }\n};\n\nexport { getBucketLabel, getCurrencyType, getFilterSelection };\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 { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { ProductSearchResult, SearchFilter, SearchFacet, SearchVariables, FacetBucket, Scope } from '@/plp/data/models/api';\nimport { getBucketLabel, getCurrencyType, getFilterSelection } from './utils/facetUtils';\nimport FacetList from '@/plp/components/FacetList';\nimport { Button, Checkbox, Divider, Icon, RadioButton } from '@adobe-commerce/elsie/components';\nimport { Facet } from '@/plp/components';\nimport { VNode } from 'preact';\nimport { Close } from '@adobe-commerce/elsie/icons';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { search } from '@/plp/api';\n\nexport interface FacetsProps extends HTMLAttributes<HTMLDivElement> {\n rootCategory?: string;\n scope?: Scope;\n slots?: {\n Facet?: SlotProps<{ data: SearchFacet }>;\n SelectedFacets?: SlotProps<{ data: SearchFacet[] }>;\n Facets?: SlotProps<{ data: SearchFacet[] }>;\n FacetBucket?: SlotProps<{ data: FacetBucket }>;\n FacetBucketLabel?: SlotProps<{ data: FacetBucket }>;\n };\n}\n\nexport const Facets: Container<FacetsProps> = ({ rootCategory, scope, slots }) => {\n const labels = useText({\n clearAll: 'Search.Facet.clearAll',\n });\n\n const [facetList, setFacetList] = useState<SearchFacet[]>([]);\n const [currency, setCurrency] = useState<string | null>(null);\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>();\n\n const handleSearchRequest = (searchVariables: SearchVariables): void => {\n if (rootCategory) {\n search({ ...searchVariables, filter: [{ attribute: 'categoryPath', eq: rootCategory }, ...(searchVariables.filter || [])] }, { scope });\n } else {\n search(searchVariables, { scope });\n }\n };\n\n const handleSearchResult = (payload: { result: ProductSearchResult; request: SearchVariables }): void => {\n if (!payload || (!payload.result.facets && !payload.result.items && !payload.request.filter)) {\n setFacetList([]);\n return;\n }\n \n setCurrentSearchVariables(payload.request);\n \n const { facets, items } = payload.result;\n \n setCurrency(getCurrencyType(items));\n \n const filterList = payload.request.filter;\n \n if (facets) {\n const facetsWithSelections = facets.map((facet: SearchFacet) => {\n const selectedBuckets = facet.buckets.map((bucket) => {\n bucket.selected = false;\n const selectedFilter = filterList?.find((filter) => filter.attribute === facet.attribute);\n if (selectedFilter) {\n const selectedRange = selectedFilter.range;\n if (selectedRange && bucket.from === selectedRange.from && bucket.to === selectedRange.to) {\n bucket.selected = true;\n } else if (selectedFilter.in && selectedFilter.in.includes(bucket.title)) {\n bucket.selected = true;\n }\n }\n return bucket;\n });\n facet.buckets = selectedBuckets;\n return facet;\n });\n \n setFacetList(facetsWithSelections);\n }\n };\n\n const updateFacetSelections = (facets: SearchFacet[]): void => {\n const updatedFacetList = facetList.map((f) => {\n const newFacet = facets.find((facet) => facet.attribute === f.attribute);\n if (newFacet) {\n return newFacet;\n }\n return f;\n });\n const selectedFilterList = updatedFacetList.reduce((accu: SearchFilter[], facet: SearchFacet) => {\n const selectedFilter = getFilterSelection(facet);\n if (selectedFilter) {\n accu.push(selectedFilter as SearchFilter);\n }\n return accu;\n }, [] as SearchFilter[]);\n setFacetList(updatedFacetList);\n\n if (currentSearchVariables) {\n handleSearchRequest({ ...currentSearchVariables, filter: selectedFilterList });\n }\n };\n\n const handleCancelSelection = (facet: SearchFacet, title: string): void => {\n const newBuckets = facet.buckets.map((bucket) => {\n if (bucket.title === title) {\n bucket.selected = false;\n }\n return bucket;\n });\n const newFacet = facet;\n newFacet.buckets = newBuckets;\n updateFacetSelections([newFacet]);\n };\n\n const clearAllSelections = (): void => {\n const updatedFacetList = facetList.map((facet) => {\n const updatedBuckets = facet.buckets.map((bucket) => {\n bucket.selected = false;\n return bucket;\n });\n facet.buckets = updatedBuckets;\n return facet;\n });\n setFacetList(updatedFacetList);\n if (currentSearchVariables) {\n handleSearchRequest({ ...currentSearchVariables, filter: [] });\n }\n };\n\n const changeFilter = (event: any, facet: SearchFacet): void => {\n const newBuckets = facet.buckets.map((bucket) => {\n if (facet.buckets[0]?.__typename === 'RangeBucket') {\n bucket.selected = false;\n }\n if (bucket.title === event.target.value) {\n bucket.selected = event.target.checked;\n }\n return bucket;\n });\n const newFacet = facet;\n newFacet.buckets = newBuckets;\n updateFacetSelections([newFacet]);\n };\n\n const getFacetNode = (facet: SearchFacet): VNode => {\n const header = <span>{facet.title}</span>; \n const buckets = facet.buckets\n .map((bucket: FacetBucket) => {\n const bucketLabel = getBucketLabel(bucket, facet, currency);\n\n const renderedBucketLabel = (count?: number) => (\n <Slot name=\"FacetBucketLabel\" \n slot={slots?.FacetBucketLabel} \n context={{ data: bucket }}>\n {bucketLabel} {count ? `(${count})` : ''}\n </Slot>\n );\n\n switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return (\n <Slot name=\"FacetBucket\" slot={slots?.FacetBucket} context={{ data: bucket }}>\n <RadioButton\n data-testid={`${bucket.title}-radio`}\n label={renderedBucketLabel()}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n </Slot>\n ) as VNode;\n case 'ScalarBucket':\n case 'CategoryView':\n return (\n <Slot name=\"FacetBucket\" slot={slots?.FacetBucket} context={{ data: bucket }}>\n <Checkbox\n data-testid={`${bucket.title}-checkbox`}\n label={renderedBucketLabel(bucket.count)}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n </Slot>\n ) as VNode;\n default:\n return null;\n }\n })\n .filter((bucket) => bucket !== null);\n\n return <Facet header={header} buckets={buckets} />\n };\n\n const getFacetsNode = (): VNode => {\n return (\n <Slot name=\"Facets\" slot={slots?.Facets} context={{ data: facetList }}>\n {facetList.map((facet) => {\n return facet.buckets.length > 0\n ? ((\n <>\n <Slot name=\"Facet\" slot={slots?.Facet} context={{ data: facet }}>\n {getFacetNode(facet)}\n </Slot>\n <Divider variant=\"secondary\" />\n </>\n ) as VNode)\n : null;\n })}\n </Slot>\n );\n };\n\n const getSelectedFacetsNode = (): VNode => {\n const selectedFacets = facetList.reduce((accu, curr) => {\n const selected = curr.buckets.filter((bucket: FacetBucket) => bucket.selected);\n if (selected.length > 0) {\n accu.push(curr);\n }\n return accu;\n }, [] as SearchFacet[]);\n const selectedFilterBtns = selectedFacets.map((facet) => {\n return facet.buckets.map((bucket) => {\n if (bucket.selected) {\n const bucketTitle = getBucketLabel(bucket, facet, currency);\n return (\n <Button\n data-testid={`${bucket.title}-selected-btn`}\n aria-label={`Remove ${facet.title} filter: ${bucket.title}`}\n variant=\"secondary\"\n children={\n <>\n <span>{bucketTitle}</span>\n <Icon source={Close} size=\"16\" />\n </>\n }\n onClick={(): void => {\n handleCancelSelection(facet, bucket.title);\n }}\n />\n ) as VNode;\n }\n return null;\n });\n });\n\n const clearAllBtn =\n selectedFilterBtns.length > 0 ? (\n <Button\n variant=\"secondary\"\n onClick={(): void => {\n clearAllSelections();\n }}\n >\n <span>{labels.clearAll}</span>\n </Button>\n ) : null;\n return (\n <Slot name=\"SelectedFacets\" slot={slots?.SelectedFacets} context={{ data: selectedFacets }}>\n {selectedFilterBtns}\n {clearAllBtn}\n </Slot>\n );\n };\n\n useEffect(() => {\n const dataEvents = events.on('search/result', handleSearchResult, { eager: true, scope });\n\n return () => {\n dataEvents?.off();\n };\n }, []);\n\n return <FacetList selectedFacets={getSelectedFacetsNode()} facets={getFacetsNode()} />;\n};\n"],"names":["SvgAdd","props","React","SvgBurger","SvgClose","SvgMinus","Facet","numberOfOptionsConfig","header","buckets","translations","useText","numberOfOptionsShown","showMore","setShowMore","useState","numberOfOptions","jsx","VComponent","bucket","index","Button","Icon","Add","Minus","FacetList","selectedFacets","facets","showFilters","setShowFilters","handleShowFilters","jsxs","ActionButton","Burger","classes","BOOLEAN_NO","BOOLEAN_YES","getRangeFacetFilter","facet","selectedRange","getScalarFacetFilter","scalarSelections","accu","curr","getFilterSelection","_a","getCurrencyType","items","firstItem","_c","_b","_g","_f","_e","_d","_k","_j","_i","_h","getRangeBucketLabel","currency","PriceRange","getScalarBucketLabel","getBucketLabel","Facets","rootCategory","scope","slots","labels","facetList","setFacetList","setCurrency","currentSearchVariables","setCurrentSearchVariables","handleSearchRequest","searchVariables","search","handleSearchResult","payload","filterList","facetsWithSelections","selectedBuckets","selectedFilter","filter","updateFacetSelections","updatedFacetList","f","newFacet","selectedFilterList","handleCancelSelection","title","newBuckets","clearAllSelections","updatedBuckets","changeFilter","event","getFacetNode","bucketLabel","renderedBucketLabel","count","Slot","RadioButton","Checkbox","getFacetsNode","Fragment","Divider","getSelectedFacetsNode","selectedFilterBtns","bucketTitle","Close","clearAllBtn","useEffect","dataEvents","events"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
1
|
+
{"version":3,"file":"Facets.js","sources":["../../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","/@dropins/storefront-product-discovery/src/components/Facet/Facet.tsx","/@dropins/storefront-product-discovery/src/components/FacetList/FacetList.tsx","/@dropins/storefront-product-discovery/src/containers/Facets/utils/facetUtils.tsx","/@dropins/storefront-product-discovery/src/containers/Facets/Facets.tsx"],"sourcesContent":["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.5, strokeLinecap: \"square\", strokeLinejoin: \"round\", vectorEffect: \"non-scaling-stroke\", fill: \"none\", stroke: \"currentColor\" }));\nexport default SvgMinus;\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 '@/plp/components/Facet/Facet.css';\nimport { Button, Icon } from '@adobe-commerce/elsie/components';\nimport { Minus, Add } from '@adobe-commerce/elsie/icons';\nimport { VComponent } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport interface FacetProps extends HTMLAttributes<HTMLDivElement> {\n numberOfOptionsConfig?: number;\n header: VNode;\n buckets: VNode[];\n}\n\nexport const Facet: FunctionComponent<FacetProps> = ({ numberOfOptionsConfig = 5, header, buckets }) => {\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>\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","/********************************************************************\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 { SearchFacet } from '@/plp/data/models/api';\nimport { Product } from '@/plp/data/models/product';\nimport { PriceRange } from '@adobe-commerce/elsie/components';\n\nconst BOOLEAN_NO = 'no';\nconst BOOLEAN_YES = 'yes';\n\nconst getRangeFacetFilter = (facet: SearchFacet) => {\n const selectedRange = facet.buckets.find((bucket) => bucket.selected);\n if (!selectedRange) {\n return null;\n }\n return {\n attribute: facet.attribute,\n range: {\n from: selectedRange.from,\n to: selectedRange.to,\n },\n };\n};\n\nconst getScalarFacetFilter = (facet: SearchFacet) => {\n const scalarSelections = facet.buckets.reduce((accu, curr) => {\n if (curr.selected) {\n accu.push(curr.title);\n }\n return accu;\n }, [] as string[]);\n if (scalarSelections.length === 0) {\n return null;\n }\n return {\n attribute: facet.attribute,\n in: scalarSelections,\n };\n};\n\nconst getFilterSelection = (facet: SearchFacet) => {\n switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return getRangeFacetFilter(facet);\n case 'ScalarBucket':\n case 'CategoryView':\n return getScalarFacetFilter(facet);\n default:\n break;\n }\n};\n\nconst getCurrencyType = (items: Product[]) => {\n const firstItem = items[0];\n if (firstItem?.price?.regular?.amount?.currency) {\n return firstItem.price.regular.amount.currency;\n } else if (firstItem?.priceRange?.minimum?.regular?.amount?.currency) {\n return firstItem?.priceRange?.minimum?.regular?.amount?.currency;\n }\n return 'USD'; // Default currency if not found\n};\n\nconst getRangeBucketLabel = (bucket: any, facet: SearchFacet, currency: string | null) => {\n if (facet?.attribute === 'price') {\n //Temp fix for Price range not handling value when minumum is zero\n if (bucket.from === 0) {\n return (\n <div style={'display:flex'}>\n <PriceRange amount={bucket.from} currency={currency || 'USD'} />\n <span style={'padding: 0 2px'}>{'-'}</span>\n <PriceRange amount={bucket.to} currency={currency || 'USD'} />\n </div>\n );\n }\n return (\n <PriceRange minimumAmount={bucket.from} maximumAmount={bucket.to} currency={currency || 'USD'} display=\"dash\" />\n );\n }\n return bucket.title;\n};\n\nconst getScalarBucketLabel = (bucket: any, facet: SearchFacet) => {\n if (bucket.title === BOOLEAN_NO) {\n return `Not ${facet.title}`;\n } else if (bucket.title === BOOLEAN_YES) {\n return facet.title;\n }\n return bucket.title;\n};\n\nconst getBucketLabel = (bucket: any, facet: SearchFacet, currency: string | null) => {\n switch (bucket.__typename) {\n case 'RangeBucket':\n return getRangeBucketLabel(bucket, facet, currency);\n case 'ScalarBucket':\n case 'CategoryView':\n return getScalarBucketLabel(bucket, facet);\n default:\n break;\n }\n};\n\nexport { getBucketLabel, getCurrencyType, getFilterSelection };\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 { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { ProductSearchResult, SearchFilter, SearchFacet, SearchVariables, FacetBucket, Scope } from '@/plp/data/models/api';\nimport { getBucketLabel, getCurrencyType, getFilterSelection } from './utils/facetUtils';\nimport FacetList from '@/plp/components/FacetList';\nimport { Button, Checkbox, Divider, Icon, RadioButton } from '@adobe-commerce/elsie/components';\nimport { Facet } from '@/plp/components';\nimport { VNode } from 'preact';\nimport { Close } from '@adobe-commerce/elsie/icons';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { search } from '@/plp/api';\n\nexport interface FacetsProps extends HTMLAttributes<HTMLDivElement> {\n rootCategory?: string;\n scope?: Scope;\n slots?: {\n Facet?: SlotProps<{ data: SearchFacet }>;\n SelectedFacets?: SlotProps<{ data: SearchFacet[] }>;\n Facets?: SlotProps<{ data: SearchFacet[] }>;\n FacetBucket?: SlotProps<{ data: FacetBucket }>;\n FacetBucketLabel?: SlotProps<{ data: FacetBucket }>;\n };\n}\n\nexport const Facets: Container<FacetsProps> = ({ rootCategory, scope, slots }) => {\n const labels = useText({\n clearAll: 'Search.Facet.clearAll',\n });\n\n const [facetList, setFacetList] = useState<SearchFacet[]>([]);\n const [currency, setCurrency] = useState<string | null>(null);\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>();\n\n const handleSearchRequest = (searchVariables: SearchVariables): void => {\n if (rootCategory) {\n search({ ...searchVariables, filter: [{ attribute: 'categoryPath', eq: rootCategory }, ...(searchVariables.filter || [])] }, { scope });\n } else {\n search(searchVariables, { scope });\n }\n };\n\n const handleSearchResult = (payload: { result: ProductSearchResult; request: SearchVariables }): void => {\n if (!payload || (!payload.result.facets && !payload.result.items && !payload.request.filter)) {\n setFacetList([]);\n return;\n }\n \n setCurrentSearchVariables(payload.request);\n \n const { facets, items } = payload.result;\n \n setCurrency(getCurrencyType(items));\n \n const filterList = payload.request.filter;\n \n if (facets) {\n const facetsWithSelections = facets.map((facet: SearchFacet) => {\n const selectedBuckets = facet.buckets.map((bucket) => {\n bucket.selected = false;\n const selectedFilter = filterList?.find((filter) => filter.attribute === facet.attribute);\n if (selectedFilter) {\n const selectedRange = selectedFilter.range;\n if (selectedRange && bucket.from === selectedRange.from && bucket.to === selectedRange.to) {\n bucket.selected = true;\n } else if (selectedFilter.in && selectedFilter.in.includes(bucket.title)) {\n bucket.selected = true;\n }\n }\n return bucket;\n });\n facet.buckets = selectedBuckets;\n return facet;\n });\n \n setFacetList(facetsWithSelections);\n }\n };\n\n const updateFacetSelections = (facets: SearchFacet[]): void => {\n const updatedFacetList = facetList.map((f) => {\n const newFacet = facets.find((facet) => facet.attribute === f.attribute);\n if (newFacet) {\n return newFacet;\n }\n return f;\n });\n const selectedFilterList = updatedFacetList.reduce((accu: SearchFilter[], facet: SearchFacet) => {\n const selectedFilter = getFilterSelection(facet);\n if (selectedFilter) {\n accu.push(selectedFilter as SearchFilter);\n }\n return accu;\n }, [] as SearchFilter[]);\n setFacetList(updatedFacetList);\n\n if (currentSearchVariables) {\n handleSearchRequest({ ...currentSearchVariables, filter: selectedFilterList });\n }\n };\n\n const handleCancelSelection = (facet: SearchFacet, title: string): void => {\n const newBuckets = facet.buckets.map((bucket) => {\n if (bucket.title === title) {\n bucket.selected = false;\n }\n return bucket;\n });\n const newFacet = facet;\n newFacet.buckets = newBuckets;\n updateFacetSelections([newFacet]);\n };\n\n const clearAllSelections = (): void => {\n const updatedFacetList = facetList.map((facet) => {\n const updatedBuckets = facet.buckets.map((bucket) => {\n bucket.selected = false;\n return bucket;\n });\n facet.buckets = updatedBuckets;\n return facet;\n });\n setFacetList(updatedFacetList);\n if (currentSearchVariables) {\n handleSearchRequest({ ...currentSearchVariables, filter: [] });\n }\n };\n\n const changeFilter = (event: any, facet: SearchFacet): void => {\n const newBuckets = facet.buckets.map((bucket) => {\n if (facet.buckets[0]?.__typename === 'RangeBucket') {\n bucket.selected = false;\n }\n if (bucket.title === event.target.value) {\n bucket.selected = event.target.checked;\n }\n return bucket;\n });\n const newFacet = facet;\n newFacet.buckets = newBuckets;\n updateFacetSelections([newFacet]);\n };\n\n const getFacetNode = (facet: SearchFacet): VNode => {\n const header = <span>{facet.title}</span>; \n const buckets = facet.buckets\n .map((bucket: FacetBucket) => {\n const bucketLabel = getBucketLabel(bucket, facet, currency);\n\n const renderedBucketLabel = (count?: number) => (\n <Slot name=\"FacetBucketLabel\" \n slot={slots?.FacetBucketLabel} \n context={{ data: bucket }}>\n {bucketLabel} {count ? `(${count})` : ''}\n </Slot>\n );\n\n switch (facet.buckets[0]?.__typename) {\n case 'RangeBucket':\n return (\n <Slot name=\"FacetBucket\" slot={slots?.FacetBucket} context={{ data: bucket }}>\n <RadioButton\n data-testid={`${bucket.title}-radio`}\n label={renderedBucketLabel()}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n </Slot>\n ) as VNode;\n case 'ScalarBucket':\n case 'CategoryView':\n return (\n <Slot name=\"FacetBucket\" slot={slots?.FacetBucket} context={{ data: bucket }}>\n <Checkbox\n data-testid={`${bucket.title}-checkbox`}\n label={renderedBucketLabel(bucket.count)}\n name={facet.attribute}\n value={bucket.title}\n checked={bucket.selected}\n onChange={(event): void => {\n changeFilter(event, facet);\n }}\n />\n </Slot>\n ) as VNode;\n default:\n return null;\n }\n })\n .filter((bucket) => bucket !== null);\n\n return <Facet header={header} buckets={buckets} />\n };\n\n const getFacetsNode = (): VNode => {\n return (\n <Slot name=\"Facets\" slot={slots?.Facets} context={{ data: facetList }}>\n {facetList.map((facet) => {\n return facet.buckets.length > 0\n ? ((\n <>\n <Slot name=\"Facet\" slot={slots?.Facet} context={{ data: facet }}>\n {getFacetNode(facet)}\n </Slot>\n <Divider variant=\"secondary\" />\n </>\n ) as VNode)\n : null;\n })}\n </Slot>\n );\n };\n\n const getSelectedFacetsNode = (): VNode => {\n const selectedFacets = facetList.reduce((accu, curr) => {\n const selected = curr.buckets.filter((bucket: FacetBucket) => bucket.selected);\n if (selected.length > 0) {\n accu.push(curr);\n }\n return accu;\n }, [] as SearchFacet[]);\n const selectedFilterBtns = selectedFacets.map((facet) => {\n return facet.buckets.map((bucket) => {\n if (bucket.selected) {\n const bucketTitle = getBucketLabel(bucket, facet, currency);\n return (\n <Button\n data-testid={`${bucket.title}-selected-btn`}\n aria-label={`Remove ${facet.title} filter: ${bucket.title}`}\n variant=\"secondary\"\n children={\n <>\n <span>{bucketTitle}</span>\n <Icon source={Close} size=\"16\" />\n </>\n }\n onClick={(): void => {\n handleCancelSelection(facet, bucket.title);\n }}\n />\n ) as VNode;\n }\n return null;\n });\n });\n\n const clearAllBtn =\n selectedFilterBtns.length > 0 ? (\n <Button\n variant=\"secondary\"\n onClick={(): void => {\n clearAllSelections();\n }}\n >\n <span>{labels.clearAll}</span>\n </Button>\n ) : null;\n return (\n <Slot name=\"SelectedFacets\" slot={slots?.SelectedFacets} context={{ data: selectedFacets }}>\n {selectedFilterBtns}\n {clearAllBtn}\n </Slot>\n );\n };\n\n useEffect(() => {\n const dataEvents = events.on('search/result', handleSearchResult, { eager: true, scope });\n\n return () => {\n dataEvents?.off();\n };\n }, []);\n\n return <FacetList selectedFacets={getSelectedFacetsNode()} facets={getFacetsNode()} />;\n};\n"],"names":["SvgAdd","props","React","SvgClose","SvgMinus","Facet","numberOfOptionsConfig","header","buckets","translations","useText","numberOfOptionsShown","showMore","setShowMore","useState","numberOfOptions","jsx","VComponent","bucket","index","Button","Icon","Add","Minus","FacetList","selectedFacets","facets","jsxs","Fragment","BOOLEAN_NO","BOOLEAN_YES","getRangeFacetFilter","facet","selectedRange","getScalarFacetFilter","scalarSelections","accu","curr","getFilterSelection","_a","getCurrencyType","items","firstItem","_c","_b","_g","_f","_e","_d","_k","_j","_i","_h","getRangeBucketLabel","currency","PriceRange","getScalarBucketLabel","getBucketLabel","Facets","rootCategory","scope","slots","labels","facetList","setFacetList","setCurrency","currentSearchVariables","setCurrentSearchVariables","handleSearchRequest","searchVariables","search","handleSearchResult","payload","filterList","facetsWithSelections","selectedBuckets","selectedFilter","filter","updateFacetSelections","updatedFacetList","f","newFacet","selectedFilterList","handleCancelSelection","title","newBuckets","clearAllSelections","updatedBuckets","changeFilter","event","getFacetNode","bucketLabel","renderedBucketLabel","count","Slot","RadioButton","Checkbox","getFacetsNode","Divider","getSelectedFacetsNode","selectedFilterBtns","bucketTitle","Close","clearAllBtn","useEffect","dataEvents","events"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name": "@dropins/storefront-product-discovery", "version": "2.0.0-
|
|
1
|
+
{"name": "@dropins/storefront-product-discovery", "version": "2.0.0-alpha003", "@dropins/tools": "1.4.1-alpha007", "license": "SEE LICENSE IN LICENSE.md"}
|
package/render.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
(function(d,
|
|
3
|
+
(function(d,r){try{if(typeof document<"u"){const t=document.createElement("style"),o=r.styleId;for(const e in r.attributes)t.setAttribute(e,r.attributes[e]);t.setAttribute("data-dropin",o),t.appendChild(document.createTextNode(d));const i=document.querySelector('style[data-dropin="sdk"]');if(i)i.after(t);else{const e=document.querySelector('link[rel="stylesheet"], style');e?e.before(t):document.head.append(t)}}}catch(t){console.error("dropin-styles (injectCodeFunction)",t)}})(".product-discovery-product-list{container-type:inline-size;display:flex;flex-direction:column;width:100%}.product-discovery-product-list__container{display:flex;flex-direction:column;width:100%}.product-discovery-product-list__grid{display:grid;grid-template-columns:1fr;gap:var(--spacing-small)}.product-discovery-product-list__grid .dropin-product-item-card{border:unset;margin:unset;width:100%}.product-discovery-product-list__grid .dropin-product-item-card img,.product-discovery-product-list__grid .dropin-product-item-card__skeleton__image{aspect-ratio:var(--imageWidth) / var(--imageHeight);max-height:unset;height:unset}@container (min-width: 600px){.product-discovery-product-list__grid{grid-template-columns:repeat(2,1fr)}}@container (min-width: 900px){.product-discovery-product-list__grid{grid-template-columns:repeat(3,1fr)}}@container (min-width: 1200px){.product-discovery-product-list__grid{grid-template-columns:repeat(4,1fr)}}.product-discovery-search-alert-message__wrapper{display:flex;flex-direction:column;justify-content:center;width:100%;min-height:300px}.product-discovery-search-alert-message__content{display:flex;justify-content:center}.product-discovery-facet__bucket .dropin-price-range .dropin-price--small.dropin-price--bold{font:var(--type-body-2-default-font)}.product-discovery-facet__bucket .dropin-radio-button__label:before{margin-right:var(--spacing-xsmall)}.product-discovery-facet-list{display:flex;flex-direction:column;width:100%}.product-discovery-facet-list__selected-filters{display:flex;flex-direction:row;flex-wrap:wrap;row-gap:var(--spacing-xxsmall);padding:0 0 var(--spacing-xxsmall) 0}.product-discovery-facet-list__selected-filters button{padding:0 var(--spacing-xxsmall);margin:0 var(--spacing-xxsmall);border-radius:var(--shape-border-radius-2)}.product-discovery-facet-list__selected-filters .dropin-price-range .dropin-price--small.dropin-price--bold{font:var(--type-button-2-font)}.product-discovery-facet-list__facet-options{text-align:left}.product-discovery-facet-list__facet-options button{padding:0}.product-discovery-facet-list__facet-options .dropin-radio-button{padding:var(--spacing-xxsmall) 0}.product-discovery-facet-list__facet-options--hidden{display:none}.product-discovery-facet-list .dropin-divider{margin:var(--spacing-xsmall) 0 var(--spacing-xsmall) 0}",{styleId:"storefront-product-discovery"});
|
|
4
4
|
import{jsx as o}from"@dropins/tools/preact-jsx-runtime.js";import{Render as c}from"@dropins/tools/lib.js";import{useState as i,useEffect as a}from"@dropins/tools/preact-hooks.js";import{UIProvider as l}from"@dropins/tools/components.js";import{events as u}from"@dropins/tools/event-bus.js";const h={PLP:{Warning:{minQueryLength:"Your search term {SEARCH_PHRASE} has not reached the minimum of {{minQueryLength}} characters.",noResults:"Your search returned no results.",searchError:"An error occurred while searching."},SortDropdown:{title:"Sort by",option:"Sort by: {{selectedOption}}",relevanceLabel:"Most Relevant",positionLabel:"Position",sortAttributeASC:"{{label}}: Low to High",sortAttributeDESC:"{{label}}: High to Low",sortASC:"Price: Low to High",sortDESC:"Price: High to Low",productName:"Product Name",productInStock:"In Stock",productLowStock:"Low Stock"}},Facet:{showMore:"Show more",showLess:"Show less",clearAll:"Clear all"},ResultsInfo:{resultsFor:"Results for",products:"products"},SearchInput:{placeholder:"Search",viewAllButton:"View All"}},S={Search:h},m={default:S},d=({children:r})=>{const[t,n]=i("en_US");return a(()=>{const e=u.on("locale",s=>{n(s)},{eager:!0});return()=>{e==null||e.off()}},[]),o(l,{lang:t,langDefinitions:m,children:r})},A=new c(o(d,{}));export{A as render};
|
|
5
5
|
//# sourceMappingURL=render.js.map
|