@dropins/storefront-product-discovery 1.1.0-beta2 → 2.0.0-alpha001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/index.d.ts +1 -2
- package/api/{productSearch/graphql/productSearch.graphql.d.ts → search/graphql/search.graphql.d.ts} +1 -1
- package/api/{productSearch → search}/index.d.ts +1 -1
- package/api/search/search.d.ts +8 -0
- package/api.js +1 -1
- package/chunks/acdlEvents.js +1 -1
- package/chunks/search.js +57 -0
- package/chunks/search.js.map +1 -0
- package/components/ProductList/ProductList.d.ts +2 -2
- package/components/index.d.ts +0 -4
- package/containers/Facets/Facets.d.ts +3 -1
- package/containers/Facets.js +1 -1
- package/containers/Facets.js.map +1 -1
- package/containers/Pagination/Pagination.d.ts +10 -0
- package/containers/{ProductList/utils/getAttributeMetadata.d.ts → Pagination/index.d.ts} +3 -2
- package/containers/Pagination.d.ts +3 -0
- package/containers/Pagination.js +4 -0
- package/containers/Pagination.js.map +1 -0
- package/containers/SearchResults/SearchResults.d.ts +31 -0
- package/{components/ProductItem → containers/SearchResults}/index.d.ts +2 -2
- package/containers/SearchResults.d.ts +3 -0
- package/containers/SearchResults.js +4 -0
- package/containers/SearchResults.js.map +1 -0
- package/containers/SortBy/SortBy.d.ts +10 -0
- package/{api/attributeMetadata → containers/SortBy}/index.d.ts +2 -1
- package/containers/SortBy.d.ts +3 -0
- package/containers/SortBy.js +4 -0
- package/containers/SortBy.js.map +1 -0
- package/containers/index.d.ts +3 -4
- package/data/models/api.d.ts +2 -0
- package/data/transforms/api.d.ts +0 -1
- package/package.json +1 -1
- package/render.js +1 -5
- package/types/api/index.d.ts +0 -1
- package/api/attributeMetadata/attributeMetadata.d.ts +0 -4
- package/api/attributeMetadata/graphql/attributeMetadata.graphql.d.ts +0 -17
- package/api/productSearch/productSearch.d.ts +0 -4
- package/chunks/api.js +0 -4
- package/chunks/api.js.map +0 -1
- package/chunks/attributeMetadata.js +0 -19
- package/chunks/attributeMetadata.js.map +0 -1
- package/chunks/productSearch.js +0 -44
- package/chunks/productSearch.js.map +0 -1
- package/components/ProductItem/ProductItem.d.ts +0 -13
- package/components/ResultsInfo/ResultsInfo.d.ts +0 -9
- package/components/ResultsInfo/index.d.ts +0 -19
- package/components/SearchBarInput/SearchBarInput.d.ts +0 -15
- package/components/SearchBarInput/index.d.ts +0 -11
- package/components/SearchBarResults/SearchBarResults.d.ts +0 -10
- package/components/SearchBarResults/index.d.ts +0 -11
- package/containers/ProductList/ProductList.d.ts +0 -20
- package/containers/ProductList/index.d.ts +0 -11
- package/containers/ProductList/utils/getProductSearch.d.ts +0 -4
- package/containers/ProductList/utils/sortUtils.d.ts +0 -9
- package/containers/ProductList/utils/urlUtils.d.ts +0 -16
- package/containers/ProductList.d.ts +0 -3
- package/containers/ProductList.js +0 -4
- package/containers/ProductList.js.map +0 -1
- package/containers/ResultsInfo/ResultsInfo.d.ts +0 -11
- package/containers/ResultsInfo/index.d.ts +0 -19
- package/containers/ResultsInfo.d.ts +0 -3
- package/containers/ResultsInfo.js +0 -4
- package/containers/ResultsInfo.js.map +0 -1
- package/containers/SearchBarInput/SearchBarInput.d.ts +0 -16
- package/containers/SearchBarInput/index.d.ts +0 -11
- package/containers/SearchBarInput/utils/getSearchBarInputSearch.d.ts +0 -4
- package/containers/SearchBarInput.d.ts +0 -3
- package/containers/SearchBarInput.js +0 -4
- package/containers/SearchBarInput.js.map +0 -1
- package/containers/SearchBarResults/SearchBarResults.d.ts +0 -16
- package/containers/SearchBarResults/index.d.ts +0 -11
- package/containers/SearchBarResults.d.ts +0 -3
- package/containers/SearchBarResults.js +0 -5
- package/containers/SearchBarResults.js.map +0 -1
- package/types/api/attributeMetadata.d.ts +0 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchResults.js","sources":["/@dropins/storefront-product-discovery/src/utils/htmlStringDecode.ts","/@dropins/storefront-product-discovery/src/components/ProductList/ProductList.tsx","../../node_modules/@adobe-commerce/elsie/src/icons/Warning.svg","/@dropins/storefront-product-discovery/src/components/SearchAlertMessage/SearchAlertMessage.tsx","/@dropins/storefront-product-discovery/src/containers/SearchResults/SearchResults.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\nconst htmlStringDecode = (input: string): string | null => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n return doc.documentElement.textContent;\n};\n\nexport { htmlStringDecode };\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, 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 imageWidth?: number;\n imageHeight?: number;\n}\n\nexport const ProductList: FunctionComponent<ProductListProps> = ({ productList, imageWidth, imageHeight }) => {\n return (\n <div className={'product-discovery-product-list'} style={{ '--imageWidth': imageWidth, '--imageHeight': imageHeight }}>\n <div className=\"product-discovery-product-list__grid\">{productList && <VComponent node={productList} />}</div>\n </div>\n );\n};\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\", 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\", 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)\" }))));\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 * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport { ImageProps, Image, ProductItemCard, PriceRange } from '@adobe-commerce/elsie/components';\nimport { htmlStringDecode } from '@/plp/utils/htmlStringDecode';\nimport { Scope } from '@/plp/data/models';\nimport { Product } from '@/plp/data/models/product';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { ProductList, SearchAlertMessage } from '@/plp/components'\nimport {\n searchProductClick,\n searchResultsView,\n categoryResultsView,\n PLP_UNIT_ID,\n SEARCH_UNIT_ID\n} from '@/plp/utils/acdlEvents';\n\nexport interface SearchResultsProps extends HTMLAttributes<HTMLDivElement> {\n routeProduct?: (product: Product) => string;\n scope?: Scope;\n imageWidth?: number;\n imageHeight?: number;\n skeletonCount?: number;\n slots?: {\n ProductActions?: SlotProps<{ product: Product }>;\n ProductPrice?: SlotProps<{ product: Product }>;\n ProductName?: SlotProps<{ product: Product }>;\n ProductImage?: SlotProps<{ product: Product, defaultImageProps: ImageProps }>;\n NoResults?: SlotProps;\n },\n}\n\nexport const SearchResults: Container<SearchResultsProps> = ({\n routeProduct,\n scope,\n slots,\n imageWidth = 400,\n imageHeight = 450,\n skeletonCount = 8,\n}) => {\n const acdlUnitId = scope === 'popover' ? SEARCH_UNIT_ID : PLP_UNIT_ID;\n\n const labels = useText({\n noResults: 'Search.PLP.Warning.noResults',\n searchError: 'Search.PLP.Warning.searchError',\n });\n\n const [items, setItems] = useState<any[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const loadingEvent = events.on('search/loading', setLoading, { eager: true, scope });\n\n const errorEvent = events.on('search/error', () => {\n setError(labels.searchError!);\n }, { eager: true, scope });\n\n const searchEvent = events.on('search/result', (payload) => {\n setError(payload.result?.items.length < 1 ? labels.noResults! : null);\n\n setItems(payload.result?.items);\n\n // Publish search results view event to ACDL\n if (payload.request.phrase) {\n searchResultsView(acdlUnitId);\n } else {\n categoryResultsView(acdlUnitId);\n }\n }, { eager: true, scope });\n\n return () => {\n loadingEvent?.off();\n errorEvent?.off();\n searchEvent?.off();\n };\n }, []);\n\n const handleProductClick = (product: Product): void => {\n searchProductClick(product.sku, acdlUnitId);\n };\n\n const renderProductImageSlot = (product: Product, index: number) => {\n const defaultImageProps: ImageProps = {\n loading: index < 8 ? 'eager' : 'lazy',\n src: product.images?.[0]?.url || '',\n alt: product.images?.[0]?.label || '',\n width: imageWidth,\n height: imageHeight,\n params: { width: imageWidth },\n };\n const productName = product.name !== null ? htmlStringDecode(product.name) : product.sku;\n const imageComponent = (\n <Image class=\"product-discovery-product-item__image\" {...defaultImageProps} aria-label={productName} />\n );\n\n return (\n <Slot name=\"ProductImage\" slot={slots?.ProductImage} context={{ product, defaultImageProps }}>\n {routeProduct ? (\n <a href={routeProduct(product)} onClick={() => handleProductClick(product)}>\n {imageComponent}\n </a>\n ) : (\n imageComponent\n )}\n </Slot>\n );\n };\n\n const renderProductNameSlot = (product: Product) => {\n const productName = product.name !== null ? htmlStringDecode(product.name) : '';\n return (\n <Slot name=\"ProductName\" slot={slots?.ProductName} context={{ product }}>\n {routeProduct ? (\n <a href={routeProduct(product)} onClick={() => handleProductClick(product)}>\n {productName}\n </a>\n ) : (\n productName\n )}\n </Slot>\n );\n };\n\n const renderProductPriceSlot = (product: Product) => {\n let productCurrency =\n product.typename === 'ComplexProductView'\n ? product.priceRange?.minimum.regular.amount.currency\n : product.price?.regular.amount.currency;\n if (Intl.supportedValuesOf('currency').indexOf(productCurrency || '') === -1) {\n productCurrency = 'USD'; // Fallback to USD if the currency is not supported\n }\n const productPrice =\n product.typename === 'ComplexProductView' ? (\n <PriceRange\n display=\"from to\"\n minimumAmount={product.priceRange?.minimum.regular.amount.value}\n maximumAmount={product.priceRange?.maximum.regular.amount.value}\n currency={productCurrency}\n />\n ) : (\n <PriceRange amount={product.price?.regular.amount.value} currency={productCurrency} />\n );\n return (\n <Slot name=\"ProductPrice\" slot={slots?.ProductPrice} context={{ product }}>\n {routeProduct ? (\n <a href={routeProduct(product)} onClick={() => handleProductClick(product)}>\n {productPrice}\n </a>\n ) : (\n productPrice\n )}\n </Slot>\n );\n };\n\n const renderActionsSlot = (product: Product) => {\n return <Slot name=\"ProductActions\" slot={slots?.ProductActions} context={{ product }} />;\n };\n\n const renderAlertSlot = () => {\n return <Slot name=\"NoResults\" slot={slots?.NoResults} context={{ error }}>\n {error && <SearchAlertMessage alertMessage={error} />}\n </Slot>;\n }\n\n const renderSkeleton = () => {\n return <ProductList\n imageWidth={imageWidth}\n imageHeight={imageHeight}\n productList={Array.from({ length: skeletonCount }).map((_, index) => (\n <ProductItemCard key={index} initialized={false} />\n ))}\n />\n }\n\n const renderResults = () => {\n if (error) return renderAlertSlot();\n\n return <ProductList\n imageWidth={imageWidth}\n imageHeight={imageHeight}\n productList={items.map((product, index) => (\n <ProductItemCard key={product.id || product.sku || index}\n image={renderProductImageSlot(product, index)}\n titleNode={renderProductNameSlot(product)}\n price={renderProductPriceSlot(product)}\n actionButton={slots?.ProductActions ? renderActionsSlot(product) : undefined}\n initialized\n />\n ))}\n />\n }\n\n return (\n <div>\n {loading ? renderSkeleton() : renderResults()}\n </div>\n );\n};\n"],"names":["htmlStringDecode","input","ProductList","productList","imageWidth","imageHeight","jsx","VComponent","SvgWarning","props","React","SearchAlertMessage","alertMessage","classes","InLineAlert","Icon","Warning","SearchResults","routeProduct","scope","slots","skeletonCount","acdlUnitId","SEARCH_UNIT_ID","PLP_UNIT_ID","labels","useText","items","setItems","useState","loading","setLoading","error","setError","useEffect","loadingEvent","events","errorEvent","searchEvent","payload","_a","_b","searchResultsView","categoryResultsView","handleProductClick","product","searchProductClick","renderProductImageSlot","index","defaultImageProps","_d","_c","productName","imageComponent","Image","Slot","renderProductNameSlot","renderProductPriceSlot","productCurrency","productPrice","PriceRange","_e","renderActionsSlot","renderAlertSlot","_","ProductItemCard"],"mappings":"mkBASA,MAAMA,EAAoBC,GACZ,IAAI,UAAA,EAAY,gBAAgBA,EAAO,WAAW,EACnD,gBAAgB,YCShBC,EAAmD,CAAC,CAAE,YAAAC,EAAa,WAAAC,EAAY,YAAAC,KAExFC,EAAC,OAAI,UAAW,iCAAkC,MAAO,CAAE,eAAgBF,EAAY,gBAAiBC,CAAA,EACtG,SAAAC,EAAC,MAAA,CAAI,UAAU,uCAAwC,SAAAH,KAAgBI,EAAA,CAAW,KAAMJ,EAAa,CAAA,CAAG,CAAA,CAC1G,ECvBEK,EAAcC,GAA0BC,EAAM,cAAc,MAAO,CAAE,GAAI,oBAAqB,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,IAAK,CAAE,SAAU,wBAA0CA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,6DAA8D,OAAQ,eAAgB,cAAe,QAAS,eAAgB,OAAO,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,qIAAsI,OAAQ,eAAgB,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,CAAC,CAAC,CAAC,ECmB3gCC,EAAiE,CAAC,CAAE,aAAAC,EAAe,MAE5FN,EAAC,MAAA,CAAI,UAAWO,EAAQ,CAAC,iDAAiD,CAAC,EACzE,SAAAP,EAAC,MAAA,CAAI,UAAU,kDACb,SAAAA,EAACQ,EAAA,CACC,QAASF,EACT,KAAM,UACN,KAAMN,EAACS,EAAA,CAAK,OAAQC,EAAS,KAAK,KAAK,EACvC,UAAW,MAAA,CAAA,EAEf,CAAA,CACF,ECUSC,GAA+C,CAAC,CAC3D,aAAAC,EACA,MAAAC,EACA,MAAAC,EACA,WAAAhB,EAAa,IACb,YAAAC,EAAc,IACd,cAAAgB,EAAgB,CAClB,IAAM,CACJ,MAAMC,EAAaH,IAAU,UAAYI,EAAiBC,EAEpDC,EAASC,EAAQ,CACrB,UAAW,+BACX,YAAa,gCAAA,CACd,EAEK,CAACC,EAAOC,CAAQ,EAAIC,EAAgB,CAAA,CAAE,EACtC,CAACC,EAASC,CAAU,EAAIF,EAAS,EAAK,EACtC,CAACG,EAAOC,CAAQ,EAAIJ,EAAwB,IAAI,EAEtDK,EAAU,IAAM,CACd,MAAMC,EAAeC,EAAO,GAAG,iBAAkBL,EAAY,CAAE,MAAO,GAAM,MAAAZ,EAAO,EAE7EkB,EAAaD,EAAO,GAAG,eAAgB,IAAM,CACjDH,EAASR,EAAO,WAAY,CAC9B,EAAG,CAAE,MAAO,GAAM,MAAAN,EAAO,EAEnBmB,EAAcF,EAAO,GAAG,gBAAkBG,GAAY,SAC1DN,IAASO,EAAAD,EAAQ,SAAR,YAAAC,EAAgB,MAAM,QAAS,EAAIf,EAAO,UAAa,IAAI,EAEpEG,GAASa,EAAAF,EAAQ,SAAR,YAAAE,EAAgB,KAAK,EAG1BF,EAAQ,QAAQ,OAClBG,EAAkBpB,CAAU,EAE5BqB,EAAoBrB,CAAU,CAElC,EAAG,CAAE,MAAO,GAAM,MAAAH,EAAO,EAEzB,MAAO,IAAM,CACXgB,GAAA,MAAAA,EAAc,MACdE,GAAA,MAAAA,EAAY,MACZC,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAEL,MAAMM,EAAsBC,GAA2B,CACrDC,EAAmBD,EAAQ,IAAKvB,CAAU,CAC5C,EAEMyB,EAAyB,CAACF,EAAkBG,IAAkB,aAClE,MAAMC,EAAgC,CACpC,QAASD,EAAQ,EAAI,QAAU,OAC/B,MAAKP,GAAAD,EAAAK,EAAQ,SAAR,YAAAL,EAAiB,KAAjB,YAAAC,EAAqB,MAAO,GACjC,MAAKS,GAAAC,EAAAN,EAAQ,SAAR,YAAAM,EAAiB,KAAjB,YAAAD,EAAqB,QAAS,GACnC,MAAO9C,EACP,OAAQC,EACR,OAAQ,CAAE,MAAOD,CAAA,CAAW,EAExBgD,EAAcP,EAAQ,OAAS,KAAO7C,EAAiB6C,EAAQ,IAAI,EAAIA,EAAQ,IAC/EQ,IACHC,EAAA,CAAM,MAAM,wCAAyC,GAAGL,EAAmB,aAAYG,EAAa,EAGvG,OACE9C,EAACiD,EAAA,CAAK,KAAK,eAAe,KAAMnC,GAAA,YAAAA,EAAO,aAAc,QAAS,CAAE,QAAAyB,EAAS,kBAAAI,CAAA,EACtE,SAAA/B,IACE,IAAA,CAAE,KAAMA,EAAa2B,CAAO,EAAG,QAAS,IAAMD,EAAmBC,CAAO,EACtE,SAAAQ,CAAA,CACH,EAEAA,CAAA,CAEJ,CAEJ,EAEMG,EAAyBX,GAAqB,CAClD,MAAMO,EAAcP,EAAQ,OAAS,KAAO7C,EAAiB6C,EAAQ,IAAI,EAAI,GAC7E,OACEvC,EAACiD,EAAA,CAAK,KAAK,cAAc,KAAMnC,GAAA,YAAAA,EAAO,YAAa,QAAS,CAAE,QAAAyB,CAAA,EAC3D,SAAA3B,IACE,IAAA,CAAE,KAAMA,EAAa2B,CAAO,EAAG,QAAS,IAAMD,EAAmBC,CAAO,EACtE,SAAAO,CAAA,CACH,EAEAA,CAAA,CAEJ,CAEJ,EAEMK,EAA0BZ,GAAqB,eACnD,IAAIa,EACFb,EAAQ,WAAa,sBACjBL,EAAAK,EAAQ,aAAR,YAAAL,EAAoB,QAAQ,QAAQ,OAAO,UAC3CC,EAAAI,EAAQ,QAAR,YAAAJ,EAAe,QAAQ,OAAO,SAChC,KAAK,kBAAkB,UAAU,EAAE,QAAQiB,GAAmB,EAAE,IAAM,KACxEA,EAAkB,OAEpB,MAAMC,EACJd,EAAQ,WAAa,qBACnBvC,EAACsD,EAAA,CACC,QAAQ,UACR,eAAeT,EAAAN,EAAQ,aAAR,YAAAM,EAAoB,QAAQ,QAAQ,OAAO,MAC1D,eAAeD,EAAAL,EAAQ,aAAR,YAAAK,EAAoB,QAAQ,QAAQ,OAAO,MAC1D,SAAUQ,CAAA,CAAA,EAGZpD,EAACsD,EAAA,CAAW,QAAQC,EAAAhB,EAAQ,QAAR,YAAAgB,EAAe,QAAQ,OAAO,MAAO,SAAUH,CAAA,CAAiB,EAExF,OACEpD,EAACiD,EAAA,CAAK,KAAK,eAAe,KAAMnC,GAAA,YAAAA,EAAO,aAAc,QAAS,CAAE,QAAAyB,CAAA,EAC7D,SAAA3B,IACE,IAAA,CAAE,KAAMA,EAAa2B,CAAO,EAAG,QAAS,IAAMD,EAAmBC,CAAO,EACtE,SAAAc,CAAA,CACH,EAEAA,CAAA,CAEJ,CAEJ,EAEMG,EAAqBjB,GAClBvC,EAACiD,EAAA,CAAK,KAAK,iBAAiB,KAAMnC,GAAA,YAAAA,EAAO,eAAgB,QAAS,CAAE,QAAAyB,CAAA,CAAQ,CAAG,EAGlFkB,EAAkB,MACdR,EAAA,CAAK,KAAK,YAAY,KAAMnC,GAAA,YAAAA,EAAO,UAAW,QAAS,CAAE,MAAAY,GAC9D,SAAAA,GAAS1B,EAACK,EAAA,CAAmB,aAAcqB,EAAO,EACrD,EA+BF,SACG,MAAA,CACE,SAAAF,EA7BIxB,EAACJ,EAAA,CACN,WAAAE,EACA,YAAAC,EACA,YAAa,MAAM,KAAK,CAAE,OAAQgB,EAAe,EAAE,IAAI,CAAC2C,EAAGhB,IACzD1C,EAAC2D,GAA4B,YAAa,EAAA,EAApBjB,CAA2B,CAClD,CAAA,CAAA,EAKChB,EAAc+B,EAAA,EAEXzD,EAACJ,EAAA,CACN,WAAAE,EACA,YAAAC,EACA,YAAasB,EAAM,IAAI,CAACkB,EAASG,IAC/B1C,EAAC2D,EAAA,CACC,MAAOlB,EAAuBF,EAASG,CAAK,EAC5C,UAAWQ,EAAsBX,CAAO,EACxC,MAAOY,EAAuBZ,CAAO,EACrC,aAAczB,GAAA,MAAAA,EAAO,eAAiB0C,EAAkBjB,CAAO,EAAI,OACnE,YAAW,EAAA,EALSA,EAAQ,IAAMA,EAAQ,KAAOG,CAAA,CAOpD,CAAA,CAAA,EAOH,CAEJ","x_google_ignoreList":[2]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'preact/compat';
|
|
2
|
+
import { Container } from '@dropins/tools/types/elsie/src/lib';
|
|
3
|
+
import { Scope, SortOrder } from '../../data/models';
|
|
4
|
+
|
|
5
|
+
export interface SortByProps extends HTMLAttributes<HTMLDivElement> {
|
|
6
|
+
scope?: Scope;
|
|
7
|
+
onSortChange?: (value: SortOrder | null) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const SortBy: Container<SortByProps>;
|
|
10
|
+
//# sourceMappingURL=SortBy.d.ts.map
|
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
* file in accordance with the terms of the Adobe license agreement
|
|
7
7
|
* accompanying it.
|
|
8
8
|
*******************************************************************/
|
|
9
|
-
export * from './
|
|
9
|
+
export * from './SortBy';
|
|
10
|
+
export { SortBy as default } from './SortBy';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2025 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
import{jsx as p}from"@dropins/tools/preact-jsx-runtime.js";import{useState as c,useEffect as d}from"@dropins/tools/preact-compat.js";import{Picker as h}from"@dropins/tools/components.js";import{events as C}from"@dropins/tools/event-bus.js";import{d as D}from"../chunks/search.js";import{useText as L}from"@dropins/tools/i18n.js";import"@dropins/tools/lib.js";import"../fragments.js";import"../chunks/acdlEvents.js";import"@dropins/tools/fetch-graphql.js";const k=({scope:t,onSortChange:e})=>{const a=L({sortLabel:"Search.PLP.SortDropdown.title",relevanceLabel:"Search.PLP.SortDropdown.relevanceLabel",sortASC:"Search.PLP.SortDropdown.sortASC",sortDESC:"Search.PLP.SortDropdown.sortDESC",positionLabel:"Search.PLP.SortDropdown.positionLabel"}),[i,n]=c([]),[r,l]=c("relevance_DESC"),[b,f]=c({});d(()=>{const o=C.on("search/result",s=>{var u;if(f(s.request),(u=s.metadata)!=null&&u.sortableAttributes&&(n([...s.metadata.sortableAttributes]),s.request.sort)){const S=x(s.request.sort);S&&l(S)}},{eager:!0,scope:t});return()=>{o==null||o.off()}},[]);const m=async o=>{e==null||e(o[0]),D({...b,sort:o,currentPage:1},{scope:t})};return p(h,{floatingLabel:a.sortLabel,...P(i,a),value:r,handleSelect:o=>{const{value:s}=o.target,u=v(s);m(u)}})};function P(t,e){const a={text:e.relevanceLabel,value:"relevance_DESC"},i=t.reduce((n,r)=>(r.attribute!=="position"&&r.attribute!=="relevance"&&(r.attribute==="price"?(n.push({text:e.sortASC,value:`${r.attribute}_ASC`}),n.push({text:e.sortDESC,value:`${r.attribute}_DESC`})):n.push({text:r.label,value:`${r.attribute}_DESC`})),n),[]);return i.push(a),{options:i,defaultOption:a}}function v(t){const e=t.indexOf("_");return[{attribute:t.substring(0,e),direction:t.substring(e+1)==="ASC"?"ASC":"DESC"}]}function x(t){return t.length>0&&t[0]?`${t[0].attribute}_${t[0].direction}`:""}export{k as SortBy,k as default};
|
|
4
|
+
//# sourceMappingURL=SortBy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortBy.js","sources":["/@dropins/storefront-product-discovery/src/containers/SortBy/SortBy.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useState, useEffect } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { Picker } from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Scope, SearchVariables, SortOrder } from '@/plp/data/models';\nimport { search } from '@/plp/api';\n\nexport interface SortByProps extends HTMLAttributes<HTMLDivElement> {\n scope?: Scope;\n onSortChange?: (value: SortOrder | null) => void;\n}\n\nexport const SortBy: Container<SortByProps> = ({ scope, onSortChange }) => {\n const labels = useText({\n sortLabel: 'Search.PLP.SortDropdown.title',\n relevanceLabel: 'Search.PLP.SortDropdown.relevanceLabel',\n sortASC: 'Search.PLP.SortDropdown.sortASC',\n sortDESC: 'Search.PLP.SortDropdown.sortDESC',\n positionLabel: 'Search.PLP.SortDropdown.positionLabel',\n });\n\n\n const [sortOptions, setSortOptions] = useState<any[]>([]);\n const [current, setCurrent] = useState('relevance_DESC');\n const [currentSearchVariables, setCurrentSearchVariables] = useState<SearchVariables>({});\n\n useEffect(() => {\n // Listen for search results\n const searchEvent = events.on('search/result', (payload) => {\n setCurrentSearchVariables(payload.request);\n\n // Configure sort options from metadata\n if (payload.metadata?.sortableAttributes) {\n setSortOptions([...payload.metadata.sortableAttributes]);\n\n // Set current sort value from request\n if (payload.request.sort) {\n const sortValue = getSortValue(payload.request.sort);\n\n if (sortValue) {\n setCurrent(sortValue);\n }\n }\n }\n }, { eager: true, scope });\n\n return () => {\n searchEvent?.off();\n };\n }, []);\n\n const handleSortChange = async (value: SortOrder[]): Promise<void> => {\n onSortChange?.(value[0]!);\n\n search({ ...currentSearchVariables, sort: value, currentPage: 1 }, { scope });\n };\n\n return (\n <Picker\n floatingLabel={labels.sortLabel}\n {...getSortOptions(sortOptions, labels)}\n value={current}\n handleSelect={(event) => {\n const { value } = event.target as HTMLSelectElement;\n const next = getSortSearchVariables(value);\n handleSortChange(next);\n }}\n />\n );\n};\n\n/** Utility functions */\n\nfunction getSortOptions(sortOptions: any, translations: any): any {\n const defaultSort = { text: translations.relevanceLabel, value: 'relevance_DESC' };\n\n const finalSortOptions = sortOptions.reduce((resultOptions: any, option: any) => {\n if (option.attribute !== 'position' && option.attribute !== 'relevance') {\n if (option.attribute === 'price') {\n resultOptions.push({\n text: translations.sortASC,\n value: `${option.attribute}_ASC`,\n });\n resultOptions.push({\n text: translations.sortDESC,\n value: `${option.attribute}_DESC`,\n });\n } else {\n resultOptions.push({\n text: option.label,\n value: `${option.attribute}_DESC`,\n });\n }\n }\n return resultOptions;\n }, []);\n finalSortOptions.push(defaultSort);\n return { options: finalSortOptions, defaultOption: defaultSort };\n}\n\n\nfunction getSortSearchVariables(sortValue: string): SortOrder[] {\n const index = sortValue.indexOf('_');\n const newSort: SortOrder[] = [\n {\n attribute: sortValue.substring(0, index) as string,\n direction: sortValue.substring(index + 1) === 'ASC' ? 'ASC' : 'DESC',\n },\n ];\n return newSort;\n}\n\nfunction getSortValue(sort: SortOrder[]) {\n if (sort.length > 0 && sort[0]) {\n return `${sort[0].attribute}_${sort[0].direction}`;\n }\n return '';\n}\n"],"names":["SortBy","scope","onSortChange","labels","useText","sortOptions","setSortOptions","useState","current","setCurrent","currentSearchVariables","setCurrentSearchVariables","useEffect","searchEvent","events","payload","_a","sortValue","getSortValue","handleSortChange","value","search","jsx","Picker","getSortOptions","event","next","getSortSearchVariables","translations","defaultSort","finalSortOptions","resultOptions","option","index","sort"],"mappings":"ucAsBO,MAAMA,EAAiC,CAAC,CAAE,MAAAC,EAAO,aAAAC,KAAmB,CACzE,MAAMC,EAASC,EAAQ,CACrB,UAAW,gCACX,eAAgB,yCAChB,QAAS,kCACT,SAAU,mCACV,cAAe,uCAAA,CAChB,EAGK,CAACC,EAAaC,CAAc,EAAIC,EAAgB,CAAA,CAAE,EAClD,CAACC,EAASC,CAAU,EAAIF,EAAS,gBAAgB,EACjD,CAACG,EAAwBC,CAAyB,EAAIJ,EAA0B,CAAA,CAAE,EAExFK,EAAU,IAAM,CAEd,MAAMC,EAAcC,EAAO,GAAG,gBAAkBC,GAAY,OAI1D,GAHAJ,EAA0BI,EAAQ,OAAO,GAGrCC,EAAAD,EAAQ,WAAR,MAAAC,EAAkB,qBACpBV,EAAe,CAAC,GAAGS,EAAQ,SAAS,kBAAkB,CAAC,EAGnDA,EAAQ,QAAQ,MAAM,CACxB,MAAME,EAAYC,EAAaH,EAAQ,QAAQ,IAAI,EAE/CE,GACFR,EAAWQ,CAAS,CAExB,CAEJ,EAAG,CAAE,MAAO,GAAM,MAAAhB,EAAO,EAEzB,MAAO,IAAM,CACXY,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAEL,MAAMM,EAAmB,MAAOC,GAAsC,CACpElB,GAAA,MAAAA,EAAekB,EAAM,CAAC,GAEtBC,EAAO,CAAE,GAAGX,EAAwB,KAAMU,EAAO,YAAa,CAAA,EAAK,CAAE,MAAAnB,EAAO,CAC9E,EAEA,OACEqB,EAACC,EAAA,CACC,cAAepB,EAAO,UACrB,GAAGqB,EAAenB,EAAaF,CAAM,EACtC,MAAOK,EACP,aAAeiB,GAAU,CACvB,KAAM,CAAE,MAAAL,GAAUK,EAAM,OAClBC,EAAOC,EAAuBP,CAAK,EACzCD,EAAiBO,CAAI,CACvB,CAAA,CAAA,CAGN,EAIA,SAASF,EAAenB,EAAkBuB,EAAwB,CAChE,MAAMC,EAAc,CAAE,KAAMD,EAAa,eAAgB,MAAO,gBAAA,EAE1DE,EAAmBzB,EAAY,OAAO,CAAC0B,EAAoBC,KAC3DA,EAAO,YAAc,YAAcA,EAAO,YAAc,cACtDA,EAAO,YAAc,SACvBD,EAAc,KAAK,CACjB,KAAMH,EAAa,QACnB,MAAO,GAAGI,EAAO,SAAS,MAAA,CAC3B,EACDD,EAAc,KAAK,CACjB,KAAMH,EAAa,SACnB,MAAO,GAAGI,EAAO,SAAS,OAAA,CAC3B,GAEDD,EAAc,KAAK,CACjB,KAAMC,EAAO,MACb,MAAO,GAAGA,EAAO,SAAS,OAAA,CAC3B,GAGED,GACN,CAAA,CAAE,EACL,OAAAD,EAAiB,KAAKD,CAAW,EAC1B,CAAE,QAASC,EAAkB,cAAeD,CAAA,CACrD,CAGA,SAASF,EAAuBV,EAAgC,CAC9D,MAAMgB,EAAQhB,EAAU,QAAQ,GAAG,EAOnC,MAN6B,CAC3B,CACE,UAAWA,EAAU,UAAU,EAAGgB,CAAK,EACvC,UAAWhB,EAAU,UAAUgB,EAAQ,CAAC,IAAM,MAAQ,MAAQ,MAAA,CAChE,CAGJ,CAEA,SAASf,EAAagB,EAAmB,CACvC,OAAIA,EAAK,OAAS,GAAKA,EAAK,CAAC,EACpB,GAAGA,EAAK,CAAC,EAAE,SAAS,IAAIA,EAAK,CAAC,EAAE,SAAS,GAE3C,EACT"}
|
package/containers/index.d.ts
CHANGED
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
* file in accordance with the terms of the Adobe license agreement
|
|
7
7
|
* accompanying it.
|
|
8
8
|
*******************************************************************/
|
|
9
|
-
export * from './ProductList';
|
|
10
9
|
export * from './Facets';
|
|
11
|
-
export * from './
|
|
12
|
-
export * from './
|
|
13
|
-
export * from './
|
|
10
|
+
export * from './Pagination';
|
|
11
|
+
export * from './SearchResults';
|
|
12
|
+
export * from './SortBy';
|
|
14
13
|
//# sourceMappingURL=index.d.ts.map
|
package/data/models/api.d.ts
CHANGED
package/data/transforms/api.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { ProductSearchResult } from '../models';
|
|
|
2
2
|
import { Product } from '../models/product';
|
|
3
3
|
|
|
4
4
|
export declare function transformProductSearchResponse(data: any): ProductSearchResult;
|
|
5
|
-
export declare function transformAttributeMetadata(data: any): any;
|
|
6
5
|
export declare const transformSearchResultProducts: (searchResponse: {
|
|
7
6
|
productSearch: {
|
|
8
7
|
items: any[];
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name": "@dropins/storefront-product-discovery", "version": "
|
|
1
|
+
{"name": "@dropins/storefront-product-discovery", "version": "2.0.0-alpha001", "@dropins/tools": "1.4.1-alpha007", "license": "SEE LICENSE IN LICENSE.md"}
|
package/render.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
(function(
|
|
4
|
-
.product-discovery-results-info{display:none}.product-discovery-results-info__search-phrase--upercase{text-transform:capitalize}@media only screen and (min-width: 768px){.product-discovery-results-info{display:flex;flex-direction:row;gap:var(--spacing-xsmall);width:100%;padding:var(--spacing-xsmall);text-align:center}}
|
|
5
|
-
.product-discovery--search-bar-results{position:absolute;top:100%;left:0;right:0;z-index:1000;display:flex;align-items:flex-start;justify-content:flex-end;pointer-events:none}.product-discovery--search-bar-results__popover{position:relative;background:var(--color-neutral-50, #fff);box-shadow:0 10px 25px -3px #0000001a,0 4px 6px -2px #0000000d,0 0 0 1px #0000000d;width:100%;overflow:hidden;z-index:1001;animation:popoverSlideIn .2s ease-out;pointer-events:auto;display:flex;flex-direction:column;height:100%;min-height:0}.product-discovery--search-bar-results__outer-container{display:flex;flex-direction:column;padding:var(--spacing-small, 1rem)}@keyframes popoverSlideIn{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.product-discovery--search-bar-results__grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-small, 1rem);overflow-y:auto;flex:1;min-height:0}.product-discovery--search-bar-results__grid>*{min-width:0;overflow:hidden}.product-discovery--search-bar-results__view-all-wrapper{flex-shrink:0;border-top:1px solid var(--color-neutral-200, #e5e5e5);background:var(--color-neutral-300)}.product-discovery--search-bar-results__view-all-button{display:flex;justify-content:center;width:100%}.product-discovery--search-bar-results__grid::-webkit-scrollbar{width:.5rem}.product-discovery--search-bar-results__grid::-webkit-scrollbar-track{background:var(--color-neutral-100, #f5f5f5);border-radius:.25rem}.product-discovery--search-bar-results__grid::-webkit-scrollbar-thumb{background:var(--color-neutral-400, #d4d4d4);border-radius:.25rem}.product-discovery--search-bar-results__grid::-webkit-scrollbar-thumb:hover{background:var(--color-neutral-500, #a3a3a3)}@media only screen and (min-width: 48rem){.product-discovery--search-bar-results{padding-top:.25rem}.product-discovery--search-bar-results__grid{gap:var(--spacing-medium, 1.5rem);padding:var(--spacing-medium, 1.5rem)}}.product-discovery--product-item{display:flex;flex-flow:column nowrap;gap:var(--spacing-small);width:auto;align-items:center;cursor:pointer;text-decoration:none;color:inherit;font-weight:var(--font-weight-regular, 600)}.product-discovery--product-item:hover,.product-discovery--product-item:focus{box-shadow:0 2px 8px #0000001a;text-decoration:none}.product-discovery--product-item__image .dropin-image{width:10rem;height:10rem;max-width:10rem;max-height:10rem;object-fit:cover;border-radius:var(--shape-border-radius-2, 4px)}.product-discovery--product-item__details{display:flex;flex-flow:column nowrap;justify-content:space-between;width:100%}.product-discovery--product-item__details [data-slot=ProductPrice]{text-align:start}
|
|
6
|
-
.product-discovery-product-list,.product-discovery-product-list__container{display:flex;flex-direction:column;width:100%}.product-discovery-product-list__grid{display:grid;grid-template-columns:1fr 1fr;margin-top:var(--spacing-small)}.product-discovery-product-list__grid .dropin-product-item-card{text-align:left;border:1px solid transparent;width:200px}.product-discovery-product-list__grid .dropin-product-item-card:hover{border:1px solid var(--color-neutral-400);box-shadow:0 0 var(--spacing-xsmall) 0 #a9a9a9;padding:none}.product-discovery-product-list__grid .dropin-product-item-card a:hover{text-decoration:none;color:var(--color-neutral-800)}.product-discovery-product-list__header{display:flex;flex-direction:row-reverse;width:100%}.product-discovery-product-list__picker{width:15.625rem;display:inline-block}.product-discovery-product-item__image{min-height:250px}@media only screen and (min-width: 768px){.product-discovery-product-list__grid{grid-template-columns:repeat(3,1fr)}}@media only screen and (min-width: 1366px){.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__show-filters-button{display:flex;margin:0 0 var(--spacing-xsmall) 0}.product-discovery-facet-list .dropin-divider{margin:var(--spacing-xsmall) 0 var(--spacing-xsmall) 0}@media only screen and (min-width: 768px){.product-discovery-facet-list{min-width:13.12rem}.product-discovery-facet-list__facet-options{display:flex;flex-direction:column}.product-discovery-facet-list__show-filters-button{display:none}}
|
|
7
|
-
.dropin-product-item-card__skeleton{gap:var(--spacing-small)}.dropin-product-item-card__skeleton__image{height:375px}.dropin-product-item-card__skeleton__content{grid-column:1/-1}.dropin-product-item-card{display:grid;position:relative;grid-auto-flow:row;background:var(--color-neutral-50);border:1px solid var(--color-neutral-400);color:var(--color-neutral-800);font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing);margin:var(--spacing-small);width:300px}.dropin-product-item-card__image-container{overflow:hidden;width:100%;height:auto}.dropin-product-item-card__image img{width:100%;max-height:375px}.dropin-product-item-card__content{display:grid;grid-template-columns:1fr 1fr;padding:var(--spacing-small);gap:var(--spacing-xxsmall);align-items:center;color:var(--color-neutral-800)}.dropin-product-item-card__title,.dropin-product-item-card__sku,.dropin-product-item-card__price,.dropin-product-item-card__swatches,.dropin-product-item-card__action{grid-column:1/3}.dropin-product-item-card__title{font:var(--type-body-1-strong-font);letter-spacing:var(--type-body-1-strong-letter-spacing)}.dropin-product-item-card__sku,.dropin-product-item-card__price{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.dropin-product-item-card__swatches{margin-top:var(--spacing-xsmall)}.dropin-product-item-card__action{margin-top:var(--spacing-xsmall);width:100%}`,{styleId:"storefront-product-discovery"});
|
|
3
|
+
(function(d,i){try{if(typeof document<"u"){const t=document.createElement("style"),o=i.styleId;for(const e in i.attributes)t.setAttribute(e,i.attributes[e]);t.setAttribute("data-dropin",o),t.appendChild(document.createTextNode(d));const r=document.querySelector('style[data-dropin="sdk"]');if(r)r.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__show-filters-button{display:flex;margin:0 0 var(--spacing-xsmall) 0}.product-discovery-facet-list .dropin-divider{margin:var(--spacing-xsmall) 0 var(--spacing-xsmall) 0}@media only screen and (min-width: 768px){.product-discovery-facet-list{min-width:13.12rem}.product-discovery-facet-list__facet-options{display:flex;flex-direction:column}.product-discovery-facet-list__show-filters-button{display:none}}",{styleId:"storefront-product-discovery"});
|
|
8
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};
|
|
9
5
|
//# sourceMappingURL=render.js.map
|
package/types/api/index.d.ts
CHANGED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/********************************************************************
|
|
2
|
-
* ADOBE CONFIDENTIAL
|
|
3
|
-
*
|
|
4
|
-
* Copyright 2024 Adobe
|
|
5
|
-
* All Rights Reserved.
|
|
6
|
-
*
|
|
7
|
-
* NOTICE: All information contained herein is, and remains
|
|
8
|
-
* the property of Adobe and its suppliers, if any. The intellectual
|
|
9
|
-
* and technical concepts contained herein are proprietary to Adobe
|
|
10
|
-
* and its suppliers and are protected by all applicable intellectual
|
|
11
|
-
* property laws, including trade secret and copyright laws.
|
|
12
|
-
* Dissemination of this information or reproduction of this material
|
|
13
|
-
* is strictly forbidden unless prior written permission is obtained
|
|
14
|
-
* from Adobe.
|
|
15
|
-
*******************************************************************/
|
|
16
|
-
export declare const ATTRIBUTE_METADATA_QUERY = "\n query attributeMetadata {\n attributeMetadata {\n sortable {\n label\n attribute\n numeric\n }\n filterableInSearch {\n label\n attribute\n numeric\n }\n }\n }\n";
|
|
17
|
-
//# sourceMappingURL=attributeMetadata.graphql.d.ts.map
|
package/chunks/api.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/*! Copyright 2025 Adobe
|
|
2
|
-
All Rights Reserved. */
|
|
3
|
-
import{merge as a}from"@dropins/tools/lib.js";import{c as ee}from"./productSearch.js";const ne=e=>{var o,i,r,l,s,c,m,f,u,y,v,R,k,w,_,x,b,C,D,K,P,T,A,O,V,z,I,S,j,q,B,E,F,G,H,J,N,Q,U,W,X,Y,Z,$,M,L,h,g,t;if(!e)return{id:"",name:"",sku:"",shortDescription:"",url:"",urlKey:"",metaTitle:"",metaKeywords:"",metaDescription:"",lowStock:!1,links:[],images:[],description:"",externalId:"",inputOptions:[],addToCartAllowed:!1,price:void 0,priceRange:void 0,inStock:!1,typename:""};const n={id:(e==null?void 0:e.id)||"",name:(e==null?void 0:e.name)||"",sku:(e==null?void 0:e.sku)||"",shortDescription:(e==null?void 0:e.shortDescription)||"",url:(e==null?void 0:e.url)||"",urlKey:(e==null?void 0:e.urlKey)||"",metaTitle:(e==null?void 0:e.metaTitle)||"",metaKeywords:(e==null?void 0:e.metaKeywords)||"",metaDescription:(e==null?void 0:e.metaDescription)||"",lowStock:(e==null?void 0:e.lowStock)||!1,links:(e==null?void 0:e.links)||[],images:((o=e==null?void 0:e.images)==null?void 0:o.map(p=>{var d;return{label:p.label||"",roles:p.roles||[],url:((d=p.url)==null?void 0:d.replace(/^https?:\/\//,"//"))||""}}))||[],description:(e==null?void 0:e.description)||"",externalId:(e==null?void 0:e.externalId)||"",inputOptions:(e==null?void 0:e.inputOptions)||[],addToCartAllowed:(e==null?void 0:e.addToCartAllowed)||!1,price:e.price?{final:{amount:{value:((l=(r=(i=e==null?void 0:e.price)==null?void 0:i.final)==null?void 0:r.amount)==null?void 0:l.value)||0,currency:((m=(c=(s=e==null?void 0:e.price)==null?void 0:s.final)==null?void 0:c.amount)==null?void 0:m.currency)||""}},regular:{amount:{value:((y=(u=(f=e==null?void 0:e.price)==null?void 0:f.regular)==null?void 0:u.amount)==null?void 0:y.value)||0,currency:((k=(R=(v=e==null?void 0:e.price)==null?void 0:v.regular)==null?void 0:R.amount)==null?void 0:k.currency)||""}},roles:((w=e==null?void 0:e.price)==null?void 0:w.roles)||[]}:void 0,priceRange:e!=null&&e.priceRange?{minimum:{final:{amount:{value:((C=(b=(x=(_=e==null?void 0:e.priceRange)==null?void 0:_.minimum)==null?void 0:x.final)==null?void 0:b.amount)==null?void 0:C.value)||0,currency:((T=(P=(K=(D=e==null?void 0:e.priceRange)==null?void 0:D.minimum)==null?void 0:K.final)==null?void 0:P.amount)==null?void 0:T.currency)||""}},regular:{amount:{value:((z=(V=(O=(A=e==null?void 0:e.priceRange)==null?void 0:A.minimum)==null?void 0:O.regular)==null?void 0:V.amount)==null?void 0:z.value)||0,currency:((q=(j=(S=(I=e==null?void 0:e.priceRange)==null?void 0:I.minimum)==null?void 0:S.regular)==null?void 0:j.amount)==null?void 0:q.currency)||""}}},maximum:{final:{amount:{value:((G=(F=(E=(B=e==null?void 0:e.priceRange)==null?void 0:B.maximum)==null?void 0:E.final)==null?void 0:F.amount)==null?void 0:G.value)||0,currency:((Q=(N=(J=(H=e==null?void 0:e.priceRange)==null?void 0:H.maximum)==null?void 0:J.final)==null?void 0:N.amount)==null?void 0:Q.currency)||""}},regular:{amount:{value:((Y=(X=(W=(U=e==null?void 0:e.priceRange)==null?void 0:U.maximum)==null?void 0:W.regular)==null?void 0:X.amount)==null?void 0:Y.value)||0,currency:((L=(M=($=(Z=e==null?void 0:e.priceRange)==null?void 0:Z.maximum)==null?void 0:$.regular)==null?void 0:M.amount)==null?void 0:L.currency)||""}}}}:void 0,inStock:(e==null?void 0:e.inStock)||!1,typename:(e==null?void 0:e.__typename)||""};return a(n,(t=(g=(h=ee.getConfig().models)==null?void 0:h.Product)==null?void 0:g.transformer)==null?void 0:t.call(g,e))};function oe(e){var i,r,l,s,c,m,f;const n=e==null?void 0:e.productSearch,o={facets:(n==null?void 0:n.facets)||[],items:(n==null?void 0:n.items.map(u=>ne(u==null?void 0:u.productView)))||[],pageInfo:{currentPage:((i=n==null?void 0:n.page_info)==null?void 0:i.current_page)||1,totalPages:((r=n==null?void 0:n.page_info)==null?void 0:r.total_pages)||1,totalItems:((l=n==null?void 0:n.page_info)==null?void 0:l.total_items)||0,pageSize:((s=n==null?void 0:n.page_info)==null?void 0:s.page_size)||10},totalCount:(n==null?void 0:n.total_count)||0};return a(o,(f=(m=(c=ee.getConfig().models)==null?void 0:c.ProductSearchResult)==null?void 0:m.transformer)==null?void 0:f.call(m,e))}function le(e){const n=e==null?void 0:e.attributeMetadata;return{sortable:(n==null?void 0:n.sortable)||[],filterableInSearch:(n==null?void 0:n.filterableInSearch)||[]}}const me=e=>{var n,o;return((o=(n=e==null?void 0:e.productSearch)==null?void 0:n.items)==null?void 0:o.reduce((i,r)=>{if(!(r!=null&&r.productView))return i;const l=ne(r.productView);return l&&i.push(l),i},[]))||[]};export{oe as a,le as b,ne as c,me as t};
|
|
4
|
-
//# sourceMappingURL=api.js.map
|
package/chunks/api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sources":["/@dropins/storefront-product-discovery/src/data/transforms/product.ts","/@dropins/storefront-product-discovery/src/data/transforms/api.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 *******************************************************************/\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { config } from '@/plp/api/initialize/initialize';\nimport { Product } from '../models/product';\n\nexport const transformProduct = (data: any): Product | null => {\n // check if data is null or undefined, and if so return an empty object\n if (!data) {\n return {\n id: '',\n name: '',\n sku: '',\n shortDescription: '',\n url: '',\n urlKey: '',\n metaTitle: '',\n metaKeywords: '',\n metaDescription: '',\n lowStock: false,\n links: [],\n images: [],\n description: '',\n externalId: '',\n inputOptions: [],\n addToCartAllowed: false,\n price: undefined,\n priceRange: undefined,\n inStock: false,\n typename: '',\n };\n }\n\n const transformedProduct = {\n id: data?.id || '',\n name: data?.name || '',\n sku: data?.sku || '',\n shortDescription: data?.shortDescription || '',\n url: data?.url || '',\n urlKey: data?.urlKey || '',\n metaTitle: data?.metaTitle || '',\n metaKeywords: data?.metaKeywords || '',\n metaDescription: data?.metaDescription || '',\n lowStock: data?.lowStock || false,\n links: data?.links || [],\n images:\n data?.images?.map((image: any) => ({\n label: image.label || '',\n roles: image.roles || [],\n url: image.url?.replace(/^https?:\\/\\//, '//') || '',\n })) || [],\n description: data?.description || '',\n externalId: data?.externalId || '',\n inputOptions: data?.inputOptions || [],\n addToCartAllowed: data?.addToCartAllowed || false,\n price: data.price\n ? {\n final: {\n amount: {\n value: data?.price?.final?.amount?.value || 0,\n currency: data?.price?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.price?.regular?.amount?.value || 0,\n currency: data?.price?.regular?.amount?.currency || '',\n },\n },\n roles: data?.price?.roles || [],\n }\n : undefined,\n priceRange: data?.priceRange\n ? {\n minimum: {\n final: {\n amount: {\n value: data?.priceRange?.minimum?.final?.amount?.value || 0,\n currency: data?.priceRange?.minimum?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.minimum?.regular?.amount?.value || 0,\n currency: data?.priceRange?.minimum?.regular?.amount?.currency || '',\n },\n },\n },\n maximum: {\n final: {\n amount: {\n value: data?.priceRange?.maximum?.final?.amount?.value || 0,\n currency: data?.priceRange?.maximum?.final?.amount?.currency || '',\n },\n },\n regular: {\n amount: {\n value: data?.priceRange?.maximum?.regular?.amount?.value || 0,\n currency: data?.priceRange?.maximum?.regular?.amount?.currency || '',\n },\n },\n },\n }\n : undefined,\n inStock: data?.inStock || false,\n typename: data?.__typename || '',\n };\n\n return merge(\n transformedProduct, // default transformer\n config.getConfig().models?.Product?.transformer?.(data), // custom transformer\n )\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { config } from '@/plp/api/initialize/initialize';\nimport { ProductSearchResult } from '@/plp/data/models';\nimport { Product } from '@/plp/data/models/product';\n\nimport { transformProduct } from './product';\n\nexport function transformProductSearchResponse(data: any): ProductSearchResult {\n const productSearch = data?.productSearch;\n const transformedResponse: ProductSearchResult = {\n facets: productSearch?.facets || [],\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 };\n return merge(\n transformedResponse, // default transformer\n config.getConfig().models?.ProductSearchResult?.transformer?.(data), // custom transformer\n );\n}\n\nexport function transformAttributeMetadata(data: any): any {\n const attributeMetadata = data?.attributeMetadata;\n const transformedResponse = {\n sortable: attributeMetadata?.sortable || [],\n filterableInSearch: attributeMetadata?.filterableInSearch || [],\n };\n return transformedResponse;\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"],"names":["transformProduct","data","transformedProduct","_a","image","_d","_c","_b","_g","_f","_e","_j","_i","_h","_m","_l","_k","_n","_r","_q","_p","_o","_v","_u","_t","_s","_z","_y","_x","_w","_D","_C","_B","_A","_H","_G","_F","_E","_L","_K","_J","_I","_P","_O","_N","_M","_T","_S","_R","_Q","merge","_W","_V","_U","config","transformProductSearchResponse","productSearch","transformedResponse","product","transformAttributeMetadata","attributeMetadata","transformSearchResultProducts","searchResponse","returnedProductList","productItem","transformed"],"mappings":"sFAYO,MAAMA,GAAoBC,GAA8B,uGAE7D,GAAI,CAACA,EACH,MAAO,CACL,GAAI,GACJ,KAAM,GACN,IAAK,GACL,iBAAkB,GAClB,IAAK,GACL,OAAQ,GACR,UAAW,GACX,aAAc,GACd,gBAAiB,GACjB,SAAU,GACV,MAAO,CAAA,EACP,OAAQ,CAAA,EACR,YAAa,GACb,WAAY,GACZ,aAAc,CAAA,EACd,iBAAkB,GAClB,MAAO,OACP,WAAY,OACZ,QAAS,GACT,SAAU,EAAA,EAId,MAAMC,EAAqB,CACzB,IAAID,GAAA,YAAAA,EAAM,KAAM,GAChB,MAAMA,GAAA,YAAAA,EAAM,OAAQ,GACpB,KAAKA,GAAA,YAAAA,EAAM,MAAO,GAClB,kBAAkBA,GAAA,YAAAA,EAAM,mBAAoB,GAC5C,KAAKA,GAAA,YAAAA,EAAM,MAAO,GAClB,QAAQA,GAAA,YAAAA,EAAM,SAAU,GACxB,WAAWA,GAAA,YAAAA,EAAM,YAAa,GAC9B,cAAcA,GAAA,YAAAA,EAAM,eAAgB,GACpC,iBAAiBA,GAAA,YAAAA,EAAM,kBAAmB,GAC1C,UAAUA,GAAA,YAAAA,EAAM,WAAY,GAC5B,OAAOA,GAAA,YAAAA,EAAM,QAAS,CAAA,EACtB,SACEE,EAAAF,GAAA,YAAAA,EAAM,SAAN,YAAAE,EAAc,IAAKC,GAAA,OAAgB,OACjC,MAAOA,EAAM,OAAS,GACtB,MAAOA,EAAM,OAAS,CAAA,EACtB,MAAKD,EAAAC,EAAM,MAAN,YAAAD,EAAW,QAAQ,eAAgB,QAAS,EAAA,MAC5C,CAAA,EACT,aAAaF,GAAA,YAAAA,EAAM,cAAe,GAClC,YAAYA,GAAA,YAAAA,EAAM,aAAc,GAChC,cAAcA,GAAA,YAAAA,EAAM,eAAgB,CAAA,EACpC,kBAAkBA,GAAA,YAAAA,EAAM,mBAAoB,GAC5C,MAAOA,EAAK,MACR,CACE,MAAO,CACL,OAAQ,CACN,QAAOI,GAAAC,GAAAC,EAAAN,GAAA,YAAAA,EAAM,QAAN,YAAAM,EAAa,QAAb,YAAAD,EAAoB,SAApB,YAAAD,EAA4B,QAAS,EAC5C,WAAUG,GAAAC,GAAAC,EAAAT,GAAA,YAAAA,EAAM,QAAN,YAAAS,EAAa,QAAb,YAAAD,EAAoB,SAApB,YAAAD,EAA4B,WAAY,EAAA,CACpD,EAEF,QAAS,CACP,OAAQ,CACN,QAAOG,GAAAC,GAAAC,EAAAZ,GAAA,YAAAA,EAAM,QAAN,YAAAY,EAAa,UAAb,YAAAD,EAAsB,SAAtB,YAAAD,EAA8B,QAAS,EAC9C,WAAUG,GAAAC,GAAAC,EAAAf,GAAA,YAAAA,EAAM,QAAN,YAAAe,EAAa,UAAb,YAAAD,EAAsB,SAAtB,YAAAD,EAA8B,WAAY,EAAA,CACtD,EAEF,QAAOG,EAAAhB,GAAA,YAAAA,EAAM,QAAN,YAAAgB,EAAa,QAAS,CAAA,CAAC,EAEhC,OACJ,WAAYhB,GAAA,MAAAA,EAAM,WACd,CACE,QAAS,CACP,MAAO,CACL,OAAQ,CACN,QAAOiB,GAAAC,GAAAC,GAAAC,EAAApB,GAAA,YAAAA,EAAM,aAAN,YAAAoB,EAAkB,UAAlB,YAAAD,EAA2B,QAA3B,YAAAD,EAAkC,SAAlC,YAAAD,EAA0C,QAAS,EAC1D,WAAUI,GAAAC,GAAAC,GAAAC,EAAAxB,GAAA,YAAAA,EAAM,aAAN,YAAAwB,EAAkB,UAAlB,YAAAD,EAA2B,QAA3B,YAAAD,EAAkC,SAAlC,YAAAD,EAA0C,WAAY,EAAA,CAClE,EAEF,QAAS,CACP,OAAQ,CACN,QAAOI,GAAAC,GAAAC,GAAAC,EAAA5B,GAAA,YAAAA,EAAM,aAAN,YAAA4B,EAAkB,UAAlB,YAAAD,EAA2B,UAA3B,YAAAD,EAAoC,SAApC,YAAAD,EAA4C,QAAS,EAC5D,WAAUI,GAAAC,GAAAC,GAAAC,EAAAhC,GAAA,YAAAA,EAAM,aAAN,YAAAgC,EAAkB,UAAlB,YAAAD,EAA2B,UAA3B,YAAAD,EAAoC,SAApC,YAAAD,EAA4C,WAAY,EAAA,CACpE,CACF,EAEF,QAAS,CACP,MAAO,CACL,OAAQ,CACN,QAAOI,GAAAC,GAAAC,GAAAC,EAAApC,GAAA,YAAAA,EAAM,aAAN,YAAAoC,EAAkB,UAAlB,YAAAD,EAA2B,QAA3B,YAAAD,EAAkC,SAAlC,YAAAD,EAA0C,QAAS,EAC1D,WAAUI,GAAAC,GAAAC,GAAAC,EAAAxC,GAAA,YAAAA,EAAM,aAAN,YAAAwC,EAAkB,UAAlB,YAAAD,EAA2B,QAA3B,YAAAD,EAAkC,SAAlC,YAAAD,EAA0C,WAAY,EAAA,CAClE,EAEF,QAAS,CACP,OAAQ,CACN,QAAOI,GAAAC,GAAAC,GAAAC,EAAA5C,GAAA,YAAAA,EAAM,aAAN,YAAA4C,EAAkB,UAAlB,YAAAD,EAA2B,UAA3B,YAAAD,EAAoC,SAApC,YAAAD,EAA4C,QAAS,EAC5D,WAAUI,GAAAC,GAAAC,GAAAC,EAAAhD,GAAA,YAAAA,EAAM,aAAN,YAAAgD,EAAkB,UAAlB,YAAAD,EAA2B,UAA3B,YAAAD,EAAoC,SAApC,YAAAD,EAA4C,WAAY,EAAA,CACpE,CACF,CACF,EAEF,OACJ,SAAS7C,GAAA,YAAAA,EAAM,UAAW,GAC1B,UAAUA,GAAA,YAAAA,EAAM,aAAc,EAAA,EAGhC,OAAOiD,EACLhD,GACAiD,GAAAC,GAAAC,EAAAC,GAAO,UAAA,EAAY,SAAnB,YAAAD,EAA2B,UAA3B,YAAAD,EAAoC,cAApC,YAAAD,EAAA,KAAAC,EAAkDnD,EAAI,CAE1D,ECvGO,SAASsD,GAA+BtD,EAAgC,mBAC7E,MAAMuD,EAAgBvD,GAAA,YAAAA,EAAM,cACtBwD,EAA2C,CAC/C,QAAQD,GAAA,YAAAA,EAAe,SAAU,CAAA,EACjC,OAAOA,GAAA,YAAAA,EAAe,MAAM,IAAKE,GAAiB1D,GAAiB0D,GAAA,YAAAA,EAAS,WAAW,KAAM,CAAA,EAC7F,SAAU,CACR,cAAavD,EAAAqD,GAAA,YAAAA,EAAe,YAAf,YAAArD,EAA0B,eAAgB,EACvD,aAAYI,EAAAiD,GAAA,YAAAA,EAAe,YAAf,YAAAjD,EAA0B,cAAe,EACrD,aAAYD,EAAAkD,GAAA,YAAAA,EAAe,YAAf,YAAAlD,EAA0B,cAAe,EACrD,WAAUD,EAAAmD,GAAA,YAAAA,EAAe,YAAf,YAAAnD,EAA0B,YAAa,EAAA,EAEnD,YAAYmD,GAAA,YAAAA,EAAe,cAAe,CAAA,EAE5C,OAAON,EACLO,GACAjD,GAAAC,GAAAC,EAAA4C,GAAO,UAAA,EAAY,SAAnB,YAAA5C,EAA2B,sBAA3B,YAAAD,EAAgD,cAAhD,YAAAD,EAAA,KAAAC,EAA8DR,EAAI,CAEtE,CAEO,SAAS0D,GAA2B1D,EAAgB,CACzD,MAAM2D,EAAoB3D,GAAA,YAAAA,EAAM,kBAKhC,MAJ4B,CAC1B,UAAU2D,GAAA,YAAAA,EAAmB,WAAY,CAAA,EACzC,oBAAoBA,GAAA,YAAAA,EAAmB,qBAAsB,CAAA,CAAC,CAGlE,CAEO,MAAMC,GAAiCC,GAAA,SAC5C,QAAAvD,GAAAJ,EAAA2D,GAAA,YAAAA,EAAgB,gBAAhB,YAAA3D,EAA+B,QAA/B,YAAAI,EAAsC,OAAkB,CAACwD,EAAqBC,IAAgB,CAC5F,GAAI,EAACA,GAAA,MAAAA,EAAa,aAAa,OAAOD,EAEtC,MAAME,EAAcjE,GAAiBgE,EAAY,WAAW,EAC5D,OAAIC,GACFF,EAAoB,KAAKE,CAAW,EAG/BF,CACT,EAAG,CAAA,KAAO,CAAA"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/*! Copyright 2025 Adobe
|
|
2
|
-
All Rights Reserved. */
|
|
3
|
-
import{f as a}from"./productSearch.js";const r=`
|
|
4
|
-
query attributeMetadata {
|
|
5
|
-
attributeMetadata {
|
|
6
|
-
sortable {
|
|
7
|
-
label
|
|
8
|
-
attribute
|
|
9
|
-
numeric
|
|
10
|
-
}
|
|
11
|
-
filterableInSearch {
|
|
12
|
-
label
|
|
13
|
-
attribute
|
|
14
|
-
numeric
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
`,n=async()=>a(r,{method:"GET"}).then(({errors:t,data:e})=>t?(console.log("error",t),null):e);export{n as a};
|
|
19
|
-
//# sourceMappingURL=attributeMetadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attributeMetadata.js","sources":["/@dropins/storefront-product-discovery/src/api/attributeMetadata/graphql/attributeMetadata.graphql.ts","/@dropins/storefront-product-discovery/src/api/attributeMetadata/attributeMetadata.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const ATTRIBUTE_METADATA_QUERY = /* GraphQL */ `\n query attributeMetadata {\n attributeMetadata {\n sortable {\n label\n attribute\n numeric\n }\n filterableInSearch {\n label\n attribute\n numeric\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/plp/api';\n\nimport { ATTRIBUTE_METADATA_QUERY } from './graphql/attributeMetadata.graphql';\nimport { AttributeMetadataResponse } from '@/plp/types/api/attributeMetadata';\n\nexport const attributeMetadata = async (): Promise<AttributeMetadataResponse | null> => {\n return fetchGraphQl(ATTRIBUTE_METADATA_QUERY, { method: 'GET' }).then(({ errors, data }) => {\n if (errors) {\n console.log('error', errors);\n return null;\n }\n return data;\n });\n};\n"],"names":["ATTRIBUTE_METADATA_QUERY","attributeMetadata","fetchGraphQl","errors","data"],"mappings":"uCAgBO,MAAMA,EAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECMzCC,EAAoB,SACxBC,EAAaF,EAA0B,CAAE,OAAQ,KAAA,CAAO,EAAE,KAAK,CAAC,CAAE,OAAAG,EAAQ,KAAAC,KAC3ED,GACF,QAAQ,IAAI,QAASA,CAAM,EACpB,MAEFC,CACR"}
|
package/chunks/productSearch.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/*! Copyright 2025 Adobe
|
|
2
|
-
All Rights Reserved. */
|
|
3
|
-
import{Initializer as o}from"@dropins/tools/lib.js";import{ProductView as n,Facet as c}from"../fragments.js";import{FetchGraphQL as s}from"@dropins/tools/fetch-graphql.js";const a=new o({init:async t=>{const e={};a.config.setConfig({...e,...t})},listeners:()=>[]}),l=a.config,{setEndpoint:f,setFetchGraphQlHeader:d,removeFetchGraphQlHeader:$,setFetchGraphQlHeaders:m,fetchGraphQl:i,getConfig:S}=new s().getMethods(),p=`
|
|
4
|
-
query productSearch(
|
|
5
|
-
$phrase: String!
|
|
6
|
-
$pageSize: Int
|
|
7
|
-
$currentPage: Int = 1
|
|
8
|
-
$filter: [SearchClauseInput!]
|
|
9
|
-
$sort: [ProductSearchSortInput!]
|
|
10
|
-
$context: QueryContextInput
|
|
11
|
-
) {
|
|
12
|
-
productSearch(
|
|
13
|
-
phrase: $phrase
|
|
14
|
-
page_size: $pageSize
|
|
15
|
-
current_page: $currentPage
|
|
16
|
-
filter: $filter
|
|
17
|
-
sort: $sort
|
|
18
|
-
context: $context
|
|
19
|
-
) {
|
|
20
|
-
total_count
|
|
21
|
-
items {
|
|
22
|
-
...ProductView
|
|
23
|
-
}
|
|
24
|
-
facets {
|
|
25
|
-
...Facet
|
|
26
|
-
}
|
|
27
|
-
page_info {
|
|
28
|
-
current_page
|
|
29
|
-
page_size
|
|
30
|
-
total_pages
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
attributeMetadata {
|
|
34
|
-
sortable {
|
|
35
|
-
label
|
|
36
|
-
attribute
|
|
37
|
-
numeric
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
${n}
|
|
42
|
-
${c}
|
|
43
|
-
`,_=async t=>i(p,{method:"GET",variables:t}).then(({errors:e,data:r})=>{if(e&&!r)throw console.log("error",e),new Error("Error fetching product search");return r});export{d as a,m as b,l as c,i as f,S as g,a as i,_ as p,$ as r,f as s};
|
|
44
|
-
//# sourceMappingURL=productSearch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"productSearch.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/api/productSearch/graphql/productSearch.graphql.ts","/@dropins/storefront-product-discovery/src/api/productSearch/productSearch.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 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 *******************************************************************/\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 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 attributeMetadata {\n sortable {\n label\n attribute\n numeric\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 { fetchGraphQl } from '@/plp/api';\nimport { PRODUCT_SEARCH_QUERY } from './graphql/productSearch.graphql';\nimport { ProductSearchResponse } from '@/plp/types/api/productSearch';\n\nexport const productSearch = async (variables: any): Promise<ProductSearchResponse | null> => {\n return fetchGraphQl(PRODUCT_SEARCH_QUERY, { method: 'GET', variables }).then(({ errors, data }) => {\n if (errors && !data) {\n console.log('error', errors);\n throw new Error('Error fetching product search');\n } else {\n return data;\n }\n });\n};\n"],"names":["initialize","Initializer","config","defaultConfig","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","PRODUCT_SEARCH_QUERY","ProductView","Facet","productSearch","variables","errors","data"],"mappings":"4KAuBO,MAAMA,EAAa,IAAIC,EAAyB,CACrD,KAAM,MAAOC,GAAW,CACtB,MAAMC,EAAgB,CAAA,EAEtBH,EAAW,OAAO,UAAU,CAAE,GAAGG,EAAe,GAAGD,EAAQ,CAC7D,EAEA,UAAW,IAAM,CAAA,CACnB,CAAC,EAEYA,EAASF,EAAW,OCtBpB,CACX,YAAAI,EACA,sBAAAC,EACA,yBAAAC,EACA,uBAAAC,EACA,aAAAC,EACA,UAAAC,CACF,EAAI,IAAIC,EAAA,EAAe,WAAA,ECPjBC,EAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsCvCC,CAAW;AAAA,IACXC,CAAK;AAAA,ECrCIC,EAAgB,MAAOC,GAC3BP,EAAaG,EAAsB,CAAE,OAAQ,MAAO,UAAAI,EAAW,EAAE,KAAK,CAAC,CAAE,OAAAC,EAAQ,KAAAC,KAAW,CACjG,GAAID,GAAU,CAACC,EACb,cAAQ,IAAI,QAASD,CAAM,EACrB,IAAI,MAAM,+BAA+B,EAE/C,OAAOC,CAEX,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { FunctionComponent, VNode } from 'preact';
|
|
2
|
-
import { AnchorHTMLAttributes } from 'preact/compat';
|
|
3
|
-
import { Product } from '../../data/models/product';
|
|
4
|
-
|
|
5
|
-
export interface ProductItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
6
|
-
productRouteSearch?: (product: Product) => string;
|
|
7
|
-
productItem: Product;
|
|
8
|
-
productImage?: VNode;
|
|
9
|
-
productName?: VNode;
|
|
10
|
-
productPrice?: VNode;
|
|
11
|
-
}
|
|
12
|
-
export declare const ProductItem: FunctionComponent<ProductItemProps>;
|
|
13
|
-
//# sourceMappingURL=ProductItem.d.ts.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { FunctionComponent, VNode } from 'preact';
|
|
2
|
-
import { HTMLAttributes } from 'preact/compat';
|
|
3
|
-
|
|
4
|
-
export interface ResultsInfoProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
searchPhrase?: VNode;
|
|
6
|
-
totalCount?: VNode;
|
|
7
|
-
}
|
|
8
|
-
export declare const ResultsInfo: FunctionComponent<ResultsInfoProps>;
|
|
9
|
-
//# sourceMappingURL=ResultsInfo.d.ts.map
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/********************************************************************
|
|
2
|
-
* ADOBE CONFIDENTIAL
|
|
3
|
-
* __________________
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2025 Adobe
|
|
6
|
-
* All Rights Reserved.
|
|
7
|
-
*
|
|
8
|
-
* NOTICE: All information contained herein is, and remains
|
|
9
|
-
* the property of Adobe and its suppliers, if any. The intellectual
|
|
10
|
-
* and technical concepts contained herein are proprietary to Adobe
|
|
11
|
-
* and its suppliers and are protected by all applicable intellectual
|
|
12
|
-
* property laws, including trade secret and copyright laws.
|
|
13
|
-
* Dissemination of this information or reproduction of this material
|
|
14
|
-
* is strictly forbidden unless prior written permission is obtained
|
|
15
|
-
* from Adobe.
|
|
16
|
-
*******************************************************************/
|
|
17
|
-
export * from './ResultsInfo';
|
|
18
|
-
export { ResultsInfo as default } from './ResultsInfo';
|
|
19
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { FunctionComponent, VNode } from 'preact';
|
|
2
|
-
import { HTMLAttributes } from 'preact/compat';
|
|
3
|
-
|
|
4
|
-
export interface SearchBarInputProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
searchIcon?: VNode;
|
|
6
|
-
searchQuery?: string;
|
|
7
|
-
defaultQueryPlaceholder?: string;
|
|
8
|
-
isLoading?: boolean;
|
|
9
|
-
error?: string | null;
|
|
10
|
-
onQueryInput?: (query: string) => void;
|
|
11
|
-
onExecuteSearch?: (query: string) => void;
|
|
12
|
-
onClose?: () => void;
|
|
13
|
-
}
|
|
14
|
-
export declare const SearchBarInput: FunctionComponent<SearchBarInputProps>;
|
|
15
|
-
//# sourceMappingURL=SearchBarInput.d.ts.map
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/********************************************************************
|
|
2
|
-
* Copyright 2025 Adobe
|
|
3
|
-
* All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* NOTICE: Adobe permits you to use, modify, and distribute this
|
|
6
|
-
* file in accordance with the terms of the Adobe license agreement
|
|
7
|
-
* accompanying it.
|
|
8
|
-
*******************************************************************/
|
|
9
|
-
export * from './SearchBarInput';
|
|
10
|
-
export { SearchBarInput as default } from './SearchBarInput';
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { FunctionComponent, VNode } from 'preact';
|
|
2
|
-
import { HTMLAttributes } from 'preact/compat';
|
|
3
|
-
|
|
4
|
-
export interface SearchBarResultsProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
productList?: VNode[];
|
|
6
|
-
viewAllButton?: VNode;
|
|
7
|
-
onClose?: () => void;
|
|
8
|
-
}
|
|
9
|
-
export declare const SearchBarResults: FunctionComponent<SearchBarResultsProps>;
|
|
10
|
-
//# sourceMappingURL=SearchBarResults.d.ts.map
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/********************************************************************
|
|
2
|
-
* Copyright 2025 Adobe
|
|
3
|
-
* All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* NOTICE: Adobe permits you to use, modify, and distribute this
|
|
6
|
-
* file in accordance with the terms of the Adobe license agreement
|
|
7
|
-
* accompanying it.
|
|
8
|
-
*******************************************************************/
|
|
9
|
-
export * from './SearchBarResults';
|
|
10
|
-
export { SearchBarResults as default } from './SearchBarResults';
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { HTMLAttributes } from 'preact/compat';
|
|
2
|
-
import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
|
|
3
|
-
import { Product } from '../../data/models/product';
|
|
4
|
-
|
|
5
|
-
export interface ProductListProps extends HTMLAttributes<HTMLDivElement> {
|
|
6
|
-
minQueryLength?: number;
|
|
7
|
-
slots?: {
|
|
8
|
-
Header?: SlotProps;
|
|
9
|
-
ProductActions?: SlotProps;
|
|
10
|
-
ProductPrice?: SlotProps;
|
|
11
|
-
ProductName?: SlotProps;
|
|
12
|
-
ProductImage?: SlotProps;
|
|
13
|
-
Footer?: SlotProps;
|
|
14
|
-
};
|
|
15
|
-
pageSize?: number;
|
|
16
|
-
routeProduct?: (product: Product) => string;
|
|
17
|
-
categoryPath?: string;
|
|
18
|
-
}
|
|
19
|
-
export declare const ProductList: Container<ProductListProps>;
|
|
20
|
-
//# sourceMappingURL=ProductList.d.ts.map
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/********************************************************************
|
|
2
|
-
* Copyright 2025 Adobe
|
|
3
|
-
* All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* NOTICE: Adobe permits you to use, modify, and distribute this
|
|
6
|
-
* file in accordance with the terms of the Adobe license agreement
|
|
7
|
-
* accompanying it.
|
|
8
|
-
*******************************************************************/
|
|
9
|
-
export * from './ProductList';
|
|
10
|
-
export { ProductList as default } from './ProductList';
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { SortOrder } from '../../../data/models/api';
|
|
2
|
-
|
|
3
|
-
declare const getDefaultSort: (translations: any, categoryPath?: string) => any;
|
|
4
|
-
declare const setSortOptions: (sortOptions: any, translations: any, categoryPath?: string) => any;
|
|
5
|
-
declare const getSortSearchVariables: (sortValue: string) => SortOrder[];
|
|
6
|
-
declare const getSortValue: (sort: SortOrder[]) => string;
|
|
7
|
-
declare const getPickerOption: (options: any, value: string) => any;
|
|
8
|
-
export { getDefaultSort, getSortSearchVariables, setSortOptions, getPickerOption, getSortValue };
|
|
9
|
-
//# sourceMappingURL=sortUtils.d.ts.map
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/********************************************************************
|
|
2
|
-
* Copyright 2025 Adobe
|
|
3
|
-
* All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* NOTICE: Adobe permits you to use, modify, and distribute this
|
|
6
|
-
* file in accordance with the terms of the Adobe license agreement
|
|
7
|
-
* accompanying it.
|
|
8
|
-
*******************************************************************/
|
|
9
|
-
declare const getValueFromUrl: (param: string) => string;
|
|
10
|
-
declare const updateUrlPagination: (pageNumber: number) => void;
|
|
11
|
-
declare const updateUrlSort: (sortOption: string) => void;
|
|
12
|
-
declare const updateUrlSearchPhrase: (searchPhrase: string) => void;
|
|
13
|
-
declare const getFiltersFromUrl: (filterableAttributes: string[]) => any[];
|
|
14
|
-
declare const addUrlFilters: (filters: any[]) => void;
|
|
15
|
-
export { addUrlFilters, getFiltersFromUrl, getValueFromUrl, updateUrlPagination, updateUrlSort, updateUrlSearchPhrase };
|
|
16
|
-
//# sourceMappingURL=urlUtils.d.ts.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/*! Copyright 2025 Adobe
|
|
2
|
-
All Rights Reserved. */
|
|
3
|
-
import{jsx as o,jsxs as N}from"@dropins/tools/preact-jsx-runtime.js";import*as P from"@dropins/tools/preact-compat.js";import{useState as S,useCallback as pe,useEffect as ge}from"@dropins/tools/preact-compat.js";import{classes as _,VComponent as p,Slot as C}from"@dropins/tools/lib.js";import{Skeleton as Se,SkeletonRow as D,InLineAlert as _e,Icon as Pe,Pagination as we,Picker as Le,PriceRange as v,Image as Ce}from"@dropins/tools/components.js";import{p as ke}from"../chunks/productSearch.js";import{a as ye,b as Ee,c as xe}from"../chunks/api.js";import{u as Re,P as w,a as Ne,b as Ae,c as Ie,d as De,e as Ue,s as qe}from"../chunks/acdlEvents.js";import{a as ze}from"../chunks/attributeMetadata.js";/* empty css *//* empty css *//* empty css *//* empty css */import{events as $}from"@dropins/tools/event-bus.js";import{useText as Fe,Text as He}from"@dropins/tools/i18n.js";import"../fragments.js";import"@dropins/tools/fetch-graphql.js";const $e=t=>P.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},P.createElement("g",{clipPath:"url(#clip0_841_1324)"},P.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M11.9949 2.30237L0.802734 21.6977H23.1977L11.9949 2.30237Z",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}),P.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",strokeLinecap:"round",strokeLinejoin:"round"})),P.createElement("defs",null,P.createElement("clipPath",{id:"clip0_841_1324"},P.createElement("rect",{width:24,height:21,fill:"white",transform:"translate(0 1.5)"})))),Me=()=>o("div",{className:"dropin-product-item-card dropin-product-item-card-skeleton",children:N(Se,{className:"dropin-product-item-card__skeleton dropin-product-item-card__image-container",children:[o(D,{fullWidth:!0,className:"dropin-product-item-card__skeleton__image"}),N("div",{className:"dropin-product-item-card__content dropin-product-item-card__skeleton__content",children:[o(D,{fullWidth:!0,size:"large",className:"dropin-product-item-card__skeleton__item"}),o(D,{fullWidth:!0,size:"xsmall",className:"dropin-product-item-card__skeleton__item"}),o(D,{fullWidth:!0,size:"small",className:"dropin-product-item-card__skeleton__item"})]})," "]})}),ve=({className:t,image:r,titleNode:n,price:d,sku:i,actionButton:a,swatches:l,initialized:u=!1,...A})=>u?N("div",{...A,className:_(["dropin-product-item-card",t]),children:[o("div",{className:"dropin-product-item-card__image-container",children:r&&o(p,{node:r,className:_(["dropin-product-item-card__image"])})}),N("div",{className:"dropin-product-item-card__content",children:[n&&o(p,{node:n,className:_(["dropin-product-item-card__title"])}),i&&o(p,{node:i,className:_(["dropin-product-item-card__sku"])}),d&&o("div",{className:"dropin-product-item-card__price",children:o(p,{node:d,className:_(["dropin-product-item-card__price"])})}),l&&o("div",{className:"dropin-product-item-card__swatches",children:o(p,{node:l,className:_(["dropin-product-item-card__swatches"])})}),a&&o("div",{className:"dropin-product-item-card__action",children:o(p,{node:a,className:_(["dropin-product-item-card__action"])})})]})]}):o(Me,{});function Oe(t){var i;let r="";try{r=self.crypto.randomUUID(),Re(w,r,t.phrase||"",t.filter||[],t.pageSize||0,t.currentPage||0,t.sort||[]),Ne(w)}catch(a){console.error("Error collecting data:",a)}const n={attribute:"visibility",in:["Search","Catalog, Search"]},d=structuredClone(t);return(i=d.filter)==null||i.push(n),ke(d).then(a=>{const l=ye(a);try{Ae(w,r,l),Ie(w),t.phrase?De(w):Ue(w)}catch(u){console.error("Error collecting data:",u)}return l}).catch(a=>{throw console.error("Error fetching product search:",a),new Error("Error fetching product search.")}).finally(()=>{})}function We(){return ze().then(t=>Ee(t)).catch(t=>{throw console.error("Error fetching attribute metadata:",t),new Error("Error fetching attribute metadata.")}).finally(()=>{})}const j=(t,r)=>r?{text:t.positionLabel,value:"position_ASC"}:{text:t.relevanceLabel,value:"relevance_DESC"},je=(t,r,n)=>{const d=j(r,n),i=t.reduce((a,l)=>(l.attribute!=="position"&&l.attribute!=="relevance"&&(l.attribute==="price"?(a.push({text:r.sortASC,value:`${l.attribute}_ASC`}),a.push({text:r.sortDESC,value:`${l.attribute}_DESC`})):a.push({text:l.label,value:`${l.attribute}_DESC`})),a),[]);return i.push(d),{options:i,default:d}},U=t=>{const r=t.indexOf("_");return[{attribute:t.substring(0,r),direction:t.substring(r+1)==="ASC"?"ASC":"DESC"}]},Te=t=>t.length>0?`${t[0].attribute}_${t[0].direction}`:"",Qe=(t,r)=>{const n=t.findIndex(d=>d.value===r);return n>-1?t[n]:null},Ze=({header:t,productList:r,footer:n})=>N("div",{className:"product-discovery-product-list",children:[t&&o(p,{className:"product-discovery-product-list__header",node:t}),o("div",{className:"product-discovery-product-list__grid",children:r&&o(p,{node:r})}),n&&o(p,{className:"product-discovery-product-list__pagination",node:n})]}),Be=({alertMessage:t=""})=>o("div",{className:_(["product-discovery-search-alert-message__wrapper"]),children:o("div",{className:"product-discovery-search-alert-message__content",children:o(_e,{heading:t,type:"warning",icon:o(Pe,{source:$e,size:"24"}),onDismiss:void 0})})}),T={search:"q",search_query:"search_query",pagination:"p",sort:"product_list_order",page_size:"page_size"},k=t=>{const n=Q().get(t);return n||""},Q=()=>{const t=window.location.search;return new URLSearchParams(t)},Ke=t=>{const r=new URL(window.location.href),n=new URLSearchParams(r.searchParams);t===1?n.delete("p"):n.set("p",t.toString()),q(r.pathname,n)},Ge=t=>{const r=new URL(window.location.href),n=new URLSearchParams(r.searchParams);n.set("product_list_order",t),q(r.pathname,n)},Je=t=>{const r=new URL(window.location.href),n=new URLSearchParams(r.searchParams);n.set("q",t),q(r.pathname,n)},q=(t,r)=>{r.toString()===""?window.history.pushState({},"",`${t}`):window.history.pushState({},"",`${t}?${r.toString()}`)},O=t=>{var d;const r=Q(),n=[];for(const[i,a]of r.entries())if(t.includes(i)&&!Object.values(T).includes(i))if(a.includes("--")){const l=a.split("--"),u={attribute:i,range:{from:Number(l[0]),to:Number(l[1])}};n.push(u)}else{const l=n.findIndex(u=>u.attribute==i);if(l!==-1)(d=n[l].in)==null||d.push(a);else{const u={attribute:i,in:[a]};n.push(u)}}return n},Xe=t=>{const r=new URL(window.location.href),n=new URLSearchParams(r.searchParams);for(const d of r.searchParams.keys())Object.values(T).includes(d)||n.delete(d);t.forEach(d=>{const i=d.attribute;if(d.range){const a=d.range;k(i)?(n.delete(i),n.append(i,`${a.from}--${a.to}`)):n.append(i,`${a.from}--${a.to}`)}else{const a=d.in||[],l=n.getAll(i);a.map(u=>{l.includes(u)||n.append(i,u)})}}),q(r.pathname,n)},W=t=>new DOMParser().parseFromString(t,"text/html").documentElement.textContent,ht=({minQueryLength:t=3,slots:r,pageSize:n=12,routeProduct:d,categoryPath:i})=>{const a=Fe({sortLabel:"Search.PLP.SortDropdown.title",relevanceLabel:"Search.PLP.SortDropdown.relevanceLabel",sortASC:"Search.PLP.SortDropdown.sortASC",sortDESC:"Search.PLP.SortDropdown.sortDESC",minQueryLength:o(He,{id:"Search.PLP.Warning.minQueryLength",fields:{minQueryLength:t}}),noResults:"Search.PLP.Warning.noResults",searchError:"Search.PLP.Warning.searchError",positionLabel:"Search.PLP.SortDropdown.positionLabel"}),[l,u]=S([]),[A,Z]=S(),[B,K]=S(1),[G,L]=S(!1),[J,y]=S(a.noResults),I=j(a,i),[X,z]=S(),[Y,b]=S([]),V=[...Array(n).keys()].map(()=>{const e=xe({});return e.initialized=!1,e}),[E,ee]=S(V),F=e=>{qe(e.sku,w)},te=e=>{x({currentPage:e})},re=e=>{Z(e),Ke(e)},ne=e=>{const c=U(e);z(e),x({sort:c})},oe=e=>{var h;const c=k("product_list_order"),m=U(c||I.value),s={phrase:i?"":(e==null?void 0:e.phrase)||k("q"),pageSize:(e==null?void 0:e.pageSize)||n,currentPage:(e==null?void 0:e.currentPage)||A,filter:(e==null?void 0:e.filter)||O(Y),sort:(e==null?void 0:e.sort)||m};return(e!=null&&e.phrase||e!=null&&e.filter||e!=null&&e.sort||e!=null&&e.pageSize)&&(s.currentPage=1,e!=null&&e.phrase&&(s.filter=[],s.sort=U(I.value),z(I.value))),i?(s.phrase="",s.filter=(h=s.filter)==null?void 0:h.concat({attribute:"categoryPath",eq:i})):s.phrase=(e==null?void 0:e.phrase)||k("q")||"",s},ce=e=>{if(!i){const s=e.phrase||"";Je(s)}const c=e.filter||[];Xe(c);const m=Te(e.sort||[]);Ge(m)},se=e=>We().then(c=>{b(((c==null?void 0:c.filterableInSearch)||[]).map(f=>f.attribute));const m=je(c==null?void 0:c.sortable,a,i);u(m.options);const s=Qe(m.options,e||m.default.value);return z(s.value),O(((c==null?void 0:c.filterableInSearch)||[]).map(f=>f.attribute))}).catch(()=>{L(!0),y(a.searchError)}),x=e=>{var m;const c=oe(e);if(ce(c),!i&&(((m=c==null?void 0:c.phrase)==null?void 0:m.length)||0)<t)L(!0),y(a.minQueryLength.replace("{SEARCH_PHRASE}",(c==null?void 0:c.phrase)||"")),H();else return L(!1),Oe(c).then(s=>{var h,f;$.emit("search/result",{result:s,request:c}),(s==null?void 0:s.totalCount)===0&&(s==null?void 0:s.items.length)===0?(L(!0),y(a.noResults)):(ee(s==null?void 0:s.items.map(g=>(g.initialized=!0,g))),re(((h=s==null?void 0:s.pageInfo)==null?void 0:h.currentPage)||1),K(((f=s==null?void 0:s.pageInfo)==null?void 0:f.totalPages)||1))}).catch(()=>{L(!0),y(a.searchError),H()}).finally(()=>{})},ae=pe(e=>{x(e)},[]),H=()=>{$.emit("search/result",{result:{},request:{}})};ge(()=>{const e=k("q"),c=k("product_list_order")||I.value;se(c).then(s=>{i?x({filter:[{attribute:"categoryPath",eq:i}]}):e!=null&&e.length&&e.length<t?(L(!0),y(a.minQueryLength.replace("{SEARCH_PHRASE}",e)),H()):x({filter:s})});const m=$.on("search/request",ae);return()=>{m==null||m.off()}},[]);const ie=e=>o(C,{name:"ProductActions",slot:r==null?void 0:r.ProductActions,context:{product:e}}),de=e=>{var s,h,f,g,R;let c=e.typename==="ComplexProductView"?(s=e.priceRange)==null?void 0:s.minimum.regular.amount.currency:(h=e.price)==null?void 0:h.regular.amount.currency;Intl.supportedValuesOf("currency").indexOf(c||"")===-1&&(c="USD");const m=e.typename==="ComplexProductView"?o(v,{display:"from to",minimumAmount:(f=e.priceRange)==null?void 0:f.minimum.regular.amount.value,maximumAmount:(g=e.priceRange)==null?void 0:g.maximum.regular.amount.value,currency:c}):o(v,{amount:(R=e.price)==null?void 0:R.regular.amount.value,currency:c});return o(C,{name:"ProductPrice",slot:r==null?void 0:r.ProductPrice,context:{product:e},children:d?o("a",{href:d(e),onClick:()=>F(e),children:m}):m})},le=e=>{const c=e.name!==null?W(e.name):"";return o(C,{name:"ProductName",slot:r==null?void 0:r.ProductName,context:{product:e},children:d?o("a",{href:d(e),onClick:()=>F(e),children:c}):c})},me=(e,c)=>{var f,g,R,M;const m={loading:c<8?"eager":"lazy",src:((g=(f=e.images)==null?void 0:f[0])==null?void 0:g.url)||"",alt:((M=(R=e.images)==null?void 0:R[0])==null?void 0:M.label)||"",width:200,height:250,params:{width:200}},s=e.name!==null?W(e.name):e.sku,h=o(Ce,{class:"product-discovery-product-item__image",...m,"aria-label":s});return o(C,{name:"ProductImage",slot:r==null?void 0:r.ProductImage,context:{product:e,defaultImageProps:m},children:d?o("a",{href:d(e),onClick:()=>F(e),children:h}):h})},ue=()=>o(C,{name:"Header",slot:r==null?void 0:r.Header,context:{productList:E},children:o(Le,{floatingLabel:a.sortLabel,options:l,value:X,required:!0,handleSelect:e=>{const{value:c}=e.target;ne(c)},"data-testid":"product-list-sort-by-picker"})}),he=()=>o(C,{name:"Footer",slot:r==null?void 0:r.Footer,context:{productList:E},children:o(we,{currentPage:A,totalPages:B,onChange:e=>{te(e)}})}),fe=o(Ze,{header:ue(),footer:he(),productList:E==null?void 0:E.map((e,c)=>o(ve,{image:me(e,c),titleNode:le(e),price:de(e),actionButton:ie(e),initialized:e.initialized},e.id||e.sku))});return o("div",{class:"product-discovery-product-list__container",children:G?o(Be,{alertMessage:J}):fe})};export{ht as ProductList,ht as default};
|
|
4
|
-
//# sourceMappingURL=ProductList.js.map
|