@anker-in/campaign-ui 0.5.3 → 0.5.4-beta.1
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/components/credits/creditsFaq/index.js +1 -1
- package/dist/cjs/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +2 -2
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
- package/dist/cjs/components/credits/modal/ActivitiesModal.js +1 -1
- package/dist/cjs/components/credits/modal/ActivitiesModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/RewardsModal.js +1 -1
- package/dist/cjs/components/credits/modal/RewardsModal.js.map +3 -3
- package/dist/esm/components/credits/creditsFaq/index.js +1 -1
- package/dist/esm/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
- package/dist/esm/components/credits/modal/ActivitiesModal.js +1 -1
- package/dist/esm/components/credits/modal/ActivitiesModal.js.map +3 -3
- package/dist/esm/components/credits/modal/RewardsModal.js +1 -1
- package/dist/esm/components/credits/modal/RewardsModal.js.map +3 -3
- package/package.json +1 -1
- package/src/components/credits/creditsFaq/index.tsx +47 -42
- package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +35 -42
- package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +66 -58
- package/src/components/credits/modal/ActivitiesModal.tsx +62 -56
- package/src/components/credits/modal/RewardsModal.tsx +43 -30
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var f=Object.defineProperty;var
|
|
1
|
+
"use strict";var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var k=(e,r)=>{for(var i in r)f(e,i,{get:r[i],enumerable:!0})},N=(e,r,i,m)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of y(r))!F.call(e,o)&&o!==i&&f(e,o,{get:()=>r[o],enumerable:!(m=h(r,o))||m.enumerable});return e};var v=e=>N(f({},"__esModule",{value:!0}),e);var M={};k(M,{CreditsFaq:()=>w});module.exports=v(M);var a=require("react/jsx-runtime"),t=require("@anker-in/headless-ui"),g=require("@anker-in/lib"),u=require("react"),b=require("./faqItem/FaqItem"),x=require("../../../constants");const w=({copy:e,id:r})=>{const{title:i,items:m,subTitle:o=""}=e||{},{brand:C}=(0,g.useHeadlessContext)(),T=x.ROUNDED_BRANDS.includes(C),p=(0,u.useMemo)(()=>{const s=new Map;return m?.forEach(n=>{const l=n?.category_name;l&&(s.has(l)||s.set(l,[]),s.get(l).push(n))}),s},[m]),d=(0,u.useMemo)(()=>Array.from(p.keys()),[p]),q=d[0]?.toString()||"",c=s=>(0,a.jsx)("div",{className:(0,g.classNames)("mt-[24px] flex flex-col overflow-auto pt-0"),children:s?.map((n,l)=>(0,a.jsx)(b.FaqItem,{index:l,defaultExpended:s.length===1,question:n.question,answer:n.answer,showDots:!1},l))});return(0,a.jsxs)(t.Container,{id:r,className:"bg-[#F5F5F7]",children:[i&&(0,a.jsx)(t.Heading,{as:"h2",size:"4",html:e?.title}),o&&(0,a.jsx)("div",{className:"mt-[8px] flex flex-row",children:(0,a.jsx)(t.Text,{size:"4",as:"p",html:o,className:"flex-1"})}),d.length?(0,a.jsxs)(t.Tabs,{align:"left",shape:T?"rounded":"square",className:"mt-[24px]",defaultValue:q,children:[(0,a.jsx)(t.TabsList,{children:d.map((s,n)=>(0,a.jsx)(t.TabsTrigger,{value:s,children:s},n))}),d.map((s,n)=>(0,a.jsx)(t.TabsContent,{value:s,children:c(p.get(s)||[])},n))]}):c(m||[]),e.learnMore?.link&&e.learnMore?.label&&(0,a.jsx)("a",{href:e.learnMore?.link,target:"_blank",className:"mt-[24px] block w-full text-center text-[18px] font-bold text-brand hover:underline l:text-[16px]",children:e.learnMore?.label})]})};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/creditsFaq/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Container, Heading, Tabs, TabsList, TabsTrigger, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { useMemo
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["creditsFaq_exports", "__export", "CreditsFaq", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_lib", "import_react", "import_FaqItem", "import_constants", "copy", "id", "title", "faqList", "subTitle", "brand", "rounded", "
|
|
4
|
+
"sourcesContent": ["import { Container, Heading, Tabs, TabsContent, TabsList, TabsTrigger, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { useMemo } from 'react'\n\nimport { FaqItem } from './faqItem/FaqItem'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport type CreditsFaqCopy = {\n title: string\n subTitle: string\n learnMore: {\n link: string\n label: string\n }\n items: {\n category_name: string\n question: string\n answer: string\n }[]\n}\nexport const CreditsFaq = ({ copy, id }: { copy: CreditsFaqCopy; id?: string }) => {\n const { title, items: faqList, subTitle = '' } = copy || {}\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n // \u6309 category_name \u5206\u7EC4\uFF0C\u907F\u514D\u624B\u52A8 activeTab \u5B57\u7B26\u4E32\u6BD4\u8F83\uFF08\u9690\u85CF\u5B57\u7B26/\u7C7B\u578B\u4E0D\u4E00\u81F4\u4F1A\u5BFC\u81F4\u8FC7\u6EE4\u5931\u8D25\uFF09\n const groupedByCategory = useMemo(() => {\n const map = new Map<string, CreditsFaqCopy['items']>()\n faqList?.forEach(item => {\n const key = item?.category_name\n if (!key) return\n if (!map.has(key)) map.set(key, [])\n map.get(key)!.push(item)\n })\n return map\n }, [faqList])\n\n const categoryList = useMemo(() => Array.from(groupedByCategory.keys()), [groupedByCategory])\n const defaultTab = categoryList[0]?.toString() || ''\n\n const renderFaqItems = (list: CreditsFaqCopy['items']) => (\n <div className={cn('mt-[24px] flex flex-col overflow-auto pt-0')}>\n {list?.map((item, index) => (\n <FaqItem\n key={index}\n index={index}\n defaultExpended={list.length === 1}\n question={item.question}\n answer={item.answer}\n showDots={false}\n ></FaqItem>\n ))}\n </div>\n )\n\n return (\n <Container id={id} className=\"bg-[#F5F5F7]\">\n {title && <Heading as=\"h2\" size=\"4\" html={copy?.title} />}\n {subTitle && (\n <div className=\"mt-[8px] flex flex-row\">\n <Text size=\"4\" as=\"p\" html={subTitle} className=\"flex-1\" />\n </div>\n )}\n {categoryList.length ? (\n <Tabs align=\"left\" shape={rounded ? 'rounded' : 'square'} className=\"mt-[24px]\" defaultValue={defaultTab}>\n {/* faq-nav */}\n <TabsList>\n {categoryList.map((item, index) => (\n <TabsTrigger key={index} value={item}>\n {item}\n </TabsTrigger>\n ))}\n </TabsList>\n {categoryList.map((item, index) => (\n <TabsContent key={index} value={item}>\n {renderFaqItems(groupedByCategory.get(item) || [])}\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n renderFaqItems(faqList || [])\n )}\n {copy.learnMore?.link && copy.learnMore?.label && (\n <a\n href={copy.learnMore?.link}\n target=\"_blank\"\n className=\"mt-[24px] block w-full text-center text-[18px] font-bold text-brand hover:underline l:text-[16px]\"\n >\n {copy.learnMore?.label}\n </a>\n )}\n </Container>\n )\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,GA2CQ,IAAAI,EAAA,6BA3CRC,EAAmF,iCACnFC,EAAqD,yBACrDC,EAAwB,iBAExBC,EAAwB,6BACxBC,EAA+B,8BAexB,MAAMP,EAAa,CAAC,CAAE,KAAAQ,EAAM,GAAAC,CAAG,IAA6C,CACjF,KAAM,CAAE,MAAAC,EAAO,MAAOC,EAAS,SAAAC,EAAW,EAAG,EAAIJ,GAAQ,CAAC,EACpD,CAAE,MAAAK,CAAM,KAAI,sBAAmB,EAC/BC,EAAU,iBAAe,SAASD,CAAK,EAGvCE,KAAoB,WAAQ,IAAM,CACtC,MAAMC,EAAM,IAAI,IAChB,OAAAL,GAAS,QAAQM,GAAQ,CACvB,MAAMC,EAAMD,GAAM,cACbC,IACAF,EAAI,IAAIE,CAAG,GAAGF,EAAI,IAAIE,EAAK,CAAC,CAAC,EAClCF,EAAI,IAAIE,CAAG,EAAG,KAAKD,CAAI,EACzB,CAAC,EACMD,CACT,EAAG,CAACL,CAAO,CAAC,EAENQ,KAAe,WAAQ,IAAM,MAAM,KAAKJ,EAAkB,KAAK,CAAC,EAAG,CAACA,CAAiB,CAAC,EACtFK,EAAaD,EAAa,CAAC,GAAG,SAAS,GAAK,GAE5CE,EAAkBC,MACtB,OAAC,OAAI,aAAW,EAAAC,YAAG,4CAA4C,EAC5D,SAAAD,GAAM,IAAI,CAACL,EAAMO,OAChB,OAAC,WAEC,MAAOA,EACP,gBAAiBF,EAAK,SAAW,EACjC,SAAUL,EAAK,SACf,OAAQA,EAAK,OACb,SAAU,IALLO,CAMN,CACF,EACH,EAGF,SACE,QAAC,aAAU,GAAIf,EAAI,UAAU,eAC1B,UAAAC,MAAS,OAAC,WAAQ,GAAG,KAAK,KAAK,IAAI,KAAMF,GAAM,MAAO,EACtDI,MACC,OAAC,OAAI,UAAU,yBACb,mBAAC,QAAK,KAAK,IAAI,GAAG,IAAI,KAAMA,EAAU,UAAU,SAAS,EAC3D,EAEDO,EAAa,UACZ,QAAC,QAAK,MAAM,OAAO,MAAOL,EAAU,UAAY,SAAU,UAAU,YAAY,aAAcM,EAE5F,oBAAC,YACE,SAAAD,EAAa,IAAI,CAACF,EAAMO,OACvB,OAAC,eAAwB,MAAOP,EAC7B,SAAAA,GADeO,CAElB,CACD,EACH,EACCL,EAAa,IAAI,CAACF,EAAMO,OACvB,OAAC,eAAwB,MAAOP,EAC7B,SAAAI,EAAeN,EAAkB,IAAIE,CAAI,GAAK,CAAC,CAAC,GADjCO,CAElB,CACD,GACH,EAEAH,EAAeV,GAAW,CAAC,CAAC,EAE7BH,EAAK,WAAW,MAAQA,EAAK,WAAW,UACvC,OAAC,KACC,KAAMA,EAAK,WAAW,KACtB,OAAO,SACP,UAAU,oGAET,SAAAA,EAAK,WAAW,MACnB,GAEJ,CAEJ",
|
|
6
|
+
"names": ["creditsFaq_exports", "__export", "CreditsFaq", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_lib", "import_react", "import_FaqItem", "import_constants", "copy", "id", "title", "faqList", "subTitle", "brand", "rounded", "groupedByCategory", "map", "item", "key", "categoryList", "defaultTab", "renderFaqItems", "list", "cn", "index"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var ne=Object.create;var C=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,ie=Object.prototype.hasOwnProperty;var oe=(r,l)=>{for(var c in l)C(r,c,{get:l[c],enumerable:!0})},W=(r,l,c,_)=>{if(l&&typeof l=="object"||typeof l=="function")for(let u of ae(l))!ie.call(r,u)&&u!==c&&C(r,u,{get:()=>l[u],enumerable:!(_=re(l,u))||_.enumerable});return r};var v=(r,l,c)=>(c=r!=null?ne(se(r)):{},W(l||!r||!r.__esModule?C(c,"default",{value:r,enumerable:!0}):c,r)),le=r=>W(C({},"__esModule",{value:!0}),r);var ce={};oe(ce,{CreditsMemberPrice:()=>me});module.exports=le(ce);var o=require("react/jsx-runtime"),m=require("@anker-in/headless-ui"),i=require("react"),T=v(require("decimal.js")),q=v(require("./MemberPriceItem")),J=v(require("../creditsCash/RedeemableItem")),K=v(require("../context/hooks/useRedeemableList")),Q=v(require("../modal/RulesModal")),M=require("./Pagination"),g=require("@anker-in/lib"),L=require("@anker-in/lib"),X=require("../context/provider"),x=require("../context/memberPriceConst"),Y=require("../../../constants");const me=({copy:r,id:l})=>{const[c,_]=(0,i.useState)(r.tabs[0]?.type||"memberPrice"),[u,F]=(0,i.useState)(),[p,y]=(0,i.useState)(1),[b,h]=(0,i.useState)(9),{redeemableList:A}=(0,K.default)(),{pageCommon:Z,memberPriceDiscount:I,profile:S,gtm:E}=(0,X.useCreditsContext)(),{brand:$}=(0,g.useHeadlessContext)(),j=Y.ROUNDED_BRANDS.includes($),D=(0,i.useRef)(null),H=[{namespace:"global",key:"transparentImg"},{namespace:"__discountCodeApp",key:"data"}];(0,i.useEffect)(()=>{const t=()=>{const n=window.innerWidth;n>=1440?h(12):n>=1024?h(9):n>=768?h(12):h(8)};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),(0,i.useEffect)(()=>{y(1)},[c,b]);const f=(0,i.useMemo)(()=>!I||!r.memberPriceTab.memberPriceRuleId?null:I.find(t=>String(t.rule_id)===String(r.memberPriceTab.memberPriceRuleId)),[I,r.memberPriceTab.memberPriceRuleId]),ee=(0,i.useMemo)(()=>f?(f.result_detail?.member_discounts?.filter(e=>e.user_identity===1)||[]).flatMap(e=>e.main_products?.variants?.map(s=>s.handle)||[]):[],[f]),{data:w}=(0,g.useProductsByHandles)({handles:ee,metafieldIdentifiers:{variant:H}}),{data:k}=(0,g.useProductsByHandles)({handles:r?.redeemTab?.list?.map(t=>t.products?.[0]?.handle)||[],metafieldIdentifiers:{variant:H}}),V=(0,i.useCallback)(t=>{try{const n=t?.metafields?.__discountCodeApp?.data;if(!n)return 0;const e=n;if(!Array.isArray(e)||e.length===0)return 0;const s=new Date,a=e.find(d=>{const P=d.starts_at?new Date(d.starts_at):null,U=d.ends_at?new Date(d.ends_at):null;return!(P&&P>s||U&&U<s)});return a?.fixed_value?parseFloat(a.fixed_value):0}catch(n){return console.error("Failed to get coupon discount:",n),0}},[]),B=(0,i.useCallback)((t,n,e)=>{const s=n?.discount_conf;if(!s)return null;let a=new T.default(t);switch(s.discount_type){case x.FunctionDiscountType.Percentage:a=a.mul(100-s.discount_value).div(100);break;case x.FunctionDiscountType.FixedAmount:a=a.sub(s.discount_value);break;case x.FunctionDiscountType.FixedPrice:a=new T.default(s.discount_value);break}if(e){const d=V(e);d>0&&(a=a.sub(d))}return a.lessThan(0)&&(a=new T.default(0)),{memberPrice:a.toNumber(),originalPrice:t}},[V]),N=(0,i.useMemo)(()=>!f||!w?[]:(f.result_detail?.member_discounts?.filter(e=>e.user_identity===1)||[]).flatMap(e=>(e.main_products?.variants||[]).map(s=>({...s,discount:e}))).map(e=>{const s=w.find(P=>P.handle===e.handle);if(!s)return null;const a=s.variants?.find(P=>P.sku===e.sku)||s.variants?.[0];if(!a||!a.availableForSale)return null;const d=B(a.price.amount,e.discount,a);return d?{product:s,productVariant:a,memberPrice:d.memberPrice,originalPrice:d.originalPrice}:null})?.filter(Boolean)||[],[f,w,B]),R=(0,i.useMemo)(()=>k?.map(t=>{const n=r.redeemTab.list.find(a=>a.products?.[0]?.handle===t.handle),e=A.find(a=>a.id?.toString()===n?.redeemId?.toString()),s=t.variants?.find(a=>a.sku===n?.products?.[0]?.sku)||t.variants?.[0];return!e||!s||!s.availableForSale||e.is_limited&&e.remaining_inventory<=0?null:{product:t,productVariant:s,alpcData:{id:e?.id,consumeCredits:e?.consume_credits,remainingInventory:e?.remaining_inventory,isLimited:e?.is_limited,consumeType:e?.consume_type,title:e?.name,desc:e?.note},config:n}}).filter(Boolean),[k,r.redeemTab.list,A]),z=(0,i.useMemo)(()=>{const t=N?.length||0,n=Math.ceil(t/b),e=(p-1)*b,s=e+b,a=N?.slice(e,s)||[];return{totalPages:n,currentItems:a,showPagination:n>1}},[N,p,b]),G=(0,i.useMemo)(()=>{const t=R?.length||0,n=Math.ceil(t/b),e=(p-1)*b,s=e+b,a=R?.slice(e,s)||[];return{totalPages:n,currentItems:a,showPagination:n>1}},[R,p,b]),O=(0,i.useCallback)(t=>{if(y(t),D.current){const n=D.current.offsetTop;window.scrollTo({top:n-80,behavior:"smooth"})}},[y]),te=(0,i.useCallback)(t=>{const n=t;_(n);const s=r.tabs.find(a=>a.type===n)?.label||"";(0,g.gaTrack)({event:"ga4Event",event_name:"lp_button",member_active_status:S?.activated?"active":"not active",event_parameters:{page_group:E.pageGroup,position:r.title,button_name:s}})},[r.tabs,r.title,S?.activated,E.pageGroup]);return(0,o.jsxs)(m.Container,{id:l,className:(0,L.classNames)("bg-[#F5F5F5]"),ref:D,children:[(0,o.jsx)(m.Heading,{as:"h2",size:"4",html:r.title,className:"mx:px-[16px]"}),(0,o.jsxs)(m.Tabs,{align:"left",className:"mt-[24px]",value:c,onValueChange:te,children:[(0,o.jsx)(m.TabsList,{children:r.tabs.map((t,n)=>(0,o.jsx)(m.TabsTrigger,{value:t.type,children:t.label},n))}),(0,o.jsxs)(m.TabsContent,{value:"memberPrice",className:"relative mt-[24px]",children:[(0,o.jsx)("div",{className:"grid md:grid-cols-2 gap-[12px] grid-cols-4 md-xl:grid-cols-3 lg:gap-[16px]",children:z.currentItems?.map((t,n)=>(0,o.jsx)(q.default,{itemData:t,copy:r.memberPriceTab},n))}),(0,o.jsx)(M.Pagination,{currentPage:p,totalPages:z.totalPages,onPageChange:O})]}),(0,o.jsxs)(m.TabsContent,{value:"redeem",className:"relative mt-[24px]",children:[(0,o.jsx)("div",{className:"grid md:grid-cols-2 gap-[12px] grid-cols-4 md-xl:grid-cols-3 lg:gap-[16px]",children:G.currentItems?.map((t,n)=>(0,o.jsx)(J.default,{copy:{title:r.title,...r.redeemTab},itemData:t,setRules:F,currencyCode:k?.[0]?.price.currencyCode||"USD"},n))}),(0,o.jsx)(M.Pagination,{currentPage:p,totalPages:G.totalPages,onPageChange:O})]})]}),u&&(0,o.jsx)(Q.default,{overlayClassName:"md:px-[16px] md:items-center",className:(0,L.classNames)("md:h-fit md:rounded-b-[16px]",!j&&"md:rounded-none"),isOpen:u.length>0,onClose:()=>F([]),titleClassName:"border-b-transparent h-[56px]",rules:u,scrollClassName:"md:mt-[8px] md:mb-[24px] md:pt-0",title:Z?.ruleLabel,ruleClassName:"text-[#1d1d1f] font-bold"})]})};
|
|
2
2
|
//# sourceMappingURL=CreditsMemberPrice.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Container, Heading, Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport { useMemo, useState, useEffect, useCallback, useRef } from 'react'\nimport Decimal from 'decimal.js'\n\nimport MemberPriceItem from './MemberPriceItem'\nimport RedeemableItem from '../creditsCash/RedeemableItem'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport RulesModal from '../modal/RulesModal'\nimport { Pagination } from './Pagination'\nimport { useProductsByHandles, useHeadlessContext, gaTrack } from '@anker-in/lib'\nimport { CreditsMemberPriceCopy, MemberPriceProduct } from './type'\nimport { Product, classNames as cn } from '@anker-in/lib'\nimport { useCreditsContext } from '../context/provider'\nimport { RedeemItem } from '../creditsCash/type'\nimport { FunctionDiscountType } from '../context/memberPriceConst'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy; id?: string }) => {\n const [activeTab, setActiveTab] = useState<'memberPrice' | 'redeem'>(copy.tabs[0]?.type || 'memberPrice')\n const [rules, setRules] = useState<string | string[]>()\n const [currentPage, setCurrentPage] = useState(1)\n const [itemsPerPage, setItemsPerPage] = useState(9) // \u9ED8\u8BA4 1024px \u4EE5\u4E0A\uFF1A3\u5217 \u00D7 3\u884C = 9\n const { redeemableList } = useRedeemableList()\n const { pageCommon, memberPriceDiscount, profile, gtm } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const containerRef = useRef<HTMLDivElement>(null)\n\n // \u5B9A\u4E49\u9700\u8981\u83B7\u53D6\u7684 metafield\uFF0C\u5305\u62EC\u900F\u660E\u56FE\u548C\u4F18\u60E0\u5238\u4FE1\u606F\n const variantMetafieldIdentifiers: any[] = [\n {\n namespace: 'global',\n key: 'transparentImg',\n },\n {\n namespace: '__discountCodeApp',\n key: 'data',\n },\n ]\n\n // \u6839\u636E\u5C4F\u5E55\u5C3A\u5BF8\u52A8\u6001\u8C03\u6574\u6BCF\u9875\u663E\u793A\u7684\u5546\u54C1\u6570\u91CF\n useEffect(() => {\n const updateItemsPerPage = () => {\n const width = window.innerWidth\n if (width >= 1440) {\n // 1920px \u4EE5\u4E0A\uFF1A4\u5217 \u00D7 3\u884C = 12\u4E2A\n setItemsPerPage(12)\n } else if (width >= 1024) {\n // 1024px - 1919px\uFF1A3\u5217 \u00D7 3\u884C = 9\u4E2A\n setItemsPerPage(9)\n } else if (width >= 768) {\n // 1024px \u4EE5\u4E0B\uFF1A3\u5217 \u00D7 4\u884C = 12\u4E2A\n setItemsPerPage(12)\n } else {\n // 768px \u4EE5\u4E0B\uFF1A2\u5217 \u00D7 4\u884C = 8\u4E2A\n setItemsPerPage(8)\n }\n }\n\n updateItemsPerPage()\n window.addEventListener('resize', updateItemsPerPage)\n return () => window.removeEventListener('resize', updateItemsPerPage)\n }, [])\n\n // \u5F53\u5207\u6362 tab \u6216\u6BCF\u9875\u6570\u91CF\u53D8\u5316\u65F6\u91CD\u7F6E\u9875\u7801\n useEffect(() => {\n setCurrentPage(1)\n }, [activeTab, itemsPerPage])\n\n // \u6839\u636E\u914D\u7F6E\u7684 ruleId \u67E5\u627E\u5BF9\u5E94\u7684\u4F1A\u5458\u4EF7\u89C4\u5219\n const targetRule = useMemo(() => {\n if (!memberPriceDiscount || !copy.memberPriceTab.memberPriceRuleId) return null\n return memberPriceDiscount.find(rule => String(rule.rule_id) === String(copy.memberPriceTab.memberPriceRuleId))\n }, [memberPriceDiscount, copy.memberPriceTab.memberPriceRuleId])\n\n const memberPriceHandles = useMemo(() => {\n if (!targetRule) return []\n\n // \u83B7\u53D6\u6240\u6709 user_identity === 1 \u7684 discounts\n const allDiscounts = targetRule.result_detail?.member_discounts?.filter(\n (discount: any) => discount.user_identity === 1\n ) || []\n\n // \u5408\u5E76\u6240\u6709 discounts \u7684 variants \u7684 handles\n const handles = allDiscounts.flatMap((discount: any) =>\n discount.main_products?.variants?.map((variant: any) => variant.handle) || []\n )\n\n return handles\n }, [targetRule])\n\n // \u83B7\u53D6\u4F1A\u5458\u4EF7\u4EA7\u54C1\u6570\u636E\uFF08\u901A\u8FC7\u4ECE memberPriceDiscount \u63D0\u53D6\u7684 handles \u83B7\u53D6\u4EA7\u54C1\uFF09\n const { data: memberPriceProducts } = useProductsByHandles({\n handles: memberPriceHandles,\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n // \u83B7\u53D6\u79EF\u5206\u5151\u6362\u4EA7\u54C1\u6570\u636E\n const { data: redeemProducts } = useProductsByHandles({\n handles: copy?.redeemTab?.list?.map(item => item.products?.[0]?.handle) || [],\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n // \u4ECE variant metafields \u4E2D\u83B7\u53D6\u6709\u6548\u7684 coupon \u6298\u6263\u91D1\u989D\n const getCouponDiscount = useCallback((variant: any) => {\n try {\n const discountData = variant?.metafields?.__discountCodeApp?.data\n if (!discountData) return 0\n\n // discountData \u5DF2\u7ECF\u662F\u5BF9\u8C61\uFF0C\u4E0D\u9700\u8981 JSON.parse\n const discounts = discountData\n if (!Array.isArray(discounts) || discounts.length === 0) return 0\n\n // \u83B7\u53D6\u7B2C\u4E00\u4E2A\u6709\u6548\u7684 coupon\uFF08\u68C0\u67E5\u65F6\u95F4\u8303\u56F4\uFF09\n const now = new Date()\n const validDiscount = discounts.find((discount: any) => {\n const startsAt = discount.starts_at ? new Date(discount.starts_at) : null\n const endsAt = discount.ends_at ? new Date(discount.ends_at) : null\n\n // \u68C0\u67E5 coupon \u662F\u5426\u5728\u6709\u6548\u671F\u5185\n if (startsAt && startsAt > now) return false\n if (endsAt && endsAt < now) return false\n\n return true\n })\n\n // \u8FD4\u56DE\u6298\u6263\u91D1\u989D\uFF08fixed_amount \u7C7B\u578B\uFF09\n if (validDiscount?.fixed_value) {\n return parseFloat(validDiscount.fixed_value)\n }\n\n return 0\n } catch (error) {\n console.error('Failed to get coupon discount:', error)\n return 0\n }\n }, [])\n\n // \u8BA1\u7B97\u4F1A\u5458\u4EF7\u7684\u8F85\u52A9\u51FD\u6570\uFF08\u4EC5\u4F7F\u7528\u666E\u901A\u4F1A\u5458 user_identity = 1 \u7684\u6298\u6263\uFF0C\u5E76\u53E0\u52A0 coupon \u6298\u6263\uFF09\n const calculateMemberPrice = useCallback(\n (price: number, discount: any, variant?: any) => {\n const discountConfig = discount?.discount_conf\n if (!discountConfig) return null\n\n // \u6839\u636E\u6298\u6263\u7C7B\u578B\u8BA1\u7B97\u4F1A\u5458\u4EF7\n let salePrice = new Decimal(price)\n switch (discountConfig.discount_type) {\n case FunctionDiscountType.Percentage:\n salePrice = salePrice.mul(100 - discountConfig.discount_value).div(100)\n break\n case FunctionDiscountType.FixedAmount:\n salePrice = salePrice.sub(discountConfig.discount_value)\n break\n case FunctionDiscountType.FixedPrice:\n salePrice = new Decimal(discountConfig.discount_value)\n break\n }\n\n // \u53E0\u52A0 coupon \u6298\u6263\n if (variant) {\n const couponDiscount = getCouponDiscount(variant)\n if (couponDiscount > 0) {\n salePrice = salePrice.sub(couponDiscount)\n }\n }\n\n // \u786E\u4FDD\u4EF7\u683C\u4E0D\u4E3A\u8D1F\u6570\n if (salePrice.lessThan(0)) {\n salePrice = new Decimal(0)\n }\n\n return {\n memberPrice: salePrice.toNumber(),\n originalPrice: price,\n }\n },\n [getCouponDiscount]\n )\n\n // \u5904\u7406\u4F1A\u5458\u4EF7\u4EA7\u54C1\u5217\u8868\uFF08\u4EC5\u666E\u901A\u4F1A\u5458 user_identity = 1 \u7684\u6298\u6263\uFF09\n const memberPriceList = useMemo(() => {\n if (!targetRule || !memberPriceProducts) return []\n\n // \u83B7\u53D6\u6240\u6709 user_identity === 1 \u7684 discounts\n const allDiscounts = targetRule.result_detail?.member_discounts?.filter(\n (discount: any) => discount.user_identity === 1\n ) || []\n\n // \u5408\u5E76\u6240\u6709 discounts \u7684 variants\uFF0C\u5E76\u4FDD\u5B58\u5BF9\u5E94\u7684 discount \u4FE1\u606F\n const allVariantsWithDiscount = allDiscounts.flatMap((discount: any) =>\n (discount.main_products?.variants || []).map((variant: any) => ({\n ...variant,\n discount, // \u5C06 discount \u4FE1\u606F\u4FDD\u5B58\u5230 variant \u4E2D\n }))\n )\n\n return (\n (allVariantsWithDiscount\n .map((variantWithDiscount: any) => {\n const product = memberPriceProducts.find(p => p.handle === variantWithDiscount.handle)\n if (!product) return null\n\n const productVariant = product.variants?.find(v => v.sku === variantWithDiscount.sku) || product.variants?.[0]\n if (!productVariant || !productVariant.availableForSale) return null\n\n const priceResult = calculateMemberPrice(\n productVariant.price.amount,\n variantWithDiscount.discount,\n productVariant\n )\n if (!priceResult) return null\n\n return {\n product,\n productVariant,\n memberPrice: priceResult.memberPrice,\n originalPrice: priceResult.originalPrice,\n }\n })\n ?.filter(Boolean) as unknown as MemberPriceProduct[]) || []\n )\n }, [targetRule, memberPriceProducts, calculateMemberPrice])\n\n // \u5904\u7406\u79EF\u5206\u5151\u6362\u4EA7\u54C1\u5217\u8868\uFF08\u590D\u7528 creditsCash \u7684\u903B\u8F91\uFF0C\u8FC7\u6EE4\u7F3A\u8D27\u5546\u54C1\uFF09\n const redeemList = useMemo(() => {\n return redeemProducts\n ?.map((product: Product) => {\n const config = copy.redeemTab.list.find(item => item.products?.[0]?.handle === product.handle)\n const alpcData = redeemableList.find(item => item.id?.toString() === config?.redeemId?.toString())\n const productVariant =\n product.variants?.find((variant: any) => variant.sku === config?.products?.[0]?.sku) || product.variants?.[0]\n\n // \u8FC7\u6EE4\u6761\u4EF6\uFF1A\n // 1. \u5FC5\u987B\u6709 alpcData \u548C productVariant\n // 2. \u5546\u54C1\u4E0D\u80FD\u7F3A\u8D27\n // 3. \u5982\u679C\u6709\u5E93\u5B58\u9650\u5236\uFF0C\u5219\u5E93\u5B58\u5FC5\u987B\u5927\u4E8E 0\n if (!alpcData || !productVariant) return null\n if (!productVariant.availableForSale) return null\n if (alpcData.is_limited && alpcData.remaining_inventory <= 0) return null\n\n return {\n product,\n productVariant,\n alpcData: {\n id: alpcData?.id,\n consumeCredits: alpcData?.consume_credits,\n remainingInventory: alpcData?.remaining_inventory,\n isLimited: alpcData?.is_limited,\n consumeType: alpcData?.consume_type,\n title: alpcData?.name,\n desc: alpcData?.note,\n },\n config,\n }\n })\n .filter(Boolean) as unknown as RedeemItem[]\n }, [redeemProducts, copy.redeemTab.list, redeemableList])\n\n // \u8BA1\u7B97\u4F1A\u5458\u4EF7\u5206\u9875\n const memberPricePagination = useMemo(() => {\n const totalItems = memberPriceList?.length || 0\n const totalPages = Math.ceil(totalItems / itemsPerPage)\n const startIndex = (currentPage - 1) * itemsPerPage\n const endIndex = startIndex + itemsPerPage\n const currentItems = memberPriceList?.slice(startIndex, endIndex) || []\n\n return {\n totalPages,\n currentItems,\n showPagination: totalPages > 1,\n }\n }, [memberPriceList, currentPage, itemsPerPage])\n\n // \u8BA1\u7B97\u79EF\u5206\u5151\u6362\u5206\u9875\n const redeemPagination = useMemo(() => {\n const totalItems = redeemList?.length || 0\n const totalPages = Math.ceil(totalItems / itemsPerPage)\n const startIndex = (currentPage - 1) * itemsPerPage\n const endIndex = startIndex + itemsPerPage\n const currentItems = redeemList?.slice(startIndex, endIndex) || []\n\n return {\n totalPages,\n currentItems,\n showPagination: totalPages > 1,\n }\n }, [redeemList, currentPage, itemsPerPage])\n\n // \u5904\u7406\u9875\u9762\u5207\u6362\uFF0C\u6EDA\u52A8\u5230\u6A21\u5757\u9876\u90E8\n const handlePageChange = useCallback(\n (page: number) => {\n setCurrentPage(page)\n // \u6EDA\u52A8\u5230\u6A21\u5757\u9876\u90E8\n if (containerRef.current) {\n const top = containerRef.current.offsetTop\n window.scrollTo({\n top: top - 80, // \u51CF\u53BB 80px \u7684\u504F\u79FB\u91CF\uFF0C\u907F\u514D\u88AB\u56FA\u5B9A\u5934\u90E8\u906E\u6321\n behavior: 'smooth',\n })\n }\n },\n [setCurrentPage]\n )\n\n // \u5904\u7406 tab \u5207\u6362\u5E76\u53D1\u9001\u57CB\u70B9\n const handleTabChange = useCallback(\n (value: string) => {\n const tabType = value as 'memberPrice' | 'redeem'\n setActiveTab(tabType)\n\n // \u67E5\u627E\u5F53\u524D tab \u7684 label\n const currentTab = copy.tabs.find(tab => tab.type === tabType)\n const tabLabel = currentTab?.label || ''\n\n // \u53D1\u9001 tab \u70B9\u51FB\u57CB\u70B9\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: gtm.pageGroup,\n position: copy.title,\n button_name: tabLabel,\n },\n })\n },\n [copy.tabs, copy.title, profile?.activated, gtm.pageGroup]\n )\n\n return (\n <Container id={id} className={cn('bg-[#F5F5F5]')} ref={containerRef}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} className=\"mx:px-[16px]\" />\n\n <Tabs\n align=\"left\"\n className=\"mt-[24px]\"\n value={activeTab}\n onValueChange={handleTabChange}\n >\n <TabsList>\n {copy.tabs.map((tab, index) => (\n <TabsTrigger key={index} value={tab.type}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n\n {/* Tab \u5185\u5BB9 */}\n <div className=\"relative mt-[24px]\">\n {/* \u4F1A\u5458\u4EF7 Tab */}\n {activeTab === 'memberPrice' && (\n <>\n <div className=\"grid md:grid-cols-2 gap-[12px] grid-cols-4 md-xl:grid-cols-3 lg:gap-[16px]\">\n {memberPricePagination.currentItems?.map((item, index: number) => (\n <MemberPriceItem key={index} itemData={item} copy={copy.memberPriceTab} />\n ))}\n </div>\n <Pagination\n currentPage={currentPage}\n totalPages={memberPricePagination.totalPages}\n onPageChange={handlePageChange}\n />\n </>\n )}\n\n {/* \u79EF\u5206\u5151\u6362 Tab */}\n {activeTab === 'redeem' && (\n <>\n <div className=\"grid md:grid-cols-2 gap-[12px] grid-cols-4 md-xl:grid-cols-3 lg:gap-[16px]\">\n {redeemPagination.currentItems?.map((item, index: number) => (\n <RedeemableItem\n key={index}\n copy={{\n title: copy.title,\n ...copy.redeemTab,\n }}\n itemData={item}\n setRules={setRules}\n currencyCode={redeemProducts?.[0]?.price.currencyCode || 'USD'}\n />\n ))}\n </div>\n <Pagination\n currentPage={currentPage}\n totalPages={redeemPagination.totalPages}\n onPageChange={handlePageChange}\n />\n </>\n )}\n </div>\n\n {/* Rules Modal */}\n {rules && (\n <RulesModal\n overlayClassName=\"md:px-[16px] md:items-center\"\n className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}\n isOpen={rules.length > 0}\n onClose={() => setRules([])}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] md:mb-[24px] md:pt-0\"\n title={pageCommon?.ruleLabel}\n ruleClassName=\"text-[#1d1d1f] font-bold\"\n />\n )}\n </Container>\n )\n}\n"],
|
|
5
|
-
"mappings": "skBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,wBAAAE,KAAA,eAAAC,GAAAH,IA+UM,IAAAI,EAAA,6BA/UNC,
|
|
4
|
+
"sourcesContent": ["import { Container, Heading, Tabs, TabsContent, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport { useMemo, useState, useEffect, useCallback, useRef } from 'react'\nimport Decimal from 'decimal.js'\n\nimport MemberPriceItem from './MemberPriceItem'\nimport RedeemableItem from '../creditsCash/RedeemableItem'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport RulesModal from '../modal/RulesModal'\nimport { Pagination } from './Pagination'\nimport { useProductsByHandles, useHeadlessContext, gaTrack } from '@anker-in/lib'\nimport { CreditsMemberPriceCopy, MemberPriceProduct } from './type'\nimport { Product, classNames as cn } from '@anker-in/lib'\nimport { useCreditsContext } from '../context/provider'\nimport { RedeemItem } from '../creditsCash/type'\nimport { FunctionDiscountType } from '../context/memberPriceConst'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy; id?: string }) => {\n const [activeTab, setActiveTab] = useState<'memberPrice' | 'redeem'>(copy.tabs[0]?.type || 'memberPrice')\n const [rules, setRules] = useState<string | string[]>()\n const [currentPage, setCurrentPage] = useState(1)\n const [itemsPerPage, setItemsPerPage] = useState(9) // \u9ED8\u8BA4 1024px \u4EE5\u4E0A\uFF1A3\u5217 \u00D7 3\u884C = 9\n const { redeemableList } = useRedeemableList()\n const { pageCommon, memberPriceDiscount, profile, gtm } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const containerRef = useRef<HTMLDivElement>(null)\n\n // \u5B9A\u4E49\u9700\u8981\u83B7\u53D6\u7684 metafield\uFF0C\u5305\u62EC\u900F\u660E\u56FE\u548C\u4F18\u60E0\u5238\u4FE1\u606F\n const variantMetafieldIdentifiers: any[] = [\n {\n namespace: 'global',\n key: 'transparentImg',\n },\n {\n namespace: '__discountCodeApp',\n key: 'data',\n },\n ]\n\n // \u6839\u636E\u5C4F\u5E55\u5C3A\u5BF8\u52A8\u6001\u8C03\u6574\u6BCF\u9875\u663E\u793A\u7684\u5546\u54C1\u6570\u91CF\n useEffect(() => {\n const updateItemsPerPage = () => {\n const width = window.innerWidth\n if (width >= 1440) {\n // 1920px \u4EE5\u4E0A\uFF1A4\u5217 \u00D7 3\u884C = 12\u4E2A\n setItemsPerPage(12)\n } else if (width >= 1024) {\n // 1024px - 1919px\uFF1A3\u5217 \u00D7 3\u884C = 9\u4E2A\n setItemsPerPage(9)\n } else if (width >= 768) {\n // 1024px \u4EE5\u4E0B\uFF1A3\u5217 \u00D7 4\u884C = 12\u4E2A\n setItemsPerPage(12)\n } else {\n // 768px \u4EE5\u4E0B\uFF1A2\u5217 \u00D7 4\u884C = 8\u4E2A\n setItemsPerPage(8)\n }\n }\n\n updateItemsPerPage()\n window.addEventListener('resize', updateItemsPerPage)\n return () => window.removeEventListener('resize', updateItemsPerPage)\n }, [])\n\n // \u5F53\u5207\u6362 tab \u6216\u6BCF\u9875\u6570\u91CF\u53D8\u5316\u65F6\u91CD\u7F6E\u9875\u7801\n useEffect(() => {\n setCurrentPage(1)\n }, [activeTab, itemsPerPage])\n\n // \u6839\u636E\u914D\u7F6E\u7684 ruleId \u67E5\u627E\u5BF9\u5E94\u7684\u4F1A\u5458\u4EF7\u89C4\u5219\n const targetRule = useMemo(() => {\n if (!memberPriceDiscount || !copy.memberPriceTab.memberPriceRuleId) return null\n return memberPriceDiscount.find(rule => String(rule.rule_id) === String(copy.memberPriceTab.memberPriceRuleId))\n }, [memberPriceDiscount, copy.memberPriceTab.memberPriceRuleId])\n\n const memberPriceHandles = useMemo(() => {\n if (!targetRule) return []\n\n // \u83B7\u53D6\u6240\u6709 user_identity === 1 \u7684 discounts\n const allDiscounts = targetRule.result_detail?.member_discounts?.filter(\n (discount: any) => discount.user_identity === 1\n ) || []\n\n // \u5408\u5E76\u6240\u6709 discounts \u7684 variants \u7684 handles\n const handles = allDiscounts.flatMap((discount: any) =>\n discount.main_products?.variants?.map((variant: any) => variant.handle) || []\n )\n\n return handles\n }, [targetRule])\n\n // \u83B7\u53D6\u4F1A\u5458\u4EF7\u4EA7\u54C1\u6570\u636E\uFF08\u901A\u8FC7\u4ECE memberPriceDiscount \u63D0\u53D6\u7684 handles \u83B7\u53D6\u4EA7\u54C1\uFF09\n const { data: memberPriceProducts } = useProductsByHandles({\n handles: memberPriceHandles,\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n // \u83B7\u53D6\u79EF\u5206\u5151\u6362\u4EA7\u54C1\u6570\u636E\n const { data: redeemProducts } = useProductsByHandles({\n handles: copy?.redeemTab?.list?.map(item => item.products?.[0]?.handle) || [],\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n // \u4ECE variant metafields \u4E2D\u83B7\u53D6\u6709\u6548\u7684 coupon \u6298\u6263\u91D1\u989D\n const getCouponDiscount = useCallback((variant: any) => {\n try {\n const discountData = variant?.metafields?.__discountCodeApp?.data\n if (!discountData) return 0\n\n // discountData \u5DF2\u7ECF\u662F\u5BF9\u8C61\uFF0C\u4E0D\u9700\u8981 JSON.parse\n const discounts = discountData\n if (!Array.isArray(discounts) || discounts.length === 0) return 0\n\n // \u83B7\u53D6\u7B2C\u4E00\u4E2A\u6709\u6548\u7684 coupon\uFF08\u68C0\u67E5\u65F6\u95F4\u8303\u56F4\uFF09\n const now = new Date()\n const validDiscount = discounts.find((discount: any) => {\n const startsAt = discount.starts_at ? new Date(discount.starts_at) : null\n const endsAt = discount.ends_at ? new Date(discount.ends_at) : null\n\n // \u68C0\u67E5 coupon \u662F\u5426\u5728\u6709\u6548\u671F\u5185\n if (startsAt && startsAt > now) return false\n if (endsAt && endsAt < now) return false\n\n return true\n })\n\n // \u8FD4\u56DE\u6298\u6263\u91D1\u989D\uFF08fixed_amount \u7C7B\u578B\uFF09\n if (validDiscount?.fixed_value) {\n return parseFloat(validDiscount.fixed_value)\n }\n\n return 0\n } catch (error) {\n console.error('Failed to get coupon discount:', error)\n return 0\n }\n }, [])\n\n // \u8BA1\u7B97\u4F1A\u5458\u4EF7\u7684\u8F85\u52A9\u51FD\u6570\uFF08\u4EC5\u4F7F\u7528\u666E\u901A\u4F1A\u5458 user_identity = 1 \u7684\u6298\u6263\uFF0C\u5E76\u53E0\u52A0 coupon \u6298\u6263\uFF09\n const calculateMemberPrice = useCallback(\n (price: number, discount: any, variant?: any) => {\n const discountConfig = discount?.discount_conf\n if (!discountConfig) return null\n\n // \u6839\u636E\u6298\u6263\u7C7B\u578B\u8BA1\u7B97\u4F1A\u5458\u4EF7\n let salePrice = new Decimal(price)\n switch (discountConfig.discount_type) {\n case FunctionDiscountType.Percentage:\n salePrice = salePrice.mul(100 - discountConfig.discount_value).div(100)\n break\n case FunctionDiscountType.FixedAmount:\n salePrice = salePrice.sub(discountConfig.discount_value)\n break\n case FunctionDiscountType.FixedPrice:\n salePrice = new Decimal(discountConfig.discount_value)\n break\n }\n\n // \u53E0\u52A0 coupon \u6298\u6263\n if (variant) {\n const couponDiscount = getCouponDiscount(variant)\n if (couponDiscount > 0) {\n salePrice = salePrice.sub(couponDiscount)\n }\n }\n\n // \u786E\u4FDD\u4EF7\u683C\u4E0D\u4E3A\u8D1F\u6570\n if (salePrice.lessThan(0)) {\n salePrice = new Decimal(0)\n }\n\n return {\n memberPrice: salePrice.toNumber(),\n originalPrice: price,\n }\n },\n [getCouponDiscount]\n )\n\n // \u5904\u7406\u4F1A\u5458\u4EF7\u4EA7\u54C1\u5217\u8868\uFF08\u4EC5\u666E\u901A\u4F1A\u5458 user_identity = 1 \u7684\u6298\u6263\uFF09\n const memberPriceList = useMemo(() => {\n if (!targetRule || !memberPriceProducts) return []\n\n // \u83B7\u53D6\u6240\u6709 user_identity === 1 \u7684 discounts\n const allDiscounts = targetRule.result_detail?.member_discounts?.filter(\n (discount: any) => discount.user_identity === 1\n ) || []\n\n // \u5408\u5E76\u6240\u6709 discounts \u7684 variants\uFF0C\u5E76\u4FDD\u5B58\u5BF9\u5E94\u7684 discount \u4FE1\u606F\n const allVariantsWithDiscount = allDiscounts.flatMap((discount: any) =>\n (discount.main_products?.variants || []).map((variant: any) => ({\n ...variant,\n discount, // \u5C06 discount \u4FE1\u606F\u4FDD\u5B58\u5230 variant \u4E2D\n }))\n )\n\n return (\n (allVariantsWithDiscount\n .map((variantWithDiscount: any) => {\n const product = memberPriceProducts.find(p => p.handle === variantWithDiscount.handle)\n if (!product) return null\n\n const productVariant = product.variants?.find(v => v.sku === variantWithDiscount.sku) || product.variants?.[0]\n if (!productVariant || !productVariant.availableForSale) return null\n\n const priceResult = calculateMemberPrice(\n productVariant.price.amount,\n variantWithDiscount.discount,\n productVariant\n )\n if (!priceResult) return null\n\n return {\n product,\n productVariant,\n memberPrice: priceResult.memberPrice,\n originalPrice: priceResult.originalPrice,\n }\n })\n ?.filter(Boolean) as unknown as MemberPriceProduct[]) || []\n )\n }, [targetRule, memberPriceProducts, calculateMemberPrice])\n\n // \u5904\u7406\u79EF\u5206\u5151\u6362\u4EA7\u54C1\u5217\u8868\uFF08\u590D\u7528 creditsCash \u7684\u903B\u8F91\uFF0C\u8FC7\u6EE4\u7F3A\u8D27\u5546\u54C1\uFF09\n const redeemList = useMemo(() => {\n return redeemProducts\n ?.map((product: Product) => {\n const config = copy.redeemTab.list.find(item => item.products?.[0]?.handle === product.handle)\n const alpcData = redeemableList.find(item => item.id?.toString() === config?.redeemId?.toString())\n const productVariant =\n product.variants?.find((variant: any) => variant.sku === config?.products?.[0]?.sku) || product.variants?.[0]\n\n // \u8FC7\u6EE4\u6761\u4EF6\uFF1A\n // 1. \u5FC5\u987B\u6709 alpcData \u548C productVariant\n // 2. \u5546\u54C1\u4E0D\u80FD\u7F3A\u8D27\n // 3. \u5982\u679C\u6709\u5E93\u5B58\u9650\u5236\uFF0C\u5219\u5E93\u5B58\u5FC5\u987B\u5927\u4E8E 0\n if (!alpcData || !productVariant) return null\n if (!productVariant.availableForSale) return null\n if (alpcData.is_limited && alpcData.remaining_inventory <= 0) return null\n\n return {\n product,\n productVariant,\n alpcData: {\n id: alpcData?.id,\n consumeCredits: alpcData?.consume_credits,\n remainingInventory: alpcData?.remaining_inventory,\n isLimited: alpcData?.is_limited,\n consumeType: alpcData?.consume_type,\n title: alpcData?.name,\n desc: alpcData?.note,\n },\n config,\n }\n })\n .filter(Boolean) as unknown as RedeemItem[]\n }, [redeemProducts, copy.redeemTab.list, redeemableList])\n\n // \u8BA1\u7B97\u4F1A\u5458\u4EF7\u5206\u9875\n const memberPricePagination = useMemo(() => {\n const totalItems = memberPriceList?.length || 0\n const totalPages = Math.ceil(totalItems / itemsPerPage)\n const startIndex = (currentPage - 1) * itemsPerPage\n const endIndex = startIndex + itemsPerPage\n const currentItems = memberPriceList?.slice(startIndex, endIndex) || []\n\n return {\n totalPages,\n currentItems,\n showPagination: totalPages > 1,\n }\n }, [memberPriceList, currentPage, itemsPerPage])\n\n // \u8BA1\u7B97\u79EF\u5206\u5151\u6362\u5206\u9875\n const redeemPagination = useMemo(() => {\n const totalItems = redeemList?.length || 0\n const totalPages = Math.ceil(totalItems / itemsPerPage)\n const startIndex = (currentPage - 1) * itemsPerPage\n const endIndex = startIndex + itemsPerPage\n const currentItems = redeemList?.slice(startIndex, endIndex) || []\n\n return {\n totalPages,\n currentItems,\n showPagination: totalPages > 1,\n }\n }, [redeemList, currentPage, itemsPerPage])\n\n // \u5904\u7406\u9875\u9762\u5207\u6362\uFF0C\u6EDA\u52A8\u5230\u6A21\u5757\u9876\u90E8\n const handlePageChange = useCallback(\n (page: number) => {\n setCurrentPage(page)\n // \u6EDA\u52A8\u5230\u6A21\u5757\u9876\u90E8\n if (containerRef.current) {\n const top = containerRef.current.offsetTop\n window.scrollTo({\n top: top - 80, // \u51CF\u53BB 80px \u7684\u504F\u79FB\u91CF\uFF0C\u907F\u514D\u88AB\u56FA\u5B9A\u5934\u90E8\u906E\u6321\n behavior: 'smooth',\n })\n }\n },\n [setCurrentPage]\n )\n\n // \u5904\u7406 tab \u5207\u6362\u5E76\u53D1\u9001\u57CB\u70B9\n const handleTabChange = useCallback(\n (value: string) => {\n const tabType = value as 'memberPrice' | 'redeem'\n setActiveTab(tabType)\n\n // \u67E5\u627E\u5F53\u524D tab \u7684 label\n const currentTab = copy.tabs.find(tab => tab.type === tabType)\n const tabLabel = currentTab?.label || ''\n\n // \u53D1\u9001 tab \u70B9\u51FB\u57CB\u70B9\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: gtm.pageGroup,\n position: copy.title,\n button_name: tabLabel,\n },\n })\n },\n [copy.tabs, copy.title, profile?.activated, gtm.pageGroup]\n )\n\n return (\n <Container id={id} className={cn('bg-[#F5F5F5]')} ref={containerRef}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} className=\"mx:px-[16px]\" />\n\n <Tabs\n align=\"left\"\n className=\"mt-[24px]\"\n value={activeTab}\n onValueChange={handleTabChange}\n >\n <TabsList>\n {copy.tabs.map((tab, index) => (\n <TabsTrigger key={index} value={tab.type}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {/* \u4F1A\u5458\u4EF7 Tab */}\n <TabsContent value=\"memberPrice\" className=\"relative mt-[24px]\">\n <div className=\"grid md:grid-cols-2 gap-[12px] grid-cols-4 md-xl:grid-cols-3 lg:gap-[16px]\">\n {memberPricePagination.currentItems?.map((item, index: number) => (\n <MemberPriceItem key={index} itemData={item} copy={copy.memberPriceTab} />\n ))}\n </div>\n <Pagination\n currentPage={currentPage}\n totalPages={memberPricePagination.totalPages}\n onPageChange={handlePageChange}\n />\n </TabsContent>\n\n {/* \u79EF\u5206\u5151\u6362 Tab */}\n <TabsContent value=\"redeem\" className=\"relative mt-[24px]\">\n <div className=\"grid md:grid-cols-2 gap-[12px] grid-cols-4 md-xl:grid-cols-3 lg:gap-[16px]\">\n {redeemPagination.currentItems?.map((item, index: number) => (\n <RedeemableItem\n key={index}\n copy={{\n title: copy.title,\n ...copy.redeemTab,\n }}\n itemData={item}\n setRules={setRules}\n currencyCode={redeemProducts?.[0]?.price.currencyCode || 'USD'}\n />\n ))}\n </div>\n <Pagination\n currentPage={currentPage}\n totalPages={redeemPagination.totalPages}\n onPageChange={handlePageChange}\n />\n </TabsContent>\n </Tabs>\n\n {/* Rules Modal */}\n {rules && (\n <RulesModal\n overlayClassName=\"md:px-[16px] md:items-center\"\n className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}\n isOpen={rules.length > 0}\n onClose={() => setRules([])}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] md:mb-[24px] md:pt-0\"\n title={pageCommon?.ruleLabel}\n ruleClassName=\"text-[#1d1d1f] font-bold\"\n />\n )}\n </Container>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["CreditsMemberPrice_exports", "__export", "CreditsMemberPrice", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_react", "import_decimal", "import_MemberPriceItem", "import_RedeemableItem", "import_useRedeemableList", "import_RulesModal", "import_Pagination", "import_lib", "import_provider", "import_memberPriceConst", "import_constants", "copy", "id", "activeTab", "setActiveTab", "rules", "setRules", "currentPage", "setCurrentPage", "itemsPerPage", "setItemsPerPage", "redeemableList", "useRedeemableList", "pageCommon", "memberPriceDiscount", "profile", "gtm", "brand", "rounded", "containerRef", "variantMetafieldIdentifiers", "updateItemsPerPage", "width", "targetRule", "rule", "memberPriceHandles", "discount", "variant", "memberPriceProducts", "redeemProducts", "item", "getCouponDiscount", "discountData", "discounts", "now", "validDiscount", "startsAt", "endsAt", "error", "calculateMemberPrice", "price", "discountConfig", "salePrice", "Decimal", "couponDiscount", "memberPriceList", "variantWithDiscount", "product", "p", "productVariant", "v", "priceResult", "redeemList", "config", "alpcData", "memberPricePagination", "totalItems", "totalPages", "startIndex", "endIndex", "currentItems", "redeemPagination", "handlePageChange", "page", "top", "handleTabChange", "value", "tabType", "tabLabel", "tab", "cn", "index", "MemberPriceItem", "RedeemableItem", "RulesModal"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var te=Object.create;var y=Object.defineProperty;var
|
|
1
|
+
"use strict";var te=Object.create;var y=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ne=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var se=(e,o)=>{for(var s in o)y(e,s,{get:o[s],enumerable:!0})},F=(e,o,s,v)=>{if(o&&typeof o=="object"||typeof o=="function")for(let u of oe(o))!re.call(e,u)&&u!==s&&y(e,u,{get:()=>o[u],enumerable:!(v=ae(o,u))||v.enumerable});return e};var g=(e,o,s)=>(s=e!=null?te(ne(e)):{},F(o||!e||!e.__esModule?y(s,"default",{value:e,enumerable:!0}):s,e)),ie=e=>F(y({},"__esModule",{value:!0}),e);var de={};se(de,{CreditsRedeemList:()=>le});module.exports=ie(de);var a=require("react/jsx-runtime"),r=require("@anker-in/headless-ui"),T=g(require("classnames")),d=require("react"),O=g(require("./RedeemCouponModal")),B=g(require("./RedeemProductModal")),H=g(require("./RedeemVirtualProductModal")),V=require("../context/provider"),$=g(require("../context/hooks/useRedeemableList")),n=require("../context/const"),m=require("@anker-in/lib"),z=require("./RedeemableItem"),U=require("../../../constants"),j=g(require("../modal/RulesModal")),q=require("../../../components/registration"),J=require("../context/utils"),K=g(require("../context/hooks/useMyRewards"));const le=({copy:e,id:o})=>{const{profile:s,openSignUpPopup:v,gtm:{pageGroup:u},pageCommon:h,creditInfo:Q}=(0,V.useCreditsContext)(),{authCodeActivate:N}=(0,q.useRegistration)(),{brand:E,locale:W}=(0,m.useHeadlessContext)(),M=U.ROUNDED_BRANDS.includes(E),R=Object.keys(s||{}).length>0,[i,x]=(0,d.useState)(void 0),[L,I]=(0,d.useState)(),{listLoading:X,redeemableList:P,getRedeemableList:A}=(0,$.default)(),{myRewards:G}=(0,K.default)({page:1,pageSize:100,consumeType:n.AlpcConsumeType.ExternalProduct}),f=(0,d.useMemo)(()=>({...h?.redeemModal||{},...e.redeemModal||{}}),[e.redeemModal,h?.redeemModal]),b=(0,d.useMemo)(()=>P.map(t=>({id:t.id.toString(),title:t.name,consumeCredits:t.consume_credits,remainingInventory:t.remaining_inventory,isLimited:!!t.is_limited,consumeType:t.consume_type,handle:t.sku_handle,sku:t.goods_sku,image:t.goods_url})),[P]),Y=b.map(t=>t.handle),{data:D}=(0,m.useProductsByHandles)({handles:Y}),Z=(0,d.useMemo)(()=>{const t=new Map;return(e.list||[]).forEach(C=>{const k=(C.list||[]).filter(p=>b.some(l=>String(l.id)===String(p.id))).map(p=>{const l=b.find(c=>String(c.id)===String(p.id)),S=D?.find(c=>c.handle===l?.handle),w=S?.variants.find(c=>c.sku===l?.sku);if(l?.isLimited&&(!l?.remainingInventory||l.remainingInventory<=0)||l?.consumeType===n.AlpcConsumeType.Product&&(!S||!w))return null;const ee=p.type===n.ConsumeType.GoGift&&R&&G.some(c=>c.rule_id===Number(p.id));return{alpc:l,config:p,product:S,variant:w,hasRedeemed:ee}}).filter(p=>p!==null);t.set(C.label,k)}),t},[e.list,b,D,R,G]),_=(0,d.useCallback)(t=>{t===n.AlpcErrorCode.CodeLpcRuleInventoryNotEnough&&A()},[A]);return(0,a.jsxs)(r.Container,{id:o,className:(0,T.default)("relative bg-[#F5F5F7]"),children:[(0,a.jsx)(r.Heading,{as:"h2",size:"4",html:e.title}),R&&e.availableCredits&&(0,a.jsx)("p",{className:"mt-[12px] text-[20px] l-xxl:text-[18px] l:text-[16px] font-bold text-[#4A4C56]",children:e.availableCredits.includes("$credits")?(0,a.jsxs)(a.Fragment,{children:[e.availableCredits.split("$credits")[0],(0,a.jsx)("span",{className:(0,m.classNames)("text-brand-color-0",E==="ankersolix"&&"bg-gradient-to-r from-[#2c7ed0] via-[#00a9e1] via-[43%] to-[#00db84] bg-clip-text text-transparent"),children:(0,J.numberFormat)(Q?.available_credit||0,W).toString()}),e.availableCredits.split("$credits")[1]||""]}):e.availableCredits}),(0,a.jsxs)(r.Tabs,{shape:M?"rounded":"square",align:"left",className:(0,T.default)("py-[24px] md:justify-center"),defaultValue:e.list?.[0]?.label||"",onValueChange:t=>{(0,m.gaTrack)({event:"ga4Event",event_name:"lp_navigation",event_parameters:{navigation:t,page_group:u}})},children:[(0,a.jsx)(r.TabsList,{children:(e.list||[]).map(t=>(0,a.jsx)(r.TabsTrigger,{value:t.label,children:t.label},t.label))}),(e.list||[]).map(t=>(0,a.jsx)(r.TabsContent,{value:t.label,children:!!b?.length&&!X&&(0,a.jsx)("div",{className:(0,T.default)("relative grid grid-cols-4 gap-[16px] md:grid-cols-2 md:gap-[12px] md-xl:grid-cols-3"),children:(Z.get(t.label)||[])?.map(C=>(0,a.jsx)(z.RedeemableItem,{copy:e,item:C,onRedeem:k=>{R?!s?.activated&&!N.isActivateSuccess?(N.setAutoSendEmail(!0),N.open()):x(k):v()},onRulesOpen:I},C?.alpc?.id))})},t.label))]}),(i?.config?.type===n.ConsumeType.Coupon||i?.config?.type===n.ConsumeType.ShippingCoupon)&&f?.coupon&&i&&(0,a.jsx)(O.default,{item:i,copy:f,onError:_,onClose:()=>{x(void 0)}}),i?.config?.type===n.ConsumeType.Product&&f?.product&&i&&(0,a.jsx)(B.default,{item:i,copy:f,onError:_,onClose:()=>{x(void 0)}}),(i?.config?.type===n.ConsumeType.GiftCard||i?.config?.type===n.ConsumeType.GoGift)&&f?.virtualProduct&&i&&(0,a.jsx)(H.default,{item:i,copy:f,onError:_,onClose:()=>{x(void 0)}}),L&&(0,a.jsx)(j.default,{overlayClassName:"md:px-[16px] md:items-center",className:(0,m.classNames)("md:h-fit md:rounded-b-[16px]",!M&&"md:rounded-none"),isOpen:L.length>0,onClose:()=>I([]),titleClassName:"border-b-transparent h-[56px]",rules:L,scrollClassName:"md:mt-[8px] md:mb-[24px] md:pt-0",title:h?.ruleLabel,ruleClassName:"text-[#1d1d1f] font-bold"})]})};
|
|
2
2
|
//# sourceMappingURL=CreditsRedeemList.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/creditsRedeemList/CreditsRedeemList.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Container, Heading, Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { useCallback, useMemo, useState } from 'react'\n\nimport RedeemCouponModal from './RedeemCouponModal'\nimport RedeemProductModal from './RedeemProductModal'\nimport RedeemVirtualProductModal from './RedeemVirtualProductModal'\nimport { useCreditsContext } from '../context/provider'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport { AlpcConsumeType, AlpcErrorCode, ConsumeType } from '../context/const'\nimport { useHeadlessContext, useProductsByHandles, gaTrack, classNames as cn } from '@anker-in/lib'\nimport type { RedeemableItem as RedeemableItemType } from '../type'\nimport { RedeemableItem } from './RedeemableItem'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport RulesModal from '../modal/RulesModal'\nimport { CreditsRedeemListCopy } from './type'\nimport { useRegistration } from '../../../components/registration'\nimport { numberFormat } from '../context/utils'\nimport useMyRewards from '../context/hooks/useMyRewards'\n\nexport const CreditsRedeemList = ({ copy, id }: { copy: CreditsRedeemListCopy; id?: string }) => {\n const {\n profile,\n openSignUpPopup,\n gtm: { pageGroup },\n pageCommon,\n creditInfo,\n } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const { brand, locale } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isLogin = Object.keys(profile || {}).length > 0\n\n const [
|
|
5
|
-
"mappings": "skBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,uBAAAE,KAAA,eAAAC,GAAAH,
|
|
6
|
-
"names": ["CreditsRedeemList_exports", "__export", "CreditsRedeemList", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_classnames", "import_react", "import_RedeemCouponModal", "import_RedeemProductModal", "import_RedeemVirtualProductModal", "import_provider", "import_useRedeemableList", "import_const", "import_lib", "import_RedeemableItem", "import_constants", "import_RulesModal", "import_registration", "import_utils", "import_useMyRewards", "copy", "id", "profile", "openSignUpPopup", "pageGroup", "pageCommon", "creditInfo", "authCodeActivate", "brand", "locale", "rounded", "isLogin", "
|
|
4
|
+
"sourcesContent": ["import { Container, Heading, Tabs, TabsContent, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { useCallback, useMemo, useState } from 'react'\n\nimport RedeemCouponModal from './RedeemCouponModal'\nimport RedeemProductModal from './RedeemProductModal'\nimport RedeemVirtualProductModal from './RedeemVirtualProductModal'\nimport { useCreditsContext } from '../context/provider'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport { AlpcConsumeType, AlpcErrorCode, ConsumeType } from '../context/const'\nimport { useHeadlessContext, useProductsByHandles, gaTrack, classNames as cn } from '@anker-in/lib'\nimport type { RedeemableItem as RedeemableItemType } from '../type'\nimport { RedeemableItem } from './RedeemableItem'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport RulesModal from '../modal/RulesModal'\nimport { CreditsRedeemListCopy } from './type'\nimport { useRegistration } from '../../../components/registration'\nimport { numberFormat } from '../context/utils'\nimport useMyRewards from '../context/hooks/useMyRewards'\n\nexport const CreditsRedeemList = ({ copy, id }: { copy: CreditsRedeemListCopy; id?: string }) => {\n const {\n profile,\n openSignUpPopup,\n gtm: { pageGroup },\n pageCommon,\n creditInfo,\n } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const { brand, locale } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isLogin = Object.keys(profile || {}).length > 0\n\n const [popRedeemData, setPopRedeemData] = useState<RedeemableItemType | undefined>(undefined)\n\n const [rules, setRules] = useState<string | string[]>()\n\n const { listLoading, redeemableList, getRedeemableList } = useRedeemableList()\n\n // \u83B7\u53D6\u7528\u6237\u7684 ExternalProduct \u5151\u6362\u8BB0\u5F55\n const { myRewards } = useMyRewards({\n page: 1,\n pageSize: 100,\n consumeType: AlpcConsumeType.ExternalProduct,\n })\n\n // \u5408\u5E76 redeemModal \u6587\u6848\uFF0C\u4F18\u5148\u4F7F\u7528 copy.redeemModal\uFF0Cfallback \u5230 pageCommon.redeemModal\n const redeemModalCopy = useMemo(() => {\n return {\n ...(pageCommon?.redeemModal || {}),\n ...(copy.redeemModal || {}),\n }\n }, [copy.redeemModal, pageCommon?.redeemModal])\n\n const alpcList = useMemo(() => {\n return redeemableList.map(item => {\n return {\n id: item.id.toString(),\n title: item.name,\n consumeCredits: item.consume_credits,\n remainingInventory: item.remaining_inventory,\n isLimited: !!item.is_limited,\n consumeType: item.consume_type,\n handle: item.sku_handle,\n sku: item.goods_sku,\n image: item.goods_url,\n }\n })\n }, [redeemableList])\n\n const handles = alpcList.map(item => item.handle)\n const { data: products } = useProductsByHandles({ handles })\n\n // \u6309 tab label \u5206\u7EC4\u9884\u8BA1\u7B97\u5217\u8868\uFF0C\u914D\u5408 TabsContent \u58F0\u660E\u5F0F\u6E32\u67D3\uFF0C\u907F\u514D\u624B\u52A8 activeTab \u5B57\u7B26\u4E32\u6BD4\u8F83\n const listByTab = useMemo(() => {\n const map = new Map<string, RedeemableItemType[]>()\n ;(copy.list || []).forEach(categoryItem => {\n const items = (categoryItem.list || [])\n .filter(item => alpcList.some(alpcItem => String(alpcItem.id) === String(item.id)))\n .map(item => {\n const alpcItem = alpcList.find(alpcItem => String(alpcItem.id) === String(item.id))\n const product = products?.find(product => product.handle === alpcItem?.handle)\n const variant = product?.variants.find(variant => variant.sku === alpcItem?.sku)\n // \u8FC7\u6EE4\u6389\u5E93\u5B58\u4E0D\u8DB3\u7684\u5546\u54C1\n if (alpcItem?.isLimited && (!alpcItem?.remainingInventory || alpcItem.remainingInventory <= 0)) return null\n if (alpcItem?.consumeType === AlpcConsumeType.Product && (!product || !variant)) return null\n\n // \u68C0\u67E5 GoGift \u662F\u5426\u5DF2\u7ECF\u5151\u6362\u8FC7\uFF08\u53EA\u6709 GoGift \u9650\u5236\u5151\u6362\u4E00\u6B21\uFF09\n const hasRedeemed = item.type === ConsumeType.GoGift &&\n isLogin &&\n myRewards.some(reward => reward.rule_id === Number(item.id))\n\n return {\n alpc: alpcItem,\n config: item,\n product,\n variant,\n hasRedeemed,\n }\n })\n .filter(item => item !== null) as unknown as RedeemableItemType[]\n map.set(categoryItem.label, items)\n })\n return map\n }, [copy.list, alpcList, products, isLogin, myRewards])\n\n const handleRedeemError = useCallback(\n (errorCode: AlpcErrorCode) => {\n if (errorCode === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n getRedeemableList()\n }\n },\n [getRedeemableList]\n )\n\n return (\n <Container id={id} className={classNames('relative bg-[#F5F5F7]')}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} />\n\n {/* \u53EF\u7528\u79EF\u5206\u5C55\u793A */}\n {isLogin && copy.availableCredits && (\n <p className=\"mt-[12px] text-[20px] l-xxl:text-[18px] l:text-[16px] font-bold text-[#4A4C56]\">\n {copy.availableCredits.includes('$credits') ? (\n <>\n {copy.availableCredits.split('$credits')[0]}\n <span\n className={cn(\n 'text-brand-color-0',\n brand === 'ankersolix' &&\n 'bg-gradient-to-r from-[#2c7ed0] via-[#00a9e1] via-[43%] to-[#00db84] bg-clip-text text-transparent'\n )}\n >\n {numberFormat(creditInfo?.available_credit || 0, locale).toString()}\n </span>\n {copy.availableCredits.split('$credits')[1] || ''}\n </>\n ) : (\n copy.availableCredits\n )}\n </p>\n )}\n\n <Tabs\n shape={rounded ? 'rounded' : 'square'}\n align=\"left\"\n className={classNames('py-[24px] md:justify-center')}\n defaultValue={copy.list?.[0]?.label || ''}\n onValueChange={value => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_navigation',\n event_parameters: {\n navigation: value,\n page_group: pageGroup,\n },\n })\n }}\n >\n <TabsList>\n {(copy.list || []).map(item => (\n <TabsTrigger key={item.label} value={item.label}>\n {item.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {(copy.list || []).map(categoryItem => (\n <TabsContent key={categoryItem.label} value={categoryItem.label}>\n {/* PC\u7AEF */}\n {!!alpcList?.length && !listLoading && (\n <div\n className={classNames(\n 'relative grid grid-cols-4 gap-[16px] md:grid-cols-2 md:gap-[12px] md-xl:grid-cols-3'\n )}\n >\n {(listByTab.get(categoryItem.label) || [])?.map(item => (\n <RedeemableItem\n key={item?.alpc?.id}\n copy={copy}\n item={item}\n onRedeem={(item: RedeemableItemType) => {\n if (!isLogin) {\n openSignUpPopup()\n } else if (!profile?.activated && !authCodeActivate.isActivateSuccess) {\n authCodeActivate.setAutoSendEmail(true)\n authCodeActivate.open()\n } else {\n setPopRedeemData(item)\n }\n }}\n onRulesOpen={setRules}\n />\n ))}\n </div>\n )}\n </TabsContent>\n ))}\n </Tabs>\n\n {(popRedeemData?.config?.type === ConsumeType.Coupon ||\n popRedeemData?.config?.type === ConsumeType.ShippingCoupon) &&\n redeemModalCopy?.coupon &&\n popRedeemData && (\n <RedeemCouponModal\n item={popRedeemData}\n copy={redeemModalCopy}\n onError={handleRedeemError}\n onClose={() => {\n setPopRedeemData(undefined)\n }}\n />\n )}\n {popRedeemData?.config?.type === ConsumeType.Product && redeemModalCopy?.product && popRedeemData && (\n <RedeemProductModal\n item={popRedeemData}\n copy={redeemModalCopy}\n onError={handleRedeemError}\n onClose={() => {\n setPopRedeemData(undefined)\n }}\n />\n )}\n {(popRedeemData?.config?.type === ConsumeType.GiftCard || popRedeemData?.config?.type === ConsumeType.GoGift) &&\n redeemModalCopy?.virtualProduct &&\n popRedeemData && (\n <RedeemVirtualProductModal\n item={popRedeemData}\n copy={redeemModalCopy}\n onError={handleRedeemError}\n onClose={() => {\n setPopRedeemData(undefined)\n }}\n />\n )}\n {rules && (\n <RulesModal\n overlayClassName=\"md:px-[16px] md:items-center\"\n className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}\n isOpen={rules.length > 0}\n onClose={() => setRules([])}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] md:mb-[24px] md:pt-0\"\n title={pageCommon?.ruleLabel}\n ruleClassName=\"text-[#1d1d1f] font-bold\"\n />\n )}\n </Container>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["CreditsRedeemList_exports", "__export", "CreditsRedeemList", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_classnames", "import_react", "import_RedeemCouponModal", "import_RedeemProductModal", "import_RedeemVirtualProductModal", "import_provider", "import_useRedeemableList", "import_const", "import_lib", "import_RedeemableItem", "import_constants", "import_RulesModal", "import_registration", "import_utils", "import_useMyRewards", "copy", "id", "profile", "openSignUpPopup", "pageGroup", "pageCommon", "creditInfo", "authCodeActivate", "brand", "locale", "rounded", "isLogin", "popRedeemData", "setPopRedeemData", "rules", "setRules", "listLoading", "redeemableList", "getRedeemableList", "useRedeemableList", "myRewards", "useMyRewards", "redeemModalCopy", "alpcList", "item", "handles", "products", "listByTab", "map", "categoryItem", "items", "alpcItem", "product", "variant", "hasRedeemed", "reward", "handleRedeemError", "errorCode", "classNames", "cn", "value", "RedeemCouponModal", "RedeemProductModal", "RedeemVirtualProductModal", "RulesModal"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var Y=Object.create;var x=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var V=(e,n)=>{for(var r in n)x(e,r,{get:n[r],enumerable:!0})},_=(e,n,r,g)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of z(n))!O.call(e,l)&&l!==r&&x(e,l,{get:()=>n[l],enumerable:!(g=B(n,l))||g.enumerable});return e};var v=(e,n,r)=>(r=e!=null?Y(I(e)):{},_(n||!e||!e.__esModule?x(r,"default",{value:e,enumerable:!0}):r,e)),j=e=>_(x({},"__esModule",{value:!0}),e);var q={};V(q,{default:()=>H});module.exports=j(q);var t=require("react/jsx-runtime"),o=require("react"),M=require("../context/provider"),s=require("../context/const"),C=v(require("../context/hooks/useActivities")),P=require("./ModalContainer"),c=require("@anker-in/lib"),d=require("@anker-in/headless-ui"),S=v(require("./LoadingDots")),f=require("@anker-in/headless-ui"),D=require("../../../constants"),k=v(require("dayjs"));function F({data:e,...n}){const[r,g]=(0,o.useState)(1),{taskIdToTypeMapping:l}=(0,M.useCreditsContext)(),{brand:L}=(0,c.useHeadlessContext)(),b=D.ROUNDED_BRANDS.includes(L),U=(0,o.useMemo)(()=>({page:n.isOpen?r:0,pageSize:1e3}),[n.isOpen,r]),y=(0,o.useMemo)(()=>{const i=[{title:e.allTab,type:s.CreditType.All},{title:e.earnedTab,type:s.CreditType.Earned},{title:e.deductedTab,type:s.CreditType.Deducted}];return e.expiredTab&&i.push({title:e.expiredTab,type:s.CreditType.Expired}),i},[e]),{activities:N=[],canNext:h,isLoading:A}=(0,C.default)(U),u=(0,o.useMemo)(()=>{const i={[s.TaskSubType.Activation]:e.activationTask,[s.TaskSubType.UpdateName]:e.updateNameTask,[s.TaskSubType.UpdatePhone]:e.updatePhoneTask,[s.TaskSubType.UpdateBirthday]:e.updateBirthdayTask,[s.TaskSubType.Subscription]:e.subscriptionTask,[s.TaskSubType.UpadteAppName]:e.updateAppNameTask,[s.TaskSubType.Refund]:e.refundTask,[s.TaskSubType.ProductUnApproved]:e.productUnApprovedTask},p={[s.DTC_TASK_TYPE.FirstPurchase]:e.firstPurchaseTask,[s.DTC_TASK_TYPE.UploadReceipt]:e.uploadReceiptTask,[s.DTC_TASK_TYPE.Shopping]:e.shoppingTask};function T(a){return a.task_type===s.TaskType.Redeem&&a.task_sub_type===s.TaskSubType.ProductUnApproved&&e.productUnApprovedTask?a.task_name.replace("Refund",e.productUnApprovedTask):l?.[String(a.task_rule_id)]?p[l?.[String(a.task_rule_id)]]||a.task_name:i[a.task_sub_type]||a.task_name}return N.map(a=>({title:T(a),date:new Date(a.create_time*1e3),value:a.credit,type:a.credit_type,pending_time:a.pending_time,credit_type:a.credit_type,status:a.status}))},[e.activationTask,e.updateNameTask,e.updatePhoneTask,e.updateBirthdayTask,e.subscriptionTask,e.updateAppNameTask,e.refundTask,e.productUnApprovedTask,e.firstPurchaseTask,e.uploadReceiptTask,e.shoppingTask,N,l]),m=(0,o.useCallback)(i=>{let{value:p,...T}=i;return i.type===s.CreditType.Deducted&&p>0&&(p=-p),{value:p,...T}},[]),R=(0,o.useMemo)(()=>{const i=new Map;return i.set(s.CreditType.All,u.map(m)),i.set(s.CreditType.Earned,u.filter(p=>p.type===1).map(m)),i.set(s.CreditType.Deducted,u.filter(p=>p.type===2&&p.status!==3).map(m)),i.set(s.CreditType.Expired,u.filter(p=>p.type===2&&p.status===3).map(m)),i},[u,m]),w=(0,o.useCallback)(()=>{h&&g(r+1)},[r,h]),E=i=>(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"flex-1 overflow-auto overscroll-contain",children:(0,t.jsxs)("div",{className:"grid gap-[18px] md:gap-[12px]",children:[A&&(0,t.jsx)("div",{className:"flex flex-1 flex-col items-center justify-center",children:(0,t.jsx)(S.default,{})}),!A&&(0,t.jsx)(t.Fragment,{children:i.length>0?i.map((p,T)=>(0,t.jsxs)("div",{className:(0,c.classNames)("flex h-fit items-center justify-between rounded-[8px] bg-[#f2f0f1] px-[16px] py-[20px] text-[16px]",!b&&"rounded-none"),children:[(0,t.jsxs)("div",{className:"grid gap-[6px]",children:[(0,t.jsx)("div",{className:"font-bold",children:p.title}),(0,t.jsx)("div",{className:"text-[14px] font-semibold text-[#999]",children:(0,k.default)(p.date).format("YYYY-MM-DD HH:mm").toString()}),!e.pendingTips&&(0,t.jsxs)("div",{className:`hidden text-[14px] font-semibold text-[#777] ${p.status===2&&p.credit_type===1?"!flex":""}`,children:[(0,t.jsx)(f.Text,{html:e.pendingTips}),(0,t.jsx)("span",{children:k.default.unix(p.pending_time).add(1,"day").format("YYYY-MM-DD")}),e.pendingTips2&&(0,t.jsx)(f.Text,{html:e.pendingTips2})]})]}),(0,t.jsxs)("div",{className:(0,c.classNames)("font-bold",p.value>=0||p.credit_type===s.CreditType.Expired?"text-[#52C41A]":"text-[#F84D4F]"),children:[p.value>=0&&"+",p.value]})]},T)):(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-[40px]",children:[(0,t.jsx)(f.Picture,{className:"mb-[16px] h-[120px] w-[160px]",source:e?.emptyListImage?.url,alt:e?.emptyListImage?.alt||"empty list image"}),(0,t.jsx)("div",{className:"leading-1.4 text-[16px] font-semibold",children:e?.emptyListLabel})]})})]})}),i.length>0&&(0,t.jsx)("div",{className:"mt-[12px] pb-[24px] text-[14px] font-semibold text-[#999]",children:e.tips})]});return(0,t.jsx)(P.CreditsModalContainer,{title:e.title,className:(0,c.classNames)("h-[800px] w-[640px]"),useAnimation:!0,animationClassName:"md:translate-y-[100vh]",scrollClassName:"flex flex-col",...n,onScrollEnd:w,children:(0,t.jsxs)(d.Tabs,{align:"left",shape:b?"rounded":"square",defaultValue:y[0]?.type?.toString(),className:"flex-1 flex flex-col",children:[(0,t.jsx)("div",{className:"w-full sticky top-0 bg-white z-10 pb-[24px] overflow-x-auto",children:(0,t.jsx)(d.TabsList,{children:y.map(i=>(0,t.jsx)(d.TabsTrigger,{value:i.type.toString(),children:i.title},i.type))})}),y.map(i=>(0,t.jsx)(d.TabsContent,{value:i.type.toString(),className:"flex-1 flex flex-col",children:E(R.get(i.type)||[])},i.type))]})})}var H=F;
|
|
2
2
|
//# sourceMappingURL=ActivitiesModal.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/modal/ActivitiesModal.tsx"],
|
|
4
|
-
"sourcesContent": ["import { useCallback, useMemo, useState } from 'react'\nimport { useCreditsContext } from '../context/provider'\nimport { CreditType, DTC_TASK_TYPE, TaskSubType, TaskType } from '../context/const'\nimport useActivities from '../context/hooks/useActivities'\nimport type { Task } from '../context/response'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport LoadingDots from './LoadingDots'\nimport { Picture, Text } from '@anker-in/headless-ui'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport dayjs from 'dayjs'\n\nexport interface MyActivitiesMetafields {\n title: string\n tips: string\n allTab: string\n earnedTab: string\n deductedTab: string\n expiredTab: string\n activationTask: string\n updateNameTask: string\n updatePhoneTask: string\n updateBirthdayTask: string\n updateAppNameTask: string\n subscriptionTask: string\n refundTask: string\n productUnApprovedTask: string\n pendingTips?: string\n pendingTips2?: string\n firstPurchaseTask: string\n uploadReceiptTask: string\n shoppingTask: string\n emptyListImage: {\n url: string\n alt?: string\n }\n emptyListLabel: string\n}\n\ninterface ActivitiesModalProps extends ModalContainerProps {\n data: MyActivitiesMetafields\n}\n\nfunction ActivitiesModal({ data, ...props }: ActivitiesModalProps) {\n const [page, setPage] = useState(1)\n const { taskIdToTypeMapping } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const myActivitiesOptions = useMemo(() => {\n return {\n page: props.isOpen ? page : 0,\n pageSize: 1000,\n }\n }, [props.isOpen, page])\n\n const
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["ActivitiesModal_exports", "__export", "ActivitiesModal_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_provider", "import_const", "import_useActivities", "import_ModalContainer", "import_lib", "import_headless_ui", "import_LoadingDots", "import_constants", "import_dayjs", "ActivitiesModal", "data", "props", "page", "setPage", "taskIdToTypeMapping", "brand", "rounded", "myActivitiesOptions", "
|
|
4
|
+
"sourcesContent": ["import { useCallback, useMemo, useState } from 'react'\nimport { useCreditsContext } from '../context/provider'\nimport { CreditType, DTC_TASK_TYPE, TaskSubType, TaskType } from '../context/const'\nimport useActivities from '../context/hooks/useActivities'\nimport type { Task } from '../context/response'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport LoadingDots from './LoadingDots'\nimport { Picture, Text } from '@anker-in/headless-ui'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport dayjs from 'dayjs'\n\nexport interface MyActivitiesMetafields {\n title: string\n tips: string\n allTab: string\n earnedTab: string\n deductedTab: string\n expiredTab: string\n activationTask: string\n updateNameTask: string\n updatePhoneTask: string\n updateBirthdayTask: string\n updateAppNameTask: string\n subscriptionTask: string\n refundTask: string\n productUnApprovedTask: string\n pendingTips?: string\n pendingTips2?: string\n firstPurchaseTask: string\n uploadReceiptTask: string\n shoppingTask: string\n emptyListImage: {\n url: string\n alt?: string\n }\n emptyListLabel: string\n}\n\ninterface ActivitiesModalProps extends ModalContainerProps {\n data: MyActivitiesMetafields\n}\n\nfunction ActivitiesModal({ data, ...props }: ActivitiesModalProps) {\n const [page, setPage] = useState(1)\n const { taskIdToTypeMapping } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const myActivitiesOptions = useMemo(() => {\n return {\n page: props.isOpen ? page : 0,\n pageSize: 1000,\n }\n }, [props.isOpen, page])\n\n const tabs = useMemo(() => {\n const tabs = [\n {\n title: data.allTab,\n type: CreditType.All,\n },\n {\n title: data.earnedTab,\n type: CreditType.Earned,\n },\n {\n title: data.deductedTab,\n type: CreditType.Deducted,\n },\n ]\n if (data.expiredTab) {\n tabs.push({\n title: data.expiredTab,\n type: CreditType.Expired,\n })\n }\n return tabs\n }, [data])\n\n const { activities = [], canNext, isLoading } = useActivities(myActivitiesOptions)\n\n const allList = useMemo(() => {\n const taskNameMap = {\n [TaskSubType.Activation]: data.activationTask,\n [TaskSubType.UpdateName]: data.updateNameTask,\n [TaskSubType.UpdatePhone]: data.updatePhoneTask,\n [TaskSubType.UpdateBirthday]: data.updateBirthdayTask,\n [TaskSubType.Subscription]: data.subscriptionTask,\n [TaskSubType.UpadteAppName]: data.updateAppNameTask,\n [TaskSubType.Refund]: data.refundTask,\n [TaskSubType.ProductUnApproved]: data.productUnApprovedTask,\n }\n const dtcTaskTypeToNameMap = {\n [DTC_TASK_TYPE.FirstPurchase]: data.firstPurchaseTask,\n [DTC_TASK_TYPE.UploadReceipt]: data.uploadReceiptTask,\n [DTC_TASK_TYPE.Shopping]: data.shoppingTask,\n }\n\n function getTitle(item: Task) {\n if (\n item.task_type === TaskType.Redeem &&\n item.task_sub_type === TaskSubType.ProductUnApproved &&\n data.productUnApprovedTask\n ) {\n // \u65B0\u589E\u7684\u90E8\u5206\u4EFB\u52A1\u90FD\u4F7F\u7528\u4E86 alpc \u540C\u4E00\u4E2A\u4EFB\u52A1\u7C7B\u578B\uFF0C\u9700\u8981\u7528\u4EFB\u52A1 id \u6765\u533A\u5206\n return item.task_name.replace('Refund', data.productUnApprovedTask)\n } else if (taskIdToTypeMapping?.[String(item.task_rule_id)]) {\n return dtcTaskTypeToNameMap[taskIdToTypeMapping?.[String(item.task_rule_id)]] || item.task_name\n } else {\n return taskNameMap[item.task_sub_type] || item.task_name\n }\n }\n\n return activities.map(item => ({\n title: getTitle(item),\n date: new Date(item.create_time * 1000),\n value: item.credit,\n type: item.credit_type,\n pending_time: item.pending_time,\n credit_type: item.credit_type,\n status: item.status,\n }))\n }, [\n data.activationTask,\n data.updateNameTask,\n data.updatePhoneTask,\n data.updateBirthdayTask,\n data.subscriptionTask,\n data.updateAppNameTask,\n data.refundTask,\n data.productUnApprovedTask,\n data.firstPurchaseTask,\n data.uploadReceiptTask,\n data.shoppingTask,\n activities,\n taskIdToTypeMapping,\n ])\n\n const normalizeValue = useCallback((item: (typeof allList)[number]) => {\n let { value, ...otherItem } = item\n if (item.type === CreditType.Deducted && value > 0) {\n value = -value\n }\n return { value, ...otherItem }\n }, [])\n\n // \u6309 tab \u7C7B\u578B\u9884\u8BA1\u7B97\u5217\u8868\uFF0C\u914D\u5408 TabsContent \u58F0\u660E\u5F0F\u6E32\u67D3\uFF0C\u907F\u514D\u624B\u52A8 activeTab \u6570\u503C\u6BD4\u8F83\n const listByTab = useMemo(() => {\n const map = new Map<CreditType, ReturnType<typeof normalizeValue>[]>()\n map.set(CreditType.All, allList.map(normalizeValue))\n map.set(\n CreditType.Earned,\n allList.filter(item => item.type === 1).map(normalizeValue)\n )\n map.set(\n CreditType.Deducted,\n allList.filter(item => item.type === 2 && item.status !== 3).map(normalizeValue)\n )\n map.set(\n CreditType.Expired,\n allList.filter(item => item.type === 2 && item.status === 3).map(normalizeValue)\n )\n return map\n }, [allList, normalizeValue])\n\n const handleScrollEnd = useCallback(() => {\n if (!canNext) {\n return\n }\n setPage(page + 1)\n }, [page, canNext])\n\n const renderList = (list: ReturnType<typeof normalizeValue>[]) => (\n <>\n <div className=\"flex-1 overflow-auto overscroll-contain\">\n <div className=\"grid gap-[18px] md:gap-[12px]\">\n {isLoading && (\n <div className=\"flex flex-1 flex-col items-center justify-center\">\n <LoadingDots />\n </div>\n )}\n\n {!isLoading && (\n <>\n {list.length > 0 ? (\n list.map((item, index) => (\n <div\n key={index}\n className={cn(\n 'flex h-fit items-center justify-between rounded-[8px] bg-[#f2f0f1] px-[16px] py-[20px] text-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <div className=\"grid gap-[6px]\">\n <div className=\"font-bold\">{item.title}</div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {dayjs(item.date).format('YYYY-MM-DD HH:mm').toString()}\n </div>\n {!data.pendingTips && (\n <div\n className={`hidden text-[14px] font-semibold text-[#777] ${item.status === 2 && item.credit_type === 1 ? '!flex' : ''}`}\n >\n <Text html={data.pendingTips} />\n <span>{dayjs.unix(item.pending_time).add(1, 'day').format('YYYY-MM-DD')}</span>\n {data.pendingTips2 && <Text html={data.pendingTips2} />}\n </div>\n )}\n </div>\n <div\n className={cn(\n 'font-bold',\n item.value >= 0 || item.credit_type === CreditType.Expired ? 'text-[#52C41A]' : 'text-[#F84D4F]'\n )}\n >\n {item.value >= 0 && '+'}\n {item.value}\n </div>\n </div>\n ))\n ) : (\n <div className=\"flex flex-col items-center justify-center py-[40px]\">\n <Picture\n className=\"mb-[16px] h-[120px] w-[160px]\"\n source={data?.emptyListImage?.url}\n alt={data?.emptyListImage?.alt || 'empty list image'}\n ></Picture>\n <div className=\"leading-1.4 text-[16px] font-semibold\">{data?.emptyListLabel}</div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n {/* \u79EF\u5206\u5230\u8D26\u65F6\u95F4\u63D0\u9192 */}\n {list.length > 0 && <div className=\"mt-[12px] pb-[24px] text-[14px] font-semibold text-[#999]\">{data.tips}</div>}\n </>\n )\n\n return (\n <CreditsModalContainer\n title={data.title}\n className={cn('h-[800px] w-[640px]')}\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n scrollClassName=\"flex flex-col\"\n {...props}\n onScrollEnd={handleScrollEnd}\n >\n <Tabs align=\"left\" shape={rounded ? 'rounded' : 'square'} defaultValue={tabs[0]?.type?.toString()} className=\"flex-1 flex flex-col\">\n <div className=\"w-full sticky top-0 bg-white z-10 pb-[24px] overflow-x-auto\">\n <TabsList>\n {tabs.map(tab => (\n <TabsTrigger key={tab.type} value={tab.type.toString()}>\n {tab.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </div>\n\n {tabs.map(tab => (\n <TabsContent key={tab.type} value={tab.type.toString()} className=\"flex-1 flex flex-col\">\n {renderList(listByTab.get(tab.type) || [])}\n </TabsContent>\n ))}\n </Tabs>\n </CreditsModalContainer>\n )\n}\n\nexport default ActivitiesModal\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ActivitiesModal_exports", "__export", "ActivitiesModal_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_provider", "import_const", "import_useActivities", "import_ModalContainer", "import_lib", "import_headless_ui", "import_LoadingDots", "import_constants", "import_dayjs", "ActivitiesModal", "data", "props", "page", "setPage", "taskIdToTypeMapping", "brand", "rounded", "myActivitiesOptions", "tabs", "activities", "canNext", "isLoading", "useActivities", "allList", "taskNameMap", "dtcTaskTypeToNameMap", "getTitle", "item", "normalizeValue", "value", "otherItem", "listByTab", "map", "handleScrollEnd", "renderList", "list", "LoadingDots", "index", "cn", "dayjs", "tab"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var O=Object.create;var u=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var K=(t,r)=>{for(var n in r)u(t,n,{get:r[n],enumerable:!0})},N=(t,r,n,d)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of q(r))!B.call(t,a)&&a!==n&&u(t,a,{get:()=>r[a],enumerable:!(d=$(r,a))||d.enumerable});return t};var c=(t,r,n)=>(n=t!=null?O(z(t)):{},N(r||!t||!t.__esModule?u(n,"default",{value:t,enumerable:!0}):n,t)),V=t=>N(u({},"__esModule",{value:!0}),t);var W={};K(W,{default:()=>Q});module.exports=V(W);var l=require("react/jsx-runtime"),p=require("@anker-in/headless-ui"),f=c(require("classnames")),P=c(require("copy-to-clipboard")),R=c(require("dayjs")),o=require("react"),e=require("../context/const"),F=require("./ModalContainer"),A=c(require("./Tip")),w=c(require("./LoadingDots")),D=c(require("../context/hooks/useMyRewards")),M=require("@anker-in/lib"),_=require("../../../constants");function J({data:t,...r}){const[n,d]=(0,o.useState)(e.AlpcConsumeType.Coupon),{brand:a}=(0,M.useHeadlessContext)(),b=_.ROUNDED_BRANDS.includes(a),[h,m]=(0,o.useState)(1),[j,v]=(0,o.useState)(-1),x=(0,o.useMemo)(()=>[{title:t.couponTab,type:e.AlpcConsumeType.Coupon},{title:t.productTab,type:e.AlpcConsumeType.Product},{title:t.externalProductTab,type:e.AlpcConsumeType.ExternalProduct}].filter(i=>!!i.title),[t.couponTab,t.productTab,t.externalProductTab]);(0,o.useEffect)(()=>{m(1)},[n]);const{myRewards:C=[],canNext:y,isLoading:G}=(0,D.default)({page:h,pageSize:1e3,consumeType:n}),S=(0,o.useCallback)(i=>i.fulfillment_status&&i.fulfillment_status!=="null"?i.fulfillment_status==="fulfilled"?e.RewardType.Fulfilled:e.RewardType.Unfulfilled:i.approval_status===e.ApprovalStatus.Success||i.approval_status===e.ApprovalStatus.DoubleConfirm?e.RewardType.ApproveSuccess:i.approval_status===e.ApprovalStatus.Failed?e.RewardType.Failed:e.RewardType.Pending,[]),T=(0,o.useCallback)(i=>{const s={0:e.RewardType.GogiftPending,1:e.RewardType.GogiftApproved,2:e.RewardType.GogiftSecondConfirm,3:e.RewardType.GogiftRejected,4:e.RewardType.GogiftCallbackPending,5:e.RewardType.GogiftCallbackSuccess,6:e.RewardType.GogiftCallbackTimeout};return i!==void 0?s[i]??e.RewardType.GogiftPending:e.RewardType.GogiftPending},[]),k=(0,o.useMemo)(()=>C.map(i=>{const s={title:i.goods_title,value:i.consume_credits,date:new Date(i.create_time*1e3)};return n===e.AlpcConsumeType.Coupon?{...s,type:e.RewardType.Received,couponCode:i.coupon_code,orderNumber:"",link:""}:n===e.AlpcConsumeType.Product?{...s,type:S(i),orderNumber:i.order_number,couponCode:"",link:""}:n===e.AlpcConsumeType.ExternalProduct?{...s,type:T(i.approval_status),orderNumber:"",couponCode:"",link:i.link||""}:{...s,type:e.RewardType.Received,couponCode:"",orderNumber:"",link:""}}),[n,C,S,T]),E=(0,o.useMemo)(()=>({[e.RewardType.Received]:t.receivedLabel,[e.RewardType.Pending]:t.pendingLabel,[e.RewardType.ApproveFail]:t.failedLabel,[e.RewardType.ApproveSuccess]:t.approveSuccessLabel,[e.RewardType.Unfulfilled]:t.unfulfilledLabel,[e.RewardType.Fulfilled]:t.fulfilledLabel,[e.RewardType.Failed]:t.failedLabel,[e.RewardType.GogiftPending]:t.goGiftStatus?.pending?.label||t.pendingLabel,[e.RewardType.GogiftApproved]:t.goGiftStatus?.approved?.label||t.approveSuccessLabel,[e.RewardType.GogiftSecondConfirm]:t.goGiftStatus?.secondConfirm?.label||t.approveSuccessLabel,[e.RewardType.GogiftRejected]:t.goGiftStatus?.rejected?.label||t.failedLabel,[e.RewardType.GogiftCallbackPending]:t.goGiftStatus?.callbackPending?.label||t.pendingLabel,[e.RewardType.GogiftCallbackSuccess]:t.goGiftStatus?.callbackSuccess?.label||t.receivedLabel,[e.RewardType.GogiftCallbackTimeout]:t.goGiftStatus?.callbackTimeout?.label||t.failedLabel}),[t]),L=(0,o.useMemo)(()=>({[e.RewardType.Received]:"",[e.RewardType.Pending]:t.pendingTip,[e.RewardType.ApproveFail]:"",[e.RewardType.ApproveSuccess]:t.confirmedTip,[e.RewardType.Unfulfilled]:t.processingTip,[e.RewardType.Fulfilled]:t.ShippedTip,[e.RewardType.Failed]:"",[e.RewardType.GogiftPending]:t.goGiftStatus?.pending?.tip||"",[e.RewardType.GogiftApproved]:t.goGiftStatus?.approved?.tip||"",[e.RewardType.GogiftSecondConfirm]:t.goGiftStatus?.secondConfirm?.tip||"",[e.RewardType.GogiftRejected]:t.goGiftStatus?.rejected?.tip||"",[e.RewardType.GogiftCallbackPending]:t.goGiftStatus?.callbackPending?.tip||"",[e.RewardType.GogiftCallbackSuccess]:t.goGiftStatus?.callbackSuccess?.tip||"",[e.RewardType.GogiftCallbackTimeout]:t.goGiftStatus?.callbackTimeout?.tip||""}),[t]),U=(0,o.useMemo)(()=>({[e.RewardType.Received]:"#52C41A",[e.RewardType.Pending]:"#999",[e.RewardType.ApproveFail]:"#F84D4F",[e.RewardType.ApproveSuccess]:"#999",[e.RewardType.Unfulfilled]:"#999",[e.RewardType.Fulfilled]:"#999",[e.RewardType.Failed]:"#F84D4F",[e.RewardType.GogiftPending]:"#999",[e.RewardType.GogiftApproved]:"#999",[e.RewardType.GogiftSecondConfirm]:"#999",[e.RewardType.GogiftRejected]:"#F84D4F",[e.RewardType.GogiftCallbackPending]:"#999",[e.RewardType.GogiftCallbackSuccess]:"#52C41A",[e.RewardType.GogiftCallbackTimeout]:"#F84D4F"}),[]),I=(0,o.useCallback)(()=>{y&&m(i=>i+1)},[y]),Y=(0,o.useCallback)((i,s)=>{v(s),(0,P.default)(i),setTimeout(()=>{v(-1)},2e3)},[]),H=()=>(0,l.jsxs)(l.Fragment,{children:[G&&(0,l.jsx)("div",{className:"flex flex-1 flex-col items-center justify-center",children:(0,l.jsx)(w.default,{})}),!G&&(0,l.jsx)("div",{className:"mt-[24px] flex-1 overflow-auto overscroll-contain pb-[24px] md:pb-[48px]",children:k.length>0?(0,l.jsx)("div",{className:"grid gap-[18px] md:gap-[12px]",children:k.map((i,s)=>(0,l.jsxs)("div",{className:"grid gap-[8px]",children:[i?.orderNumber&&(0,l.jsxs)("div",{className:"text-[15px] font-semibold leading-[1.4] text-[#777]",children:[t.orderNumberLabel,": ",i.orderNumber]}),(0,l.jsxs)("div",{className:(0,f.default)("flex items-center justify-between rounded-[8px] bg-[#f7f8f9] px-[16px] py-[20px]",!b&&"rounded-none"),children:[(0,l.jsxs)("div",{className:"grid gap-[4px]",children:[(0,l.jsx)("div",{className:"text-[16px] font-bold leading-[1.4]",children:i.title}),(0,l.jsxs)("div",{className:"text-[14px] font-semibold text-[#999]",children:[t.valueLabel,": ",i.value," ",t?.pointUnit]}),(0,l.jsxs)("div",{className:"text-[14px] font-semibold text-[#999]",children:[i?.couponCode?`${t?.code||"Code"}: ${i.couponCode} `:"",i?.couponCode&&(0,l.jsx)("span",{className:"cursor-pointer text-[14px] font-semibold text-brand underline",onClick:()=>{Y(i.couponCode,s)},role:"button",tabIndex:0,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&g.preventDefault()},children:j===s?t?.copied||"COPIED":t?.copy||"COPY"})]}),i?.link&&(0,l.jsx)("div",{className:"text-[14px] font-semibold text-[#999]",children:(0,l.jsx)("a",{href:i.link,target:"_blank",rel:"noopener noreferrer",className:"text-brand underline",children:t?.redeemLinkLabel||"Redeem Link"})})]}),(0,l.jsxs)("div",{className:"grid gap-[4px] text-right",children:[(0,l.jsxs)("div",{className:(0,f.default)("flex items-center justify-end text-[16px] font-bold leading-[1.4]",`text-[${U[i.type]}]`),children:[(0,l.jsx)("span",{children:E[i.type]}),L[i.type]&&(0,l.jsx)(A.default,{info:L[i.type],index:s})]}),(0,l.jsx)("div",{className:"text-[14px] font-semibold text-[#999]",children:(0,R.default)(i.date).format("YYYY-MM-DD HH:mm").toString()})]})]})]},s))}):(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center",children:[(0,l.jsx)(p.Picture,{className:"mb-[12px] w-[160px]",source:t?.emptyListImage?.url,alt:t?.emptyListImage?.alt||"empty list image"}),(0,l.jsx)("div",{className:"text-[16px] font-semibold leading-[1.4]",children:t?.emptyListLabel})]})})]});return(0,l.jsx)(F.CreditsModalContainer,{title:t.title,className:(0,f.default)("h-[800px] w-[640px]"),useAnimation:!0,animationClassName:"md:translate-y-[100vh]",scrollClassName:"md:mb-0 flex flex-col",...r,onScrollEnd:I,children:(0,l.jsxs)(p.Tabs,{align:"left",shape:b?"rounded":"square",value:n.toString(),onValueChange:i=>{d(Number(i))},className:"flex flex-1 flex-col",children:[(0,l.jsx)("div",{className:"shrink-0",children:(0,l.jsx)(p.TabsList,{children:x.map(i=>(0,l.jsx)(p.TabsTrigger,{value:i.type.toString(),children:i.title},i.type))})}),x.map(i=>(0,l.jsx)(p.TabsContent,{value:i.type.toString(),className:"flex flex-1 flex-col",children:H()},i.type))]})})}var Q=J;
|
|
2
2
|
//# sourceMappingURL=RewardsModal.js.map
|