@anker-in/headless-ui 1.0.19-temp-101612 → 1.0.19-temp-101614

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.
@@ -1,2 +1,2 @@
1
- "use strict";var V=Object.create;var b=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var Z=(n,r)=>{for(var d in r)b(n,d,{get:r[d],enumerable:!0})},D=(n,r,d,v)=>{if(r&&typeof r=="object"||typeof r=="function")for(let u of E(r))!Q.call(n,u)&&u!==d&&b(n,u,{get:()=>r[u],enumerable:!(v=Y(r,u))||v.enumerable});return n};var G=(n,r,d)=>(d=n!=null?V(H(n)):{},D(r||!n||!n.__esModule?b(d,"default",{value:n,enumerable:!0}):d,n)),J=n=>D(b({},"__esModule",{value:!0}),n);var X={};Z(X,{default:()=>U});module.exports=J(X);var o=require("react/jsx-runtime"),C=require("../../helpers/utils.js"),R=require("react-responsive"),L=G(require("./FilterCardWrapItem")),l=require("react"),M=require("es-toolkit");const K=(n,r)=>{const{shopifyData:d={},isSale:v=!1,total:u,result:i,closeFilter:w,page:y,metafields:S,noResultNode:j,refreshStarRating:T,onPrimaryChange:W,onSecondaryChange:z,onNextPage:P,onPrevPage:B}=n,{advertisingSpace:k}=S,{buttonText:q,loadMoreText:A}=d,h=k||d?.advertisingSpace,F=(0,l.useRef)(null),_=(0,l.useRef)(!1),[c,x]=(0,l.useState)([]),g=(0,R.useMediaQuery)({query:"(max-width: 1024px)"}),I=a=>{const e=(0,M.cloneDeep)(a||[]);if(h){const t=e.findIndex(m=>m.mImage);if(t===-1){const m=Math.min(w?h?.maxLocation||7:h?.minLocation||5,e.length);e.splice(m,0,h)}else{e.splice(t,1);const m=Math.min(w?h?.maxLocation||7:h?.minLocation||5,e.length);e.splice(m,0,h)}}return e};(0,l.useImperativeHandle)(r,()=>({clearData(){x([])}}));const N=()=>{const a=F.current;if(!a)return;const e=a.getBoundingClientRect()?.top+window?.pageYOffset-120;window?.scrollTo?.({top:e,behavior:"smooth"})},O=a=>a?.metafields?.seoSetting?.noindex;return(0,l.useEffect)(()=>{(i?.slug||i?.id)&&((y===1||!g)&&x([]),i?.products&&x(a=>{const e=i.products?.filter?.(s=>!a.some(p=>p.id===s.id));let t=[...a,...e];const m=t.filter?.(s=>!(!s?.metafields?.seoSetting?.noindex&&s.availableForSale&&s?.variants?.some(p=>p.availableForSale)));return t=t.filter?.(s=>!s?.metafields?.seoSetting?.noindex&&s.availableForSale&&s?.variants?.some(p=>p.availableForSale)),t.push(...m),v&&(t=t.filter?.(s=>{let p=!1;if(s?.options?.find(f=>f?.displayName==="color"))p=s?.variants?.find(f=>f?.coupons?.length&&f?.coupons?.[0]&&typeof f?.coupons?.[0]=="object");else{const f=s?.variants?.[0]?.coupons;p=f?.length&&f?.[0]&&typeof f?.[0]=="object"}return!!p})),t?.length&&(y===1&&!g||g)&&(t=I(t)),t}))},[i?.products,y,g,k,v]),(0,l.useEffect)(()=>{c?.length&&y===1&&!g&&x(I(c))},[w]),(0,l.useEffect)(()=>{const a=document?.querySelector?.(".yotpo-reviews-star-ratings-widget");c?.length&&!a&&T?.()},[c]),(0,o.jsxs)("div",{className:"filter-card-wrap-container",ref:F,children:[(0,o.jsx)("div",{className:(0,C.cn)("w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3",{"laptop:grid-cols-4 tablet:grid-cols-3":w&&!g,"laptop:grid-cols-3 tablet:grid-cols-2":!w&&!g},"filter-card-wrap"),children:c?.map?.(a=>O(a)?null:(0,o.jsx)(L.default,{data:a,buttonText:q,metafields:S,onPrimaryChange:(e,t)=>W?.(e,t),onSecondaryChange:(e,t)=>z?.(e,t)},a.id))}),j,g&&i?.pageInfo?.hasNextPage?(0,o.jsxs)("div",{onClick:()=>{P?.(i?.pageInfo?.endCursor)},className:"mt-6 text-sm font-bold cursor-pointer flex items-center justify-center gap-1 filter-card-wrap-more",children:[(0,o.jsx)("span",{children:A||"View More"}),(0,o.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"6",viewBox:"0 0 12 6",fill:"none",children:(0,o.jsx)("path",{d:"M9.96967 0.21967C10.2626 -0.0732232 10.7373 -0.073223 11.0302 0.21967C11.3231 0.512563 11.3231 0.987324 11.0302 1.28022L6.53022 5.78022C6.23732 6.07311 5.76256 6.07311 5.46967 5.78022L0.96967 1.28022C0.676777 0.987324 0.676777 0.512563 0.96967 0.21967C1.26256 -0.0732233 1.73732 -0.0732233 2.03022 0.21967L5.99994 4.1894L9.96967 0.21967Z",fill:"#1D1D1F"})})]}):null,!g&&u>18?(0,o.jsxs)("div",{className:"mt-6 flex items-center justify-end gap-4 cursor-pointer",children:[(0,o.jsx)("button",{name:"perv page",disabled:!i?.pageInfo?.hasPreviousPage||!c?.length,className:(0,C.cn)("flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]",{"opacity-50 cursor-not-allowed":!i?.pageInfo?.hasPreviousPage||!c?.length}),onClick:()=>{N?.(),B?.(i?.pageInfo?.startCursor)},children:(0,o.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,o.jsx)("path",{d:"M12 5L7 10L12 15",stroke:"#3D3D3F","stroke-width":"1.66667","stroke-linecap":"round","stroke-linejoin":"round"})})}),(0,o.jsx)("button",{name:"next page",className:(0,C.cn)("flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]",{"opacity-50 cursor-not-allowed":!i?.pageInfo?.hasNextPage||!c?.length}),disabled:!i?.pageInfo?.hasNextPage||!c?.length,onClick:()=>{N?.(),P?.(i?.pageInfo?.endCursor)},children:(0,o.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,o.jsx)("path",{d:"M7.5 5L12.5 10L7.5 15",stroke:"#3D3D3F","stroke-width":"1.66667","stroke-linecap":"round","stroke-linejoin":"round"})})})]}):null]})};var U=(0,l.forwardRef)(K);
1
+ "use strict";var V=Object.create;var b=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var Z=(n,r)=>{for(var d in r)b(n,d,{get:r[d],enumerable:!0})},D=(n,r,d,v)=>{if(r&&typeof r=="object"||typeof r=="function")for(let u of E(r))!Q.call(n,u)&&u!==d&&b(n,u,{get:()=>r[u],enumerable:!(v=Y(r,u))||v.enumerable});return n};var G=(n,r,d)=>(d=n!=null?V(H(n)):{},D(r||!n||!n.__esModule?b(d,"default",{value:n,enumerable:!0}):d,n)),J=n=>D(b({},"__esModule",{value:!0}),n);var X={};Z(X,{default:()=>U});module.exports=J(X);var o=require("react/jsx-runtime"),C=require("../../helpers/utils.js"),R=require("react-responsive"),L=G(require("./FilterCardWrapItem")),l=require("react"),M=require("es-toolkit");const K=(n,r)=>{const{shopifyData:d={},isSale:v=!1,total:u,result:i,closeFilter:w,page:y,metafields:S,noResultNode:j,refreshStarRating:T,onPrimaryChange:W,onSecondaryChange:z,onNextPage:P,onPrevPage:B}=n,{advertisingSpace:k}=S,{buttonText:q,loadMoreText:A}=d,h=k||d?.advertisingSpace,F=(0,l.useRef)(null),_=(0,l.useRef)(!1),[g,x]=(0,l.useState)([]),c=(0,R.useMediaQuery)({query:"(max-width: 1024px)"}),I=a=>{const e=(0,M.cloneDeep)(a||[]);if(h){const t=e.findIndex(m=>m.mImage);if(t===-1){const m=Math.min(w?h?.maxLocation||7:h?.minLocation||5,e.length);e.splice(m,0,h)}else{e.splice(t,1);const m=Math.min(w?h?.maxLocation||7:h?.minLocation||5,e.length);e.splice(m,0,h)}}return e};(0,l.useImperativeHandle)(r,()=>({clearData(){x([])}}));const N=()=>{const a=F.current;if(!a)return;const e=a.getBoundingClientRect()?.top+window?.pageYOffset-120;window?.scrollTo?.({top:e,behavior:"smooth"})},O=a=>a?.metafields?.seoSetting?.noindex;return(0,l.useEffect)(()=>{(i?.slug||i?.id)&&((y===1||!c)&&x([]),i?.products&&x(a=>{const e=i.products?.filter?.(s=>!a.some(p=>p.id===s.id));let t=[...a,...e];const m=t.filter?.(s=>!(!s?.metafields?.seoSetting?.noindex&&s.availableForSale&&s?.variants?.some(p=>p.availableForSale)));return t=t.filter?.(s=>!s?.metafields?.seoSetting?.noindex&&s.availableForSale&&s?.variants?.some(p=>p.availableForSale)),t.push(...m),v&&(t=t.filter?.(s=>{let p=!1;if(s?.options?.find(f=>f?.displayName==="color"))p=s?.variants?.find(f=>f?.coupons?.length&&f?.coupons?.[0]&&typeof f?.coupons?.[0]=="object");else{const f=s?.variants?.[0]?.coupons;p=f?.length&&f?.[0]&&typeof f?.[0]=="object"}return!!p})),t?.length&&(y===1&&!c||c)&&(t=I(t)),t}))},[i?.products,y,c,k,v]),(0,l.useEffect)(()=>{g?.length&&y===1&&!c&&x(I(g))},[w]),(0,l.useEffect)(()=>{const a=document?.querySelector?.(".yotpo-reviews-star-ratings-widget");g?.length&&(!a||c)&&T?.()},[g]),(0,o.jsxs)("div",{className:"filter-card-wrap-container",ref:F,children:[(0,o.jsx)("div",{className:(0,C.cn)("w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3",{"laptop:grid-cols-4 tablet:grid-cols-3":w&&!c,"laptop:grid-cols-3 tablet:grid-cols-2":!w&&!c},"filter-card-wrap"),children:g?.map?.(a=>O(a)?null:(0,o.jsx)(L.default,{data:a,buttonText:q,metafields:S,onPrimaryChange:(e,t)=>W?.(e,t),onSecondaryChange:(e,t)=>z?.(e,t)},a.id))}),j,c&&i?.pageInfo?.hasNextPage?(0,o.jsxs)("div",{onClick:()=>{P?.(i?.pageInfo?.endCursor)},className:"mt-6 text-sm font-bold cursor-pointer flex items-center justify-center gap-1 filter-card-wrap-more",children:[(0,o.jsx)("span",{children:A||"View More"}),(0,o.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"6",viewBox:"0 0 12 6",fill:"none",children:(0,o.jsx)("path",{d:"M9.96967 0.21967C10.2626 -0.0732232 10.7373 -0.073223 11.0302 0.21967C11.3231 0.512563 11.3231 0.987324 11.0302 1.28022L6.53022 5.78022C6.23732 6.07311 5.76256 6.07311 5.46967 5.78022L0.96967 1.28022C0.676777 0.987324 0.676777 0.512563 0.96967 0.21967C1.26256 -0.0732233 1.73732 -0.0732233 2.03022 0.21967L5.99994 4.1894L9.96967 0.21967Z",fill:"#1D1D1F"})})]}):null,!c&&u>18?(0,o.jsxs)("div",{className:"mt-6 flex items-center justify-end gap-4 cursor-pointer",children:[(0,o.jsx)("button",{name:"perv page",disabled:!i?.pageInfo?.hasPreviousPage||!g?.length,className:(0,C.cn)("flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]",{"opacity-50 cursor-not-allowed":!i?.pageInfo?.hasPreviousPage||!g?.length}),onClick:()=>{N?.(),B?.(i?.pageInfo?.startCursor)},children:(0,o.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,o.jsx)("path",{d:"M12 5L7 10L12 15",stroke:"#3D3D3F","stroke-width":"1.66667","stroke-linecap":"round","stroke-linejoin":"round"})})}),(0,o.jsx)("button",{name:"next page",className:(0,C.cn)("flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]",{"opacity-50 cursor-not-allowed":!i?.pageInfo?.hasNextPage||!g?.length}),disabled:!i?.pageInfo?.hasNextPage||!g?.length,onClick:()=>{N?.(),P?.(i?.pageInfo?.endCursor)},children:(0,o.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,o.jsx)("path",{d:"M7.5 5L12.5 10L7.5 15",stroke:"#3D3D3F","stroke-width":"1.66667","stroke-linecap":"round","stroke-linejoin":"round"})})})]}):null]})};var U=(0,l.forwardRef)(K);
2
2
  //# sourceMappingURL=FilterCardWrap.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/CollectionsFilters/FilterCardWrap.tsx"],
