@anker-in/headless-ui 1.0.19-temp-101605 → 1.0.19-temp-101607
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/biz-components/CollectionsFilters/FilterCardWrap.js +1 -1
- package/dist/cjs/biz-components/CollectionsFilters/FilterCardWrap.js.map +2 -2
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/biz-components/CollectionsFilters/FilterCardWrap.js +1 -1
- package/dist/esm/biz-components/CollectionsFilters/FilterCardWrap.js.map +2 -2
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,jsxs as h}from"react/jsx-runtime";import{cn as m}from"../../helpers/utils.js";import{useMediaQuery as O}from"react-responsive";import V from"./FilterCardWrapItem";import{useRef as
|
|
1
|
+
import{jsx as r,jsxs as h}from"react/jsx-runtime";import{cn as m}from"../../helpers/utils.js";import{useMediaQuery as O}from"react-responsive";import V from"./FilterCardWrapItem";import{useRef as N,useState as Y,useEffect as v,forwardRef as q,useImperativeHandle as E}from"react";import{cloneDeep as H}from"es-toolkit";const Q=(D,R)=>{const{shopifyData:w={},isSale:y=!1,total:x,result:n,closeFilter:f,page:p,metafields:b,noResultNode:L,refreshStarRating:M,onPrimaryChange:j,onSecondaryChange:T,onNextPage:C,onPrevPage:W}=D,{advertisingSpace:S}=b,{buttonText:z,loadMoreText:B}=w,d=S||w?.advertisingSpace,P=N(null),k=N(!1),[c,u]=Y([]),i=O({query:"(max-width: 1024px)"}),F=o=>{const e=H(o||[]);if(d){const t=e.findIndex(g=>g.mImage);if(t===-1){const g=Math.min(f?d?.maxLocation||7:d?.minLocation||5,e.length);e.splice(g,0,d)}else{e.splice(t,1);const g=Math.min(f?d?.maxLocation||7:d?.minLocation||5,e.length);e.splice(g,0,d)}}return e};E(R,()=>({clearData(){u([])}}));const I=()=>{const o=P.current;if(!o)return;const e=o.getBoundingClientRect()?.top+window?.pageYOffset-120;window?.scrollTo?.({top:e,behavior:"smooth"})},A=o=>o?.metafields?.seoSetting?.noindex;return v(()=>{(n?.slug||n?.id)&&((p===1||!i)&&u([]),n?.products&&u(o=>{const e=n.products?.filter?.(a=>!o.some(s=>s.id===a.id));let t=[...o,...e];const g=t.filter?.(a=>!(!a?.metafields?.seoSetting?.noindex&&a.availableForSale&&a?.variants?.some(s=>s.availableForSale)));return t=t.filter?.(a=>!a?.metafields?.seoSetting?.noindex&&a.availableForSale&&a?.variants?.some(s=>s.availableForSale)),t.push(...g),y&&(t=t.filter?.(a=>{let s=!1;if(a?.options?.find(l=>l?.displayName==="color"))s=a?.variants?.find(l=>l?.coupons?.length&&l?.coupons?.[0]&&typeof l?.coupons?.[0]=="object");else{const l=a?.variants?.[0]?.coupons;s=l?.length&&l?.[0]&&typeof l?.[0]=="object"}return!!s})),t?.length&&(p===1&&!i||i)&&(t=F(t)),t}))},[n?.products,p,i,S,y]),v(()=>{c?.length&&p===1&&!i&&u(F(c))},[f]),v(()=>{if(c?.length&&x){if(!k.current){k.current=!0;return}M?.()}},[c]),h("div",{className:"filter-card-wrap-container",ref:P,children:[h("div",{className:m("w-full grid gap-3 md-tablet:grid-cols-2 grid-cols-3",{"laptop:grid-cols-4 tablet:grid-cols-3":f&&!i,"laptop:grid-cols-3 tablet:grid-cols-2":!f&&!i,"min-h-[80vh]":!c?.length},"filter-card-wrap"),children:[c?.map?.(o=>A(o)?null:r(V,{data:o,buttonText:z,metafields:b,onPrimaryChange:(e,t)=>j?.(e,t),onSecondaryChange:(e,t)=>T?.(e,t)},o.id)),c?.length?null:L]}),i&&n?.pageInfo?.hasNextPage?h("div",{onClick:()=>{C?.(n?.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:B||"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&&x>18?h("div",{className:"mt-6 flex items-center justify-end gap-4 cursor-pointer",children:[r("button",{name:"perv page",disabled:!n?.pageInfo?.hasPreviousPage,className:m("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":!n?.pageInfo?.hasPreviousPage}),onClick:()=>{I?.(),W?.(n?.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:m("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":!n?.pageInfo?.hasNextPage}),disabled:!n?.pageInfo?.hasNextPage,onClick:()=>{I?.(),C?.(n?.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 _=q(Q);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 ((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 if (data?.length && total) {\n if (!initRefresh.current) {\n initRefresh.current = true\n return\n }\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 'min-h-[80vh]': !data?.length,\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 {data?.length ? null : (\n <div className=\"w-full h-full flex items-center justify-center\">{noResultNode || null}</div>\n )}\n </div>\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}\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,\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,\n }\n )}\n disabled={!result?.pageInfo?.hasNextPage}\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 if (data?.length && total) {\n if (!initRefresh.current) {\n initRefresh.current = true\n return\n }\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 'min-h-[80vh]': !data?.length,\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 {data?.length ? null : noResultNode}\n </div>\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}\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,\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,\n }\n )}\n disabled={!result?.pageInfo?.hasNextPage}\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", "FilterCardWrap_default"]
|
|
7
7
|
}
|