4
- "sourcesContent": ["import { cn } from '../../helpers/utils.js'\nimport { useMediaQuery } from 'react-responsive'\nimport FilterCardWrapItem from './FilterCardWrapItem'\nimport { useRef, useState, useEffect, forwardRef, useImperativeHandle } from 'react'\nimport type { Ref } from 'react'\nimport { cloneDeep } from 'es-toolkit'\n\ntype FilterCardWrapProps = {\n isSale?: boolean\n result?: any\n total: number\n shopifyData?: any\n currentPage?: number\n closeFilter: boolean\n page: number\n metafields: any\n noResultNode?: React.ReactNode\n refreshStarRating?: () => void\n onPrimaryChange?: (item: any, sku: string) => void\n onSecondaryChange?: (item: any, sku: string) => void\n onNextPage?: (v: string) => void\n onPrevPage?: (v: string) => void\n}\n\nconst FilterCardWrap = (props: FilterCardWrapProps, ref: Ref<unknown> | undefined) => {\n const {\n shopifyData = {},\n isSale = false,\n total,\n result,\n closeFilter,\n page,\n metafields,\n noResultNode,\n refreshStarRating,\n onPrimaryChange,\n onSecondaryChange,\n onNextPage,\n onPrevPage,\n } = props\n const { advertisingSpace } = metafields\n const { buttonText, loadMoreText } = shopifyData\n\n const currentAdvertisingSpace = advertisingSpace || shopifyData?.advertisingSpace\n\n const filterCardWrapRef = useRef<any>(null)\n const initRefresh = useRef<boolean>(false)\n\n const [data, setData] = useState<any[]>([])\n\n const isMobile = useMediaQuery({ query: '(max-width: 1024px)' })\n\n const handleAdvertisingSpace = (products: any[]) => {\n const updatedProducts = cloneDeep(products || [])\n if (currentAdvertisingSpace) {\n const findIndex = updatedProducts.findIndex(item => item.mImage)\n if (findIndex === -1) {\n const insertIndex = closeFilter\n ? Math.min(currentAdvertisingSpace?.maxLocation || 7, updatedProducts.length)\n : Math.min(currentAdvertisingSpace?.minLocation || 5, updatedProducts.length)\n updatedProducts.splice(insertIndex, 0, currentAdvertisingSpace)\n } else {\n updatedProducts.splice(findIndex, 1)\n const insertIndex = closeFilter\n ? Math.min(currentAdvertisingSpace?.maxLocation || 7, updatedProducts.length)\n : Math.min(currentAdvertisingSpace?.minLocation || 5, updatedProducts.length)\n updatedProducts.splice(insertIndex, 0, currentAdvertisingSpace)\n }\n }\n return updatedProducts\n }\n\n useImperativeHandle(ref, () => ({\n clearData() {\n setData([])\n },\n }))\n\n const onScrollTop = () => {\n const target = filterCardWrapRef.current\n if (!target) return\n const targetY = target.getBoundingClientRect()?.top + window?.pageYOffset - 120\n window?.scrollTo?.({\n top: targetY,\n behavior: 'smooth',\n })\n }\n\n const hasNoIndex = (product: { metafields: { seoSetting: { noindex: any } } }) => {\n return product?.metafields?.seoSetting?.noindex\n }\n\n // \u5904\u7406\u4EA7\u54C1\u6570\u636E\n useEffect(() => {\n if (result?.slug || result?.id) {\n if (page === 1 || !isMobile) {\n setData([])\n }\n if (result?.products) {\n setData(prevProducts => {\n // \u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B58\u5728\u4E8E prevProducts \u4E2D\uFF0C\u907F\u514D\u91CD\u590D\u6DFB\u52A0\n const newProducts = result.products?.filter?.(\n (product: { id: any }) => !prevProducts.some(prev => prev.id === product.id)\n )\n let updatedProducts = [...prevProducts, ...newProducts]\n /** \u5DF2\u552E\u5B8C\u7684\u4EA7\u54C1 */\n const soldOutProducts = updatedProducts.filter?.(\n item =>\n !(\n !item?.metafields?.seoSetting?.noindex &&\n item.availableForSale &&\n item?.variants?.some((item: { availableForSale: any }) => item.availableForSale)\n )\n )\n // \u8FC7\u6EE4\u6389 availableForSale \u4E3A false \u7684\u4EA7\u54C1\n updatedProducts = updatedProducts.filter?.(\n item =>\n !item?.metafields?.seoSetting?.noindex &&\n item.availableForSale &&\n item?.variants?.some((item: { availableForSale: any }) => item.availableForSale)\n )\n // \u5C06\u5DF2\u552E\u5B8C\u7684\u4EA7\u54C1\u6DFB\u52A0\u5230\u6700\u540E\n updatedProducts.push(...soldOutProducts)\n // \u5982\u679C\u662F\u6709\u6298\u6263\u7684\u4EA7\u54C1\uFF0C\u5219\u8FC7\u6EE4\u6389\u6CA1\u6709\u6298\u6263\u7684\u4EA7\u54C1\n if (isSale) {\n updatedProducts = updatedProducts.filter?.((item: any) => {\n let isShow = false\n const isColor = item?.options?.find((item: any) => item?.displayName === 'color')\n if (isColor) {\n isShow = item?.variants?.find(\n (params: any) =>\n params?.coupons?.length && params?.coupons?.[0] && typeof params?.coupons?.[0] === 'object'\n )\n } else {\n const isVariants = item?.variants?.[0]?.coupons\n isShow = isVariants?.length && isVariants?.[0] && typeof isVariants?.[0] === 'object'\n }\n return !!isShow\n })\n }\n // \u5982\u679C advertisingSpace \u5B58\u5728\u4E14\u5C1A\u672A\u6DFB\u52A0\u5230\u6570\u7EC4\u4E2D\n if (updatedProducts?.length && ((page === 1 && !isMobile) || isMobile)) {\n updatedProducts = handleAdvertisingSpace(updatedProducts)\n }\n return updatedProducts\n })\n }\n }\n }, [result?.products, page, isMobile, advertisingSpace, isSale])\n\n useEffect(() => {\n if (!data?.length) return\n if (page === 1 && !isMobile) {\n setData(handleAdvertisingSpace(data))\n }\n }, [closeFilter])\n\n useEffect(() => {\n const isClass = document?.querySelector?.('.yotpo-reviews-star-ratings-widget')\n if (data?.length && !isClass) {\n refreshStarRating?.()\n }\n }, [data])\n\n return (\n <div className=\"filter-card-wrap-container\" ref={filterCardWrapRef}>\n <div\n className={cn(\n 'w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3',\n {\n 'laptop:grid-cols-4 tablet:grid-cols-3': closeFilter && !isMobile,\n 'laptop:grid-cols-3 tablet:grid-cols-2': !closeFilter && !isMobile,\n },\n 'filter-card-wrap'\n )}\n >\n {data?.map?.(item => {\n if (hasNoIndex(item)) return null\n return (\n <FilterCardWrapItem\n data={item}\n key={item.id}\n buttonText={buttonText}\n metafields={metafields}\n onPrimaryChange={(e, data) => onPrimaryChange?.(e, data)}\n onSecondaryChange={(e, data) => onSecondaryChange?.(e, data)}\n />\n )\n })}\n </div>\n {noResultNode}\n {isMobile && result?.pageInfo?.hasNextPage ? (\n <div\n onClick={() => {\n onNextPage?.(result?.pageInfo?.endCursor)\n }}\n className=\"mt-6 text-sm font-bold cursor-pointer flex items-center justify-center gap-1 filter-card-wrap-more\"\n >\n <span>{loadMoreText || 'View More'}</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"6\" viewBox=\"0 0 12 6\" fill=\"none\">\n <path\n d=\"M9.96967 0.21967C10.2626 -0.0732232 10.7373 -0.073223 11.0302 0.21967C11.3231 0.512563 11.3231 0.987324 11.0302 1.28022L6.53022 5.78022C6.23732 6.07311 5.76256 6.07311 5.46967 5.78022L0.96967 1.28022C0.676777 0.987324 0.676777 0.512563 0.96967 0.21967C1.26256 -0.0732233 1.73732 -0.0732233 2.03022 0.21967L5.99994 4.1894L9.96967 0.21967Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </div>\n ) : null}\n {!isMobile && total > 18 ? (\n <div className=\"mt-6 flex items-center justify-end gap-4 cursor-pointer\">\n <button\n name=\"perv page\"\n disabled={!result?.pageInfo?.hasPreviousPage || !data?.length}\n className={cn(\n 'flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]',\n {\n 'opacity-50 cursor-not-allowed': !result?.pageInfo?.hasPreviousPage || !data?.length,\n }\n )}\n onClick={() => {\n onScrollTop?.()\n onPrevPage?.(result?.pageInfo?.startCursor)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M12 5L7 10L12 15\"\n stroke=\"#3D3D3F\"\n stroke-width=\"1.66667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <button\n name=\"next page\"\n className={cn(\n 'flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]',\n {\n 'opacity-50 cursor-not-allowed': !result?.pageInfo?.hasNextPage || !data?.length,\n }\n )}\n disabled={!result?.pageInfo?.hasNextPage || !data?.length}\n onClick={() => {\n onScrollTop?.()\n onNextPage?.(result?.pageInfo?.endCursor)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M7.5 5L12.5 10L7.5 15\"\n stroke=\"#3D3D3F\"\n stroke-width=\"1.66667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n ) : null}\n </div>\n )\n}\n\nexport default forwardRef(FilterCardWrap)\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAmLY,IAAAI,EAAA,6BAnLZC,EAAmB,kCACnBC,EAA8B,4BAC9BC,EAA+B,mCAC/BC,EAA6E,iBAE7EC,EAA0B,sBAmB1B,MAAMC,EAAiB,CAACC,EAA4BC,IAAkC,CACpF,KAAM,CACJ,YAAAC,EAAc,CAAC,EACf,OAAAC,EAAS,GACT,MAAAC,EACA,OAAAC,EACA,YAAAC,EACA,KAAAC,EACA,WAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,gBAAAC,EACA,kBAAAC,EACA,WAAAC,EACA,WAAAC,CACF,EAAId,EACE,CAAE,iBAAAe,CAAiB,EAAIP,EACvB,CAAE,WAAAQ,EAAY,aAAAC,CAAa,EAAIf,EAE/BgB,EAA0BH,GAAoBb,GAAa,iBAE3DiB,KAAoB,UAAY,IAAI,EACpCC,KAAc,UAAgB,EAAK,EAEnC,CAACC,EAAMC,CAAO,KAAI,YAAgB,CAAC,CAAC,EAEpCC,KAAW,iBAAc,CAAE,MAAO,qBAAsB,CAAC,EAEzDC,EAA0BC,GAAoB,CAClD,MAAMC,KAAkB,aAAUD,GAAY,CAAC,CAAC,EAChD,GAAIP,EAAyB,CAC3B,MAAMS,EAAYD,EAAgB,UAAUE,GAAQA,EAAK,MAAM,EAC/D,GAAID,IAAc,GAAI,CACpB,MAAME,EACF,KAAK,IADWvB,EACPY,GAAyB,aAAe,EACxCA,GAAyB,aAAe,EADGQ,EAAgB,MAAM,EAE9EA,EAAgB,OAAOG,EAAa,EAAGX,CAAuB,CAChE,KAAO,CACLQ,EAAgB,OAAOC,EAAW,CAAC,EACnC,MAAME,EACF,KAAK,IADWvB,EACPY,GAAyB,aAAe,EACxCA,GAAyB,aAAe,EADGQ,EAAgB,MAAM,EAE9EA,EAAgB,OAAOG,EAAa,EAAGX,CAAuB,CAChE,CACF,CACA,OAAOQ,CACT,KAEA,uBAAoBzB,EAAK,KAAO,CAC9B,WAAY,CACVqB,EAAQ,CAAC,CAAC,CACZ,CACF,EAAE,EAEF,MAAMQ,EAAc,IAAM,CACxB,MAAMC,EAASZ,EAAkB,QACjC,GAAI,CAACY,EAAQ,OACb,MAAMC,EAAUD,EAAO,sBAAsB,GAAG,IAAM,QAAQ,YAAc,IAC5E,QAAQ,WAAW,CACjB,IAAKC,EACL,SAAU,QACZ,CAAC,CACH,EAEMC,EAAcC,GACXA,GAAS,YAAY,YAAY,QAI1C,sBAAU,IAAM,EACV7B,GAAQ,MAAQA,GAAQ,OACtBE,IAAS,GAAK,CAACgB,IACjBD,EAAQ,CAAC,CAAC,EAERjB,GAAQ,UACViB,EAAQa,GAAgB,CAEtB,MAAMC,EAAc/B,EAAO,UAAU,SAClC6B,GAAyB,CAACC,EAAa,KAAKE,GAAQA,EAAK,KAAOH,EAAQ,EAAE,CAC7E,EACA,IAAIR,EAAkB,CAAC,GAAGS,EAAc,GAAGC,CAAW,EAEtD,MAAME,EAAkBZ,EAAgB,SACtCE,GACE,EACE,CAACA,GAAM,YAAY,YAAY,SAC/BA,EAAK,kBACLA,GAAM,UAAU,KAAMA,GAAoCA,EAAK,gBAAgB,EAErF,EAEA,OAAAF,EAAkBA,EAAgB,SAChCE,GACE,CAACA,GAAM,YAAY,YAAY,SAC/BA,EAAK,kBACLA,GAAM,UAAU,KAAMA,GAAoCA,EAAK,gBAAgB,CACnF,EAEAF,EAAgB,KAAK,GAAGY,CAAe,EAEnCnC,IACFuB,EAAkBA,EAAgB,SAAUE,GAAc,CACxD,IAAIW,EAAS,GAEb,GADgBX,GAAM,SAAS,KAAMA,GAAcA,GAAM,cAAgB,OAAO,EAE9EW,EAASX,GAAM,UAAU,KACtBY,GACCA,GAAQ,SAAS,QAAUA,GAAQ,UAAU,CAAC,GAAK,OAAOA,GAAQ,UAAU,CAAC,GAAM,QACvF,MACK,CACL,MAAMC,EAAab,GAAM,WAAW,CAAC,GAAG,QACxCW,EAASE,GAAY,QAAUA,IAAa,CAAC,GAAK,OAAOA,IAAa,CAAC,GAAM,QAC/E,CACA,MAAO,CAAC,CAACF,CACX,CAAC,GAGCb,GAAiB,SAAYnB,IAAS,GAAK,CAACgB,GAAaA,KAC3DG,EAAkBF,EAAuBE,CAAe,GAEnDA,CACT,CAAC,EAGP,EAAG,CAACrB,GAAQ,SAAUE,EAAMgB,EAAUR,EAAkBZ,CAAM,CAAC,KAE/D,aAAU,IAAM,CACTkB,GAAM,QACPd,IAAS,GAAK,CAACgB,GACjBD,EAAQE,EAAuBH,CAAI,CAAC,CAExC,EAAG,CAACf,CAAW,CAAC,KAEhB,aAAU,IAAM,CACd,MAAMoC,EAAU,UAAU,gBAAgB,oCAAoC,EAC1ErB,GAAM,QAAU,CAACqB,GACnBhC,IAAoB,CAExB,EAAG,CAACW,CAAI,CAAC,KAGP,QAAC,OAAI,UAAU,6BAA6B,IAAKF,EAC/C,oBAAC,OACC,aAAW,MACT,sDACA,CACE,wCAAyCb,GAAe,CAACiB,EACzD,wCAAyC,CAACjB,GAAe,CAACiB,CAC5D,EACA,kBACF,EAEC,SAAAF,GAAM,MAAMO,GACPK,EAAWL,CAAI,EAAU,QAE3B,OAAC,EAAAe,QAAA,CACC,KAAMf,EAEN,WAAYZ,EACZ,WAAYR,EACZ,gBAAiB,CAAC,EAAGa,IAASV,IAAkB,EAAGU,CAAI,EACvD,kBAAmB,CAAC,EAAGA,IAAST,IAAoB,EAAGS,CAAI,GAJtDO,EAAK,EAKZ,CAEH,EACH,EACCnB,EACAc,GAAYlB,GAAQ,UAAU,eAC7B,QAAC,OACC,QAAS,IAAM,CACbQ,IAAaR,GAAQ,UAAU,SAAS,CAC1C,EACA,UAAU,qGAEV,oBAAC,QAAM,SAAAY,GAAgB,YAAY,KACnC,OAAC,OAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,IAAI,QAAQ,WAAW,KAAK,OACpF,mBAAC,QACC,EAAE,oVACF,KAAK,UACP,EACF,GACF,EACE,KACH,CAACM,GAAYnB,EAAQ,MACpB,QAAC,OAAI,UAAU,0DACb,oBAAC,UACC,KAAK,YACL,SAAU,CAACC,GAAQ,UAAU,iBAAmB,CAACgB,GAAM,OACvD,aAAW,MACT,wJACA,CACE,gCAAiC,CAAChB,GAAQ,UAAU,iBAAmB,CAACgB,GAAM,MAChF,CACF,EACA,QAAS,IAAM,CACbS,IAAc,EACdhB,IAAaT,GAAQ,UAAU,WAAW,CAC5C,EAEA,mBAAC,OAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OACtF,mBAAC,QACC,EAAE,mBACF,OAAO,UACP,eAAa,UACb,iBAAe,QACf,kBAAgB,QAClB,EACF,EACF,KACA,OAAC,UACC,KAAK,YACL,aAAW,MACT,wJACA,CACE,gCAAiC,CAACA,GAAQ,UAAU,aAAe,CAACgB,GAAM,MAC5E,CACF,EACA,SAAU,CAAChB,GAAQ,UAAU,aAAe,CAACgB,GAAM,OACnD,QAAS,IAAM,CACbS,IAAc,EACdjB,IAAaR,GAAQ,UAAU,SAAS,CAC1C,EAEA,mBAAC,OAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OACtF,mBAAC,QACC,EAAE,wBACF,OAAO,UACP,eAAa,UACb,iBAAe,QACf,kBAAgB,QAClB,EACF,EACF,GACF,EACE,MACN,CAEJ,EAEA,IAAOd,KAAQ,cAAWQ,CAAc",
4
+ "sourcesContent": ["import { cn } from '../../helpers/utils.js'\nimport { useMediaQuery } from 'react-responsive'\nimport FilterCardWrapItem from './FilterCardWrapItem'\nimport { useRef, useState, useEffect, forwardRef, useImperativeHandle } from 'react'\nimport type { Ref } from 'react'\nimport { cloneDeep } from 'es-toolkit'\n\ntype FilterCardWrapProps = {\n isSale?: boolean\n result?: any\n total: number\n shopifyData?: any\n currentPage?: number\n closeFilter: boolean\n page: number\n metafields: any\n noResultNode?: React.ReactNode\n refreshStarRating?: () => void\n onPrimaryChange?: (item: any, sku: string) => void\n onSecondaryChange?: (item: any, sku: string) => void\n onNextPage?: (v: string) => void\n onPrevPage?: (v: string) => void\n}\n\nconst FilterCardWrap = (props: FilterCardWrapProps, ref: Ref<unknown> | undefined) => {\n const {\n shopifyData = {},\n isSale = false,\n total,\n result,\n closeFilter,\n page,\n metafields,\n noResultNode,\n refreshStarRating,\n onPrimaryChange,\n onSecondaryChange,\n onNextPage,\n onPrevPage,\n } = props\n const { advertisingSpace } = metafields\n const { buttonText, loadMoreText } = shopifyData\n\n const currentAdvertisingSpace = advertisingSpace || shopifyData?.advertisingSpace\n\n const filterCardWrapRef = useRef<any>(null)\n const initRefresh = useRef<boolean>(false)\n\n const [data, setData] = useState<any[]>([])\n\n const isMobile = useMediaQuery({ query: '(max-width: 1024px)' })\n\n const handleAdvertisingSpace = (products: any[]) => {\n const updatedProducts = cloneDeep(products || [])\n if (currentAdvertisingSpace) {\n const findIndex = updatedProducts.findIndex(item => item.mImage)\n if (findIndex === -1) {\n const insertIndex = closeFilter\n ? Math.min(currentAdvertisingSpace?.maxLocation || 7, updatedProducts.length)\n : Math.min(currentAdvertisingSpace?.minLocation || 5, updatedProducts.length)\n updatedProducts.splice(insertIndex, 0, currentAdvertisingSpace)\n } else {\n updatedProducts.splice(findIndex, 1)\n const insertIndex = closeFilter\n ? Math.min(currentAdvertisingSpace?.maxLocation || 7, updatedProducts.length)\n : Math.min(currentAdvertisingSpace?.minLocation || 5, updatedProducts.length)\n updatedProducts.splice(insertIndex, 0, currentAdvertisingSpace)\n }\n }\n return updatedProducts\n }\n\n useImperativeHandle(ref, () => ({\n clearData() {\n setData([])\n },\n }))\n\n const onScrollTop = () => {\n const target = filterCardWrapRef.current\n if (!target) return\n const targetY = target.getBoundingClientRect()?.top + window?.pageYOffset - 120\n window?.scrollTo?.({\n top: targetY,\n behavior: 'smooth',\n })\n }\n\n const hasNoIndex = (product: { metafields: { seoSetting: { noindex: any } } }) => {\n return product?.metafields?.seoSetting?.noindex\n }\n\n // \u5904\u7406\u4EA7\u54C1\u6570\u636E\n useEffect(() => {\n if (result?.slug || result?.id) {\n if (page === 1 || !isMobile) {\n setData([])\n }\n if (result?.products) {\n setData(prevProducts => {\n // \u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B58\u5728\u4E8E prevProducts \u4E2D\uFF0C\u907F\u514D\u91CD\u590D\u6DFB\u52A0\n const newProducts = result.products?.filter?.(\n (product: { id: any }) => !prevProducts.some(prev => prev.id === product.id)\n )\n let updatedProducts = [...prevProducts, ...newProducts]\n /** \u5DF2\u552E\u5B8C\u7684\u4EA7\u54C1 */\n const soldOutProducts = updatedProducts.filter?.(\n item =>\n !(\n !item?.metafields?.seoSetting?.noindex &&\n item.availableForSale &&\n item?.variants?.some((item: { availableForSale: any }) => item.availableForSale)\n )\n )\n // \u8FC7\u6EE4\u6389 availableForSale \u4E3A false \u7684\u4EA7\u54C1\n updatedProducts = updatedProducts.filter?.(\n item =>\n !item?.metafields?.seoSetting?.noindex &&\n item.availableForSale &&\n item?.variants?.some((item: { availableForSale: any }) => item.availableForSale)\n )\n // \u5C06\u5DF2\u552E\u5B8C\u7684\u4EA7\u54C1\u6DFB\u52A0\u5230\u6700\u540E\n updatedProducts.push(...soldOutProducts)\n // \u5982\u679C\u662F\u6709\u6298\u6263\u7684\u4EA7\u54C1\uFF0C\u5219\u8FC7\u6EE4\u6389\u6CA1\u6709\u6298\u6263\u7684\u4EA7\u54C1\n if (isSale) {\n updatedProducts = updatedProducts.filter?.((item: any) => {\n let isShow = false\n const isColor = item?.options?.find((item: any) => item?.displayName === 'color')\n if (isColor) {\n isShow = item?.variants?.find(\n (params: any) =>\n params?.coupons?.length && params?.coupons?.[0] && typeof params?.coupons?.[0] === 'object'\n )\n } else {\n const isVariants = item?.variants?.[0]?.coupons\n isShow = isVariants?.length && isVariants?.[0] && typeof isVariants?.[0] === 'object'\n }\n return !!isShow\n })\n }\n // \u5982\u679C advertisingSpace \u5B58\u5728\u4E14\u5C1A\u672A\u6DFB\u52A0\u5230\u6570\u7EC4\u4E2D\n if (updatedProducts?.length && ((page === 1 && !isMobile) || isMobile)) {\n updatedProducts = handleAdvertisingSpace(updatedProducts)\n }\n return updatedProducts\n })\n }\n }\n }, [result?.products, page, isMobile, advertisingSpace, isSale])\n\n useEffect(() => {\n if (!data?.length) return\n if (page === 1 && !isMobile) {\n setData(handleAdvertisingSpace(data))\n }\n }, [closeFilter])\n\n useEffect(() => {\n const isClass = document?.querySelector?.('.yotpo-reviews-star-ratings-widget')\n if (data?.length && (!isClass || isMobile)) {\n refreshStarRating?.()\n }\n }, [data])\n\n return (\n <div className=\"filter-card-wrap-container\" ref={filterCardWrapRef}>\n <div\n className={cn(\n 'w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3',\n {\n 'laptop:grid-cols-4 tablet:grid-cols-3': closeFilter && !isMobile,\n 'laptop:grid-cols-3 tablet:grid-cols-2': !closeFilter && !isMobile,\n },\n 'filter-card-wrap'\n )}\n >\n {data?.map?.(item => {\n if (hasNoIndex(item)) return null\n return (\n <FilterCardWrapItem\n data={item}\n key={item.id}\n buttonText={buttonText}\n metafields={metafields}\n onPrimaryChange={(e, data) => onPrimaryChange?.(e, data)}\n onSecondaryChange={(e, data) => onSecondaryChange?.(e, data)}\n />\n )\n })}\n </div>\n {noResultNode}\n {isMobile && result?.pageInfo?.hasNextPage ? (\n <div\n onClick={() => {\n onNextPage?.(result?.pageInfo?.endCursor)\n }}\n className=\"mt-6 text-sm font-bold cursor-pointer flex items-center justify-center gap-1 filter-card-wrap-more\"\n >\n <span>{loadMoreText || 'View More'}</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"6\" viewBox=\"0 0 12 6\" fill=\"none\">\n <path\n d=\"M9.96967 0.21967C10.2626 -0.0732232 10.7373 -0.073223 11.0302 0.21967C11.3231 0.512563 11.3231 0.987324 11.0302 1.28022L6.53022 5.78022C6.23732 6.07311 5.76256 6.07311 5.46967 5.78022L0.96967 1.28022C0.676777 0.987324 0.676777 0.512563 0.96967 0.21967C1.26256 -0.0732233 1.73732 -0.0732233 2.03022 0.21967L5.99994 4.1894L9.96967 0.21967Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </div>\n ) : null}\n {!isMobile && total > 18 ? (\n <div className=\"mt-6 flex items-center justify-end gap-4 cursor-pointer\">\n <button\n name=\"perv page\"\n disabled={!result?.pageInfo?.hasPreviousPage || !data?.length}\n className={cn(\n 'flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]',\n {\n 'opacity-50 cursor-not-allowed': !result?.pageInfo?.hasPreviousPage || !data?.length,\n }\n )}\n onClick={() => {\n onScrollTop?.()\n onPrevPage?.(result?.pageInfo?.startCursor)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M12 5L7 10L12 15\"\n stroke=\"#3D3D3F\"\n stroke-width=\"1.66667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <button\n name=\"next page\"\n className={cn(\n 'flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]',\n {\n 'opacity-50 cursor-not-allowed': !result?.pageInfo?.hasNextPage || !data?.length,\n }\n )}\n disabled={!result?.pageInfo?.hasNextPage || !data?.length}\n onClick={() => {\n onScrollTop?.()\n onNextPage?.(result?.pageInfo?.endCursor)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M7.5 5L12.5 10L7.5 15\"\n stroke=\"#3D3D3F\"\n stroke-width=\"1.66667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n ) : null}\n </div>\n )\n}\n\nexport default forwardRef(FilterCardWrap)\n"],
5
+ "mappings": "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",
6
6
  "names": ["FilterCardWrap_exports", "__export", "FilterCardWrap_default", "__toCommonJS", "import_jsx_runtime", "import_utils", "import_react_responsive", "import_FilterCardWrapItem", "import_react", "import_es_toolkit", "FilterCardWrap", "props", "ref", "shopifyData", "isSale", "total", "result", "closeFilter", "page", "metafields", "noResultNode", "refreshStarRating", "onPrimaryChange", "onSecondaryChange", "onNextPage", "onPrevPage", "advertisingSpace", "buttonText", "loadMoreText", "currentAdvertisingSpace", "filterCardWrapRef", "initRefresh", "data", "setData", "isMobile", "handleAdvertisingSpace", "products", "updatedProducts", "findIndex", "item", "insertIndex", "onScrollTop", "target", "targetY", "hasNoIndex", "product", "prevProducts", "newProducts", "prev", "soldOutProducts", "isShow", "params", "isVariants", "isClass", "FilterCardWrapItem"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var q=Object.create;var p=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var B=(t,a)=>{for(var n in a)p(t,n,{get:a[n],enumerable:!0})},P=(t,a,n,d)=>{if(a&&typeof a=="object"||typeof a=="function")for(let l of M(a))!j.call(t,l)&&l!==n&&p(t,l,{get:()=>a[l],enumerable:!(d=F(a,l))||d.enumerable});return t};var H=(t,a,n)=>(n=t!=null?q(O(t)):{},P(a||!t||!t.__esModule?p(n,"default",{value:t,enumerable:!0}):n,t)),I=t=>P(p({},"__esModule",{value:!0}),t);var z={};B(z,{default:()=>_});module.exports=I(z);var c=require("react/jsx-runtime"),w=require("es-toolkit"),o=require("react"),D=H(require("../../../components/link")),b=require("../../../helpers/utils.js"),L=require("../../AiuiProvider/index.js");const g="All",X=t=>{const{metafields:a,tabs:n,onTabClick:d,tabShape:l="square",filtersPair:m,filtered:u,filtersData:f}=t,{name:h}=a,{pathname:C}=(0,L.useAiuiContext)(),k=(0,o.useRef)(null),[y,E]=(0,o.useState)([]),[T,R]=(0,o.useState)([]),W=e=>{const i=(0,w.cloneDeep)(u)||{};let s=i?.[r?.value]||[];e?.options===(f?.mainPair?.alltxt||h||g)?s=[]:s=[e?.value||e],i[r?.value]=s,s.length<=0&&Reflect.deleteProperty(i,r?.value),d?.({...i},e);const v=document.getElementById(`tab-${e?.label||e}`),x=k.current;if(v&&x){const A=v.offsetLeft,N=v.offsetWidth,S=x.offsetWidth,$=A-S/2+N/2;x.scrollTo({left:$,behavior:"smooth"})}},r=(0,o.useMemo)(()=>m?.find(e=>e.mainPair),[m]);return(0,o.useEffect)(()=>{if(n?.length)E(n);else{const e=r?.options||[],s=[{label:f?.mainPair?.alltxt||h||g,value:r?.value,options:f?.mainPair?.alltxt||h||g},...e];R(s)}},[r,f,n]),y?.length>0||T?.length>0?(0,c.jsx)("div",{ref:k,className:(0,b.cn)(l==="rounded"?"rounded-[28px]":"","tab-switch-wrap bg-tabs-list-bg relative flex gap-x-1 w-fit max-w-full overflow-x-auto overflow-y-hidden p-1 laptop:m-auto"),children:y?.length>0?y?.map?.(e=>(0,c.jsx)(D.default,{id:`tab-${e?.label}`,href:e?.href,className:(0,b.cn)("relative flex-1 shrink-0 whitespace-nowrap transition-all","text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline","lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary",l==="rounded"?"rounded-[28px]":"",e?.href&&e?.href===C?"bg-btn-primary-disabled-foreground":""),children:e?.label||""},e?.label)):T?.map?.(e=>(0,c.jsx)("div",{id:`tab-${e?.label||e}`,onClick:()=>W(e),className:(0,b.cn)("relative flex-1 shrink-0 whitespace-nowrap transition-all","text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline","lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary",l==="rounded"?"rounded-[28px]":"",u?.[r?.value]?.includes?.(e?.value||e)||!u?.[r?.value]?.length&&e?.options?"bg-btn-primary-disabled-foreground":""),children:e?.label||e},e?.value||e))}):null};var _=X;
1
+ "use strict";"use client";var q=Object.create;var f=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var B=(t,a)=>{for(var n in a)f(t,n,{get:a[n],enumerable:!0})},P=(t,a,n,d)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of M(a))!j.call(t,o)&&o!==n&&f(t,o,{get:()=>a[o],enumerable:!(d=F(a,o))||d.enumerable});return t};var H=(t,a,n)=>(n=t!=null?q(O(t)):{},P(a||!t||!t.__esModule?f(n,"default",{value:t,enumerable:!0}):n,t)),I=t=>P(f({},"__esModule",{value:!0}),t);var z={};B(z,{default:()=>_});module.exports=I(z);var c=require("react/jsx-runtime"),w=require("es-toolkit"),l=require("react"),D=H(require("../../../components/link")),b=require("../../../helpers/utils.js"),L=require("../../AiuiProvider/index.js");const g="All",X=t=>{const{metafields:a,tabs:n,onTabClick:d,tabShape:o="square",filtersPair:m,filtered:u,filtersData:p}=t,{name:h}=a,{pathname:C}=(0,L.useAiuiContext)(),k=(0,l.useRef)(null),[y,E]=(0,l.useState)([]),[T,R]=(0,l.useState)([]),W=e=>{const i=(0,w.cloneDeep)(u)||{};let s=i?.[r?.value]||[];e?.options===(p?.mainPair?.alltxt||h||g)?s=[]:s=[e?.value||e],i[r?.value]=s,s.length<=0&&Reflect.deleteProperty(i,r?.value),d?.({...i},e);const v=document.getElementById(`tab-${e?.label||e}`),x=k.current;if(v&&x){const A=v.offsetLeft,N=v.offsetWidth,S=x.offsetWidth,$=A-S/2+N/2;x.scrollTo({left:$,behavior:"smooth"})}},r=(0,l.useMemo)(()=>m?.find(e=>e.mainPair),[m]);return(0,l.useEffect)(()=>{if(n?.length)E(n);else{const e=r?.options||[],s=[{label:p?.mainPair?.alltxt||h||g,value:r?.value,options:p?.mainPair?.alltxt||h||g},...e];R(s)}},[r,p,n]),y?.length>0||T?.length>0?(0,c.jsx)("div",{ref:k,className:(0,b.cn)(o==="rounded"?"rounded-[28px]":"","tab-switch-wrap bg-tabs-list-bg relative flex gap-x-1 w-fit max-w-full overflow-x-auto overflow-y-hidden p-1 laptop:m-auto"),children:y?.length>0?y?.map?.(e=>(0,c.jsx)(D.default,{id:`tab-${e?.label}`,href:e?.href,className:(0,b.cn)("relative flex-1 shrink-0 whitespace-nowrap transition-all cursor-pointer","text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline","lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary",o==="rounded"?"rounded-[28px]":"",e?.href&&e?.href===C?"bg-btn-primary-disabled-foreground":""),children:e?.label||""},e?.label)):T?.map?.(e=>(0,c.jsx)("div",{id:`tab-${e?.label||e}`,onClick:()=>W(e),className:(0,b.cn)("relative flex-1 shrink-0 whitespace-nowrap transition-all cursor-pointer","text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline","lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary",o==="rounded"?"rounded-[28px]":"",u?.[r?.value]?.includes?.(e?.value||e)||!u?.[r?.value]?.length&&e?.options?"bg-btn-primary-disabled-foreground":""),children:e?.label||e},e?.value||e))}):null};var _=X;
2
2
  //# sourceMappingURL=TabFilter.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/biz-components/CollectionsFilters/component/TabFilter.tsx"],
4
- "sourcesContent": ["'use client'\nimport { remove, cloneDeep } from 'es-toolkit'\nimport React, { useRef, useState, useMemo, useEffect } from 'react'\nimport Link from '../../../components/link'\nimport { cn } from '../../../helpers/utils.js'\nimport { useAiuiContext } from '../../AiuiProvider/index.js'\ninterface TabsProps {\n tabs: any[]\n filtered: any\n metafields: any\n filtersPair: any\n filtersData: any\n tabShape?: 'rounded' | 'square'\n onTabClick?: (value: any, item: any) => void\n}\n\nconst ALL_TEXT = 'All'\n\nconst TabFilter: React.FC<TabsProps> = (props: TabsProps) => {\n const { metafields, tabs, onTabClick, tabShape = 'square', filtersPair, filtered, filtersData } = props\n const { name } = metafields\n\n const { pathname } = useAiuiContext()\n\n const tabRef = useRef<HTMLDivElement>(null)\n const [linkData, setLinkData] = useState<any[]>([])\n const [tabData, setTabData] = useState<any[]>([])\n\n const handleTabClick = (item: any) => {\n const clonefiltered = cloneDeep(filtered) || {}\n let current = clonefiltered?.[mainPair?.value] || []\n if (item?.options === (filtersData?.mainPair?.alltxt || name || ALL_TEXT)) {\n current = []\n } else {\n current = [item?.value || item]\n }\n clonefiltered[mainPair?.value] = current\n if (current.length <= 0) {\n Reflect.deleteProperty(clonefiltered, mainPair?.value)\n }\n onTabClick?.({ ...clonefiltered }, item)\n\n // \u83B7\u53D6\u5F53\u524D\u9009\u4E2D\u7684 tab \u5E76\u8BA1\u7B97\u4E0B\u5212\u7EBF\u4F4D\u7F6E\n const tabElement = document.getElementById(`tab-${item?.label || item}`)\n // **\u8BA1\u7B97\u6EDA\u52A8\u4F4D\u7F6E**\n const container = tabRef.current\n if (tabElement && container) {\n const tabLeft = tabElement.offsetLeft // \u9009\u4E2D tab \u7684\u5DE6\u4FA7\u504F\u79FB\u91CF\n const tabWidth = tabElement.offsetWidth\n const containerWidth = container.offsetWidth\n // \u8BA1\u7B97\u76EE\u6807\u6EDA\u52A8\u4F4D\u7F6E\uFF0C\u4F7F tab \u5C45\u4E2D\n const scrollTo = tabLeft - containerWidth / 2 + tabWidth / 2\n container.scrollTo({\n left: scrollTo,\n behavior: 'smooth',\n })\n }\n }\n\n const mainPair = useMemo(() => {\n return filtersPair?.find((item: any) => item.mainPair)\n }, [filtersPair])\n\n useEffect(() => {\n if (tabs?.length) {\n setLinkData(tabs)\n } else {\n const currentData = mainPair?.options || []\n const allObject = {\n label: filtersData?.mainPair?.alltxt || name || ALL_TEXT,\n value: mainPair?.value,\n options: filtersData?.mainPair?.alltxt || name || ALL_TEXT,\n }\n const tabData = [allObject, ...currentData]\n setTabData(tabData)\n }\n }, [mainPair, filtersData, tabs])\n\n return linkData?.length > 0 || tabData?.length > 0 ? (\n <div\n ref={tabRef}\n className={cn(\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n 'tab-switch-wrap bg-tabs-list-bg relative flex gap-x-1 w-fit max-w-full overflow-x-auto overflow-y-hidden p-1 laptop:m-auto'\n )}\n >\n {linkData?.length > 0\n ? linkData?.map?.((item: any) => (\n <Link\n key={item?.label}\n id={`tab-${item?.label}`}\n href={item?.href}\n className={cn(\n 'relative flex-1 shrink-0 whitespace-nowrap transition-all',\n 'text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline',\n 'lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary',\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n item?.href && item?.href === pathname ? 'bg-btn-primary-disabled-foreground' : ''\n )}\n >\n {item?.label || ''}\n </Link>\n ))\n : tabData?.map?.((item: any) => {\n return (\n <div\n key={item?.value || item}\n id={`tab-${item?.label || item}`}\n onClick={() => handleTabClick(item)}\n className={cn(\n 'relative flex-1 shrink-0 whitespace-nowrap transition-all',\n 'text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline',\n 'lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary',\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n filtered?.[mainPair?.value]?.includes?.(item?.value || item) ||\n (!filtered?.[mainPair?.value]?.length && item?.options)\n ? 'bg-btn-primary-disabled-foreground'\n : ''\n )}\n >\n {item?.label || item}\n </div>\n )\n })}\n </div>\n ) : null\n}\n\nexport default TabFilter\n"],
5
- "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAwFU,IAAAI,EAAA,6BAvFVC,EAAkC,sBAClCC,EAA4D,iBAC5DC,EAAiB,uCACjBC,EAAmB,qCACnBC,EAA+B,uCAW/B,MAAMC,EAAW,MAEXC,EAAkCC,GAAqB,CAC3D,KAAM,CAAE,WAAAC,EAAY,KAAAC,EAAM,WAAAC,EAAY,SAAAC,EAAW,SAAU,YAAAC,EAAa,SAAAC,EAAU,YAAAC,CAAY,EAAIP,EAC5F,CAAE,KAAAQ,CAAK,EAAIP,EAEX,CAAE,SAAAQ,CAAS,KAAI,kBAAe,EAE9BC,KAAS,UAAuB,IAAI,EACpC,CAACC,EAAUC,CAAW,KAAI,YAAgB,CAAC,CAAC,EAC5C,CAACC,EAASC,CAAU,KAAI,YAAgB,CAAC,CAAC,EAE1CC,EAAkBC,GAAc,CACpC,MAAMC,KAAgB,aAAUX,CAAQ,GAAK,CAAC,EAC9C,IAAIY,EAAUD,IAAgBE,GAAU,KAAK,GAAK,CAAC,EAC/CH,GAAM,WAAaT,GAAa,UAAU,QAAUC,GAAQV,GAC9DoB,EAAU,CAAC,EAEXA,EAAU,CAACF,GAAM,OAASA,CAAI,EAEhCC,EAAcE,GAAU,KAAK,EAAID,EAC7BA,EAAQ,QAAU,GACpB,QAAQ,eAAeD,EAAeE,GAAU,KAAK,EAEvDhB,IAAa,CAAE,GAAGc,CAAc,EAAGD,CAAI,EAGvC,MAAMI,EAAa,SAAS,eAAe,OAAOJ,GAAM,OAASA,CAAI,EAAE,EAEjEK,EAAYX,EAAO,QACzB,GAAIU,GAAcC,EAAW,CAC3B,MAAMC,EAAUF,EAAW,WACrBG,EAAWH,EAAW,YACtBI,EAAiBH,EAAU,YAE3BI,EAAWH,EAAUE,EAAiB,EAAID,EAAW,EAC3DF,EAAU,SAAS,CACjB,KAAMI,EACN,SAAU,QACZ,CAAC,CACH,CACF,EAEMN,KAAW,WAAQ,IAChBd,GAAa,KAAMW,GAAcA,EAAK,QAAQ,EACpD,CAACX,CAAW,CAAC,EAEhB,sBAAU,IAAM,CACd,GAAIH,GAAM,OACRU,EAAYV,CAAI,MACX,CACL,MAAMwB,EAAcP,GAAU,SAAW,CAAC,EAMpCN,EAAU,CALE,CAChB,MAAON,GAAa,UAAU,QAAUC,GAAQV,EAChD,MAAOqB,GAAU,MACjB,QAASZ,GAAa,UAAU,QAAUC,GAAQV,CACpD,EAC4B,GAAG4B,CAAW,EAC1CZ,EAAWD,CAAO,CACpB,CACF,EAAG,CAACM,EAAUZ,EAAaL,CAAI,CAAC,EAEzBS,GAAU,OAAS,GAAKE,GAAS,OAAS,KAC/C,OAAC,OACC,IAAKH,EACL,aAAW,MACTN,IAAa,UAAY,iBAAmB,GAC5C,4HACF,EAEC,SAAAO,GAAU,OAAS,EAChBA,GAAU,MAAOK,MACjB,OAAC,EAAAW,QAAA,CAEC,GAAI,OAAOX,GAAM,KAAK,GACtB,KAAMA,GAAM,KACZ,aAAW,MACT,4DACA,oFACA,0HACAZ,IAAa,UAAY,iBAAmB,GAC5CY,GAAM,MAAQA,GAAM,OAASP,EAAW,qCAAuC,EACjF,EAEC,SAAAO,GAAM,OAAS,IAXXA,GAAM,KAYb,CACD,EACCH,GAAS,MAAOG,MAEd,OAAC,OAEC,GAAI,OAAOA,GAAM,OAASA,CAAI,GAC9B,QAAS,IAAMD,EAAeC,CAAI,EAClC,aAAW,MACT,4DACA,oFACA,0HACAZ,IAAa,UAAY,iBAAmB,GAC5CE,IAAWa,GAAU,KAAK,GAAG,WAAWH,GAAM,OAASA,CAAI,GACxD,CAACV,IAAWa,GAAU,KAAK,GAAG,QAAUH,GAAM,QAC7C,qCACA,EACN,EAEC,SAAAA,GAAM,OAASA,GAdXA,GAAM,OAASA,CAetB,CAEH,EACL,EACE,IACN,EAEA,IAAO1B,EAAQS",
4
+ "sourcesContent": ["'use client'\nimport { remove, cloneDeep } from 'es-toolkit'\nimport React, { useRef, useState, useMemo, useEffect } from 'react'\nimport Link from '../../../components/link'\nimport { cn } from '../../../helpers/utils.js'\nimport { useAiuiContext } from '../../AiuiProvider/index.js'\ninterface TabsProps {\n tabs: any[]\n filtered: any\n metafields: any\n filtersPair: any\n filtersData: any\n tabShape?: 'rounded' | 'square'\n onTabClick?: (value: any, item: any) => void\n}\n\nconst ALL_TEXT = 'All'\n\nconst TabFilter: React.FC<TabsProps> = (props: TabsProps) => {\n const { metafields, tabs, onTabClick, tabShape = 'square', filtersPair, filtered, filtersData } = props\n const { name } = metafields\n\n const { pathname } = useAiuiContext()\n\n const tabRef = useRef<HTMLDivElement>(null)\n const [linkData, setLinkData] = useState<any[]>([])\n const [tabData, setTabData] = useState<any[]>([])\n\n const handleTabClick = (item: any) => {\n const clonefiltered = cloneDeep(filtered) || {}\n let current = clonefiltered?.[mainPair?.value] || []\n if (item?.options === (filtersData?.mainPair?.alltxt || name || ALL_TEXT)) {\n current = []\n } else {\n current = [item?.value || item]\n }\n clonefiltered[mainPair?.value] = current\n if (current.length <= 0) {\n Reflect.deleteProperty(clonefiltered, mainPair?.value)\n }\n onTabClick?.({ ...clonefiltered }, item)\n\n // \u83B7\u53D6\u5F53\u524D\u9009\u4E2D\u7684 tab \u5E76\u8BA1\u7B97\u4E0B\u5212\u7EBF\u4F4D\u7F6E\n const tabElement = document.getElementById(`tab-${item?.label || item}`)\n // **\u8BA1\u7B97\u6EDA\u52A8\u4F4D\u7F6E**\n const container = tabRef.current\n if (tabElement && container) {\n const tabLeft = tabElement.offsetLeft // \u9009\u4E2D tab \u7684\u5DE6\u4FA7\u504F\u79FB\u91CF\n const tabWidth = tabElement.offsetWidth\n const containerWidth = container.offsetWidth\n // \u8BA1\u7B97\u76EE\u6807\u6EDA\u52A8\u4F4D\u7F6E\uFF0C\u4F7F tab \u5C45\u4E2D\n const scrollTo = tabLeft - containerWidth / 2 + tabWidth / 2\n container.scrollTo({\n left: scrollTo,\n behavior: 'smooth',\n })\n }\n }\n\n const mainPair = useMemo(() => {\n return filtersPair?.find((item: any) => item.mainPair)\n }, [filtersPair])\n\n useEffect(() => {\n if (tabs?.length) {\n setLinkData(tabs)\n } else {\n const currentData = mainPair?.options || []\n const allObject = {\n label: filtersData?.mainPair?.alltxt || name || ALL_TEXT,\n value: mainPair?.value,\n options: filtersData?.mainPair?.alltxt || name || ALL_TEXT,\n }\n const tabData = [allObject, ...currentData]\n setTabData(tabData)\n }\n }, [mainPair, filtersData, tabs])\n\n return linkData?.length > 0 || tabData?.length > 0 ? (\n <div\n ref={tabRef}\n className={cn(\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n 'tab-switch-wrap bg-tabs-list-bg relative flex gap-x-1 w-fit max-w-full overflow-x-auto overflow-y-hidden p-1 laptop:m-auto'\n )}\n >\n {linkData?.length > 0\n ? linkData?.map?.((item: any) => (\n <Link\n key={item?.label}\n id={`tab-${item?.label}`}\n href={item?.href}\n className={cn(\n 'relative flex-1 shrink-0 whitespace-nowrap transition-all cursor-pointer',\n 'text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline',\n 'lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary',\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n item?.href && item?.href === pathname ? 'bg-btn-primary-disabled-foreground' : ''\n )}\n >\n {item?.label || ''}\n </Link>\n ))\n : tabData?.map?.((item: any) => {\n return (\n <div\n key={item?.value || item}\n id={`tab-${item?.label || item}`}\n onClick={() => handleTabClick(item)}\n className={cn(\n 'relative flex-1 shrink-0 whitespace-nowrap transition-all cursor-pointer',\n 'text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline',\n 'lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary',\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n filtered?.[mainPair?.value]?.includes?.(item?.value || item) ||\n (!filtered?.[mainPair?.value]?.length && item?.options)\n ? 'bg-btn-primary-disabled-foreground'\n : ''\n )}\n >\n {item?.label || item}\n </div>\n )\n })}\n </div>\n ) : null\n}\n\nexport default TabFilter\n"],
5
+ "mappings": "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",
6
6
  "names": ["TabFilter_exports", "__export", "TabFilter_default", "__toCommonJS", "import_jsx_runtime", "import_es_toolkit", "import_react", "import_link", "import_utils", "import_AiuiProvider", "ALL_TEXT", "TabFilter", "props", "metafields", "tabs", "onTabClick", "tabShape", "filtersPair", "filtered", "filtersData", "name", "pathname", "tabRef", "linkData", "setLinkData", "tabData", "setTabData", "handleTabClick", "item", "clonefiltered", "current", "mainPair", "tabElement", "container", "tabLeft", "tabWidth", "containerWidth", "scrollTo", "currentData", "Link"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/biz-components/CollectionsFilters/component/filtersFun.ts"],
4
- "sourcesContent": ["const handleFilters = (filtered: any) => {\n const allFilters: any[] = []\n let chunkNumber: number = 18\n Object.keys(filtered).forEach(key => {\n if (key === 'price') {\n const priceOptions =\n filtered[key]\n ?.join('|')\n ?.split('|')\n ?.map((item: any) => Number(item)) || []\n const maxValue = Math.max(...priceOptions)\n const minValue = Math.min(...priceOptions)\n maxValue &&\n minValue &&\n allFilters.push({\n price: {\n max: maxValue,\n min: minValue,\n },\n })\n }\n if (key.includes('filter.p.tag')) {\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n tag: item,\n })\n })\n }\n if (key.includes('filter.p.product_type')) {\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n productType: item,\n })\n })\n }\n if (key.includes('filter.v.availability')) {\n filtered[key]?.forEach((item: string) => {\n const val = item.split('filter.v.availability.')?.pop()\n allFilters.push({\n available: val === '1',\n })\n })\n }\n if (key.includes('filter.v.m.filter.')) {\n const metafieldsKey = key.split('filter.v.m.filter.')?.pop()\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n variantMetafield: {\n namespace: 'filter',\n key: metafieldsKey,\n value: item,\n },\n })\n })\n }\n if (key.includes('offers')) {\n chunkNumber = 150\n }\n })\n return { allFilters: allFilters, chunkNumber: chunkNumber }\n}\n\nconst handleSortKeyAndReverse = (sortList: any, sortKeyIndx: number) => {\n if (sortList && sortKeyIndx >= 0) {\n const current = sortList?.[sortKeyIndx]\n if (!current?.type?.includes('filter.')) {\n const [sortKey, reverse] = current?.type?.split('|')\n return [sortKey, !!reverse]\n }\n }\n return ['COLLECTION_DEFAULT', false]\n}\n\nconst handleChunkNumber = (filtered: any) => {\n if (Object.keys(filtered)?.some(key => key === 'offers')) return 150\n return 18\n}\n\n\nconst handleFilterOptions = (result: any, filterPrice: any, shop_filters_pair: any, filterProductData?: any) => {\n const Offers = {\n label: shop_filters_pair?.filter_txt?.offers?.name || 'Offers',\n value: 'offers',\n mainPair: false,\n options: [\n {\n label: shop_filters_pair?.filter_txt?.offers?.onsale || 'On Sale',\n value: 'onsale',\n },\n ],\n }\n filterPrice.mainPair = false\n const initOption = [filterPrice, Offers]\n return (\n result?.filters &&\n result.filters.reduce((ac: any, cu: any) => {\n const filter = {\n label: cu?.label,\n options: [],\n value: cu?.id,\n mainPair: filterProductData?.mainPair?.type === cu?.id ? true : false,\n }\n // if (cu?.id === 'filter.p.tag') return ac\n if (cu?.id === 'filter.v.price') return ac\n if (cu?.id === 'filter.p.product_type') return ac\n if (cu?.id === 'filter.v.availability') {\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n if (cuV.id === 'filter.v.availability.1') {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.id,\n })\n }\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }\n if (cu?.id === 'filter.v.m.filter.capacity') {\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n if (cuV?.label?.includes('Over')) {\n acV.unshift({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n } else {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n }\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }, initOption)\n )\n}\n\nfunction getComponentData(\n metafields: any,\n dataKey: string,\n variant: any = null,\n components: any = null\n) {\n // console.log(\"metafields\", metafields)\n // \u83B7\u53D6 component \u7684\u6587\u6848\n\n let data = {}\n if (components) {\n data = components[dataKey?.trim()] || {}\n } else {\n data = metafields?.components ? metafields.components[dataKey?.trim()] : {}\n }\n\n if (variant) {\n // \u5982\u679C\u6709\u4E14 variant \u6709\u5BF9\u5E94\u6587\u6848\uFF0Cvariant \u8986\u76D6 component\n const { variantsMetafields = {} } =\n components || metafields?.components || {}\n\n const variantMetafields = Array.isArray(variantsMetafields)\n ? variantsMetafields?.find((f) => f.id === variant?.id)\n : {}\n if (\n variantMetafields?.metafields &&\n variantMetafields.metafields[dataKey]\n ) {\n data = variantMetafields.metafields[dataKey]\n }\n }\n\n return {\n key: dataKey.split('_')[0],\n data,\n }\n}\n\nexport { handleFilters, handleSortKeyAndReverse, handleChunkNumber, handleFilterOptions, getComponentData }"],
4
+ "sourcesContent": ["const handleFilters = (filtered: any) => {\n const allFilters: any[] = []\n let chunkNumber: number = 18\n Object.keys(filtered).forEach(key => {\n if (key === 'price') {\n const priceOptions =\n filtered[key]\n ?.join('|')\n ?.split('|')\n ?.map((item: any) => Number(item)) || []\n const maxValue = Math.max(...priceOptions)\n const minValue = Math.min(...priceOptions)\n maxValue &&\n minValue &&\n allFilters.push({\n price: {\n max: maxValue,\n min: minValue,\n },\n })\n }\n if (key.includes('filter.p.tag')) {\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n tag: item,\n })\n })\n }\n if (key.includes('filter.p.product_type')) {\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n productType: item,\n })\n })\n }\n if (key.includes('filter.v.availability')) {\n filtered[key]?.forEach((item: string) => {\n const val = item.split('filter.v.availability.')?.pop()\n allFilters.push({\n available: val === '1',\n })\n })\n }\n if (key.includes('filter.v.m.filter.')) {\n const metafieldsKey = key.split('filter.v.m.filter.')?.pop()\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n variantMetafield: {\n namespace: 'filter',\n key: metafieldsKey,\n value: item,\n },\n })\n })\n }\n if (key.includes('offers')) {\n chunkNumber = 150\n }\n })\n return { allFilters: allFilters, chunkNumber: chunkNumber }\n}\n\nconst handleSortKeyAndReverse = (sortList: any, sortKeyIndx: number) => {\n if (sortList && sortKeyIndx >= 0) {\n const current = sortList?.[sortKeyIndx]\n if (!current?.type?.includes('filter.')) {\n const [sortKey, reverse] = current?.type?.split('|')\n return [sortKey, !!reverse]\n }\n }\n return ['COLLECTION_DEFAULT', false]\n}\n\nconst handleChunkNumber = (filtered: any) => {\n if (Object.keys(filtered)?.some(key => key === 'offers')) return 150\n return 18\n}\n\n\nconst handleFilterOptions = (result: any, filterPrice: any, shop_filters_pair: any, filterProductData?: any) => {\n const Offers = {\n label: shop_filters_pair?.filter_txt?.offers?.name || 'Offers',\n value: 'offers',\n mainPair: false,\n options: [\n {\n label: shop_filters_pair?.filter_txt?.offers?.onsale || 'On Sale',\n value: 'onsale',\n },\n ],\n }\n filterPrice.mainPair = false\n const initOption = [filterPrice, Offers]\n return (\n result?.filters &&\n result.filters.reduce((ac: any, cu: any) => {\n const filter = {\n label: cu?.label,\n options: [],\n value: cu?.id,\n mainPair: filterProductData?.mainPair?.type === cu?.id ? true : false,\n }\n // if (cu?.id === 'filter.p.tag') return ac\n if (cu?.id === 'filter.v.price') return ac\n if (cu?.id === 'filter.p.product_type') return ac\n if (cu?.id === 'filter.v.availability') {\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n if (cuV.id === 'filter.v.availability.1') {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.id,\n })\n }\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }\n if (cu?.id === 'filter.v.m.filter.capacity') {\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n if (cuV?.label?.includes('Over')) {\n acV.unshift({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n } else {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n }\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }, initOption)\n )\n}\n\nfunction getComponentData(\n metafields: any,\n dataKey: string,\n variant: any = null,\n components: any = null\n) {\n // console.log(\"metafields\", metafields)\n // \u83B7\u53D6 component \u7684\u6587\u6848\n\n let data = {}\n if (components) {\n data = components[dataKey?.trim()] || {}\n } else {\n data = metafields?.components ? metafields.components[dataKey?.trim()] : {}\n }\n\n if (variant) {\n // \u5982\u679C\u6709\u4E14 variant \u6709\u5BF9\u5E94\u6587\u6848\uFF0Cvariant \u8986\u76D6 component\n const { variantsMetafields = {} } =\n components || metafields?.components || {}\n\n const variantMetafields = Array.isArray(variantsMetafields)\n ? variantsMetafields?.find((f) => f.id === variant?.id)\n : {}\n if (\n variantMetafields?.metafields &&\n variantMetafields.metafields[dataKey]\n ) {\n data = variantMetafields.metafields[dataKey]\n }\n }\n\n return {\n key: dataKey.split('_')[0],\n data,\n }\n}\n\nexport { handleFilters, handleSortKeyAndReverse, handleChunkNumber, handleFilterOptions, getComponentData }\n"],
5
5
  "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,EAAA,sBAAAC,EAAA,wBAAAC,EAAA,kBAAAC,EAAA,4BAAAC,IAAA,eAAAC,EAAAP,GAAA,MAAMK,EAAiBG,GAAkB,CACvC,MAAMC,EAAoB,CAAC,EAC3B,IAAIC,EAAsB,GAC1B,cAAO,KAAKF,CAAQ,EAAE,QAAQG,GAAO,CACnC,GAAIA,IAAQ,QAAS,CACnB,MAAMC,EACJJ,EAASG,CAAG,GACR,KAAK,GAAG,GACR,MAAM,GAAG,GACT,IAAKE,GAAc,OAAOA,CAAI,CAAC,GAAK,CAAC,EACrCC,EAAW,KAAK,IAAI,GAAGF,CAAY,EACnCG,EAAW,KAAK,IAAI,GAAGH,CAAY,EACzCE,GACEC,GACAN,EAAW,KAAK,CACd,MAAO,CACL,IAAKK,EACL,IAAKC,CACP,CACF,CAAC,CACL,CAuBA,GAtBIJ,EAAI,SAAS,cAAc,GAC7BH,EAASG,CAAG,GAAG,QAASE,GAAc,CACpCJ,EAAW,KAAK,CACd,IAAKI,CACP,CAAC,CACH,CAAC,EAECF,EAAI,SAAS,uBAAuB,GACtCH,EAASG,CAAG,GAAG,QAASE,GAAc,CACpCJ,EAAW,KAAK,CACd,YAAaI,CACf,CAAC,CACH,CAAC,EAECF,EAAI,SAAS,uBAAuB,GACtCH,EAASG,CAAG,GAAG,QAASE,GAAiB,CACvC,MAAMG,EAAMH,EAAK,MAAM,wBAAwB,GAAG,IAAI,EACtDJ,EAAW,KAAK,CACd,UAAWO,IAAQ,GACrB,CAAC,CACH,CAAC,EAECL,EAAI,SAAS,oBAAoB,EAAG,CACtC,MAAMM,EAAgBN,EAAI,MAAM,oBAAoB,GAAG,IAAI,EAC3DH,EAASG,CAAG,GAAG,QAASE,GAAc,CACpCJ,EAAW,KAAK,CACd,iBAAkB,CAChB,UAAW,SACX,IAAKQ,EACL,MAAOJ,CACT,CACF,CAAC,CACH,CAAC,CACH,CACIF,EAAI,SAAS,QAAQ,IACvBD,EAAc,IAElB,CAAC,EACM,CAAE,WAAYD,EAAY,YAAaC,CAAY,CAC5D,EAEMJ,EAA0B,CAACY,EAAeC,IAAwB,CACtE,GAAID,GAAYC,GAAe,EAAG,CAC9B,MAAMC,EAAUF,IAAWC,CAAW,EACtC,GAAI,CAACC,GAAS,MAAM,SAAS,SAAS,EAAG,CACvC,KAAM,CAACC,EAASC,CAAO,EAAIF,GAAS,MAAM,MAAM,GAAG,EACnD,MAAO,CAACC,EAAS,CAAC,CAACC,CAAO,CAC5B,CACF,CACA,MAAO,CAAC,qBAAsB,EAAK,CACvC,EAEMnB,EAAqBK,GACrB,OAAO,KAAKA,CAAQ,GAAG,KAAKG,GAAOA,IAAQ,QAAQ,EAAU,IAC1D,GAIHP,EAAsB,CAACmB,EAAaC,EAAkBC,EAAwBC,IAA4B,CAC5G,MAAMC,EAAS,CACb,MAAOF,GAAmB,YAAY,QAAQ,MAAQ,SACtD,MAAO,SACP,SAAU,GACV,QAAS,CACP,CACE,MAAOA,GAAmB,YAAY,QAAQ,QAAU,UACxD,MAAO,QACT,CACF,CACF,EACAD,EAAY,SAAW,GACvB,MAAMI,EAAa,CAACJ,EAAaG,CAAM,EACvC,OACEJ,GAAQ,SACRA,EAAO,QAAQ,OAAO,CAACM,EAASC,IAAY,CAC1C,MAAMC,EAAS,CACb,MAAOD,GAAI,MACX,QAAS,CAAC,EACV,MAAOA,GAAI,GACX,SAAUJ,GAAmB,UAAU,OAASI,GAAI,EACtD,EAGA,OADIA,GAAI,KAAO,kBACXA,GAAI,KAAO,wBAAgCD,EAC3CC,GAAI,KAAO,yBACbC,EAAO,QAAUD,EAAG,OAAO,OAAO,CAACE,EAAUC,KACvCA,EAAI,KAAO,2BACbD,EAAI,KAAK,CACP,MAAOC,EAAI,MACX,MAAOA,EAAI,MACX,MAAOA,EAAI,EACb,CAAC,EAEI,CAAC,GAAGD,CAAG,GACb,CAAC,CAAC,EACLH,EAAG,KAAKE,CAAM,EACP,CAAC,GAAGF,CAAE,GAEXC,GAAI,KAAO,8BACbC,EAAO,QAAUD,EAAG,OAAO,OAAO,CAACE,EAAUC,KACvCA,GAAK,OAAO,SAAS,MAAM,EAC7BD,EAAI,QAAQ,CACV,MAAOC,EAAI,MACX,MAAOA,EAAI,MACX,MAAOA,EAAI,KACb,CAAC,EAEDD,EAAI,KAAK,CACP,MAAOC,EAAI,MACX,MAAOA,EAAI,MACX,MAAOA,EAAI,KACb,CAAC,EAEI,CAAC,GAAGD,CAAG,GACb,CAAC,CAAC,EACLH,EAAG,KAAKE,CAAM,EACP,CAAC,GAAGF,CAAE,IAEfE,EAAO,QAAUD,EAAG,OAAO,OAAO,CAACE,EAAUC,KAC3CD,EAAI,KAAK,CACP,MAAOC,EAAI,MACX,MAAOA,EAAI,MACX,MAAOA,EAAI,KACb,CAAC,EACM,CAAC,GAAGD,CAAG,GACb,CAAC,CAAC,EACLH,EAAG,KAAKE,CAAM,EACP,CAAC,GAAGF,CAAE,EACf,EAAGD,CAAU,CAEnB,EAEA,SAAS1B,EACPgC,EACAC,EACAC,EAAe,KACfC,EAAkB,KAClB,CAIA,IAAIC,EAAO,CAAC,EAOZ,GANID,EACFC,EAAOD,EAAWF,GAAS,KAAK,CAAC,GAAK,CAAC,EAEvCG,EAAOJ,GAAY,WAAaA,EAAW,WAAWC,GAAS,KAAK,CAAC,EAAI,CAAC,EAGxEC,EAAS,CAEX,KAAM,CAAE,mBAAAG,EAAqB,CAAC,CAAE,EAC9BF,GAAcH,GAAY,YAAc,CAAC,EAErCM,EAAoB,MAAM,QAAQD,CAAkB,EACtDA,GAAoB,KAAME,GAAMA,EAAE,KAAOL,GAAS,EAAE,EACpD,CAAC,EAEHI,GAAmB,YACnBA,EAAkB,WAAWL,CAAO,IAEpCG,EAAOE,EAAkB,WAAWL,CAAO,EAE/C,CAEA,MAAO,CACL,IAAKA,EAAQ,MAAM,GAAG,EAAE,CAAC,EACzB,KAAAG,CACF,CACF",
6
6
  "names": ["filtersFun_exports", "__export", "getComponentData", "handleChunkNumber", "handleFilterOptions", "handleFilters", "handleSortKeyAndReverse", "__toCommonJS", "filtered", "allFilters", "chunkNumber", "key", "priceOptions", "item", "maxValue", "minValue", "val", "metafieldsKey", "sortList", "sortKeyIndx", "current", "sortKey", "reverse", "result", "filterPrice", "shop_filters_pair", "filterProductData", "Offers", "initOption", "ac", "cu", "filter", "acV", "cuV", "metafields", "dataKey", "variant", "components", "data", "variantsMetafields", "variantMetafields", "f"]
7
7
  }
@@ -8,7 +8,7 @@ export declare function formatPrice({ amount, currencyCode, locale, maximumFract
8
8
  maximumFractionDigits?: number;
9
9
  minimumFractionDigits?: number;
10
10
  removeTrailingZeros?: boolean;
11
- }): string;
11
+ }): string | null;
12
12
  export declare function formatVariantPrice({ amount, baseAmount, currencyCode, locale, maximumFractionDigits, minimumFractionDigits, removeTrailingZeros, }: {
13
13
  baseAmount: number;
14
14
  amount: number;
@@ -23,10 +23,10 @@ export declare function formatVariantPrice({ amount, baseAmount, currencyCode, l
23
23
  discount: string;
24
24
  discountAmount?: undefined;
25
25
  } | {
26
- price: string;
27
- basePrice: string | undefined;
26
+ price: string | null;
27
+ basePrice: string | null | undefined;
28
28
  discount: string | null;
29
- discountAmount: string | undefined;
29
+ discountAmount: string | null | undefined;
30
30
  };
31
31
  type EventType = {
32
32
  primaryButton?: (v: any, index: number, data: ShelfDisplayType) => void;
@@ -1,2 +1,2 @@
1
- "use strict";var S=Object.create;var u=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var $=(e,n)=>{for(var r in n)u(e,r,{get:n[r],enumerable:!0})},g=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of E(n))!T.call(e,i)&&i!==r&&u(e,i,{get:()=>n[i],enumerable:!(t=v(n,i))||t.enumerable});return e};var k=(e,n,r)=>(r=e!=null?S(P(e)):{},g(n||!e||!e.__esModule?u(r,"default",{value:e,enumerable:!0}):r,e)),w=e=>g(u({},"__esModule",{value:!0}),e);var C={};$(C,{PRICE_SYMBOL:()=>c,formatPrice:()=>d,formatVariantPrice:()=>x,languageTerritory:()=>l});module.exports=w(C);var y=k(require("decimal.js"));const c={us:"$",uk:"\xA3",ca:"$",eu:"\u20AC",fr:"\u20AC",de:"\u20AC",nl:"\u20AC",vn:"\u20AB",cl:"$",sg:"$",ae:"AED"},l=e=>({us:"en-us",uk:"en-gb",ca:"en-ca",au:"en-au",eu:"en",fr:"de-DE","eu-es":"de-DE","eu-fr":"de-DE","eu-it":"de-DE","eu-de":"de-DE","eu-en":"en-US","cz-en":"de-DE",nl:"de-DE",de:"de-DE",vn:"vi-vn",sg:"en-sg","ae-en":"ae-en",plus:"en-us",cl:"es-cl",dk:"en-dk",fi:"en-fi",no:"en-no",is:"en-is",se:"en-se"})[e]||"";function d({amount:e,currencyCode:n,locale:r,maximumFractionDigits:t,minimumFractionDigits:i,removeTrailingZeros:m=!1}){const s=r==="nl"?"EUR":n||"USD";let a=new Intl.NumberFormat(l(r),{style:"currency",currency:s,minimumFractionDigits:t===0?0:i,maximumFractionDigits:t}).format(e);return["eu-de","eu-en","de","eu"].includes(r)&&(a=a?.toString()?.replace(/[\s]/g,"")),m&&(a=a.replace(/(\.\d*?[1-9])0+\b/,"$1").replace(/\.0+\b/,"").replace(/(\,\d*?[1-9])0+\b/,"$1").replace(/\,0+\b/,"")),a}function x({amount:e,baseAmount:n,currencyCode:r,locale:t,maximumFractionDigits:i,minimumFractionDigits:m,removeTrailingZeros:s}){if(typeof Intl>"u")return{price:`${c[t]}${e}`,basePrice:`${c[t]}${n}`,discount:`${c[t]}${n-e||0}`};const o=n>e,a=new Intl.NumberFormat(l(t),{style:"percent"}),f=o?a.format((n-e)/n):null;let p;if(o){const h=new y.default(n).sub(e||0).toNumber();p=d({amount:h,currencyCode:r||"USD",locale:t,maximumFractionDigits:2})}const b=d({amount:e,currencyCode:r,locale:t,removeTrailingZeros:s}),D=o?d({amount:n,currencyCode:r,locale:t,maximumFractionDigits:i,minimumFractionDigits:m,removeTrailingZeros:s}):void 0;return{price:b,basePrice:D,discount:f,discountAmount:p}}
1
+ "use strict";var S=Object.create;var u=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var $=(e,n)=>{for(var r in n)u(e,r,{get:n[r],enumerable:!0})},f=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of P(n))!T.call(e,i)&&i!==r&&u(e,i,{get:()=>n[i],enumerable:!(t=v(n,i))||t.enumerable});return e};var k=(e,n,r)=>(r=e!=null?S(E(e)):{},f(n||!e||!e.__esModule?u(r,"default",{value:e,enumerable:!0}):r,e)),w=e=>f(u({},"__esModule",{value:!0}),e);var C={};$(C,{PRICE_SYMBOL:()=>c,formatPrice:()=>m,formatVariantPrice:()=>x,languageTerritory:()=>g});module.exports=w(C);var b=k(require("decimal.js"));const c={us:"$",uk:"\xA3",ca:"$",eu:"\u20AC",fr:"\u20AC",de:"\u20AC",nl:"\u20AC",vn:"\u20AB",cl:"$",sg:"$",ae:"AED"},g=e=>({us:"en-US",uk:"en-GB",ca:"en-CA",eu:"en",fr:"fr-FR",au:"en-AU",my:"en-my","eu-es":"de-DE","eu-fr":"de-DE","eu-it":"de-DE","eu-de":"de-DE","eu-en":"en-US","cz-en":"de-DE","ca-fr":"fr-FR",nl:"de-DE",de:"de-DE",vn:"vi-vn",sg:"en-sg","ae-en":"ae-en",plus:"en-us",cl:"es-cl",dk:"en-dk",fi:"en-fi",no:"en-no",is:"en-is",se:"en-se","eu-pl":"pl-PL"})[e]||"";function m({amount:e,currencyCode:n,locale:r,maximumFractionDigits:t,minimumFractionDigits:i,removeTrailingZeros:l=!1}){const o=r==="nl"?"EUR":n||"USD",s=g(r);if(!s)return null;let a=new Intl.NumberFormat(s,{style:"currency",currency:o,minimumFractionDigits:t===0?0:i,maximumFractionDigits:t})?.format?.(e);return["eu-de","eu-en","de","eu"].includes(r)&&(a=a?.toString()?.replace?.(/[\s]/g,"")),l&&(a=a?.replace?.(/(\.\d*?[1-9])0+\b/,"$1")?.replace?.(/\.0+\b/,"")?.replace?.(/(\,\d*?[1-9])0+\b/,"$1")?.replace?.(/\,0+\b/,"")),a}function x({amount:e,baseAmount:n,currencyCode:r,locale:t,maximumFractionDigits:i,minimumFractionDigits:l,removeTrailingZeros:o}){if(typeof Intl>"u")return{price:`${c[t]}${e}`,basePrice:`${c[t]}${n}`,discount:`${c[t]}${n-e||0}`};const s=n>e;let d=null;const a=g(t);if(a){const p=new Intl.NumberFormat(a,{style:"percent"});d=s?p.format((n-e)/n):null}let y;if(s){const p=new b.default(n).sub(e||0).toNumber();y=m({amount:p,currencyCode:r||"USD",locale:t,maximumFractionDigits:2})}const D=m({amount:e,currencyCode:r,locale:t,removeTrailingZeros:o}),h=s?m({amount:n,currencyCode:r,locale:t,maximumFractionDigits:i,minimumFractionDigits:l,removeTrailingZeros:o}):void 0;return{price:D,basePrice:h,discount:d,discountAmount:y}}
2
2
  //# sourceMappingURL=shelfDisplay.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/ShelfDisplay/shelfDisplay.ts"],
4
- "sourcesContent": ["import Decimal from 'decimal.js'\nimport type { ContainerProps } from '../../types/props.js'\n/* eslint-disable no-useless-escape */\nexport const PRICE_SYMBOL = {\n us: '$',\n uk: '\u00A3',\n ca: '$',\n eu: '\u20AC',\n fr: '\u20AC',\n de: '\u20AC',\n nl: '\u20AC',\n vn: '\u20AB',\n cl: '$',\n sg: '$',\n ae: 'AED',\n} as any\n\nexport const languageTerritory = (locale: string) =>\n // https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_territory_information.html\n ({\n us: 'en-us',\n uk: 'en-gb',\n ca: 'en-ca',\n au: 'en-au',\n eu: 'en',\n fr: 'de-DE',\n 'eu-es': 'de-DE',\n 'eu-fr': 'de-DE',\n 'eu-it': 'de-DE',\n 'eu-de': 'de-DE',\n 'eu-en': 'en-US',\n 'cz-en': 'de-DE',\n nl: 'de-DE',\n de: 'de-DE',\n vn: 'vi-vn',\n sg: 'en-sg',\n 'ae-en': 'ae-en',\n plus: 'en-us',\n cl: 'es-cl',\n dk: 'en-dk',\n fi: 'en-fi',\n no: 'en-no',\n is: 'en-is',\n se: 'en-se',\n })[locale] || ''\n\nexport function formatPrice({\n amount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros = false,\n}: {\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n }) {\n const code = locale === 'nl' ? 'EUR' : currencyCode || 'USD'\n const formatCurrency = new Intl.NumberFormat(languageTerritory(locale), {\n style: 'currency',\n currency: code,\n minimumFractionDigits: maximumFractionDigits === 0 ? 0 : minimumFractionDigits,\n maximumFractionDigits,\n })\n\n let formattedValue = formatCurrency.format(amount)\n\n if (['eu-de', 'eu-en', 'de', 'eu'].includes(locale)) {\n formattedValue = formattedValue?.toString()?.replace(/[\\s]/g, '')\n }\n\n if (removeTrailingZeros) {\n // Adjust the regex to match comma as decimal separator\n formattedValue = formattedValue\n .replace(/(\\.\\d*?[1-9])0+\\b/, '$1')\n .replace(/\\.0+\\b/, '')\n .replace(/(\\,\\d*?[1-9])0+\\b/, '$1')\n .replace(/\\,0+\\b/, '')\n }\n\n return formattedValue\n}\n\nexport function formatVariantPrice({\n amount,\n baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n}: {\n baseAmount: number\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n}) {\n if (typeof Intl === 'undefined') {\n return {\n price: `${PRICE_SYMBOL[locale]}${amount}`,\n basePrice: `${PRICE_SYMBOL[locale]}${baseAmount}`,\n discount: `${PRICE_SYMBOL[locale]}${baseAmount - amount || 0}`,\n }\n }\n\n const hasDiscount = baseAmount > amount\n const formatDiscount = new Intl.NumberFormat(languageTerritory(locale), {\n style: 'percent',\n })\n const discount = hasDiscount ? formatDiscount.format((baseAmount - amount) / baseAmount) : null\n // \u6298\u6263\u91D1\u989D\n let discountAmount;\n if (hasDiscount) { \n const savePriceAmount = new Decimal(baseAmount).sub(amount || 0).toNumber()\n discountAmount = formatPrice({\n amount: savePriceAmount,\n currencyCode: currencyCode || 'USD',\n locale,\n maximumFractionDigits: 2,\n })\n }\n\n const price = formatPrice({ amount, currencyCode, locale, removeTrailingZeros })\n const basePrice = hasDiscount\n ? formatPrice({\n amount: baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n })\n : undefined\n\n return { price, basePrice, discount, discountAmount }\n}\n\ntype EventType = {\n primaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n secondaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n}\n\nexport interface ShelfDisplayItem {\n id?: string\n /** \u4EA7\u54C1\u56FE\u7247*/\n img?: {\n url: string\n }\n handle?: string\n sku?: string\n /** \u6298\u6263\u540E\u4EF7\u683C*/\n price?: string\n title?: string\n /** \u6298\u6263\u524D\u4EF7\u683C*/\n basePrice?: string\n subTitle?: string\n /** \u6807\u7B7E*/\n tagItems?: string[]\n tab?: string\n data?: ShelfDisplayItem[]\n custom_name?: string\n custom_description?: string\n custom_image?: string\n custom_theme?: string\n}\n\nexport type ShelfDisplayType = {\n title?: string\n isShowTab?: boolean\n isShowTag?: boolean\n isShowRecommendedCard?: boolean\n isShowOriginalPrice?: boolean\n direction?: 'horizontal' | 'vertical'\n align?: 'left' | 'center' | 'right'\n productsTab?: any[]\n productsCard?: any[]\n /** \u5361\u7247\u5F62\u72B6 */\n itemShape?: 'round' | 'square'\n /** \u6309\u94AE\u5F62\u72B6 */\n shape?: 'round' | 'square'\n /** \u6807\u7B7E\u9875\u5F62\u72B6*/\n tabShape?: 'rounded' | 'square'\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: string\n primaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n /** \u526F\u6309\u94AE\u914D\u7F6E */\n secondaryButton?: string\n secondaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n theme?: 'light' | 'dark'\n containerProps?: ContainerProps\n}\n\nexport interface ShelfDisplayProps {\n data: ShelfDisplayType\n buildData?: {\n categories: any[]\n products: any[]\n }\n recommendedData?: any[]\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: EventType\n className?: string\n key?: string\n target?: '_self' | '_blank'\n breakpoints?: {\n [key: number]: {\n spaceBetween: number\n freeMode: boolean\n slidesPerView: number\n }\n }\n metafields?: any\n isDisplayGudgments?: boolean\n isDisplayBackImage?: boolean\n}"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,EAAA,gBAAAC,EAAA,uBAAAC,EAAA,sBAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EAAoB,yBAGb,MAAML,EAAe,CAC1B,GAAI,IACJ,GAAI,OACJ,GAAI,IACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACN,EAEaG,EAAqBG,IAE/B,CACC,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,KACJ,GAAI,QACJ,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,QAAS,QACT,KAAM,QACN,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,OACN,GAAGA,CAAM,GAAK,GAET,SAASL,EAAY,CAC1B,OAAAM,EACA,aAAAC,EACA,OAAAF,EACA,sBAAAG,EACA,sBAAAC,EACA,oBAAAC,EAAsB,EACxB,EAOK,CACH,MAAMC,EAAON,IAAW,KAAO,MAAQE,GAAgB,MAQvD,IAAIK,EAPmB,IAAI,KAAK,aAAaV,EAAkBG,CAAM,EAAG,CACtE,MAAO,WACP,SAAUM,EACV,sBAAuBH,IAA0B,EAAI,EAAIC,EACzD,sBAAAD,CACF,CAAC,EAEmC,OAAOF,CAAM,EAEjD,MAAI,CAAC,QAAS,QAAS,KAAM,IAAI,EAAE,SAASD,CAAM,IAChDO,EAAiBA,GAAgB,SAAS,GAAG,QAAQ,QAAS,EAAE,GAG9DF,IAEFE,EAAiBA,EACd,QAAQ,oBAAqB,IAAI,EACjC,QAAQ,SAAU,EAAE,EACpB,QAAQ,oBAAqB,IAAI,EACjC,QAAQ,SAAU,EAAE,GAGlBA,CACT,CAEO,SAASX,EAAmB,CACjC,OAAAK,EACA,WAAAO,EACA,aAAAN,EACA,OAAAF,EACA,sBAAAG,EACA,sBAAAC,EACA,oBAAAC,CACF,EAQG,CACD,GAAI,OAAO,KAAS,IAClB,MAAO,CACL,MAAO,GAAGX,EAAaM,CAAM,CAAC,GAAGC,CAAM,GACvC,UAAW,GAAGP,EAAaM,CAAM,CAAC,GAAGQ,CAAU,GAC/C,SAAU,GAAGd,EAAaM,CAAM,CAAC,GAAGQ,EAAaP,GAAU,CAAC,EAC9D,EAGF,MAAMQ,EAAcD,EAAaP,EAC3BS,EAAiB,IAAI,KAAK,aAAab,EAAkBG,CAAM,EAAG,CACtE,MAAO,SACT,CAAC,EACKW,EAAWF,EAAcC,EAAe,QAAQF,EAAaP,GAAUO,CAAU,EAAI,KAE3F,IAAII,EACJ,GAAIH,EAAa,CACf,MAAMI,EAAkB,IAAI,EAAAC,QAAQN,CAAU,EAAE,IAAIP,GAAU,CAAC,EAAE,SAAS,EAC1EW,EAAiBjB,EAAY,CAC3B,OAAQkB,EACR,aAAcX,GAAgB,MAC9B,OAAAF,EACA,sBAAuB,CACzB,CAAC,CACH,CAEA,MAAMe,EAAQpB,EAAY,CAAE,OAAAM,EAAQ,aAAAC,EAAc,OAAAF,EAAQ,oBAAAK,CAAoB,CAAC,EACzEW,EAAYP,EACdd,EAAY,CACV,OAAQa,EACR,aAAAN,EACA,OAAAF,EACA,sBAAAG,EACA,sBAAAC,EACA,oBAAAC,CACF,CAAC,EACD,OAEJ,MAAO,CAAE,MAAAU,EAAO,UAAAC,EAAW,SAAAL,EAAU,eAAAC,CAAe,CACtD",
6
- "names": ["shelfDisplay_exports", "__export", "PRICE_SYMBOL", "formatPrice", "formatVariantPrice", "languageTerritory", "__toCommonJS", "import_decimal", "locale", "amount", "currencyCode", "maximumFractionDigits", "minimumFractionDigits", "removeTrailingZeros", "code", "formattedValue", "baseAmount", "hasDiscount", "formatDiscount", "discount", "discountAmount", "savePriceAmount", "Decimal", "price", "basePrice"]
4
+ "sourcesContent": ["import Decimal from 'decimal.js'\nimport type { ContainerProps } from '../../types/props.js'\n/* eslint-disable no-useless-escape */\nexport const PRICE_SYMBOL = {\n us: '$',\n uk: '\u00A3',\n ca: '$',\n eu: '\u20AC',\n fr: '\u20AC',\n de: '\u20AC',\n nl: '\u20AC',\n vn: '\u20AB',\n cl: '$',\n sg: '$',\n ae: 'AED',\n} as any\n\nexport const languageTerritory = (locale: string) =>\n // https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_territory_information.html\n ({\n us: 'en-US',\n uk: 'en-GB',\n ca: 'en-CA',\n eu: 'en',\n fr: 'fr-FR',\n au: 'en-AU',\n my: 'en-my',\n 'eu-es': 'de-DE',\n 'eu-fr': 'de-DE',\n 'eu-it': 'de-DE',\n 'eu-de': 'de-DE',\n 'eu-en': 'en-US',\n 'cz-en': 'de-DE',\n 'ca-fr': 'fr-FR',\n nl: 'de-DE',\n de: 'de-DE',\n vn: 'vi-vn',\n sg: 'en-sg',\n 'ae-en': 'ae-en',\n plus: 'en-us',\n cl: 'es-cl',\n dk: 'en-dk',\n fi: 'en-fi',\n no: 'en-no',\n is: 'en-is',\n se: 'en-se',\n 'eu-pl': 'pl-PL',\n })[locale] || ''\n\nexport function formatPrice({\n amount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros = false,\n}: {\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n}) {\n const code = locale === 'nl' ? 'EUR' : currencyCode || 'USD'\n const localeLanguage = languageTerritory(locale)\n if (!localeLanguage) {\n return null\n }\n const formatCurrency = new Intl.NumberFormat(localeLanguage, {\n style: 'currency',\n currency: code,\n minimumFractionDigits: maximumFractionDigits === 0 ? 0 : minimumFractionDigits,\n maximumFractionDigits,\n })\n\n let formattedValue = formatCurrency?.format?.(amount)\n\n if (['eu-de', 'eu-en', 'de', 'eu'].includes(locale)) {\n formattedValue = formattedValue?.toString()?.replace?.(/[\\s]/g, '')\n }\n\n if (removeTrailingZeros) {\n formattedValue = formattedValue\n ?.replace?.(/(\\.\\d*?[1-9])0+\\b/, '$1')\n ?.replace?.(/\\.0+\\b/, '')\n ?.replace?.(/(\\,\\d*?[1-9])0+\\b/, '$1')\n ?.replace?.(/\\,0+\\b/, '')\n }\n\n return formattedValue\n}\n\nexport function formatVariantPrice({\n amount,\n baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n}: {\n baseAmount: number\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n}) {\n if (typeof Intl === 'undefined') {\n return {\n price: `${PRICE_SYMBOL[locale]}${amount}`,\n basePrice: `${PRICE_SYMBOL[locale]}${baseAmount}`,\n discount: `${PRICE_SYMBOL[locale]}${baseAmount - amount || 0}`,\n }\n }\n\n const hasDiscount = baseAmount > amount\n let discount = null\n const currentLocale = languageTerritory(locale)\n if (currentLocale) {\n const formatDiscount = new Intl.NumberFormat(currentLocale, {\n style: 'percent',\n })\n discount = hasDiscount ? formatDiscount.format((baseAmount - amount) / baseAmount) : null\n }\n // \u6298\u6263\u91D1\u989D\n let discountAmount;\n if (hasDiscount) { \n const savePriceAmount = new Decimal(baseAmount).sub(amount || 0).toNumber()\n discountAmount = formatPrice({\n amount: savePriceAmount,\n currencyCode: currencyCode || 'USD',\n locale,\n maximumFractionDigits: 2,\n })\n }\n\n const price = formatPrice({ amount, currencyCode, locale, removeTrailingZeros })\n const basePrice = hasDiscount\n ? formatPrice({\n amount: baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n })\n : undefined\n\n return { price, basePrice, discount, discountAmount }\n}\n\ntype EventType = {\n primaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n secondaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n}\n\nexport interface ShelfDisplayItem {\n id?: string\n /** \u4EA7\u54C1\u56FE\u7247*/\n img?: {\n url: string\n }\n handle?: string\n sku?: string\n /** \u6298\u6263\u540E\u4EF7\u683C*/\n price?: string\n title?: string\n /** \u6298\u6263\u524D\u4EF7\u683C*/\n basePrice?: string\n subTitle?: string\n /** \u6807\u7B7E*/\n tagItems?: string[]\n tab?: string\n data?: ShelfDisplayItem[]\n custom_name?: string\n custom_description?: string\n custom_image?: string\n custom_theme?: string\n}\n\nexport type ShelfDisplayType = {\n title?: string\n isShowTab?: boolean\n isShowTag?: boolean\n isShowRecommendedCard?: boolean\n isShowOriginalPrice?: boolean\n direction?: 'horizontal' | 'vertical'\n align?: 'left' | 'center' | 'right'\n productsTab?: any[]\n productsCard?: any[]\n /** \u5361\u7247\u5F62\u72B6 */\n itemShape?: 'round' | 'square'\n /** \u6309\u94AE\u5F62\u72B6 */\n shape?: 'round' | 'square'\n /** \u6807\u7B7E\u9875\u5F62\u72B6*/\n tabShape?: 'rounded' | 'square'\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: string\n primaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n /** \u526F\u6309\u94AE\u914D\u7F6E */\n secondaryButton?: string\n secondaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n theme?: 'light' | 'dark'\n containerProps?: ContainerProps\n}\n\nexport interface ShelfDisplayProps {\n data: ShelfDisplayType\n buildData?: {\n categories: any[]\n products: any[]\n }\n recommendedData?: any[]\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: EventType\n className?: string\n key?: string\n target?: '_self' | '_blank'\n breakpoints?: {\n [key: number]: {\n spaceBetween: number\n freeMode: boolean\n slidesPerView: number\n }\n }\n metafields?: any\n isDisplayGudgments?: boolean\n isDisplayBackImage?: boolean\n}"],
5
+ "mappings": "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",
6
+ "names": ["shelfDisplay_exports", "__export", "PRICE_SYMBOL", "formatPrice", "formatVariantPrice", "languageTerritory", "__toCommonJS", "import_decimal", "locale", "amount", "currencyCode", "maximumFractionDigits", "minimumFractionDigits", "removeTrailingZeros", "code", "localeLanguage", "formattedValue", "baseAmount", "hasDiscount", "discount", "currentLocale", "formatDiscount", "discountAmount", "savePriceAmount", "Decimal", "price", "basePrice"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as v}from"react/jsx-runtime";import{cn as h}from"../../helpers/utils.js";import{useMediaQuery as q}from"react-responsive";import A from"./FilterCardWrapItem";import{useRef as F,useState as O,useEffect as m,forwardRef as V,useImperativeHandle as Y}from"react";import{cloneDeep as E}from"es-toolkit";const H=(I,N)=>{const{shopifyData:w={},isSale:y=!1,total:D,result:o,closeFilter:p,page:f,metafields:x,noResultNode:R,refreshStarRating:L,onPrimaryChange:M,onSecondaryChange:j,onNextPage:b,onPrevPage:T}=I,{advertisingSpace:C}=x,{buttonText:W,loadMoreText:z}=w,c=C||w?.advertisingSpace,S=F(null),Q=F(!1),[i,u]=O([]),s=q({query:"(max-width: 1024px)"}),P=n=>{const e=E(n||[]);if(c){const t=e.findIndex(g=>g.mImage);if(t===-1){const g=Math.min(p?c?.maxLocation||7:c?.minLocation||5,e.length);e.splice(g,0,c)}else{e.splice(t,1);const g=Math.min(p?c?.maxLocation||7:c?.minLocation||5,e.length);e.splice(g,0,c)}}return e};Y(N,()=>({clearData(){u([])}}));const k=()=>{const n=S.current;if(!n)return;const e=n.getBoundingClientRect()?.top+window?.pageYOffset-120;window?.scrollTo?.({top:e,behavior:"smooth"})},B=n=>n?.metafields?.seoSetting?.noindex;return m(()=>{(o?.slug||o?.id)&&((f===1||!s)&&u([]),o?.products&&u(n=>{const e=o.products?.filter?.(a=>!n.some(l=>l.id===a.id));let t=[...n,...e];const g=t.filter?.(a=>!(!a?.metafields?.seoSetting?.noindex&&a.availableForSale&&a?.variants?.some(l=>l.availableForSale)));return t=t.filter?.(a=>!a?.metafields?.seoSetting?.noindex&&a.availableForSale&&a?.variants?.some(l=>l.availableForSale)),t.push(...g),y&&(t=t.filter?.(a=>{let l=!1;if(a?.options?.find(d=>d?.displayName==="color"))l=a?.variants?.find(d=>d?.coupons?.length&&d?.coupons?.[0]&&typeof d?.coupons?.[0]=="object");else{const d=a?.variants?.[0]?.coupons;l=d?.length&&d?.[0]&&typeof d?.[0]=="object"}return!!l})),t?.length&&(f===1&&!s||s)&&(t=P(t)),t}))},[o?.products,f,s,C,y]),m(()=>{i?.length&&f===1&&!s&&u(P(i))},[p]),m(()=>{const n=document?.querySelector?.(".yotpo-reviews-star-ratings-widget");i?.length&&!n&&L?.()},[i]),v("div",{className:"filter-card-wrap-container",ref:S,children:[r("div",{className:h("w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3",{"laptop:grid-cols-4 tablet:grid-cols-3":p&&!s,"laptop:grid-cols-3 tablet:grid-cols-2":!p&&!s},"filter-card-wrap"),children:i?.map?.(n=>B(n)?null:r(A,{data:n,buttonText:W,metafields:x,onPrimaryChange:(e,t)=>M?.(e,t),onSecondaryChange:(e,t)=>j?.(e,t)},n.id))}),R,s&&o?.pageInfo?.hasNextPage?v("div",{onClick:()=>{b?.(o?.pageInfo?.endCursor)},className:"mt-6 text-sm font-bold cursor-pointer flex items-center justify-center gap-1 filter-card-wrap-more",children:[r("span",{children:z||"View More"}),r("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"6",viewBox:"0 0 12 6",fill:"none",children:r("path",{d:"M9.96967 0.21967C10.2626 -0.0732232 10.7373 -0.073223 11.0302 0.21967C11.3231 0.512563 11.3231 0.987324 11.0302 1.28022L6.53022 5.78022C6.23732 6.07311 5.76256 6.07311 5.46967 5.78022L0.96967 1.28022C0.676777 0.987324 0.676777 0.512563 0.96967 0.21967C1.26256 -0.0732233 1.73732 -0.0732233 2.03022 0.21967L5.99994 4.1894L9.96967 0.21967Z",fill:"#1D1D1F"})})]}):null,!s&&D>18?v("div",{className:"mt-6 flex items-center justify-end gap-4 cursor-pointer",children:[r("button",{name:"perv page",disabled:!o?.pageInfo?.hasPreviousPage||!i?.length,className:h("flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]",{"opacity-50 cursor-not-allowed":!o?.pageInfo?.hasPreviousPage||!i?.length}),onClick:()=>{k?.(),T?.(o?.pageInfo?.startCursor)},children:r("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:r("path",{d:"M12 5L7 10L12 15",stroke:"#3D3D3F","stroke-width":"1.66667","stroke-linecap":"round","stroke-linejoin":"round"})})}),r("button",{name:"next page",className:h("flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]",{"opacity-50 cursor-not-allowed":!o?.pageInfo?.hasNextPage||!i?.length}),disabled:!o?.pageInfo?.hasNextPage||!i?.length,onClick:()=>{k?.(),b?.(o?.pageInfo?.endCursor)},children:r("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:r("path",{d:"M7.5 5L12.5 10L7.5 15",stroke:"#3D3D3F","stroke-width":"1.66667","stroke-linecap":"round","stroke-linejoin":"round"})})})]}):null]})};var _=V(H);export{_ as default};
1
+ import{jsx as r,jsxs as v}from"react/jsx-runtime";import{cn as h}from"../../helpers/utils.js";import{useMediaQuery as q}from"react-responsive";import A from"./FilterCardWrapItem";import{useRef as F,useState as O,useEffect as m,forwardRef as V,useImperativeHandle as Y}from"react";import{cloneDeep as E}from"es-toolkit";const H=(I,N)=>{const{shopifyData:w={},isSale:y=!1,total:D,result:o,closeFilter:p,page:f,metafields:x,noResultNode:R,refreshStarRating:L,onPrimaryChange:M,onSecondaryChange:j,onNextPage:b,onPrevPage:T}=I,{advertisingSpace:C}=x,{buttonText:W,loadMoreText:z}=w,c=C||w?.advertisingSpace,S=F(null),Q=F(!1),[s,u]=O([]),i=q({query:"(max-width: 1024px)"}),P=n=>{const e=E(n||[]);if(c){const t=e.findIndex(g=>g.mImage);if(t===-1){const g=Math.min(p?c?.maxLocation||7:c?.minLocation||5,e.length);e.splice(g,0,c)}else{e.splice(t,1);const g=Math.min(p?c?.maxLocation||7:c?.minLocation||5,e.length);e.splice(g,0,c)}}return e};Y(N,()=>({clearData(){u([])}}));const k=()=>{const n=S.current;if(!n)return;const e=n.getBoundingClientRect()?.top+window?.pageYOffset-120;window?.scrollTo?.({top:e,behavior:"smooth"})},B=n=>n?.metafields?.seoSetting?.noindex;return m(()=>{(o?.slug||o?.id)&&((f===1||!i)&&u([]),o?.products&&u(n=>{const e=o.products?.filter?.(a=>!n.some(l=>l.id===a.id));let t=[...n,...e];const g=t.filter?.(a=>!(!a?.metafields?.seoSetting?.noindex&&a.availableForSale&&a?.variants?.some(l=>l.availableForSale)));return t=t.filter?.(a=>!a?.metafields?.seoSetting?.noindex&&a.availableForSale&&a?.variants?.some(l=>l.availableForSale)),t.push(...g),y&&(t=t.filter?.(a=>{let l=!1;if(a?.options?.find(d=>d?.displayName==="color"))l=a?.variants?.find(d=>d?.coupons?.length&&d?.coupons?.[0]&&typeof d?.coupons?.[0]=="object");else{const d=a?.variants?.[0]?.coupons;l=d?.length&&d?.[0]&&typeof d?.[0]=="object"}return!!l})),t?.length&&(f===1&&!i||i)&&(t=P(t)),t}))},[o?.products,f,i,C,y]),m(()=>{s?.length&&f===1&&!i&&u(P(s))},[p]),m(()=>{const n=document?.querySelector?.(".yotpo-reviews-star-ratings-widget");s?.length&&(!n||i)&&L?.()},[s]),v("div",{className:"filter-card-wrap-container",ref:S,children:[r("div",{className:h("w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3",{"laptop:grid-cols-4 tablet:grid-cols-3":p&&!i,"laptop:grid-cols-3 tablet:grid-cols-2":!p&&!i},"filter-card-wrap"),children:s?.map?.(n=>B(n)?null:r(A,{data:n,buttonText:W,metafields:x,onPrimaryChange:(e,t)=>M?.(e,t),onSecondaryChange:(e,t)=>j?.(e,t)},n.id))}),R,i&&o?.pageInfo?.hasNextPage?v("div",{onClick:()=>{b?.(o?.pageInfo?.endCursor)},className:"mt-6 text-sm font-bold cursor-pointer flex items-center justify-center gap-1 filter-card-wrap-more",children:[r("span",{children:z||"View More"}),r("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"6",viewBox:"0 0 12 6",fill:"none",children:r("path",{d:"M9.96967 0.21967C10.2626 -0.0732232 10.7373 -0.073223 11.0302 0.21967C11.3231 0.512563 11.3231 0.987324 11.0302 1.28022L6.53022 5.78022C6.23732 6.07311 5.76256 6.07311 5.46967 5.78022L0.96967 1.28022C0.676777 0.987324 0.676777 0.512563 0.96967 0.21967C1.26256 -0.0732233 1.73732 -0.0732233 2.03022 0.21967L5.99994 4.1894L9.96967 0.21967Z",fill:"#1D1D1F"})})]}):null,!i&&D>18?v("div",{className:"mt-6 flex items-center justify-end gap-4 cursor-pointer",children:[r("button",{name:"perv page",disabled:!o?.pageInfo?.hasPreviousPage||!s?.length,className:h("flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]",{"opacity-50 cursor-not-allowed":!o?.pageInfo?.hasPreviousPage||!s?.length}),onClick:()=>{k?.(),T?.(o?.pageInfo?.startCursor)},children:r("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:r("path",{d:"M12 5L7 10L12 15",stroke:"#3D3D3F","stroke-width":"1.66667","stroke-linecap":"round","stroke-linejoin":"round"})})}),r("button",{name:"next page",className:h("flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]",{"opacity-50 cursor-not-allowed":!o?.pageInfo?.hasNextPage||!s?.length}),disabled:!o?.pageInfo?.hasNextPage||!s?.length,onClick:()=>{k?.(),b?.(o?.pageInfo?.endCursor)},children:r("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:r("path",{d:"M7.5 5L12.5 10L7.5 15",stroke:"#3D3D3F","stroke-width":"1.66667","stroke-linecap":"round","stroke-linejoin":"round"})})})]}):null]})};var _=V(H);export{_ as default};
2
2
  //# sourceMappingURL=FilterCardWrap.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/CollectionsFilters/FilterCardWrap.tsx"],
4
- "sourcesContent": ["import { cn } from '../../helpers/utils.js'\nimport { useMediaQuery } from 'react-responsive'\nimport FilterCardWrapItem from './FilterCardWrapItem'\nimport { useRef, useState, useEffect, forwardRef, useImperativeHandle } from 'react'\nimport type { Ref } from 'react'\nimport { cloneDeep } from 'es-toolkit'\n\ntype FilterCardWrapProps = {\n isSale?: boolean\n result?: any\n total: number\n shopifyData?: any\n currentPage?: number\n closeFilter: boolean\n page: number\n metafields: any\n noResultNode?: React.ReactNode\n refreshStarRating?: () => void\n onPrimaryChange?: (item: any, sku: string) => void\n onSecondaryChange?: (item: any, sku: string) => void\n onNextPage?: (v: string) => void\n onPrevPage?: (v: string) => void\n}\n\nconst FilterCardWrap = (props: FilterCardWrapProps, ref: Ref<unknown> | undefined) => {\n const {\n shopifyData = {},\n isSale = false,\n total,\n result,\n closeFilter,\n page,\n metafields,\n noResultNode,\n refreshStarRating,\n onPrimaryChange,\n onSecondaryChange,\n onNextPage,\n onPrevPage,\n } = props\n const { advertisingSpace } = metafields\n const { buttonText, loadMoreText } = shopifyData\n\n const currentAdvertisingSpace = advertisingSpace || shopifyData?.advertisingSpace\n\n const filterCardWrapRef = useRef<any>(null)\n const initRefresh = useRef<boolean>(false)\n\n const [data, setData] = useState<any[]>([])\n\n const isMobile = useMediaQuery({ query: '(max-width: 1024px)' })\n\n const handleAdvertisingSpace = (products: any[]) => {\n const updatedProducts = cloneDeep(products || [])\n if (currentAdvertisingSpace) {\n const findIndex = updatedProducts.findIndex(item => item.mImage)\n if (findIndex === -1) {\n const insertIndex = closeFilter\n ? Math.min(currentAdvertisingSpace?.maxLocation || 7, updatedProducts.length)\n : Math.min(currentAdvertisingSpace?.minLocation || 5, updatedProducts.length)\n updatedProducts.splice(insertIndex, 0, currentAdvertisingSpace)\n } else {\n updatedProducts.splice(findIndex, 1)\n const insertIndex = closeFilter\n ? Math.min(currentAdvertisingSpace?.maxLocation || 7, updatedProducts.length)\n : Math.min(currentAdvertisingSpace?.minLocation || 5, updatedProducts.length)\n updatedProducts.splice(insertIndex, 0, currentAdvertisingSpace)\n }\n }\n return updatedProducts\n }\n\n useImperativeHandle(ref, () => ({\n clearData() {\n setData([])\n },\n }))\n\n const onScrollTop = () => {\n const target = filterCardWrapRef.current\n if (!target) return\n const targetY = target.getBoundingClientRect()?.top + window?.pageYOffset - 120\n window?.scrollTo?.({\n top: targetY,\n behavior: 'smooth',\n })\n }\n\n const hasNoIndex = (product: { metafields: { seoSetting: { noindex: any } } }) => {\n return product?.metafields?.seoSetting?.noindex\n }\n\n // \u5904\u7406\u4EA7\u54C1\u6570\u636E\n useEffect(() => {\n if (result?.slug || result?.id) {\n if (page === 1 || !isMobile) {\n setData([])\n }\n if (result?.products) {\n setData(prevProducts => {\n // \u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B58\u5728\u4E8E prevProducts \u4E2D\uFF0C\u907F\u514D\u91CD\u590D\u6DFB\u52A0\n const newProducts = result.products?.filter?.(\n (product: { id: any }) => !prevProducts.some(prev => prev.id === product.id)\n )\n let updatedProducts = [...prevProducts, ...newProducts]\n /** \u5DF2\u552E\u5B8C\u7684\u4EA7\u54C1 */\n const soldOutProducts = updatedProducts.filter?.(\n item =>\n !(\n !item?.metafields?.seoSetting?.noindex &&\n item.availableForSale &&\n item?.variants?.some((item: { availableForSale: any }) => item.availableForSale)\n )\n )\n // \u8FC7\u6EE4\u6389 availableForSale \u4E3A false \u7684\u4EA7\u54C1\n updatedProducts = updatedProducts.filter?.(\n item =>\n !item?.metafields?.seoSetting?.noindex &&\n item.availableForSale &&\n item?.variants?.some((item: { availableForSale: any }) => item.availableForSale)\n )\n // \u5C06\u5DF2\u552E\u5B8C\u7684\u4EA7\u54C1\u6DFB\u52A0\u5230\u6700\u540E\n updatedProducts.push(...soldOutProducts)\n // \u5982\u679C\u662F\u6709\u6298\u6263\u7684\u4EA7\u54C1\uFF0C\u5219\u8FC7\u6EE4\u6389\u6CA1\u6709\u6298\u6263\u7684\u4EA7\u54C1\n if (isSale) {\n updatedProducts = updatedProducts.filter?.((item: any) => {\n let isShow = false\n const isColor = item?.options?.find((item: any) => item?.displayName === 'color')\n if (isColor) {\n isShow = item?.variants?.find(\n (params: any) =>\n params?.coupons?.length && params?.coupons?.[0] && typeof params?.coupons?.[0] === 'object'\n )\n } else {\n const isVariants = item?.variants?.[0]?.coupons\n isShow = isVariants?.length && isVariants?.[0] && typeof isVariants?.[0] === 'object'\n }\n return !!isShow\n })\n }\n // \u5982\u679C advertisingSpace \u5B58\u5728\u4E14\u5C1A\u672A\u6DFB\u52A0\u5230\u6570\u7EC4\u4E2D\n if (updatedProducts?.length && ((page === 1 && !isMobile) || isMobile)) {\n updatedProducts = handleAdvertisingSpace(updatedProducts)\n }\n return updatedProducts\n })\n }\n }\n }, [result?.products, page, isMobile, advertisingSpace, isSale])\n\n useEffect(() => {\n if (!data?.length) return\n if (page === 1 && !isMobile) {\n setData(handleAdvertisingSpace(data))\n }\n }, [closeFilter])\n\n useEffect(() => {\n const isClass = document?.querySelector?.('.yotpo-reviews-star-ratings-widget')\n if (data?.length && !isClass) {\n refreshStarRating?.()\n }\n }, [data])\n\n return (\n <div className=\"filter-card-wrap-container\" ref={filterCardWrapRef}>\n <div\n className={cn(\n 'w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3',\n {\n 'laptop:grid-cols-4 tablet:grid-cols-3': closeFilter && !isMobile,\n 'laptop:grid-cols-3 tablet:grid-cols-2': !closeFilter && !isMobile,\n },\n 'filter-card-wrap'\n )}\n >\n {data?.map?.(item => {\n if (hasNoIndex(item)) return null\n return (\n <FilterCardWrapItem\n data={item}\n key={item.id}\n buttonText={buttonText}\n metafields={metafields}\n onPrimaryChange={(e, data) => onPrimaryChange?.(e, data)}\n onSecondaryChange={(e, data) => onSecondaryChange?.(e, data)}\n />\n )\n })}\n </div>\n {noResultNode}\n {isMobile && result?.pageInfo?.hasNextPage ? (\n <div\n onClick={() => {\n onNextPage?.(result?.pageInfo?.endCursor)\n }}\n className=\"mt-6 text-sm font-bold cursor-pointer flex items-center justify-center gap-1 filter-card-wrap-more\"\n >\n <span>{loadMoreText || 'View More'}</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"6\" viewBox=\"0 0 12 6\" fill=\"none\">\n <path\n d=\"M9.96967 0.21967C10.2626 -0.0732232 10.7373 -0.073223 11.0302 0.21967C11.3231 0.512563 11.3231 0.987324 11.0302 1.28022L6.53022 5.78022C6.23732 6.07311 5.76256 6.07311 5.46967 5.78022L0.96967 1.28022C0.676777 0.987324 0.676777 0.512563 0.96967 0.21967C1.26256 -0.0732233 1.73732 -0.0732233 2.03022 0.21967L5.99994 4.1894L9.96967 0.21967Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </div>\n ) : null}\n {!isMobile && total > 18 ? (\n <div className=\"mt-6 flex items-center justify-end gap-4 cursor-pointer\">\n <button\n name=\"perv page\"\n disabled={!result?.pageInfo?.hasPreviousPage || !data?.length}\n className={cn(\n 'flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]',\n {\n 'opacity-50 cursor-not-allowed': !result?.pageInfo?.hasPreviousPage || !data?.length,\n }\n )}\n onClick={() => {\n onScrollTop?.()\n onPrevPage?.(result?.pageInfo?.startCursor)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M12 5L7 10L12 15\"\n stroke=\"#3D3D3F\"\n stroke-width=\"1.66667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <button\n name=\"next page\"\n className={cn(\n 'flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]',\n {\n 'opacity-50 cursor-not-allowed': !result?.pageInfo?.hasNextPage || !data?.length,\n }\n )}\n disabled={!result?.pageInfo?.hasNextPage || !data?.length}\n onClick={() => {\n onScrollTop?.()\n onNextPage?.(result?.pageInfo?.endCursor)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M7.5 5L12.5 10L7.5 15\"\n stroke=\"#3D3D3F\"\n stroke-width=\"1.66667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n ) : null}\n </div>\n )\n}\n\nexport default forwardRef(FilterCardWrap)\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { cn } from '../../helpers/utils.js'\nimport { useMediaQuery } from 'react-responsive'\nimport FilterCardWrapItem from './FilterCardWrapItem'\nimport { useRef, useState, useEffect, forwardRef, useImperativeHandle } from 'react'\nimport type { Ref } from 'react'\nimport { cloneDeep } from 'es-toolkit'\n\ntype FilterCardWrapProps = {\n isSale?: boolean\n result?: any\n total: number\n shopifyData?: any\n currentPage?: number\n closeFilter: boolean\n page: number\n metafields: any\n noResultNode?: React.ReactNode\n refreshStarRating?: () => void\n onPrimaryChange?: (item: any, sku: string) => void\n onSecondaryChange?: (item: any, sku: string) => void\n onNextPage?: (v: string) => void\n onPrevPage?: (v: string) => void\n}\n\nconst FilterCardWrap = (props: FilterCardWrapProps, ref: Ref<unknown> | undefined) => {\n const {\n shopifyData = {},\n isSale = false,\n total,\n result,\n closeFilter,\n page,\n metafields,\n noResultNode,\n refreshStarRating,\n onPrimaryChange,\n onSecondaryChange,\n onNextPage,\n onPrevPage,\n } = props\n const { advertisingSpace } = metafields\n const { buttonText, loadMoreText } = shopifyData\n\n const currentAdvertisingSpace = advertisingSpace || shopifyData?.advertisingSpace\n\n const filterCardWrapRef = useRef<any>(null)\n const initRefresh = useRef<boolean>(false)\n\n const [data, setData] = useState<any[]>([])\n\n const isMobile = useMediaQuery({ query: '(max-width: 1024px)' })\n\n const handleAdvertisingSpace = (products: any[]) => {\n const updatedProducts = cloneDeep(products || [])\n if (currentAdvertisingSpace) {\n const findIndex = updatedProducts.findIndex(item => item.mImage)\n if (findIndex === -1) {\n const insertIndex = closeFilter\n ? Math.min(currentAdvertisingSpace?.maxLocation || 7, updatedProducts.length)\n : Math.min(currentAdvertisingSpace?.minLocation || 5, updatedProducts.length)\n updatedProducts.splice(insertIndex, 0, currentAdvertisingSpace)\n } else {\n updatedProducts.splice(findIndex, 1)\n const insertIndex = closeFilter\n ? Math.min(currentAdvertisingSpace?.maxLocation || 7, updatedProducts.length)\n : Math.min(currentAdvertisingSpace?.minLocation || 5, updatedProducts.length)\n updatedProducts.splice(insertIndex, 0, currentAdvertisingSpace)\n }\n }\n return updatedProducts\n }\n\n useImperativeHandle(ref, () => ({\n clearData() {\n setData([])\n },\n }))\n\n const onScrollTop = () => {\n const target = filterCardWrapRef.current\n if (!target) return\n const targetY = target.getBoundingClientRect()?.top + window?.pageYOffset - 120\n window?.scrollTo?.({\n top: targetY,\n behavior: 'smooth',\n })\n }\n\n const hasNoIndex = (product: { metafields: { seoSetting: { noindex: any } } }) => {\n return product?.metafields?.seoSetting?.noindex\n }\n\n // \u5904\u7406\u4EA7\u54C1\u6570\u636E\n useEffect(() => {\n if (result?.slug || result?.id) {\n if (page === 1 || !isMobile) {\n setData([])\n }\n if (result?.products) {\n setData(prevProducts => {\n // \u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B58\u5728\u4E8E prevProducts \u4E2D\uFF0C\u907F\u514D\u91CD\u590D\u6DFB\u52A0\n const newProducts = result.products?.filter?.(\n (product: { id: any }) => !prevProducts.some(prev => prev.id === product.id)\n )\n let updatedProducts = [...prevProducts, ...newProducts]\n /** \u5DF2\u552E\u5B8C\u7684\u4EA7\u54C1 */\n const soldOutProducts = updatedProducts.filter?.(\n item =>\n !(\n !item?.metafields?.seoSetting?.noindex &&\n item.availableForSale &&\n item?.variants?.some((item: { availableForSale: any }) => item.availableForSale)\n )\n )\n // \u8FC7\u6EE4\u6389 availableForSale \u4E3A false \u7684\u4EA7\u54C1\n updatedProducts = updatedProducts.filter?.(\n item =>\n !item?.metafields?.seoSetting?.noindex &&\n item.availableForSale &&\n item?.variants?.some((item: { availableForSale: any }) => item.availableForSale)\n )\n // \u5C06\u5DF2\u552E\u5B8C\u7684\u4EA7\u54C1\u6DFB\u52A0\u5230\u6700\u540E\n updatedProducts.push(...soldOutProducts)\n // \u5982\u679C\u662F\u6709\u6298\u6263\u7684\u4EA7\u54C1\uFF0C\u5219\u8FC7\u6EE4\u6389\u6CA1\u6709\u6298\u6263\u7684\u4EA7\u54C1\n if (isSale) {\n updatedProducts = updatedProducts.filter?.((item: any) => {\n let isShow = false\n const isColor = item?.options?.find((item: any) => item?.displayName === 'color')\n if (isColor) {\n isShow = item?.variants?.find(\n (params: any) =>\n params?.coupons?.length && params?.coupons?.[0] && typeof params?.coupons?.[0] === 'object'\n )\n } else {\n const isVariants = item?.variants?.[0]?.coupons\n isShow = isVariants?.length && isVariants?.[0] && typeof isVariants?.[0] === 'object'\n }\n return !!isShow\n })\n }\n // \u5982\u679C advertisingSpace \u5B58\u5728\u4E14\u5C1A\u672A\u6DFB\u52A0\u5230\u6570\u7EC4\u4E2D\n if (updatedProducts?.length && ((page === 1 && !isMobile) || isMobile)) {\n updatedProducts = handleAdvertisingSpace(updatedProducts)\n }\n return updatedProducts\n })\n }\n }\n }, [result?.products, page, isMobile, advertisingSpace, isSale])\n\n useEffect(() => {\n if (!data?.length) return\n if (page === 1 && !isMobile) {\n setData(handleAdvertisingSpace(data))\n }\n }, [closeFilter])\n\n useEffect(() => {\n const isClass = document?.querySelector?.('.yotpo-reviews-star-ratings-widget')\n if (data?.length && (!isClass || isMobile)) {\n refreshStarRating?.()\n }\n }, [data])\n\n return (\n <div className=\"filter-card-wrap-container\" ref={filterCardWrapRef}>\n <div\n className={cn(\n 'w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3',\n {\n 'laptop:grid-cols-4 tablet:grid-cols-3': closeFilter && !isMobile,\n 'laptop:grid-cols-3 tablet:grid-cols-2': !closeFilter && !isMobile,\n },\n 'filter-card-wrap'\n )}\n >\n {data?.map?.(item => {\n if (hasNoIndex(item)) return null\n return (\n <FilterCardWrapItem\n data={item}\n key={item.id}\n buttonText={buttonText}\n metafields={metafields}\n onPrimaryChange={(e, data) => onPrimaryChange?.(e, data)}\n onSecondaryChange={(e, data) => onSecondaryChange?.(e, data)}\n />\n )\n })}\n </div>\n {noResultNode}\n {isMobile && result?.pageInfo?.hasNextPage ? (\n <div\n onClick={() => {\n onNextPage?.(result?.pageInfo?.endCursor)\n }}\n className=\"mt-6 text-sm font-bold cursor-pointer flex items-center justify-center gap-1 filter-card-wrap-more\"\n >\n <span>{loadMoreText || 'View More'}</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"6\" viewBox=\"0 0 12 6\" fill=\"none\">\n <path\n d=\"M9.96967 0.21967C10.2626 -0.0732232 10.7373 -0.073223 11.0302 0.21967C11.3231 0.512563 11.3231 0.987324 11.0302 1.28022L6.53022 5.78022C6.23732 6.07311 5.76256 6.07311 5.46967 5.78022L0.96967 1.28022C0.676777 0.987324 0.676777 0.512563 0.96967 0.21967C1.26256 -0.0732233 1.73732 -0.0732233 2.03022 0.21967L5.99994 4.1894L9.96967 0.21967Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </div>\n ) : null}\n {!isMobile && total > 18 ? (\n <div className=\"mt-6 flex items-center justify-end gap-4 cursor-pointer\">\n <button\n name=\"perv page\"\n disabled={!result?.pageInfo?.hasPreviousPage || !data?.length}\n className={cn(\n 'flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]',\n {\n 'opacity-50 cursor-not-allowed': !result?.pageInfo?.hasPreviousPage || !data?.length,\n }\n )}\n onClick={() => {\n onScrollTop?.()\n onPrevPage?.(result?.pageInfo?.startCursor)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M12 5L7 10L12 15\"\n stroke=\"#3D3D3F\"\n stroke-width=\"1.66667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <button\n name=\"next page\"\n className={cn(\n 'flex items-center justify-center lg-desktop:size-14 size-10 rounded-full leading-tight overflow-hidden bg-transparent border-[1.5px] border-[#3D3D3F]',\n {\n 'opacity-50 cursor-not-allowed': !result?.pageInfo?.hasNextPage || !data?.length,\n }\n )}\n disabled={!result?.pageInfo?.hasNextPage || !data?.length}\n onClick={() => {\n onScrollTop?.()\n onNextPage?.(result?.pageInfo?.endCursor)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M7.5 5L12.5 10L7.5 15\"\n stroke=\"#3D3D3F\"\n stroke-width=\"1.66667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n ) : null}\n </div>\n )\n}\n\nexport default forwardRef(FilterCardWrap)\n"],
5
+ "mappings": "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",
6
6
  "names": ["jsx", "jsxs", "cn", "useMediaQuery", "FilterCardWrapItem", "useRef", "useState", "useEffect", "forwardRef", "useImperativeHandle", "cloneDeep", "FilterCardWrap", "props", "ref", "shopifyData", "isSale", "total", "result", "closeFilter", "page", "metafields", "noResultNode", "refreshStarRating", "onPrimaryChange", "onSecondaryChange", "onNextPage", "onPrevPage", "advertisingSpace", "buttonText", "loadMoreText", "currentAdvertisingSpace", "filterCardWrapRef", "initRefresh", "data", "setData", "isMobile", "handleAdvertisingSpace", "products", "updatedProducts", "findIndex", "item", "insertIndex", "onScrollTop", "target", "targetY", "hasNoIndex", "product", "prevProducts", "newProducts", "prev", "soldOutProducts", "isShow", "params", "isVariants", "isClass", "FilterCardWrap_default"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as u}from"react/jsx-runtime";import{cloneDeep as W}from"es-toolkit";import{useRef as A,useState as x,useMemo as N,useEffect as S}from"react";import $ from"../../../components/link";import{cn as b}from"../../../helpers/utils.js";import{useAiuiContext as q}from"../../AiuiProvider/index.js";const c="All",F=g=>{const{metafields:m,tabs:o,onTabClick:k,tabShape:r="square",filtersPair:h,filtered:s,filtersData:l}=g,{name:i}=m,{pathname:T}=q(),y=A(null),[d,P]=x([]),[v,w]=x([]),D=e=>{const n=W(s)||{};let a=n?.[t?.value]||[];e?.options===(l?.mainPair?.alltxt||i||c)?a=[]:a=[e?.value||e],n[t?.value]=a,a.length<=0&&Reflect.deleteProperty(n,t?.value),k?.({...n},e);const f=document.getElementById(`tab-${e?.label||e}`),p=y.current;if(f&&p){const L=f.offsetLeft,C=f.offsetWidth,E=p.offsetWidth,R=L-E/2+C/2;p.scrollTo({left:R,behavior:"smooth"})}},t=N(()=>h?.find(e=>e.mainPair),[h]);return S(()=>{if(o?.length)P(o);else{const e=t?.options||[],a=[{label:l?.mainPair?.alltxt||i||c,value:t?.value,options:l?.mainPair?.alltxt||i||c},...e];w(a)}},[t,l,o]),d?.length>0||v?.length>0?u("div",{ref:y,className:b(r==="rounded"?"rounded-[28px]":"","tab-switch-wrap bg-tabs-list-bg relative flex gap-x-1 w-fit max-w-full overflow-x-auto overflow-y-hidden p-1 laptop:m-auto"),children:d?.length>0?d?.map?.(e=>u($,{id:`tab-${e?.label}`,href:e?.href,className:b("relative flex-1 shrink-0 whitespace-nowrap transition-all","text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline","lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary",r==="rounded"?"rounded-[28px]":"",e?.href&&e?.href===T?"bg-btn-primary-disabled-foreground":""),children:e?.label||""},e?.label)):v?.map?.(e=>u("div",{id:`tab-${e?.label||e}`,onClick:()=>D(e),className:b("relative flex-1 shrink-0 whitespace-nowrap transition-all","text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline","lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary",r==="rounded"?"rounded-[28px]":"",s?.[t?.value]?.includes?.(e?.value||e)||!s?.[t?.value]?.length&&e?.options?"bg-btn-primary-disabled-foreground":""),children:e?.label||e},e?.value||e))}):null};var _=F;export{_ as default};
1
+ "use client";import{jsx as u}from"react/jsx-runtime";import{cloneDeep as W}from"es-toolkit";import{useRef as A,useState as x,useMemo as N,useEffect as S}from"react";import $ from"../../../components/link";import{cn as b}from"../../../helpers/utils.js";import{useAiuiContext as q}from"../../AiuiProvider/index.js";const c="All",F=g=>{const{metafields:m,tabs:l,onTabClick:k,tabShape:r="square",filtersPair:h,filtered:s,filtersData:o}=g,{name:i}=m,{pathname:T}=q(),y=A(null),[d,P]=x([]),[v,w]=x([]),D=e=>{const n=W(s)||{};let a=n?.[t?.value]||[];e?.options===(o?.mainPair?.alltxt||i||c)?a=[]:a=[e?.value||e],n[t?.value]=a,a.length<=0&&Reflect.deleteProperty(n,t?.value),k?.({...n},e);const p=document.getElementById(`tab-${e?.label||e}`),f=y.current;if(p&&f){const L=p.offsetLeft,C=p.offsetWidth,E=f.offsetWidth,R=L-E/2+C/2;f.scrollTo({left:R,behavior:"smooth"})}},t=N(()=>h?.find(e=>e.mainPair),[h]);return S(()=>{if(l?.length)P(l);else{const e=t?.options||[],a=[{label:o?.mainPair?.alltxt||i||c,value:t?.value,options:o?.mainPair?.alltxt||i||c},...e];w(a)}},[t,o,l]),d?.length>0||v?.length>0?u("div",{ref:y,className:b(r==="rounded"?"rounded-[28px]":"","tab-switch-wrap bg-tabs-list-bg relative flex gap-x-1 w-fit max-w-full overflow-x-auto overflow-y-hidden p-1 laptop:m-auto"),children:d?.length>0?d?.map?.(e=>u($,{id:`tab-${e?.label}`,href:e?.href,className:b("relative flex-1 shrink-0 whitespace-nowrap transition-all cursor-pointer","text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline","lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary",r==="rounded"?"rounded-[28px]":"",e?.href&&e?.href===T?"bg-btn-primary-disabled-foreground":""),children:e?.label||""},e?.label)):v?.map?.(e=>u("div",{id:`tab-${e?.label||e}`,onClick:()=>D(e),className:b("relative flex-1 shrink-0 whitespace-nowrap transition-all cursor-pointer","text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline","lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary",r==="rounded"?"rounded-[28px]":"",s?.[t?.value]?.includes?.(e?.value||e)||!s?.[t?.value]?.length&&e?.options?"bg-btn-primary-disabled-foreground":""),children:e?.label||e},e?.value||e))}):null};var _=F;export{_ as default};
2
2
  //# sourceMappingURL=TabFilter.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/biz-components/CollectionsFilters/component/TabFilter.tsx"],
4
- "sourcesContent": ["'use client'\nimport { remove, cloneDeep } from 'es-toolkit'\nimport React, { useRef, useState, useMemo, useEffect } from 'react'\nimport Link from '../../../components/link'\nimport { cn } from '../../../helpers/utils.js'\nimport { useAiuiContext } from '../../AiuiProvider/index.js'\ninterface TabsProps {\n tabs: any[]\n filtered: any\n metafields: any\n filtersPair: any\n filtersData: any\n tabShape?: 'rounded' | 'square'\n onTabClick?: (value: any, item: any) => void\n}\n\nconst ALL_TEXT = 'All'\n\nconst TabFilter: React.FC<TabsProps> = (props: TabsProps) => {\n const { metafields, tabs, onTabClick, tabShape = 'square', filtersPair, filtered, filtersData } = props\n const { name } = metafields\n\n const { pathname } = useAiuiContext()\n\n const tabRef = useRef<HTMLDivElement>(null)\n const [linkData, setLinkData] = useState<any[]>([])\n const [tabData, setTabData] = useState<any[]>([])\n\n const handleTabClick = (item: any) => {\n const clonefiltered = cloneDeep(filtered) || {}\n let current = clonefiltered?.[mainPair?.value] || []\n if (item?.options === (filtersData?.mainPair?.alltxt || name || ALL_TEXT)) {\n current = []\n } else {\n current = [item?.value || item]\n }\n clonefiltered[mainPair?.value] = current\n if (current.length <= 0) {\n Reflect.deleteProperty(clonefiltered, mainPair?.value)\n }\n onTabClick?.({ ...clonefiltered }, item)\n\n // \u83B7\u53D6\u5F53\u524D\u9009\u4E2D\u7684 tab \u5E76\u8BA1\u7B97\u4E0B\u5212\u7EBF\u4F4D\u7F6E\n const tabElement = document.getElementById(`tab-${item?.label || item}`)\n // **\u8BA1\u7B97\u6EDA\u52A8\u4F4D\u7F6E**\n const container = tabRef.current\n if (tabElement && container) {\n const tabLeft = tabElement.offsetLeft // \u9009\u4E2D tab \u7684\u5DE6\u4FA7\u504F\u79FB\u91CF\n const tabWidth = tabElement.offsetWidth\n const containerWidth = container.offsetWidth\n // \u8BA1\u7B97\u76EE\u6807\u6EDA\u52A8\u4F4D\u7F6E\uFF0C\u4F7F tab \u5C45\u4E2D\n const scrollTo = tabLeft - containerWidth / 2 + tabWidth / 2\n container.scrollTo({\n left: scrollTo,\n behavior: 'smooth',\n })\n }\n }\n\n const mainPair = useMemo(() => {\n return filtersPair?.find((item: any) => item.mainPair)\n }, [filtersPair])\n\n useEffect(() => {\n if (tabs?.length) {\n setLinkData(tabs)\n } else {\n const currentData = mainPair?.options || []\n const allObject = {\n label: filtersData?.mainPair?.alltxt || name || ALL_TEXT,\n value: mainPair?.value,\n options: filtersData?.mainPair?.alltxt || name || ALL_TEXT,\n }\n const tabData = [allObject, ...currentData]\n setTabData(tabData)\n }\n }, [mainPair, filtersData, tabs])\n\n return linkData?.length > 0 || tabData?.length > 0 ? (\n <div\n ref={tabRef}\n className={cn(\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n 'tab-switch-wrap bg-tabs-list-bg relative flex gap-x-1 w-fit max-w-full overflow-x-auto overflow-y-hidden p-1 laptop:m-auto'\n )}\n >\n {linkData?.length > 0\n ? linkData?.map?.((item: any) => (\n <Link\n key={item?.label}\n id={`tab-${item?.label}`}\n href={item?.href}\n className={cn(\n 'relative flex-1 shrink-0 whitespace-nowrap transition-all',\n 'text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline',\n 'lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary',\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n item?.href && item?.href === pathname ? 'bg-btn-primary-disabled-foreground' : ''\n )}\n >\n {item?.label || ''}\n </Link>\n ))\n : tabData?.map?.((item: any) => {\n return (\n <div\n key={item?.value || item}\n id={`tab-${item?.label || item}`}\n onClick={() => handleTabClick(item)}\n className={cn(\n 'relative flex-1 shrink-0 whitespace-nowrap transition-all',\n 'text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline',\n 'lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary',\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n filtered?.[mainPair?.value]?.includes?.(item?.value || item) ||\n (!filtered?.[mainPair?.value]?.length && item?.options)\n ? 'bg-btn-primary-disabled-foreground'\n : ''\n )}\n >\n {item?.label || item}\n </div>\n )\n })}\n </div>\n ) : null\n}\n\nexport default TabFilter\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use client'\nimport { remove, cloneDeep } from 'es-toolkit'\nimport React, { useRef, useState, useMemo, useEffect } from 'react'\nimport Link from '../../../components/link'\nimport { cn } from '../../../helpers/utils.js'\nimport { useAiuiContext } from '../../AiuiProvider/index.js'\ninterface TabsProps {\n tabs: any[]\n filtered: any\n metafields: any\n filtersPair: any\n filtersData: any\n tabShape?: 'rounded' | 'square'\n onTabClick?: (value: any, item: any) => void\n}\n\nconst ALL_TEXT = 'All'\n\nconst TabFilter: React.FC<TabsProps> = (props: TabsProps) => {\n const { metafields, tabs, onTabClick, tabShape = 'square', filtersPair, filtered, filtersData } = props\n const { name } = metafields\n\n const { pathname } = useAiuiContext()\n\n const tabRef = useRef<HTMLDivElement>(null)\n const [linkData, setLinkData] = useState<any[]>([])\n const [tabData, setTabData] = useState<any[]>([])\n\n const handleTabClick = (item: any) => {\n const clonefiltered = cloneDeep(filtered) || {}\n let current = clonefiltered?.[mainPair?.value] || []\n if (item?.options === (filtersData?.mainPair?.alltxt || name || ALL_TEXT)) {\n current = []\n } else {\n current = [item?.value || item]\n }\n clonefiltered[mainPair?.value] = current\n if (current.length <= 0) {\n Reflect.deleteProperty(clonefiltered, mainPair?.value)\n }\n onTabClick?.({ ...clonefiltered }, item)\n\n // \u83B7\u53D6\u5F53\u524D\u9009\u4E2D\u7684 tab \u5E76\u8BA1\u7B97\u4E0B\u5212\u7EBF\u4F4D\u7F6E\n const tabElement = document.getElementById(`tab-${item?.label || item}`)\n // **\u8BA1\u7B97\u6EDA\u52A8\u4F4D\u7F6E**\n const container = tabRef.current\n if (tabElement && container) {\n const tabLeft = tabElement.offsetLeft // \u9009\u4E2D tab \u7684\u5DE6\u4FA7\u504F\u79FB\u91CF\n const tabWidth = tabElement.offsetWidth\n const containerWidth = container.offsetWidth\n // \u8BA1\u7B97\u76EE\u6807\u6EDA\u52A8\u4F4D\u7F6E\uFF0C\u4F7F tab \u5C45\u4E2D\n const scrollTo = tabLeft - containerWidth / 2 + tabWidth / 2\n container.scrollTo({\n left: scrollTo,\n behavior: 'smooth',\n })\n }\n }\n\n const mainPair = useMemo(() => {\n return filtersPair?.find((item: any) => item.mainPair)\n }, [filtersPair])\n\n useEffect(() => {\n if (tabs?.length) {\n setLinkData(tabs)\n } else {\n const currentData = mainPair?.options || []\n const allObject = {\n label: filtersData?.mainPair?.alltxt || name || ALL_TEXT,\n value: mainPair?.value,\n options: filtersData?.mainPair?.alltxt || name || ALL_TEXT,\n }\n const tabData = [allObject, ...currentData]\n setTabData(tabData)\n }\n }, [mainPair, filtersData, tabs])\n\n return linkData?.length > 0 || tabData?.length > 0 ? (\n <div\n ref={tabRef}\n className={cn(\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n 'tab-switch-wrap bg-tabs-list-bg relative flex gap-x-1 w-fit max-w-full overflow-x-auto overflow-y-hidden p-1 laptop:m-auto'\n )}\n >\n {linkData?.length > 0\n ? linkData?.map?.((item: any) => (\n <Link\n key={item?.label}\n id={`tab-${item?.label}`}\n href={item?.href}\n className={cn(\n 'relative flex-1 shrink-0 whitespace-nowrap transition-all cursor-pointer',\n 'text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline',\n 'lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary',\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n item?.href && item?.href === pathname ? 'bg-btn-primary-disabled-foreground' : ''\n )}\n >\n {item?.label || ''}\n </Link>\n ))\n : tabData?.map?.((item: any) => {\n return (\n <div\n key={item?.value || item}\n id={`tab-${item?.label || item}`}\n onClick={() => handleTabClick(item)}\n className={cn(\n 'relative flex-1 shrink-0 whitespace-nowrap transition-all cursor-pointer',\n 'text-info-primary px-5 py-2.5 text-sm lg-desktop:text-base font-bold no-underline',\n 'lg-desktop:text-base lg-desktop:px-7 lg-desktop:py-3.5 hover:bg-btn-primary-disabled-foreground hover:text-info-primary',\n tabShape === 'rounded' ? 'rounded-[28px]' : '',\n filtered?.[mainPair?.value]?.includes?.(item?.value || item) ||\n (!filtered?.[mainPair?.value]?.length && item?.options)\n ? 'bg-btn-primary-disabled-foreground'\n : ''\n )}\n >\n {item?.label || item}\n </div>\n )\n })}\n </div>\n ) : null\n}\n\nexport default TabFilter\n"],
5
+ "mappings": "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",
6
6
  "names": ["jsx", "cloneDeep", "useRef", "useState", "useMemo", "useEffect", "Link", "cn", "useAiuiContext", "ALL_TEXT", "TabFilter", "props", "metafields", "tabs", "onTabClick", "tabShape", "filtersPair", "filtered", "filtersData", "name", "pathname", "tabRef", "linkData", "setLinkData", "tabData", "setTabData", "handleTabClick", "item", "clonefiltered", "current", "mainPair", "tabElement", "container", "tabLeft", "tabWidth", "containerWidth", "scrollTo", "currentData", "TabFilter_default"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/biz-components/CollectionsFilters/component/filtersFun.ts"],
4
- "sourcesContent": ["const handleFilters = (filtered: any) => {\n const allFilters: any[] = []\n let chunkNumber: number = 18\n Object.keys(filtered).forEach(key => {\n if (key === 'price') {\n const priceOptions =\n filtered[key]\n ?.join('|')\n ?.split('|')\n ?.map((item: any) => Number(item)) || []\n const maxValue = Math.max(...priceOptions)\n const minValue = Math.min(...priceOptions)\n maxValue &&\n minValue &&\n allFilters.push({\n price: {\n max: maxValue,\n min: minValue,\n },\n })\n }\n if (key.includes('filter.p.tag')) {\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n tag: item,\n })\n })\n }\n if (key.includes('filter.p.product_type')) {\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n productType: item,\n })\n })\n }\n if (key.includes('filter.v.availability')) {\n filtered[key]?.forEach((item: string) => {\n const val = item.split('filter.v.availability.')?.pop()\n allFilters.push({\n available: val === '1',\n })\n })\n }\n if (key.includes('filter.v.m.filter.')) {\n const metafieldsKey = key.split('filter.v.m.filter.')?.pop()\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n variantMetafield: {\n namespace: 'filter',\n key: metafieldsKey,\n value: item,\n },\n })\n })\n }\n if (key.includes('offers')) {\n chunkNumber = 150\n }\n })\n return { allFilters: allFilters, chunkNumber: chunkNumber }\n}\n\nconst handleSortKeyAndReverse = (sortList: any, sortKeyIndx: number) => {\n if (sortList && sortKeyIndx >= 0) {\n const current = sortList?.[sortKeyIndx]\n if (!current?.type?.includes('filter.')) {\n const [sortKey, reverse] = current?.type?.split('|')\n return [sortKey, !!reverse]\n }\n }\n return ['COLLECTION_DEFAULT', false]\n}\n\nconst handleChunkNumber = (filtered: any) => {\n if (Object.keys(filtered)?.some(key => key === 'offers')) return 150\n return 18\n}\n\n\nconst handleFilterOptions = (result: any, filterPrice: any, shop_filters_pair: any, filterProductData?: any) => {\n const Offers = {\n label: shop_filters_pair?.filter_txt?.offers?.name || 'Offers',\n value: 'offers',\n mainPair: false,\n options: [\n {\n label: shop_filters_pair?.filter_txt?.offers?.onsale || 'On Sale',\n value: 'onsale',\n },\n ],\n }\n filterPrice.mainPair = false\n const initOption = [filterPrice, Offers]\n return (\n result?.filters &&\n result.filters.reduce((ac: any, cu: any) => {\n const filter = {\n label: cu?.label,\n options: [],\n value: cu?.id,\n mainPair: filterProductData?.mainPair?.type === cu?.id ? true : false,\n }\n // if (cu?.id === 'filter.p.tag') return ac\n if (cu?.id === 'filter.v.price') return ac\n if (cu?.id === 'filter.p.product_type') return ac\n if (cu?.id === 'filter.v.availability') {\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n if (cuV.id === 'filter.v.availability.1') {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.id,\n })\n }\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }\n if (cu?.id === 'filter.v.m.filter.capacity') {\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n if (cuV?.label?.includes('Over')) {\n acV.unshift({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n } else {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n }\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }, initOption)\n )\n}\n\nfunction getComponentData(\n metafields: any,\n dataKey: string,\n variant: any = null,\n components: any = null\n) {\n // console.log(\"metafields\", metafields)\n // \u83B7\u53D6 component \u7684\u6587\u6848\n\n let data = {}\n if (components) {\n data = components[dataKey?.trim()] || {}\n } else {\n data = metafields?.components ? metafields.components[dataKey?.trim()] : {}\n }\n\n if (variant) {\n // \u5982\u679C\u6709\u4E14 variant \u6709\u5BF9\u5E94\u6587\u6848\uFF0Cvariant \u8986\u76D6 component\n const { variantsMetafields = {} } =\n components || metafields?.components || {}\n\n const variantMetafields = Array.isArray(variantsMetafields)\n ? variantsMetafields?.find((f) => f.id === variant?.id)\n : {}\n if (\n variantMetafields?.metafields &&\n variantMetafields.metafields[dataKey]\n ) {\n data = variantMetafields.metafields[dataKey]\n }\n }\n\n return {\n key: dataKey.split('_')[0],\n data,\n }\n}\n\nexport { handleFilters, handleSortKeyAndReverse, handleChunkNumber, handleFilterOptions, getComponentData }"],
4
+ "sourcesContent": ["const handleFilters = (filtered: any) => {\n const allFilters: any[] = []\n let chunkNumber: number = 18\n Object.keys(filtered).forEach(key => {\n if (key === 'price') {\n const priceOptions =\n filtered[key]\n ?.join('|')\n ?.split('|')\n ?.map((item: any) => Number(item)) || []\n const maxValue = Math.max(...priceOptions)\n const minValue = Math.min(...priceOptions)\n maxValue &&\n minValue &&\n allFilters.push({\n price: {\n max: maxValue,\n min: minValue,\n },\n })\n }\n if (key.includes('filter.p.tag')) {\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n tag: item,\n })\n })\n }\n if (key.includes('filter.p.product_type')) {\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n productType: item,\n })\n })\n }\n if (key.includes('filter.v.availability')) {\n filtered[key]?.forEach((item: string) => {\n const val = item.split('filter.v.availability.')?.pop()\n allFilters.push({\n available: val === '1',\n })\n })\n }\n if (key.includes('filter.v.m.filter.')) {\n const metafieldsKey = key.split('filter.v.m.filter.')?.pop()\n filtered[key]?.forEach((item: any) => {\n allFilters.push({\n variantMetafield: {\n namespace: 'filter',\n key: metafieldsKey,\n value: item,\n },\n })\n })\n }\n if (key.includes('offers')) {\n chunkNumber = 150\n }\n })\n return { allFilters: allFilters, chunkNumber: chunkNumber }\n}\n\nconst handleSortKeyAndReverse = (sortList: any, sortKeyIndx: number) => {\n if (sortList && sortKeyIndx >= 0) {\n const current = sortList?.[sortKeyIndx]\n if (!current?.type?.includes('filter.')) {\n const [sortKey, reverse] = current?.type?.split('|')\n return [sortKey, !!reverse]\n }\n }\n return ['COLLECTION_DEFAULT', false]\n}\n\nconst handleChunkNumber = (filtered: any) => {\n if (Object.keys(filtered)?.some(key => key === 'offers')) return 150\n return 18\n}\n\n\nconst handleFilterOptions = (result: any, filterPrice: any, shop_filters_pair: any, filterProductData?: any) => {\n const Offers = {\n label: shop_filters_pair?.filter_txt?.offers?.name || 'Offers',\n value: 'offers',\n mainPair: false,\n options: [\n {\n label: shop_filters_pair?.filter_txt?.offers?.onsale || 'On Sale',\n value: 'onsale',\n },\n ],\n }\n filterPrice.mainPair = false\n const initOption = [filterPrice, Offers]\n return (\n result?.filters &&\n result.filters.reduce((ac: any, cu: any) => {\n const filter = {\n label: cu?.label,\n options: [],\n value: cu?.id,\n mainPair: filterProductData?.mainPair?.type === cu?.id ? true : false,\n }\n // if (cu?.id === 'filter.p.tag') return ac\n if (cu?.id === 'filter.v.price') return ac\n if (cu?.id === 'filter.p.product_type') return ac\n if (cu?.id === 'filter.v.availability') {\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n if (cuV.id === 'filter.v.availability.1') {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.id,\n })\n }\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }\n if (cu?.id === 'filter.v.m.filter.capacity') {\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n if (cuV?.label?.includes('Over')) {\n acV.unshift({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n } else {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n }\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }\n filter.options = cu.values.reduce((acV: any, cuV: any) => {\n acV.push({\n count: cuV.count,\n label: cuV.label,\n value: cuV.label,\n })\n return [...acV]\n }, [])\n ac.push(filter)\n return [...ac]\n }, initOption)\n )\n}\n\nfunction getComponentData(\n metafields: any,\n dataKey: string,\n variant: any = null,\n components: any = null\n) {\n // console.log(\"metafields\", metafields)\n // \u83B7\u53D6 component \u7684\u6587\u6848\n\n let data = {}\n if (components) {\n data = components[dataKey?.trim()] || {}\n } else {\n data = metafields?.components ? metafields.components[dataKey?.trim()] : {}\n }\n\n if (variant) {\n // \u5982\u679C\u6709\u4E14 variant \u6709\u5BF9\u5E94\u6587\u6848\uFF0Cvariant \u8986\u76D6 component\n const { variantsMetafields = {} } =\n components || metafields?.components || {}\n\n const variantMetafields = Array.isArray(variantsMetafields)\n ? variantsMetafields?.find((f) => f.id === variant?.id)\n : {}\n if (\n variantMetafields?.metafields &&\n variantMetafields.metafields[dataKey]\n ) {\n data = variantMetafields.metafields[dataKey]\n }\n }\n\n return {\n key: dataKey.split('_')[0],\n data,\n }\n}\n\nexport { handleFilters, handleSortKeyAndReverse, handleChunkNumber, handleFilterOptions, getComponentData }\n"],
5
5
  "mappings": "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",
6
6
  "names": ["handleFilters", "filtered", "allFilters", "chunkNumber", "key", "priceOptions", "item", "maxValue", "minValue", "val", "metafieldsKey", "handleSortKeyAndReverse", "sortList", "sortKeyIndx", "current", "sortKey", "reverse", "handleChunkNumber", "handleFilterOptions", "result", "filterPrice", "shop_filters_pair", "filterProductData", "Offers", "initOption", "ac", "cu", "filter", "acV", "cuV", "getComponentData", "metafields", "dataKey", "variant", "components", "data", "variantsMetafields", "variantMetafields", "f"]
7
7
  }
@@ -8,7 +8,7 @@ export declare function formatPrice({ amount, currencyCode, locale, maximumFract
8
8
  maximumFractionDigits?: number;
9
9
  minimumFractionDigits?: number;
10
10
  removeTrailingZeros?: boolean;
11
- }): string;
11
+ }): string | null;
12
12
  export declare function formatVariantPrice({ amount, baseAmount, currencyCode, locale, maximumFractionDigits, minimumFractionDigits, removeTrailingZeros, }: {
13
13
  baseAmount: number;
14
14
  amount: number;
@@ -23,10 +23,10 @@ export declare function formatVariantPrice({ amount, baseAmount, currencyCode, l
23
23
  discount: string;
24
24
  discountAmount?: undefined;
25
25
  } | {
26
- price: string;
27
- basePrice: string | undefined;
26
+ price: string | null;
27
+ basePrice: string | null | undefined;
28
28
  discount: string | null;
29
- discountAmount: string | undefined;
29
+ discountAmount: string | null | undefined;
30
30
  };
31
31
  type EventType = {
32
32
  primaryButton?: (v: any, index: number, data: ShelfDisplayType) => void;
@@ -1,2 +1,2 @@
1
- import b from"decimal.js";const c={us:"$",uk:"\xA3",ca:"$",eu:"\u20AC",fr:"\u20AC",de:"\u20AC",nl:"\u20AC",vn:"\u20AB",cl:"$",sg:"$",ae:"AED"},l=e=>({us:"en-us",uk:"en-gb",ca:"en-ca",au:"en-au",eu:"en",fr:"de-DE","eu-es":"de-DE","eu-fr":"de-DE","eu-it":"de-DE","eu-de":"de-DE","eu-en":"en-US","cz-en":"de-DE",nl:"de-DE",de:"de-DE",vn:"vi-vn",sg:"en-sg","ae-en":"ae-en",plus:"en-us",cl:"es-cl",dk:"en-dk",fi:"en-fi",no:"en-no",is:"en-is",se:"en-se"})[e]||"";function d({amount:e,currencyCode:r,locale:t,maximumFractionDigits:n,minimumFractionDigits:o,removeTrailingZeros:u=!1}){const a=t==="nl"?"EUR":r||"USD";let i=new Intl.NumberFormat(l(t),{style:"currency",currency:a,minimumFractionDigits:n===0?0:o,maximumFractionDigits:n}).format(e);return["eu-de","eu-en","de","eu"].includes(t)&&(i=i?.toString()?.replace(/[\s]/g,"")),u&&(i=i.replace(/(\.\d*?[1-9])0+\b/,"$1").replace(/\.0+\b/,"").replace(/(\,\d*?[1-9])0+\b/,"$1").replace(/\,0+\b/,"")),i}function h({amount:e,baseAmount:r,currencyCode:t,locale:n,maximumFractionDigits:o,minimumFractionDigits:u,removeTrailingZeros:a}){if(typeof Intl>"u")return{price:`${c[n]}${e}`,basePrice:`${c[n]}${r}`,discount:`${c[n]}${r-e||0}`};const s=r>e,i=new Intl.NumberFormat(l(n),{style:"percent"}),p=s?i.format((r-e)/r):null;let m;if(s){const f=new b(r).sub(e||0).toNumber();m=d({amount:f,currencyCode:t||"USD",locale:n,maximumFractionDigits:2})}const g=d({amount:e,currencyCode:t,locale:n,removeTrailingZeros:a}),y=s?d({amount:r,currencyCode:t,locale:n,maximumFractionDigits:o,minimumFractionDigits:u,removeTrailingZeros:a}):void 0;return{price:g,basePrice:y,discount:p,discountAmount:m}}export{c as PRICE_SYMBOL,d as formatPrice,h as formatVariantPrice,l as languageTerritory};
1
+ import b from"decimal.js";const l={us:"$",uk:"\xA3",ca:"$",eu:"\u20AC",fr:"\u20AC",de:"\u20AC",nl:"\u20AC",vn:"\u20AB",cl:"$",sg:"$",ae:"AED"},g=e=>({us:"en-US",uk:"en-GB",ca:"en-CA",eu:"en",fr:"fr-FR",au:"en-AU",my:"en-my","eu-es":"de-DE","eu-fr":"de-DE","eu-it":"de-DE","eu-de":"de-DE","eu-en":"en-US","cz-en":"de-DE","ca-fr":"fr-FR",nl:"de-DE",de:"de-DE",vn:"vi-vn",sg:"en-sg","ae-en":"ae-en",plus:"en-us",cl:"es-cl",dk:"en-dk",fi:"en-fi",no:"en-no",is:"en-is",se:"en-se","eu-pl":"pl-PL"})[e]||"";function d({amount:e,currencyCode:r,locale:i,maximumFractionDigits:n,minimumFractionDigits:o,removeTrailingZeros:u=!1}){const s=i==="nl"?"EUR":r||"USD",a=g(i);if(!a)return null;let t=new Intl.NumberFormat(a,{style:"currency",currency:s,minimumFractionDigits:n===0?0:o,maximumFractionDigits:n})?.format?.(e);return["eu-de","eu-en","de","eu"].includes(i)&&(t=t?.toString()?.replace?.(/[\s]/g,"")),u&&(t=t?.replace?.(/(\.\d*?[1-9])0+\b/,"$1")?.replace?.(/\.0+\b/,"")?.replace?.(/(\,\d*?[1-9])0+\b/,"$1")?.replace?.(/\,0+\b/,"")),t}function h({amount:e,baseAmount:r,currencyCode:i,locale:n,maximumFractionDigits:o,minimumFractionDigits:u,removeTrailingZeros:s}){if(typeof Intl>"u")return{price:`${l[n]}${e}`,basePrice:`${l[n]}${r}`,discount:`${l[n]}${r-e||0}`};const a=r>e;let c=null;const t=g(n);if(t){const m=new Intl.NumberFormat(t,{style:"percent"});c=a?m.format((r-e)/r):null}let p;if(a){const m=new b(r).sub(e||0).toNumber();p=d({amount:m,currencyCode:i||"USD",locale:n,maximumFractionDigits:2})}const y=d({amount:e,currencyCode:i,locale:n,removeTrailingZeros:s}),f=a?d({amount:r,currencyCode:i,locale:n,maximumFractionDigits:o,minimumFractionDigits:u,removeTrailingZeros:s}):void 0;return{price:y,basePrice:f,discount:c,discountAmount:p}}export{l as PRICE_SYMBOL,d as formatPrice,h as formatVariantPrice,g as languageTerritory};
2
2
  //# sourceMappingURL=shelfDisplay.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/ShelfDisplay/shelfDisplay.ts"],
4
- "sourcesContent": ["import Decimal from 'decimal.js'\nimport type { ContainerProps } from '../../types/props.js'\n/* eslint-disable no-useless-escape */\nexport const PRICE_SYMBOL = {\n us: '$',\n uk: '\u00A3',\n ca: '$',\n eu: '\u20AC',\n fr: '\u20AC',\n de: '\u20AC',\n nl: '\u20AC',\n vn: '\u20AB',\n cl: '$',\n sg: '$',\n ae: 'AED',\n} as any\n\nexport const languageTerritory = (locale: string) =>\n // https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_territory_information.html\n ({\n us: 'en-us',\n uk: 'en-gb',\n ca: 'en-ca',\n au: 'en-au',\n eu: 'en',\n fr: 'de-DE',\n 'eu-es': 'de-DE',\n 'eu-fr': 'de-DE',\n 'eu-it': 'de-DE',\n 'eu-de': 'de-DE',\n 'eu-en': 'en-US',\n 'cz-en': 'de-DE',\n nl: 'de-DE',\n de: 'de-DE',\n vn: 'vi-vn',\n sg: 'en-sg',\n 'ae-en': 'ae-en',\n plus: 'en-us',\n cl: 'es-cl',\n dk: 'en-dk',\n fi: 'en-fi',\n no: 'en-no',\n is: 'en-is',\n se: 'en-se',\n })[locale] || ''\n\nexport function formatPrice({\n amount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros = false,\n}: {\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n }) {\n const code = locale === 'nl' ? 'EUR' : currencyCode || 'USD'\n const formatCurrency = new Intl.NumberFormat(languageTerritory(locale), {\n style: 'currency',\n currency: code,\n minimumFractionDigits: maximumFractionDigits === 0 ? 0 : minimumFractionDigits,\n maximumFractionDigits,\n })\n\n let formattedValue = formatCurrency.format(amount)\n\n if (['eu-de', 'eu-en', 'de', 'eu'].includes(locale)) {\n formattedValue = formattedValue?.toString()?.replace(/[\\s]/g, '')\n }\n\n if (removeTrailingZeros) {\n // Adjust the regex to match comma as decimal separator\n formattedValue = formattedValue\n .replace(/(\\.\\d*?[1-9])0+\\b/, '$1')\n .replace(/\\.0+\\b/, '')\n .replace(/(\\,\\d*?[1-9])0+\\b/, '$1')\n .replace(/\\,0+\\b/, '')\n }\n\n return formattedValue\n}\n\nexport function formatVariantPrice({\n amount,\n baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n}: {\n baseAmount: number\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n}) {\n if (typeof Intl === 'undefined') {\n return {\n price: `${PRICE_SYMBOL[locale]}${amount}`,\n basePrice: `${PRICE_SYMBOL[locale]}${baseAmount}`,\n discount: `${PRICE_SYMBOL[locale]}${baseAmount - amount || 0}`,\n }\n }\n\n const hasDiscount = baseAmount > amount\n const formatDiscount = new Intl.NumberFormat(languageTerritory(locale), {\n style: 'percent',\n })\n const discount = hasDiscount ? formatDiscount.format((baseAmount - amount) / baseAmount) : null\n // \u6298\u6263\u91D1\u989D\n let discountAmount;\n if (hasDiscount) { \n const savePriceAmount = new Decimal(baseAmount).sub(amount || 0).toNumber()\n discountAmount = formatPrice({\n amount: savePriceAmount,\n currencyCode: currencyCode || 'USD',\n locale,\n maximumFractionDigits: 2,\n })\n }\n\n const price = formatPrice({ amount, currencyCode, locale, removeTrailingZeros })\n const basePrice = hasDiscount\n ? formatPrice({\n amount: baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n })\n : undefined\n\n return { price, basePrice, discount, discountAmount }\n}\n\ntype EventType = {\n primaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n secondaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n}\n\nexport interface ShelfDisplayItem {\n id?: string\n /** \u4EA7\u54C1\u56FE\u7247*/\n img?: {\n url: string\n }\n handle?: string\n sku?: string\n /** \u6298\u6263\u540E\u4EF7\u683C*/\n price?: string\n title?: string\n /** \u6298\u6263\u524D\u4EF7\u683C*/\n basePrice?: string\n subTitle?: string\n /** \u6807\u7B7E*/\n tagItems?: string[]\n tab?: string\n data?: ShelfDisplayItem[]\n custom_name?: string\n custom_description?: string\n custom_image?: string\n custom_theme?: string\n}\n\nexport type ShelfDisplayType = {\n title?: string\n isShowTab?: boolean\n isShowTag?: boolean\n isShowRecommendedCard?: boolean\n isShowOriginalPrice?: boolean\n direction?: 'horizontal' | 'vertical'\n align?: 'left' | 'center' | 'right'\n productsTab?: any[]\n productsCard?: any[]\n /** \u5361\u7247\u5F62\u72B6 */\n itemShape?: 'round' | 'square'\n /** \u6309\u94AE\u5F62\u72B6 */\n shape?: 'round' | 'square'\n /** \u6807\u7B7E\u9875\u5F62\u72B6*/\n tabShape?: 'rounded' | 'square'\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: string\n primaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n /** \u526F\u6309\u94AE\u914D\u7F6E */\n secondaryButton?: string\n secondaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n theme?: 'light' | 'dark'\n containerProps?: ContainerProps\n}\n\nexport interface ShelfDisplayProps {\n data: ShelfDisplayType\n buildData?: {\n categories: any[]\n products: any[]\n }\n recommendedData?: any[]\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: EventType\n className?: string\n key?: string\n target?: '_self' | '_blank'\n breakpoints?: {\n [key: number]: {\n spaceBetween: number\n freeMode: boolean\n slidesPerView: number\n }\n }\n metafields?: any\n isDisplayGudgments?: boolean\n isDisplayBackImage?: boolean\n}"],
5
- "mappings": "AAAA,OAAOA,MAAa,aAGb,MAAMC,EAAe,CAC1B,GAAI,IACJ,GAAI,OACJ,GAAI,IACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACN,EAEaC,EAAqBC,IAE/B,CACC,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,KACJ,GAAI,QACJ,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,QAAS,QACT,KAAM,QACN,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,OACN,GAAGA,CAAM,GAAK,GAET,SAASC,EAAY,CAC1B,OAAAC,EACA,aAAAC,EACA,OAAAH,EACA,sBAAAI,EACA,sBAAAC,EACA,oBAAAC,EAAsB,EACxB,EAOK,CACH,MAAMC,EAAOP,IAAW,KAAO,MAAQG,GAAgB,MAQvD,IAAIK,EAPmB,IAAI,KAAK,aAAaT,EAAkBC,CAAM,EAAG,CACtE,MAAO,WACP,SAAUO,EACV,sBAAuBH,IAA0B,EAAI,EAAIC,EACzD,sBAAAD,CACF,CAAC,EAEmC,OAAOF,CAAM,EAEjD,MAAI,CAAC,QAAS,QAAS,KAAM,IAAI,EAAE,SAASF,CAAM,IAChDQ,EAAiBA,GAAgB,SAAS,GAAG,QAAQ,QAAS,EAAE,GAG9DF,IAEFE,EAAiBA,EACd,QAAQ,oBAAqB,IAAI,EACjC,QAAQ,SAAU,EAAE,EACpB,QAAQ,oBAAqB,IAAI,EACjC,QAAQ,SAAU,EAAE,GAGlBA,CACT,CAEO,SAASC,EAAmB,CACjC,OAAAP,EACA,WAAAQ,EACA,aAAAP,EACA,OAAAH,EACA,sBAAAI,EACA,sBAAAC,EACA,oBAAAC,CACF,EAQG,CACD,GAAI,OAAO,KAAS,IAClB,MAAO,CACL,MAAO,GAAGR,EAAaE,CAAM,CAAC,GAAGE,CAAM,GACvC,UAAW,GAAGJ,EAAaE,CAAM,CAAC,GAAGU,CAAU,GAC/C,SAAU,GAAGZ,EAAaE,CAAM,CAAC,GAAGU,EAAaR,GAAU,CAAC,EAC9D,EAGF,MAAMS,EAAcD,EAAaR,EAC3BU,EAAiB,IAAI,KAAK,aAAab,EAAkBC,CAAM,EAAG,CACtE,MAAO,SACT,CAAC,EACKa,EAAWF,EAAcC,EAAe,QAAQF,EAAaR,GAAUQ,CAAU,EAAI,KAE3F,IAAII,EACJ,GAAIH,EAAa,CACf,MAAMI,EAAkB,IAAIlB,EAAQa,CAAU,EAAE,IAAIR,GAAU,CAAC,EAAE,SAAS,EAC1EY,EAAiBb,EAAY,CAC3B,OAAQc,EACR,aAAcZ,GAAgB,MAC9B,OAAAH,EACA,sBAAuB,CACzB,CAAC,CACH,CAEA,MAAMgB,EAAQf,EAAY,CAAE,OAAAC,EAAQ,aAAAC,EAAc,OAAAH,EAAQ,oBAAAM,CAAoB,CAAC,EACzEW,EAAYN,EACdV,EAAY,CACV,OAAQS,EACR,aAAAP,EACA,OAAAH,EACA,sBAAAI,EACA,sBAAAC,EACA,oBAAAC,CACF,CAAC,EACD,OAEJ,MAAO,CAAE,MAAAU,EAAO,UAAAC,EAAW,SAAAJ,EAAU,eAAAC,CAAe,CACtD",
6
- "names": ["Decimal", "PRICE_SYMBOL", "languageTerritory", "locale", "formatPrice", "amount", "currencyCode", "maximumFractionDigits", "minimumFractionDigits", "removeTrailingZeros", "code", "formattedValue", "formatVariantPrice", "baseAmount", "hasDiscount", "formatDiscount", "discount", "discountAmount", "savePriceAmount", "price", "basePrice"]
4
+ "sourcesContent": ["import Decimal from 'decimal.js'\nimport type { ContainerProps } from '../../types/props.js'\n/* eslint-disable no-useless-escape */\nexport const PRICE_SYMBOL = {\n us: '$',\n uk: '\u00A3',\n ca: '$',\n eu: '\u20AC',\n fr: '\u20AC',\n de: '\u20AC',\n nl: '\u20AC',\n vn: '\u20AB',\n cl: '$',\n sg: '$',\n ae: 'AED',\n} as any\n\nexport const languageTerritory = (locale: string) =>\n // https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_territory_information.html\n ({\n us: 'en-US',\n uk: 'en-GB',\n ca: 'en-CA',\n eu: 'en',\n fr: 'fr-FR',\n au: 'en-AU',\n my: 'en-my',\n 'eu-es': 'de-DE',\n 'eu-fr': 'de-DE',\n 'eu-it': 'de-DE',\n 'eu-de': 'de-DE',\n 'eu-en': 'en-US',\n 'cz-en': 'de-DE',\n 'ca-fr': 'fr-FR',\n nl: 'de-DE',\n de: 'de-DE',\n vn: 'vi-vn',\n sg: 'en-sg',\n 'ae-en': 'ae-en',\n plus: 'en-us',\n cl: 'es-cl',\n dk: 'en-dk',\n fi: 'en-fi',\n no: 'en-no',\n is: 'en-is',\n se: 'en-se',\n 'eu-pl': 'pl-PL',\n })[locale] || ''\n\nexport function formatPrice({\n amount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros = false,\n}: {\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n}) {\n const code = locale === 'nl' ? 'EUR' : currencyCode || 'USD'\n const localeLanguage = languageTerritory(locale)\n if (!localeLanguage) {\n return null\n }\n const formatCurrency = new Intl.NumberFormat(localeLanguage, {\n style: 'currency',\n currency: code,\n minimumFractionDigits: maximumFractionDigits === 0 ? 0 : minimumFractionDigits,\n maximumFractionDigits,\n })\n\n let formattedValue = formatCurrency?.format?.(amount)\n\n if (['eu-de', 'eu-en', 'de', 'eu'].includes(locale)) {\n formattedValue = formattedValue?.toString()?.replace?.(/[\\s]/g, '')\n }\n\n if (removeTrailingZeros) {\n formattedValue = formattedValue\n ?.replace?.(/(\\.\\d*?[1-9])0+\\b/, '$1')\n ?.replace?.(/\\.0+\\b/, '')\n ?.replace?.(/(\\,\\d*?[1-9])0+\\b/, '$1')\n ?.replace?.(/\\,0+\\b/, '')\n }\n\n return formattedValue\n}\n\nexport function formatVariantPrice({\n amount,\n baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n}: {\n baseAmount: number\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n}) {\n if (typeof Intl === 'undefined') {\n return {\n price: `${PRICE_SYMBOL[locale]}${amount}`,\n basePrice: `${PRICE_SYMBOL[locale]}${baseAmount}`,\n discount: `${PRICE_SYMBOL[locale]}${baseAmount - amount || 0}`,\n }\n }\n\n const hasDiscount = baseAmount > amount\n let discount = null\n const currentLocale = languageTerritory(locale)\n if (currentLocale) {\n const formatDiscount = new Intl.NumberFormat(currentLocale, {\n style: 'percent',\n })\n discount = hasDiscount ? formatDiscount.format((baseAmount - amount) / baseAmount) : null\n }\n // \u6298\u6263\u91D1\u989D\n let discountAmount;\n if (hasDiscount) { \n const savePriceAmount = new Decimal(baseAmount).sub(amount || 0).toNumber()\n discountAmount = formatPrice({\n amount: savePriceAmount,\n currencyCode: currencyCode || 'USD',\n locale,\n maximumFractionDigits: 2,\n })\n }\n\n const price = formatPrice({ amount, currencyCode, locale, removeTrailingZeros })\n const basePrice = hasDiscount\n ? formatPrice({\n amount: baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n })\n : undefined\n\n return { price, basePrice, discount, discountAmount }\n}\n\ntype EventType = {\n primaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n secondaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n}\n\nexport interface ShelfDisplayItem {\n id?: string\n /** \u4EA7\u54C1\u56FE\u7247*/\n img?: {\n url: string\n }\n handle?: string\n sku?: string\n /** \u6298\u6263\u540E\u4EF7\u683C*/\n price?: string\n title?: string\n /** \u6298\u6263\u524D\u4EF7\u683C*/\n basePrice?: string\n subTitle?: string\n /** \u6807\u7B7E*/\n tagItems?: string[]\n tab?: string\n data?: ShelfDisplayItem[]\n custom_name?: string\n custom_description?: string\n custom_image?: string\n custom_theme?: string\n}\n\nexport type ShelfDisplayType = {\n title?: string\n isShowTab?: boolean\n isShowTag?: boolean\n isShowRecommendedCard?: boolean\n isShowOriginalPrice?: boolean\n direction?: 'horizontal' | 'vertical'\n align?: 'left' | 'center' | 'right'\n productsTab?: any[]\n productsCard?: any[]\n /** \u5361\u7247\u5F62\u72B6 */\n itemShape?: 'round' | 'square'\n /** \u6309\u94AE\u5F62\u72B6 */\n shape?: 'round' | 'square'\n /** \u6807\u7B7E\u9875\u5F62\u72B6*/\n tabShape?: 'rounded' | 'square'\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: string\n primaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n /** \u526F\u6309\u94AE\u914D\u7F6E */\n secondaryButton?: string\n secondaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n theme?: 'light' | 'dark'\n containerProps?: ContainerProps\n}\n\nexport interface ShelfDisplayProps {\n data: ShelfDisplayType\n buildData?: {\n categories: any[]\n products: any[]\n }\n recommendedData?: any[]\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: EventType\n className?: string\n key?: string\n target?: '_self' | '_blank'\n breakpoints?: {\n [key: number]: {\n spaceBetween: number\n freeMode: boolean\n slidesPerView: number\n }\n }\n metafields?: any\n isDisplayGudgments?: boolean\n isDisplayBackImage?: boolean\n}"],
5
+ "mappings": "AAAA,OAAOA,MAAa,aAGb,MAAMC,EAAe,CAC1B,GAAI,IACJ,GAAI,OACJ,GAAI,IACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACN,EAEaC,EAAqBC,IAE/B,CACC,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,KACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,QAAS,QACT,KAAM,QACN,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,QAAS,OACX,GAAGA,CAAM,GAAK,GAET,SAASC,EAAY,CAC1B,OAAAC,EACA,aAAAC,EACA,OAAAH,EACA,sBAAAI,EACA,sBAAAC,EACA,oBAAAC,EAAsB,EACxB,EAOG,CACD,MAAMC,EAAOP,IAAW,KAAO,MAAQG,GAAgB,MACjDK,EAAiBT,EAAkBC,CAAM,EAC/C,GAAI,CAACQ,EACH,OAAO,KAST,IAAIC,EAPmB,IAAI,KAAK,aAAaD,EAAgB,CAC3D,MAAO,WACP,SAAUD,EACV,sBAAuBH,IAA0B,EAAI,EAAIC,EACzD,sBAAAD,CACF,CAAC,GAEoC,SAASF,CAAM,EAEpD,MAAI,CAAC,QAAS,QAAS,KAAM,IAAI,EAAE,SAASF,CAAM,IAChDS,EAAiBA,GAAgB,SAAS,GAAG,UAAU,QAAS,EAAE,GAGhEH,IACFG,EAAiBA,GACb,UAAU,oBAAqB,IAAI,GACnC,UAAU,SAAU,EAAE,GACtB,UAAU,oBAAqB,IAAI,GACnC,UAAU,SAAU,EAAE,GAGrBA,CACT,CAEO,SAASC,EAAmB,CACjC,OAAAR,EACA,WAAAS,EACA,aAAAR,EACA,OAAAH,EACA,sBAAAI,EACA,sBAAAC,EACA,oBAAAC,CACF,EAQG,CACD,GAAI,OAAO,KAAS,IAClB,MAAO,CACL,MAAO,GAAGR,EAAaE,CAAM,CAAC,GAAGE,CAAM,GACvC,UAAW,GAAGJ,EAAaE,CAAM,CAAC,GAAGW,CAAU,GAC/C,SAAU,GAAGb,EAAaE,CAAM,CAAC,GAAGW,EAAaT,GAAU,CAAC,EAC9D,EAGF,MAAMU,EAAcD,EAAaT,EACjC,IAAIW,EAAW,KACf,MAAMC,EAAgBf,EAAkBC,CAAM,EAC9C,GAAIc,EAAe,CACjB,MAAMC,EAAiB,IAAI,KAAK,aAAaD,EAAe,CAC1D,MAAO,SACT,CAAC,EACDD,EAAWD,EAAcG,EAAe,QAAQJ,EAAaT,GAAUS,CAAU,EAAI,IACvF,CAEA,IAAIK,EACJ,GAAIJ,EAAa,CACf,MAAMK,EAAkB,IAAIpB,EAAQc,CAAU,EAAE,IAAIT,GAAU,CAAC,EAAE,SAAS,EAC1Ec,EAAiBf,EAAY,CAC3B,OAAQgB,EACR,aAAcd,GAAgB,MAC9B,OAAAH,EACA,sBAAuB,CACzB,CAAC,CACH,CAEA,MAAMkB,EAAQjB,EAAY,CAAE,OAAAC,EAAQ,aAAAC,EAAc,OAAAH,EAAQ,oBAAAM,CAAoB,CAAC,EACzEa,EAAYP,EACdX,EAAY,CACV,OAAQU,EACR,aAAAR,EACA,OAAAH,EACA,sBAAAI,EACA,sBAAAC,EACA,oBAAAC,CACF,CAAC,EACD,OAEJ,MAAO,CAAE,MAAAY,EAAO,UAAAC,EAAW,SAAAN,EAAU,eAAAG,CAAe,CACtD",
6
+ "names": ["Decimal", "PRICE_SYMBOL", "languageTerritory", "locale", "formatPrice", "amount", "currencyCode", "maximumFractionDigits", "minimumFractionDigits", "removeTrailingZeros", "code", "localeLanguage", "formattedValue", "formatVariantPrice", "baseAmount", "hasDiscount", "discount", "currentLocale", "formatDiscount", "discountAmount", "savePriceAmount", "price", "basePrice"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anker-in/headless-ui",
3
- "version": "1.0.19-temp-101612",
3
+ "version": "1.0.19-temp-101614",
4
4
  "type": "commonjs",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "types": "./dist/cjs/index.d.ts",