@anker-in/campaign-ui 0.4.0-beta.3 → 0.4.0-beta.6
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/context/hooks/useMyRewards.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useMyRewards.js.map +2 -2
- package/dist/cjs/components/credits/creditsGoGift/CreditsGoGift.js +1 -1
- package/dist/cjs/components/credits/creditsGoGift/CreditsGoGift.js.map +3 -3
- 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/creditsRedeemList/RedeemVirtualProductModal/VirtualProductSuccess.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal/VirtualProductSuccess.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js.map +2 -2
- package/dist/cjs/components/credits/type.d.ts +2 -0
- package/dist/cjs/components/credits/type.js +1 -1
- package/dist/cjs/components/credits/type.js.map +1 -1
- package/dist/esm/components/credits/context/hooks/useMyRewards.js +1 -1
- package/dist/esm/components/credits/context/hooks/useMyRewards.js.map +2 -2
- package/dist/esm/components/credits/creditsGoGift/CreditsGoGift.js +1 -1
- package/dist/esm/components/credits/creditsGoGift/CreditsGoGift.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/creditsRedeemList/RedeemVirtualProductModal/VirtualProductSuccess.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal/VirtualProductSuccess.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js.map +2 -2
- package/dist/esm/components/credits/type.d.ts +2 -0
- package/package.json +1 -1
- package/src/components/credits/context/hooks/useMyRewards.ts +1 -0
- package/src/components/credits/creditsGoGift/CreditsGoGift.tsx +48 -5
- package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +16 -1
- package/src/components/credits/creditsRedeemList/RedeemVirtualProductModal/VirtualProductSuccess.tsx +12 -2
- package/src/components/credits/creditsRedeemList/RedeemVirtualProductModal.tsx +15 -3
- package/src/components/credits/creditsRedeemList/RedeemableItem.tsx +5 -0
- package/src/components/credits/type.ts +2 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var
|
|
1
|
+
"use strict";var p=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var x=(t,e)=>{for(var o in e)p(t,o,{get:e[o],enumerable:!0})},N=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of L(e))!T.call(t,s)&&s!==o&&p(t,s,{get:()=>e[s],enumerable:!(n=w(e,s))||n.enumerable});return t};var h=t=>N(p({},"__esModule",{value:!0}),t);var P={};x(P,{default:()=>B});module.exports=h(P);var r=require("react"),a=require("../const"),g=require("./useAlpcFetch"),_=require("../provider"),f=require("@anker-in/lib");function z({page:t,pageSize:e,consumeType:o}){const{profile:n,alpcBrand:s}=(0,_.useCreditsContext)(),{brand:y,locale:m,appName:R}=(0,f.useHeadlessContext)(),C=s||y,[d,b]=(0,r.useState)([]),[i,A]=(0,r.useState)(0),{isMutating:c,trigger:M}=(0,g.useAlpcMutation)({url:"/v1/credit/log/coupon",initData:{brand:C,country:a.ALPC_COUNTRY_MAP.get(m)||m,app_name:R}}),u=(0,r.useCallback)(async()=>{n?.user_id&&await M({consume_type:o||a.AlpcConsumeType.Coupon,page:t,page_size:e,user_id:n?.user_id},{onSuccess(l){A(l?.data?.total),b(l?.data?.redeem_logs||[])}})},[o,t,e,n?.user_id]);return(0,r.useEffect)(()=>{u()},[u]),{myRewards:d,isLoading:c,total:i,getMyRewards:u,canNext:i>d.length&&!c}}var B=z;
|
|
2
2
|
//# sourceMappingURL=useMyRewards.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/components/credits/context/hooks/useMyRewards.ts"],
|
|
4
|
-
"sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { ALPC_COUNTRY_MAP, AlpcConsumeType } from '../const'\nimport { useAlpcMutation } from './useAlpcFetch'\nimport type { RedeemLogResponse } from '../response'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useMyRewards({\n page,\n pageSize,\n consumeType,\n}: {\n page: number\n pageSize: number\n consumeType?: AlpcConsumeType\n}) {\n const { profile, alpcBrand } = useCreditsContext()\n const { brand: headlessBrand, locale, appName } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n const [myRewards, setMyRewards] = useState<RedeemLogResponse[]>([])\n const [total, setTotal] = useState(0)\n\n const { isMutating: isLoading, trigger } = useAlpcMutation<\n { data: { redeem_logs: RedeemLogResponse[]; total: number } },\n {\n page: number\n page_size: number\n consume_type: AlpcConsumeType\n user_id: string\n }\n >({\n url: `/v1/credit/log/coupon`,\n initData: {\n brand: brand,\n country: ALPC_COUNTRY_MAP.get(locale) || locale,\n app_name: appName,\n },\n })\n\n const getMyRewards = useCallback(async () => {\n if (!profile?.user_id) {\n return\n }\n await trigger(\n {\n consume_type: consumeType || AlpcConsumeType.Coupon,\n page,\n page_size: pageSize,\n user_id: profile?.user_id,\n },\n {\n onSuccess(responseData) {\n setMyRewards(responseData?.data?.redeem_logs || [])\n },\n }\n )\n }, [consumeType, page, pageSize, profile?.user_id])\n\n useEffect(() => {\n getMyRewards()\n }, [getMyRewards])\n\n return {\n myRewards,\n isLoading,\n total,\n getMyRewards,\n canNext: total > myRewards.length && !isLoading,\n }\n}\n\nexport default useMyRewards\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAiD,iBAEjDC,EAAkD,oBAClDC,EAAgC,0BAEhCC,EAAkC,uBAClCC,EAAmC,yBAEnC,SAASC,EAAa,CACpB,KAAAC,EACA,SAAAC,EACA,YAAAC,CACF,EAIG,CACD,KAAM,CAAG,QAAAC,EAAS,UAAAC,CAAU,KAAI,qBAAkB,EAC5C,CAAE,MAAOC,EAAe,OAAAC,EAAQ,QAAAC,CAAQ,KAAI,sBAAmB,EAC/DC,EAAQJ,GAAaC,EAErB,CAACI,EAAWC,CAAY,KAAI,YAA8B,CAAC,CAAC,EAC5D,CAACC,EAAOC,CAAQ,KAAI,YAAS,CAAC,EAE9B,CAAE,WAAYC,EAAW,QAAAC,CAAQ,KAAI,mBAQzC,CACA,IAAK,wBACL,SAAU,CACR,MAAON,EACP,QAAS,mBAAiB,IAAIF,CAAM,GAAKA,EACzC,SAAUC,CACZ,CACF,CAAC,EAEKQ,KAAe,eAAY,SAAY,CACtCZ,GAAS,SAGd,MAAMW,EACJ,CACE,aAAcZ,GAAe,kBAAgB,OAC7C,KAAAF,EACA,UAAWC,EACX,QAASE,GAAS,OACpB,EACA,CACE,UAAUa,EAAc,
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { ALPC_COUNTRY_MAP, AlpcConsumeType } from '../const'\nimport { useAlpcMutation } from './useAlpcFetch'\nimport type { RedeemLogResponse } from '../response'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useMyRewards({\n page,\n pageSize,\n consumeType,\n}: {\n page: number\n pageSize: number\n consumeType?: AlpcConsumeType\n}) {\n const { profile, alpcBrand } = useCreditsContext()\n const { brand: headlessBrand, locale, appName } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n const [myRewards, setMyRewards] = useState<RedeemLogResponse[]>([])\n const [total, setTotal] = useState(0)\n\n const { isMutating: isLoading, trigger } = useAlpcMutation<\n { data: { redeem_logs: RedeemLogResponse[]; total: number } },\n {\n page: number\n page_size: number\n consume_type: AlpcConsumeType\n user_id: string\n }\n >({\n url: `/v1/credit/log/coupon`,\n initData: {\n brand: brand,\n country: ALPC_COUNTRY_MAP.get(locale) || locale,\n app_name: appName,\n },\n })\n\n const getMyRewards = useCallback(async () => {\n if (!profile?.user_id) {\n return\n }\n await trigger(\n {\n consume_type: consumeType || AlpcConsumeType.Coupon,\n page,\n page_size: pageSize,\n user_id: profile?.user_id,\n },\n {\n onSuccess(responseData) {\n setTotal(responseData?.data?.total)\n setMyRewards(responseData?.data?.redeem_logs || [])\n },\n }\n )\n }, [consumeType, page, pageSize, profile?.user_id])\n\n useEffect(() => {\n getMyRewards()\n }, [getMyRewards])\n\n return {\n myRewards,\n isLoading,\n total,\n getMyRewards,\n canNext: total > myRewards.length && !isLoading,\n }\n}\n\nexport default useMyRewards\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAiD,iBAEjDC,EAAkD,oBAClDC,EAAgC,0BAEhCC,EAAkC,uBAClCC,EAAmC,yBAEnC,SAASC,EAAa,CACpB,KAAAC,EACA,SAAAC,EACA,YAAAC,CACF,EAIG,CACD,KAAM,CAAG,QAAAC,EAAS,UAAAC,CAAU,KAAI,qBAAkB,EAC5C,CAAE,MAAOC,EAAe,OAAAC,EAAQ,QAAAC,CAAQ,KAAI,sBAAmB,EAC/DC,EAAQJ,GAAaC,EAErB,CAACI,EAAWC,CAAY,KAAI,YAA8B,CAAC,CAAC,EAC5D,CAACC,EAAOC,CAAQ,KAAI,YAAS,CAAC,EAE9B,CAAE,WAAYC,EAAW,QAAAC,CAAQ,KAAI,mBAQzC,CACA,IAAK,wBACL,SAAU,CACR,MAAON,EACP,QAAS,mBAAiB,IAAIF,CAAM,GAAKA,EACzC,SAAUC,CACZ,CACF,CAAC,EAEKQ,KAAe,eAAY,SAAY,CACtCZ,GAAS,SAGd,MAAMW,EACJ,CACE,aAAcZ,GAAe,kBAAgB,OAC7C,KAAAF,EACA,UAAWC,EACX,QAASE,GAAS,OACpB,EACA,CACE,UAAUa,EAAc,CACtBJ,EAASI,GAAc,MAAM,KAAK,EAClCN,EAAaM,GAAc,MAAM,aAAe,CAAC,CAAC,CACpD,CACF,CACF,CACF,EAAG,CAACd,EAAaF,EAAMC,EAAUE,GAAS,OAAO,CAAC,EAElD,sBAAU,IAAM,CACdY,EAAa,CACf,EAAG,CAACA,CAAY,CAAC,EAEV,CACL,UAAAN,EACA,UAAAI,EACA,MAAAF,EACA,aAAAI,EACA,QAASJ,EAAQF,EAAU,QAAU,CAACI,CACxC,CACF,CAEA,IAAOrB,EAAQO",
|
|
6
6
|
"names": ["useMyRewards_exports", "__export", "useMyRewards_default", "__toCommonJS", "import_react", "import_const", "import_useAlpcFetch", "import_provider", "import_lib", "useMyRewards", "page", "pageSize", "consumeType", "profile", "alpcBrand", "headlessBrand", "locale", "appName", "brand", "myRewards", "setMyRewards", "total", "setTotal", "isLoading", "trigger", "getMyRewards", "responseData"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var V=Object.create;var b=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var W=(e,l)=>{for(var s in l)b(e,s,{get:l[s],enumerable:!0})},T=(e,l,s,g)=>{if(l&&typeof l=="object"||typeof l=="function")for(let d of J(l))!Q.call(e,d)&&d!==s&&b(e,d,{get:()=>l[d],enumerable:!(g=q(l,d))||g.enumerable});return e};var N=(e,l,s)=>(s=e!=null?V(K(e)):{},T(l||!e||!e.__esModule?b(s,"default",{value:e,enumerable:!0}):s,e)),X=e=>T(b({},"__esModule",{value:!0}),e);var Z={};W(Z,{CreditsGoGift:()=>Y});module.exports=X(Z);var t=require("react/jsx-runtime"),i=require("@anker-in/headless-ui"),n=require("react"),o=require("@anker-in/lib"),k=N(require("../creditsRedeemList/RedeemVirtualProductModal")),A=N(require("../context/hooks/useRedeemableList")),G=require("../context/provider"),H=require("../../../constants"),O=require("@anker-in/lib"),c=require("../context/const"),B=N(require("../modal/RulesModal")),P=require("../../../components/registration"),y=N(require("../context/hooks/useMyRewards"));const Y=({copy:e,id:l})=>{const[s,g]=(0,n.useState)(!1),[d,f]=(0,n.useState)(),[_,R]=(0,n.useState)(),{redeemableList:S}=(0,A.default)({consumeType:c.AlpcConsumeType.ExternalProduct}),{pageCommon:m,profile:u,creditInfo:L,setOpenMyRewardsModal:F,openSignUpPopup:M,gtm:h}=(0,G.useCreditsContext)(),{authCodeActivate:x}=(0,P.useRegistration)(),{brand:z}=(0,O.useHeadlessContext)(),C=H.ROUNDED_BRANDS.includes(z),v=Object.keys(u||{}).length>0,{myRewards:D}=(0,y.default)({page:1,pageSize:100,consumeType:c.AlpcConsumeType.ExternalProduct}),j=m?.redeemModal||{},a=(0,n.useMemo)(()=>{const r=S.find(p=>p.id?.toString()===e?.redeemId?.toString());return r?{alpc:{id:r.id.toString(),consumeCredits:r.consume_credits,remainingInventory:r.remaining_inventory,isLimited:!!r.is_limited,consumeType:r.consume_type,showCredit:!0,title:r.name},config:{title:e.cardTitle,desc:e.cardDesc,type:e.type,value:e.value||"",rules:e.rules,image:e.cardImg}}:null},[S,e]),U=r=>{const p=m?.redeemModal;r===c.AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit?f(p?.redeemLimitError):r===c.AlpcErrorCode.CodeLpcRuleInventoryNotEnough?f(p?.inventoryNotEnough):r===c.AlpcErrorCode.CodeLpcNotEnoughCredits?f(p?.creditsNotEnough):r===c.AlpcErrorCode.CodeCrossSiteError?f(p?.crossSiteError):f(p?.commonError)},I=(0,n.useMemo)(()=>u?.activated&&Number(a?.alpc?.consumeCredits)>Number(L?.available_credit||0),[u?.activated,a?.alpc?.consumeCredits,L?.available_credit]),$=(0,n.useMemo)(()=>!v||!a?.alpc?.id?!1:D.some(r=>r.rule_id===Number(a.alpc.id)),[v,a?.alpc?.id,D]),E=Number(a?.alpc.remainingInventory)<=0,w=(0,n.useMemo)(()=>E?m?.soldOut||"Sold Out":v?e.redeemBtn:e.unlockRewards,[v,E,e,m]);return a?(0,t.jsxs)(i.Container,{id:l,children:[(0,t.jsx)(i.Heading,{as:"h2",size:"4",html:e.title}),(0,t.jsxs)("div",{className:(0,o.classNames)("mt-[24px] flex h-fit w-full items-center bg-[#eaeaec] p-[24px]","l:flex-col l:gap-[12px] l:p-[12px]","min-l:flex-row min-l:gap-[64px]",!C&&"rounded-none",C&&"rounded-[12px]"),children:[(0,t.jsx)("div",{className:"relative flex h-[200px] w-[304px] shrink-0 items-center justify-center overflow-hidden l:h-auto l:aspect-h-[120] l:aspect-w-[304] l:w-full",children:e.cardImg?.url&&(0,t.jsx)(i.Picture,{className:(0,o.classNames)("size-full",C&&"rounded-[12px]"),source:e.mCardImg?.url?`${e.cardImg.url},${e.mCardImg.url} 1024`:e.cardImg.url})}),(0,t.jsxs)("div",{className:"flex w-full items-end justify-between l:flex-col l:items-start l:gap-[24px]",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-[20px] l:w-full l:gap-[12px]",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-[4px]",children:[(0,t.jsx)(i.Text,{html:e.cardTitle,className:"text-[32px] font-bold leading-[1.2] text-[#1D1D1F] l:text-[18px]"}),(0,t.jsx)(i.Text,{html:e.cardDesc,className:"text-[18px] font-bold leading-[1.4] text-[#3D3D3F] l:text-[12px]"})]}),(0,t.jsx)(i.Text,{html:e.cardTip,className:"text-[18px] font-bold leading-[1.4] text-[#000] l:text-[12px]"})]}),(0,t.jsxs)("div",{className:"flex shrink-0 flex-col items-end l:w-full l:items-start",children:[(0,t.jsx)(i.Button,{variant:"primary",disabled:I||E||$,onClick:()=>{v?!u?.activated&&!x.isActivateSuccess?(x.setAutoSendEmail(!0),x.open()):((0,o.gaTrack)({event:"ga4Event",event_name:"lp_button",member_active_status:u?.activated?"active":"not active",event_parameters:{page_group:h.pageGroup,position:e.title,button_name:w,info:a?.alpc?.id}}),g(!0)):M()},title:I?m.insufficientCredits:w,children:w}),d&&(0,t.jsx)("div",{className:"mt-[8px] text-[14px] font-bold leading-[1.2] text-[#FFC24D] l:text-[12px]",children:d}),(e.viewRedeemHistory||e.rulesLink)&&(0,t.jsxs)("div",{className:"mt-[18px] flex gap-[16px] text-[18px] font-bold leading-[1.4] l:mt-[12px] l:gap-0 l:text-[14px]",children:[e.viewRedeemHistory&&(0,t.jsx)(i.Text,{html:e.viewRedeemHistory,className:"cursor-pointer text-[#4794EC] font-bold underline",onClick:()=>{v?!u?.activated&&!x.isActivateSuccess?(x.setAutoSendEmail(!0),x.open()):((0,o.gaTrack)({event:"ga4Event",event_name:"lp_button",member_active_status:u?.activated?"active":"not active",event_parameters:{page_group:h.pageGroup,position:e.title,button_name:e.viewRedeemHistory}}),F(!0)):M()}}),m.ruleLabel&&(0,t.jsx)(i.Text,{html:m.ruleLabel,className:(0,o.classNames)("cursor-pointer text-[#4794EC] font-bold underline",e.viewRedeemHistory&&"l:ml-[16px]"),onClick:()=>R(e.rules)})]})]})]})]}),s&&a&&(0,t.jsx)(k.default,{copy:j,onClose:()=>{(0,o.gaTrack)({event:"ga4Event",event_name:"lp_button",member_active_status:u?.activated?"active":"not active",event_parameters:{page_group:h.pageGroup,position:e.title,button_name:"close_modal"}}),g(!1),f(void 0)},item:a,onError:U}),_&&(0,t.jsx)(B.default,{overlayClassName:"md:px-[16px] md:items-center",className:(0,o.classNames)("md:h-fit md:rounded-b-[16px]",!C&&"md:rounded-none"),isOpen:_.length>0,onClose:()=>R(void 0),titleClassName:"border-b-transparent h-[56px]",rules:_,scrollClassName:"md:mt-[8px] mt-[8px] md:mb-[24px] md:pt-0",title:m?.ruleLabel,ruleClassName:"text-[#1d1d1f] font-bold"})]}):null};
|
|
2
2
|
//# sourceMappingURL=CreditsGoGift.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/creditsGoGift/CreditsGoGift.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Container, Heading, Picture, Button, Text } from '@anker-in/headless-ui'\nimport { useMemo, useState } from 'react'\nimport { classNames as cn } from '@anker-in/lib'\n\nimport RedeemVirtualProductModal from '../creditsRedeemList/RedeemVirtualProductModal'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport { useCreditsContext } from '../context/provider'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { CreditsGoGiftCopy } from './type'\nimport { AlpcConsumeType, AlpcErrorCode } from '../context/const'\nimport RulesModal from '../modal/RulesModal'\nimport { useRegistration } from '../../../components/registration'\n\nexport const CreditsGoGift = ({ copy, id }: { copy: CreditsGoGiftCopy; id?: string }) => {\n const [showModal, setShowModal] = useState(false)\n const [redeemError, setRedeemError] = useState<string>()\n const [rules, setRules] = useState<string | string[]>()\n const { redeemableList } = useRedeemableList({ consumeType: AlpcConsumeType.ExternalProduct })\n const { pageCommon, profile, creditInfo, setOpenMyRewardsModal, openSignUpPopup } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isLogin = Object.keys(profile || {}).length > 0\n\n const redeemModalCopy = pageCommon?.redeemModal || ({} as any)\n\n console.log('redeemableList', redeemableList)\n\n const item = useMemo(() => {\n // \u6839\u636E redeemId \u67E5\u8BE2 ExternalProduct \u7684 ALPC \u6570\u636E\n const alpcData = redeemableList.find(item => item.id?.toString() === copy?.redeemId?.toString())\n if (!alpcData) return null\n\n return {\n alpc: {\n id: alpcData.id.toString(),\n consumeCredits: alpcData.consume_credits,\n remainingInventory: alpcData.remaining_inventory,\n isLimited: !!alpcData.is_limited,\n consumeType: alpcData.consume_type,\n showCredit: true,\n title: alpcData.name,\n },\n config: {\n title: copy.cardTitle,\n desc: copy.cardDesc,\n type: copy.type,\n value: copy.value || '',\n rules: copy.rules,\n image: copy.cardImg,\n },\n }\n }, [redeemableList, copy])\n\n const handleRedeemError = (code: AlpcErrorCode) => {\n const redeemModalCopy = pageCommon?.redeemModal\n if (code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n setRedeemError(redeemModalCopy?.redeemLimitError)\n } else if (code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n setRedeemError(redeemModalCopy?.inventoryNotEnough)\n } else if (code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n setRedeemError(redeemModalCopy?.creditsNotEnough)\n } else if (code === AlpcErrorCode.CodeCrossSiteError) {\n setRedeemError(redeemModalCopy?.crossSiteError)\n } else {\n setRedeemError(redeemModalCopy?.commonError)\n }\n }\n\n const inSufficientCredit = useMemo(() => {\n return (\n profile?.activated && Number(item?.alpc?.consumeCredits) > Number(creditInfo?.available_credit || 0)\n )\n }, [profile?.activated, item?.alpc?.consumeCredits, creditInfo?.available_credit])\n\n const soldOut = Number(item?.alpc.remainingInventory) <= 0\n\n const redeemButtonText = useMemo(() => {\n // \u7F3A\u8D27\u6587\u6848\n if (soldOut) {\n return pageCommon?.soldOut || 'Sold Out'\n } else if (!isLogin) {\n return copy.unlockRewards\n } else {\n return copy.redeemBtn\n }\n }, [isLogin, soldOut, copy, pageCommon])\n\n if (!item) return null\n\n return (\n <Container id={id}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} />\n <div\n className={cn(\n 'mt-[24px] flex h-fit w-full items-center bg-[#eaeaec] p-[24px]',\n 'l:flex-col l:gap-[12px] l:p-[12px]',\n 'min-l:flex-row min-l:gap-[64px]',\n !rounded && 'rounded-none',\n rounded && 'rounded-[12px]'\n )}\n >\n {/* Card Image */}\n <div className=\"relative flex h-[200px] w-[304px] shrink-0 items-center justify-center overflow-hidden l:h-auto l:aspect-h-[120] l:aspect-w-[304] l:w-full\">\n {copy.cardImg?.url && (\n <Picture\n className={cn('size-full', rounded && 'rounded-[12px]')}\n source={copy.mCardImg?.url ? `${copy.cardImg.url},${copy.mCardImg.url} 1024` : copy.cardImg.url}\n />\n )}\n </div>\n\n {/* Content Section */}\n <div className=\"flex w-full items-end justify-between l:flex-col l:items-start l:gap-[24px]\">\n {/* Text Content */}\n <div className=\"flex flex-col gap-[20px] l:w-full l:gap-[12px]\">\n <div className=\"flex flex-col gap-[4px]\">\n <Text\n html={copy.cardTitle}\n className=\"text-[32px] font-bold leading-[1.2] text-[#1D1D1F] l:text-[18px]\"\n />\n <Text\n html={copy.cardDesc}\n className=\"text-[18px] font-bold leading-[1.4] text-[#3D3D3F] l:text-[12px]\"\n />\n </div>\n <Text\n html={copy.cardTip}\n className=\"text-[18px] font-bold leading-[1.4] text-[#000] l:text-[12px]\"\n />\n </div>\n\n {/* Button and Links */}\n <div className=\"flex shrink-0 flex-col items-end l:w-full l:items-start\">\n <Button\n variant=\"primary\"\n disabled={inSufficientCredit || soldOut}\n onClick={() => {\n if (!isLogin) {\n openSignUpPopup()\n } else if (!profile?.activated && !authCodeActivate.isActivateSuccess) {\n authCodeActivate.setAutoSendEmail(true)\n authCodeActivate.open()\n } else {\n setShowModal(true)\n }\n }}\n title={inSufficientCredit ? pageCommon.insufficientCredits : redeemButtonText}\n >\n {redeemButtonText}\n </Button>\n {redeemError && (\n <div className=\"mt-[8px] text-[14px] font-bold leading-[1.2] text-[#FFC24D] l:text-[12px]\">\n {redeemError}\n </div>\n )}\n {(copy.viewRedeemHistory || copy.rulesLink) && (\n <div className=\"mt-[18px] flex gap-[16px] text-[18px] font-bold leading-[1.4] l:mt-[12px] l:gap-0 l:text-[14px]\">\n {copy.viewRedeemHistory && (\n <Text\n html={copy.viewRedeemHistory}\n className=\"cursor-pointer text-[#4794EC] font-bold underline\"\n onClick={() => {\n if (!isLogin) {\n openSignUpPopup()\n } else if (!profile?.activated && !authCodeActivate.isActivateSuccess) {\n authCodeActivate.setAutoSendEmail(true)\n authCodeActivate.open()\n } else {\n setOpenMyRewardsModal(true)\n }\n }}\n />\n )}\n {pageCommon.ruleLabel && (\n <Text\n html={pageCommon.ruleLabel}\n className={cn(\n 'cursor-pointer text-[#4794EC] font-bold underline',\n copy.viewRedeemHistory && 'l:ml-[16px]'\n )}\n onClick={() => setRules(copy.rules)}\n />\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {showModal && item && (\n <RedeemVirtualProductModal\n copy={redeemModalCopy}\n onClose={() => {\n setShowModal(false)\n setRedeemError(undefined)\n }}\n item={item}\n onError={handleRedeemError}\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(undefined)}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] 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": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["CreditsGoGift_exports", "__export", "CreditsGoGift", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_react", "import_lib", "import_RedeemVirtualProductModal", "import_useRedeemableList", "import_provider", "import_constants", "import_const", "import_RulesModal", "import_registration", "copy", "id", "showModal", "setShowModal", "redeemError", "setRedeemError", "rules", "setRules", "redeemableList", "useRedeemableList", "pageCommon", "profile", "creditInfo", "setOpenMyRewardsModal", "openSignUpPopup", "authCodeActivate", "brand", "rounded", "isLogin", "redeemModalCopy", "item", "alpcData", "handleRedeemError", "code", "inSufficientCredit", "soldOut", "redeemButtonText", "cn", "RedeemVirtualProductModal", "RulesModal"]
|
|
4
|
+
"sourcesContent": ["import { Container, Heading, Picture, Button, Text } from '@anker-in/headless-ui'\nimport { useMemo, useState } from 'react'\nimport { classNames as cn, gaTrack } from '@anker-in/lib'\n\nimport RedeemVirtualProductModal from '../creditsRedeemList/RedeemVirtualProductModal'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport { useCreditsContext } from '../context/provider'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { CreditsGoGiftCopy } from './type'\nimport { AlpcConsumeType, AlpcErrorCode } from '../context/const'\nimport RulesModal from '../modal/RulesModal'\nimport { useRegistration } from '../../../components/registration'\nimport useMyRewards from '../context/hooks/useMyRewards'\n\nexport const CreditsGoGift = ({ copy, id }: { copy: CreditsGoGiftCopy; id?: string }) => {\n const [showModal, setShowModal] = useState(false)\n const [redeemError, setRedeemError] = useState<string>()\n const [rules, setRules] = useState<string | string[]>()\n const { redeemableList } = useRedeemableList({ consumeType: AlpcConsumeType.ExternalProduct })\n const { pageCommon, profile, creditInfo, setOpenMyRewardsModal, openSignUpPopup, gtm } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isLogin = Object.keys(profile || {}).length > 0\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 const redeemModalCopy = pageCommon?.redeemModal || ({} as any)\n\n const item = useMemo(() => {\n // \u6839\u636E redeemId \u67E5\u8BE2 ExternalProduct \u7684 ALPC \u6570\u636E\n const alpcData = redeemableList.find(item => item.id?.toString() === copy?.redeemId?.toString())\n if (!alpcData) return null\n\n return {\n alpc: {\n id: alpcData.id.toString(),\n consumeCredits: alpcData.consume_credits,\n remainingInventory: alpcData.remaining_inventory,\n isLimited: !!alpcData.is_limited,\n consumeType: alpcData.consume_type,\n showCredit: true,\n title: alpcData.name,\n },\n config: {\n title: copy.cardTitle,\n desc: copy.cardDesc,\n type: copy.type,\n value: copy.value || '',\n rules: copy.rules,\n image: copy.cardImg,\n },\n }\n }, [redeemableList, copy])\n\n const handleRedeemError = (code: AlpcErrorCode) => {\n const redeemModalCopy = pageCommon?.redeemModal\n if (code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n setRedeemError(redeemModalCopy?.redeemLimitError)\n } else if (code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n setRedeemError(redeemModalCopy?.inventoryNotEnough)\n } else if (code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n setRedeemError(redeemModalCopy?.creditsNotEnough)\n } else if (code === AlpcErrorCode.CodeCrossSiteError) {\n setRedeemError(redeemModalCopy?.crossSiteError)\n } else {\n setRedeemError(redeemModalCopy?.commonError)\n }\n }\n\n const inSufficientCredit = useMemo(() => {\n return (\n profile?.activated && Number(item?.alpc?.consumeCredits) > Number(creditInfo?.available_credit || 0)\n )\n }, [profile?.activated, item?.alpc?.consumeCredits, creditInfo?.available_credit])\n\n // \u68C0\u67E5\u7528\u6237\u662F\u5426\u5DF2\u7ECF\u5151\u6362\u8FC7\u8BE5 GoGift\n const hasRedeemed = useMemo(() => {\n if (!isLogin || !item?.alpc?.id) return false\n return myRewards.some(reward => reward.rule_id === Number(item.alpc.id))\n }, [isLogin, item?.alpc?.id, myRewards])\n\n const soldOut = Number(item?.alpc.remainingInventory) <= 0\n\n const redeemButtonText = useMemo(() => {\n // \u7F3A\u8D27\u6587\u6848\n if (soldOut) {\n return pageCommon?.soldOut || 'Sold Out'\n } else if (!isLogin) {\n return copy.unlockRewards\n } else {\n return copy.redeemBtn\n }\n }, [isLogin, soldOut, copy, pageCommon])\n\n if (!item) return null\n\n return (\n <Container id={id}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} />\n <div\n className={cn(\n 'mt-[24px] flex h-fit w-full items-center bg-[#eaeaec] p-[24px]',\n 'l:flex-col l:gap-[12px] l:p-[12px]',\n 'min-l:flex-row min-l:gap-[64px]',\n !rounded && 'rounded-none',\n rounded && 'rounded-[12px]'\n )}\n >\n {/* Card Image */}\n <div className=\"relative flex h-[200px] w-[304px] shrink-0 items-center justify-center overflow-hidden l:h-auto l:aspect-h-[120] l:aspect-w-[304] l:w-full\">\n {copy.cardImg?.url && (\n <Picture\n className={cn('size-full', rounded && 'rounded-[12px]')}\n source={copy.mCardImg?.url ? `${copy.cardImg.url},${copy.mCardImg.url} 1024` : copy.cardImg.url}\n />\n )}\n </div>\n\n {/* Content Section */}\n <div className=\"flex w-full items-end justify-between l:flex-col l:items-start l:gap-[24px]\">\n {/* Text Content */}\n <div className=\"flex flex-col gap-[20px] l:w-full l:gap-[12px]\">\n <div className=\"flex flex-col gap-[4px]\">\n <Text\n html={copy.cardTitle}\n className=\"text-[32px] font-bold leading-[1.2] text-[#1D1D1F] l:text-[18px]\"\n />\n <Text\n html={copy.cardDesc}\n className=\"text-[18px] font-bold leading-[1.4] text-[#3D3D3F] l:text-[12px]\"\n />\n </div>\n <Text\n html={copy.cardTip}\n className=\"text-[18px] font-bold leading-[1.4] text-[#000] l:text-[12px]\"\n />\n </div>\n\n {/* Button and Links */}\n <div className=\"flex shrink-0 flex-col items-end l:w-full l:items-start\">\n <Button\n variant=\"primary\"\n disabled={inSufficientCredit || soldOut || hasRedeemed}\n onClick={() => {\n if (!isLogin) {\n openSignUpPopup()\n } else if (!profile?.activated && !authCodeActivate.isActivateSuccess) {\n authCodeActivate.setAutoSendEmail(true)\n authCodeActivate.open()\n } else {\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: redeemButtonText,\n info: item?.alpc?.id,\n },\n })\n setShowModal(true)\n }\n }}\n title={inSufficientCredit ? pageCommon.insufficientCredits : redeemButtonText}\n >\n {redeemButtonText}\n </Button>\n {redeemError && (\n <div className=\"mt-[8px] text-[14px] font-bold leading-[1.2] text-[#FFC24D] l:text-[12px]\">\n {redeemError}\n </div>\n )}\n {(copy.viewRedeemHistory || copy.rulesLink) && (\n <div className=\"mt-[18px] flex gap-[16px] text-[18px] font-bold leading-[1.4] l:mt-[12px] l:gap-0 l:text-[14px]\">\n {copy.viewRedeemHistory && (\n <Text\n html={copy.viewRedeemHistory}\n className=\"cursor-pointer text-[#4794EC] font-bold underline\"\n onClick={() => {\n if (!isLogin) {\n openSignUpPopup()\n } else if (!profile?.activated && !authCodeActivate.isActivateSuccess) {\n authCodeActivate.setAutoSendEmail(true)\n authCodeActivate.open()\n } else {\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: copy.viewRedeemHistory,\n },\n })\n setOpenMyRewardsModal(true)\n }\n }}\n />\n )}\n {pageCommon.ruleLabel && (\n <Text\n html={pageCommon.ruleLabel}\n className={cn(\n 'cursor-pointer text-[#4794EC] font-bold underline',\n copy.viewRedeemHistory && 'l:ml-[16px]'\n )}\n onClick={() => setRules(copy.rules)}\n />\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {showModal && item && (\n <RedeemVirtualProductModal\n copy={redeemModalCopy}\n onClose={() => {\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: 'close_modal',\n },\n })\n setShowModal(false)\n setRedeemError(undefined)\n }}\n item={item}\n onError={handleRedeemError}\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(undefined)}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] 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": ["CreditsGoGift_exports", "__export", "CreditsGoGift", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_react", "import_lib", "import_RedeemVirtualProductModal", "import_useRedeemableList", "import_provider", "import_constants", "import_const", "import_RulesModal", "import_registration", "import_useMyRewards", "copy", "id", "showModal", "setShowModal", "redeemError", "setRedeemError", "rules", "setRules", "redeemableList", "useRedeemableList", "pageCommon", "profile", "creditInfo", "setOpenMyRewardsModal", "openSignUpPopup", "gtm", "authCodeActivate", "brand", "rounded", "isLogin", "myRewards", "useMyRewards", "redeemModalCopy", "item", "alpcData", "handleRedeemError", "code", "inSufficientCredit", "hasRedeemed", "reward", "soldOut", "redeemButtonText", "cn", "RedeemVirtualProductModal", "RulesModal"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var ee=Object.create;var y=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var oe=Object.getPrototypeOf,ne=Object.prototype.hasOwnProperty;var ae=(e,o)=>{for(var i in o)y(e,i,{get:o[i],enumerable:!0})},F=(e,o,i,C)=>{if(o&&typeof o=="object"||typeof o=="function")for(let c of re(o))!ne.call(e,c)&&c!==i&&y(e,c,{get:()=>o[c],enumerable:!(C=te(o,c))||C.enumerable});return e};var g=(e,o,i)=>(i=e!=null?ee(oe(e)):{},F(o||!e||!e.__esModule?y(i,"default",{value:e,enumerable:!0}):i,e)),ie=e=>F(y({},"__esModule",{value:!0}),e);var de={};ae(de,{CreditsRedeemList:()=>se});module.exports=ie(de);var r=require("react/jsx-runtime"),l=require("@anker-in/headless-ui"),R=g(require("classnames")),d=require("react"),O=g(require("./RedeemCouponModal")),w=g(require("./RedeemProductModal")),H=g(require("./RedeemVirtualProductModal")),$=require("../context/provider"),z=g(require("../context/hooks/useRedeemableList")),a=require("../context/const"),p=require("@anker-in/lib"),B=require("./RedeemableItem"),U=require("../../../constants"),V=g(require("../modal/RulesModal")),j=require("../../../components/registration"),q=require("../context/utils"),J=g(require("../context/hooks/useMyRewards"));const se=({copy:e,id:o})=>{const{profile:i,openSignUpPopup:C,gtm:{pageGroup:c},pageCommon:h,creditInfo:K}=(0,$.useCreditsContext)(),{authCodeActivate:T}=(0,j.useRegistration)(),{brand:k}=(0,p.useHeadlessContext)(),I=U.ROUNDED_BRANDS.includes(k),v=Object.keys(i||{}).length>0,[L,Q]=(0,d.useState)(e.list?.[0]?.label||""),[s,x]=(0,d.useState)(void 0),[N,E]=(0,d.useState)(),{listLoading:W,redeemableList:M,getRedeemableList:A}=(0,z.default)(),{myRewards:P}=(0,J.default)({page:1,pageSize:100,consumeType:a.AlpcConsumeType.ExternalProduct}),f=(0,d.useMemo)(()=>({...h?.redeemModal||{},...e.redeemModal||{}}),[e.redeemModal,h?.redeemModal]),b=(0,d.useMemo)(()=>M.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})),[e.list,L,M]),X=b.map(t=>t.handle),{data:G}=(0,p.useProductsByHandles)({handles:X}),Y=(0,d.useMemo)(()=>(e.list?.find(n=>n.label===L)?.list||[]).filter(n=>b.some(u=>String(u.id)===String(n.id))).map(n=>{const u=b.find(m=>String(m.id)===String(n.id)),_=G?.find(m=>m.handle===u?.handle),D=_?.variants.find(m=>m.sku===u?.sku);if(u?.isLimited&&(!u?.remainingInventory||u.remainingInventory<=0)||u?.consumeType===a.AlpcConsumeType.Product&&(!_||!D))return null;const Z=n.type===a.ConsumeType.GoGift&&v&&P.some(m=>m.rule_id===Number(n.id));return{alpc:b.find(m=>String(m.id)===String(n.id)),config:n,product:_,variant:D,hasRedeemed:Z}}).filter(n=>n!==null),[b,G,v,P]),S=(0,d.useCallback)(t=>{t===a.AlpcErrorCode.CodeLpcRuleInventoryNotEnough&&A()},[A]);return(0,r.jsxs)(l.Container,{id:o,className:(0,R.default)("relative bg-[#F5F5F7]"),children:[(0,r.jsx)(l.Heading,{as:"h2",size:"4",html:e.title}),v&&e.availableCredits&&(0,r.jsx)("p",{className:"mt-[12px] text-[20px] l-xxl:text-[18px] l:text-[16px] font-bold text-[#4A4C56]",children:e.availableCredits.includes("$credits")?(0,r.jsxs)(r.Fragment,{children:[e.availableCredits.split("$credits")[0],(0,r.jsx)("span",{className:(0,p.classNames)("text-brand-color-0",k==="ankersolix"&&"bg-gradient-to-r from-[#2c7ed0] via-[#00a9e1] via-[43%] to-[#00db84] bg-clip-text text-transparent"),children:(0,q.numberFormat)(K?.available_credit||0).toString()}),e.availableCredits.split("$credits")[1]||""]}):e.availableCredits}),(0,r.jsx)(l.Tabs,{shape:I?"rounded":"square",align:"left",className:(0,R.default)("py-[24px] md:justify-center"),value:L.toString(),onValueChange:t=>{Q(t),(0,p.gaTrack)({event:"ga4Event",event_name:"lp_navigation",event_parameters:{navigation:t,page_group:c}})},children:(0,r.jsx)(l.TabsList,{children:(e.list||[]).map(t=>(0,r.jsx)(l.TabsTrigger,{value:t.label,children:t.label},t.label))})}),!!b?.length&&!W&&(0,r.jsx)("div",{className:(0,R.default)("relative grid grid-cols-4 gap-[16px] md:grid-cols-2 md:gap-[12px] md-xl:grid-cols-3"),children:Y?.map(t=>(0,r.jsx)(B.RedeemableItem,{copy:e,item:t,onRedeem:n=>{v?!i?.activated&&!T.isActivateSuccess?(T.setAutoSendEmail(!0),T.open()):x(n):C()},onRulesOpen:E},t?.alpc?.id))}),(s?.config?.type===a.ConsumeType.Coupon||s?.config?.type===a.ConsumeType.ShippingCoupon)&&f?.coupon&&s&&(0,r.jsx)(O.default,{item:s,copy:f,onError:S,onClose:()=>{x(void 0)}}),s?.config?.type===a.ConsumeType.Product&&f?.product&&s&&(0,r.jsx)(w.default,{item:s,copy:f,onError:S,onClose:()=>{x(void 0)}}),(s?.config?.type===a.ConsumeType.GiftCard||s?.config?.type===a.ConsumeType.GoGift)&&f?.virtualProduct&&s&&(0,r.jsx)(H.default,{item:s,copy:f,onError:S,onClose:()=>{x(void 0)}}),N&&(0,r.jsx)(V.default,{overlayClassName:"md:px-[16px] md:items-center",className:(0,p.classNames)("md:h-fit md:rounded-b-[16px]",!I&&"md:rounded-none"),isOpen:N.length>0,onClose:()=>E([]),titleClassName:"border-b-transparent h-[56px]",rules:N,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'\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 } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isLogin = Object.keys(profile || {}).length > 0\n\n const [activeTab, setActiveTab] = useState<string>(copy.list?.[0]?.label || '')\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 // \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 }, [copy.list, activeTab, redeemableList])\n\n const handles = alpcList.map(item => item.handle)\n const { data: products } = useProductsByHandles({ handles })\n\n const list = useMemo(() => {\n const currentList = copy.list?.find(item => item.label === activeTab)\n return (currentList?.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 return {\n alpc: alpcList.find(alpcItem => String(alpcItem.id) === String(item.id)),\n config: item,\n product,\n variant,\n }\n })\n .filter(item => item !== null) as unknown as RedeemableItemType[]\n }, [alpcList, products])\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).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 value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(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 </Tabs>\n {/* PC\u7AEF */}\n {!!alpcList?.length && !listLoading && (\n <div\n className={classNames('relative grid grid-cols-4 gap-[16px] md:grid-cols-2 md:gap-[12px] md-xl:grid-cols-3')}\n >\n {list?.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\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": "
|
|
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", "copy", "id", "profile", "openSignUpPopup", "pageGroup", "pageCommon", "creditInfo", "authCodeActivate", "brand", "rounded", "isLogin", "activeTab", "setActiveTab", "popRedeemData", "setPopRedeemData", "rules", "setRules", "listLoading", "redeemableList", "getRedeemableList", "useRedeemableList", "redeemModalCopy", "alpcList", "item", "handles", "products", "list", "alpcItem", "product", "variant", "handleRedeemError", "errorCode", "classNames", "cn", "value", "RedeemCouponModal", "RedeemProductModal", "RedeemVirtualProductModal", "RulesModal"]
|
|
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 } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isLogin = Object.keys(profile || {}).length > 0\n\n const [activeTab, setActiveTab] = useState<string>(copy.list?.[0]?.label || '')\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 }, [copy.list, activeTab, redeemableList])\n\n const handles = alpcList.map(item => item.handle)\n const { data: products } = useProductsByHandles({ handles })\n\n const list = useMemo(() => {\n const currentList = copy.list?.find(item => item.label === activeTab)\n return (currentList?.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: alpcList.find(alpcItem => String(alpcItem.id) === String(item.id)),\n config: item,\n product,\n variant,\n hasRedeemed,\n }\n })\n .filter(item => item !== null) as unknown as RedeemableItemType[]\n }, [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).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 value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(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 </Tabs>\n {/* PC\u7AEF */}\n {!!alpcList?.length && !listLoading && (\n <div\n className={classNames('relative grid grid-cols-4 gap-[16px] md:grid-cols-2 md:gap-[12px] md-xl:grid-cols-3')}\n >\n {list?.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\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", "rounded", "isLogin", "activeTab", "setActiveTab", "popRedeemData", "setPopRedeemData", "rules", "setRules", "listLoading", "redeemableList", "getRedeemableList", "useRedeemableList", "myRewards", "useMyRewards", "redeemModalCopy", "alpcList", "item", "handles", "products", "list", "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 f=Object.create;var i=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var N=(e,t)=>{for(var a in t)i(e,a,{get:t[a],enumerable:!0})},c=(e,t,a,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of b(t))!h.call(e,s)&&s!==a&&i(e,s,{get:()=>t[s],enumerable:!(m=g(t,s))||m.enumerable});return e};var C=(e,t,a)=>(a=e!=null?f(P(e)):{},c(t||!e||!e.__esModule?i(a,"default",{value:e,enumerable:!0}):a,e)),_=e=>c(i({},"__esModule",{value:!0}),e);var T={};N(T,{VirtualProductSuccess:()=>w});module.exports=_(T);var o=require("react/jsx-runtime"),l=require("@anker-in/headless-ui"),u=C(require("classnames")),r=require("@anker-in/lib"),d=require("../RedeemProductModal/NonProductValue"),n=require("../../context/provider");const w=({item:e,copy:t,disabled:a,onClose:m})=>{const{locale:s}=(0,r.useHeadlessContext)(),{pageCommon:p,profile:x,gtm:v}=(0,n.useCreditsContext)();return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:(0,u.default)("max-h-[500px] overflow-y-auto bg-[#F5F5F7] px-[48px] pb-[24px] md:max-h-[400px] md:px-[16px]"),children:(0,o.jsxs)("div",{className:"relative mx-auto h-[164px] w-[324px]",children:[p?.imageMapping?.[e.config?.type]?.url&&(0,o.jsx)(l.Picture,{source:p.imageMapping[e.config.type].url,className:"h-full [&_img]:h-full"}),(0,o.jsx)("div",{className:"absolute bottom-[8px] left-[16px] font-extrabold text-white",children:e.config.value?(0,o.jsx)(d.NoneProductValue,{item:e}):(0,o.jsx)(l.Text,{size:3,html:e.alpc?.title})})]})}),(0,o.jsxs)("div",{className:"bg-white px-[48px] pt-[24px] text-center md:px-[16px]",children:[(0,o.jsxs)("div",{className:"flex flex-col",children:[(0,o.jsx)(l.Text,{className:"mb-[4px] text-[24px] font-bold leading-[1.2] md:text-[20px]",html:t.virtualProduct.successTitle}),(0,o.jsx)(l.Text,{className:"text-[16px] font-bold leading-[1.4] text-[#6D6D6F] md:text-[14px]",html:t.virtualProduct.successDesc})]}),(0,o.jsx)(l.Button,{variant:"primary",size:"lg",className:"mt-[16px] w-full",onClick:()=>{(0,r.gaTrack)({event:"ga4Event",event_name:"lp_button",member_active_status:x?.activated?"active":"not active",event_parameters:{page_group:v.pageGroup,position:"redeem virtual product modal",button_name:t.virtualProduct.successButton}}),window.location.href=t.virtualProduct.successButtonUrl||`/${s}`,m()},disabled:a,children:t.virtualProduct.successButton})]})]})};
|
|
2
2
|
//# sourceMappingURL=VirtualProductSuccess.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/components/credits/creditsRedeemList/RedeemVirtualProductModal/VirtualProductSuccess.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Button, Picture, Text } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport type { RedeemModalCommon, RedeemableItem as RedeemableItemType } from '../../type'\nimport { NoneProductValue } from '../RedeemProductModal/NonProductValue'\nimport { useCreditsContext } from '../../context/provider'\n\ntype VirtualProductSuccessProps = {\n item: RedeemableItemType\n copy: RedeemModalCommon\n disabled: boolean\n onClose: () => void\n}\n\nexport const VirtualProductSuccess = ({ item, copy, disabled, onClose }: VirtualProductSuccessProps) => {\n const { locale } = useHeadlessContext()\n const { pageCommon } = useCreditsContext()\n\n return (\n <>\n <div\n className={classNames(\n 'max-h-[500px] overflow-y-auto bg-[#F5F5F7] px-[48px] pb-[24px] md:max-h-[400px] md:px-[16px]'\n )}\n >\n <div className=\"relative mx-auto h-[164px] w-[324px]\">\n {pageCommon?.imageMapping?.[item.config?.type]?.url && (\n <Picture source={pageCommon.imageMapping[item.config.type].url} className=\"h-full [&_img]:h-full\" />\n )}\n <div className=\"absolute bottom-[8px] left-[16px] font-extrabold text-white\">\n {item.config.value ? (\n <NoneProductValue item={item} />\n ) : (\n <Text size={3} html={item.alpc?.title} />\n )}\n </div>\n </div>\n </div>\n <div className=\"bg-white px-[48px] pt-[24px] text-center md:px-[16px]\">\n <div className=\"flex flex-col\">\n <Text\n className=\"mb-[4px] text-[24px] font-bold leading-[1.2] md:text-[20px]\"\n html={copy.virtualProduct.successTitle}\n ></Text>\n <Text\n className=\"text-[16px] font-bold leading-[1.4] text-[#6D6D6F] md:text-[14px]\"\n html={copy.virtualProduct.successDesc}\n ></Text>\n </div>\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full\"\n onClick={() => {\n window.location.href = copy.virtualProduct.successButtonUrl || `/${locale}`\n onClose()\n }}\n disabled={disabled}\n >\n {copy.virtualProduct.successButton}\n </Button>\n </div>\n </>\n )\n}\n"],
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAmBI,IAAAI,EAAA,6BAnBJC,EAAsC,iCACtCC,EAAuB,yBACvBC,
|
|
6
|
-
"names": ["VirtualProductSuccess_exports", "__export", "VirtualProductSuccess", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_classnames", "import_lib", "import_NonProductValue", "import_provider", "item", "copy", "disabled", "onClose", "locale", "pageCommon", "classNames"]
|
|
4
|
+
"sourcesContent": ["import { Button, Picture, Text } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { gaTrack, useHeadlessContext } from '@anker-in/lib'\nimport type { RedeemModalCommon, RedeemableItem as RedeemableItemType } from '../../type'\nimport { NoneProductValue } from '../RedeemProductModal/NonProductValue'\nimport { useCreditsContext } from '../../context/provider'\n\ntype VirtualProductSuccessProps = {\n item: RedeemableItemType\n copy: RedeemModalCommon\n disabled: boolean\n onClose: () => void\n}\n\nexport const VirtualProductSuccess = ({ item, copy, disabled, onClose }: VirtualProductSuccessProps) => {\n const { locale } = useHeadlessContext()\n const { pageCommon, profile, gtm } = useCreditsContext()\n\n return (\n <>\n <div\n className={classNames(\n 'max-h-[500px] overflow-y-auto bg-[#F5F5F7] px-[48px] pb-[24px] md:max-h-[400px] md:px-[16px]'\n )}\n >\n <div className=\"relative mx-auto h-[164px] w-[324px]\">\n {pageCommon?.imageMapping?.[item.config?.type]?.url && (\n <Picture source={pageCommon.imageMapping[item.config.type].url} className=\"h-full [&_img]:h-full\" />\n )}\n <div className=\"absolute bottom-[8px] left-[16px] font-extrabold text-white\">\n {item.config.value ? (\n <NoneProductValue item={item} />\n ) : (\n <Text size={3} html={item.alpc?.title} />\n )}\n </div>\n </div>\n </div>\n <div className=\"bg-white px-[48px] pt-[24px] text-center md:px-[16px]\">\n <div className=\"flex flex-col\">\n <Text\n className=\"mb-[4px] text-[24px] font-bold leading-[1.2] md:text-[20px]\"\n html={copy.virtualProduct.successTitle}\n ></Text>\n <Text\n className=\"text-[16px] font-bold leading-[1.4] text-[#6D6D6F] md:text-[14px]\"\n html={copy.virtualProduct.successDesc}\n ></Text>\n </div>\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full\"\n onClick={() => {\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: 'redeem virtual product modal',\n button_name: copy.virtualProduct.successButton,\n },\n })\n window.location.href = copy.virtualProduct.successButtonUrl || `/${locale}`\n onClose()\n }}\n disabled={disabled}\n >\n {copy.virtualProduct.successButton}\n </Button>\n </div>\n </>\n )\n}\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAmBI,IAAAI,EAAA,6BAnBJC,EAAsC,iCACtCC,EAAuB,yBACvBC,EAA4C,yBAE5CC,EAAiC,iDACjCC,EAAkC,kCAS3B,MAAMP,EAAwB,CAAC,CAAE,KAAAQ,EAAM,KAAAC,EAAM,SAAAC,EAAU,QAAAC,CAAQ,IAAkC,CACtG,KAAM,CAAE,OAAAC,CAAO,KAAI,sBAAmB,EAChC,CAAE,WAAAC,EAAY,QAAAC,EAAS,IAAAC,CAAI,KAAI,qBAAkB,EAEvD,SACE,oBACE,oBAAC,OACC,aAAW,EAAAC,SACT,8FACF,EAEA,oBAAC,OAAI,UAAU,uCACZ,UAAAH,GAAY,eAAeL,EAAK,QAAQ,IAAI,GAAG,QAC9C,OAAC,WAAQ,OAAQK,EAAW,aAAaL,EAAK,OAAO,IAAI,EAAE,IAAK,UAAU,wBAAwB,KAEpG,OAAC,OAAI,UAAU,8DACZ,SAAAA,EAAK,OAAO,SACX,OAAC,oBAAiB,KAAMA,EAAM,KAE9B,OAAC,QAAK,KAAM,EAAG,KAAMA,EAAK,MAAM,MAAO,EAE3C,GACF,EACF,KACA,QAAC,OAAI,UAAU,wDACb,qBAAC,OAAI,UAAU,gBACb,oBAAC,QACC,UAAU,8DACV,KAAMC,EAAK,eAAe,aAC3B,KACD,OAAC,QACC,UAAU,oEACV,KAAMA,EAAK,eAAe,YAC3B,GACH,KACA,OAAC,UACC,QAAQ,UACR,KAAK,KACL,UAAU,mBACV,QAAS,IAAM,IACb,WAAQ,CACN,MAAO,WACP,WAAY,YACZ,qBAAsBK,GAAS,UAAY,SAAW,aACtD,iBAAkB,CAChB,WAAYC,EAAI,UAChB,SAAU,+BACV,YAAaN,EAAK,eAAe,aACnC,CACF,CAAC,EACD,OAAO,SAAS,KAAOA,EAAK,eAAe,kBAAoB,IAAIG,CAAM,GACzED,EAAQ,CACV,EACA,SAAUD,EAET,SAAAD,EAAK,eAAe,cACvB,GACF,GACF,CAEJ",
|
|
6
|
+
"names": ["VirtualProductSuccess_exports", "__export", "VirtualProductSuccess", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_classnames", "import_lib", "import_NonProductValue", "import_provider", "item", "copy", "disabled", "onClose", "locale", "pageCommon", "profile", "gtm", "classNames"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var C=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var B=(t,e)=>{for(var d in e)C(t,d,{get:e[d],enumerable:!0})},z=(t,e,d,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of V(e))!k.call(t,s)&&s!==d&&C(t,s,{get:()=>e[s],enumerable:!(l=A(e,s))||l.enumerable});return t};var J=t=>z(C({},"__esModule",{value:!0}),t);var H={};B(H,{default:()=>q});module.exports=J(H);var a=require("react/jsx-runtime"),R=require("@anker-in/headless-ui"),n=require("react"),M=require("../context/provider"),I=require("../context/hooks/useRedeemGoGift"),S=require("../context/hooks/useRedeemProduct"),i=require("../context/const"),y=require("../modal/ModalContainer"),P=require("@anker-in/lib"),L=require("./RedeemVirtualProductModal/VirtualProductInit"),F=require("./RedeemVirtualProductModal/VirtualProductSuccess");function U({item:t,copy:e,onError:d,...l}){const[s,c]=(0,n.useState)(),[b,m]=(0,n.useState)(),[x,u]=(0,n.useState)(!1),{profile:o,fetchCreditInfo:p,gtm:E}=(0,M.useCreditsContext)(),g=t.config?.type===i.ConsumeType.GoGift,v=t.config?.type===i.ConsumeType.GiftCard,{isMutating:T,trigger:N}=(0,I.useRedeemGoGift)({onSuccess(r){if(!r){m(e?.commonError);return}r?.data?.id?(c(r.data.id),p(o?.user_id)):h(r.code)},onError(r){m(r.message||e?.commonError)}}),{isMutating:O,trigger:G}=(0,S.useRedeemProduct)({onSuccess(r){if(!r){m(e?.commonError);return}r?.code===0?(c("success"),p(o?.user_id)):h(r.code)},onError(){m(e?.commonError)}}),_=g?T:O,h=r=>{let f;r===i.AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit?(f=e?.redeemLimitError,u(!0)):r===i.AlpcErrorCode.CodeLpcRuleInventoryNotEnough?(f=e?.inventoryNotEnough,u(!0)):r===i.AlpcErrorCode.CodeLpcNotEnoughCredits?(f=e?.creditsNotEnough,u(!0),p(o?.user_id)):r===i.AlpcErrorCode.CodeCrossSiteError&&(f=e?.crossSiteError,u(!0)),m(f||e?.commonError||""),d&&d(r)},w=(0,n.useCallback)(async()=>{if(m(""),(0,P.gaTrack)({event:"ga4Event",event_name:"lp_button",member_active_status:o?.activated?"active":"not active",event_parameters:{page_group:E.pageGroup,position:"redeem virtual product modal",button_name:e.confirmButton,info:t.alpc?.id}}),g)N({user_id:o?.user_id,rule_id:Number(t.alpc?.id)});else if(v){const r={email:o?.email||"",firstName:o?.firstName||"",lastName:o?.lastName||"",address1:"Default Address",city:"Default City",province:"Default Province",country:"US",zip:"00000"};G({address:btoa(JSON.stringify(r)),rule_id:Number(t.alpc?.id)})}},[t,o,N,G,g,v,e.confirmButton,E.pageGroup]);return(0,n.useEffect)(()=>()=>{u(!1),m(""),c(void 0)},[]),(0,a.jsxs)(y.CreditsModalContainer,{...l,isOpen:!!t,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] min-l:px-0 md:mb-[24px] px-0",titleClassName:"h-[56px] bg-[#F5F5F7]",children:[s&&!_?(0,a.jsx)(F.VirtualProductSuccess,{item:t,copy:e,disabled:x,onClose:l.onClose}):(0,a.jsx)(L.VirtualProductInit,{item:t,copy:e,loading:_,disabled:x,onConfirm:w}),b&&(0,a.jsx)("div",{className:"mx-auto max-w-full bg-white px-[48px] py-[12px] text-center text-[#FF0000] md:px-[16px]",children:(0,a.jsx)(R.Text,{className:"text-[14px] font-semibold text-[#1F2021]",html:b})})]})}var q=U;
|
|
2
2
|
//# sourceMappingURL=RedeemVirtualProductModal.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/creditsRedeemList/RedeemVirtualProductModal.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Text } from '@anker-in/headless-ui'\nimport { useCallback, useEffect, useState } from 'react'\nimport type { ModalContainerProps } from '../modal/ModalContainer'\nimport { useCreditsContext } from '../context/provider'\nimport { useRedeemGoGift } from '../context/hooks/useRedeemGoGift'\nimport { useRedeemProduct } from '../context/hooks/useRedeemProduct'\nimport { AlpcErrorCode, ConsumeType } from '../context/const'\nimport { CreditsModalContainer } from '../modal/ModalContainer'\nimport type { RedeemableItem as RedeemableItemType, RedeemModalCommon } from '../type'\nimport {
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,
|
|
6
|
-
"names": ["RedeemVirtualProductModal_exports", "__export", "RedeemVirtualProductModal_default", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_react", "import_provider", "import_useRedeemGoGift", "import_useRedeemProduct", "import_const", "import_ModalContainer", "import_VirtualProductInit", "import_VirtualProductSuccess", "RedeemVirtualProductModal", "item", "copy", "onError", "props", "giftCardId", "setGiftCardId", "errorInfo", "setErrorInfo", "disabled", "setDisabled", "profile", "fetchCreditInfo", "isGoGift", "isGiftCard", "goGiftLoading", "triggerGoGift", "responseData", "handleRedeemError", "error", "productLoading", "triggerProduct", "loading", "code", "errorMsg", "handleConfirm", "defaultAddress"]
|
|
4
|
+
"sourcesContent": ["import { Text } from '@anker-in/headless-ui'\nimport { useCallback, useEffect, useState } from 'react'\nimport type { ModalContainerProps } from '../modal/ModalContainer'\nimport { useCreditsContext } from '../context/provider'\nimport { useRedeemGoGift } from '../context/hooks/useRedeemGoGift'\nimport { useRedeemProduct } from '../context/hooks/useRedeemProduct'\nimport { AlpcErrorCode, ConsumeType } from '../context/const'\nimport { CreditsModalContainer } from '../modal/ModalContainer'\nimport type { RedeemableItem as RedeemableItemType, RedeemModalCommon } from '../type'\nimport { gaTrack } from '@anker-in/lib'\nimport { VirtualProductInit } from './RedeemVirtualProductModal/VirtualProductInit'\nimport { VirtualProductSuccess } from './RedeemVirtualProductModal/VirtualProductSuccess'\n\nfunction RedeemVirtualProductModal({\n item,\n copy,\n onError,\n ...props\n}: Omit<ModalContainerProps, 'isOpen'> & {\n item: RedeemableItemType\n copy: RedeemModalCommon\n onError: (code: number) => void\n}) {\n const [giftCardId, setGiftCardId] = useState<string>()\n const [errorInfo, setErrorInfo] = useState<string>()\n\n const [disabled, setDisabled] = useState(false)\n\n const { profile, fetchCreditInfo, gtm } = useCreditsContext()\n\n // \u5224\u65AD\u662F GoGift \u8FD8\u662F GiftCard \u7C7B\u578B\n const isGoGift = item.config?.type === ConsumeType.GoGift\n const isGiftCard = item.config?.type === ConsumeType.GiftCard\n\n // GoGift \u4F7F\u7528\u4E13\u7528\u63A5\u53E3\n const { isMutating: goGiftLoading, trigger: triggerGoGift } = useRedeemGoGift({\n onSuccess(responseData) {\n if (!responseData) {\n setErrorInfo(copy?.commonError)\n return\n }\n\n if (responseData?.data?.id) {\n setGiftCardId(responseData.data.id)\n fetchCreditInfo(profile?.user_id)\n } else {\n handleRedeemError(responseData.code)\n }\n },\n onError(error) {\n setErrorInfo(error.message || copy?.commonError)\n },\n })\n\n // GiftCard \u4F7F\u7528 Product \u63A5\u53E3\uFF0C\u4F46\u4E0D\u9700\u8981\u5730\u5740\n const { isMutating: productLoading, trigger: triggerProduct } = useRedeemProduct({\n onSuccess(responseData) {\n if (!responseData) {\n setErrorInfo(copy?.commonError)\n return\n }\n\n if (responseData?.code === 0) {\n setGiftCardId('success')\n fetchCreditInfo(profile?.user_id)\n } else {\n handleRedeemError(responseData.code)\n }\n },\n onError() {\n setErrorInfo(copy?.commonError)\n },\n })\n\n const loading = isGoGift ? goGiftLoading : productLoading\n\n const handleRedeemError = (code: number) => {\n let errorMsg: string | undefined\n if (code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n errorMsg = copy?.redeemLimitError\n setDisabled(true)\n } else if (code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n errorMsg = copy?.inventoryNotEnough\n setDisabled(true)\n } else if (code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n errorMsg = copy?.creditsNotEnough\n setDisabled(true)\n fetchCreditInfo(profile?.user_id)\n } else if (code === AlpcErrorCode.CodeCrossSiteError) {\n errorMsg = copy?.crossSiteError\n setDisabled(true)\n }\n\n setErrorInfo(errorMsg || copy?.commonError || '')\n onError && onError(code)\n }\n\n const handleConfirm = useCallback(async () => {\n setErrorInfo('')\n\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: 'redeem virtual product modal',\n button_name: copy.confirmButton,\n info: item.alpc?.id,\n },\n })\n\n if (isGoGift) {\n // GoGift \u7C7B\u578B\u4F7F\u7528\u4E13\u7528\u63A5\u53E3\n triggerGoGift({\n user_id: profile?.user_id,\n rule_id: Number(item.alpc?.id),\n })\n } else if (isGiftCard) {\n // GiftCard \u7C7B\u578B\u4F7F\u7528 Product \u63A5\u53E3\uFF0C\u4F20\u9012\u9ED8\u8BA4\u5730\u5740\n const defaultAddress = {\n email: profile?.email || '',\n firstName: profile?.firstName || '',\n lastName: profile?.lastName || '',\n address1: 'Default Address',\n city: 'Default City',\n province: 'Default Province',\n country: 'US',\n zip: '00000',\n }\n triggerProduct({\n address: btoa(JSON.stringify(defaultAddress)),\n rule_id: Number(item.alpc?.id),\n })\n }\n }, [item, profile, triggerGoGift, triggerProduct, isGoGift, isGiftCard, copy.confirmButton, gtm.pageGroup])\n\n useEffect(() => {\n return () => {\n setDisabled(false)\n setErrorInfo('')\n setGiftCardId(undefined)\n }\n }, [])\n\n return (\n <CreditsModalContainer\n {...props}\n isOpen={!!item}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-0 md:mb-[24px] px-0\"\n titleClassName=\"h-[56px] bg-[#F5F5F7]\"\n >\n {giftCardId && !loading ? (\n <VirtualProductSuccess item={item} copy={copy} disabled={disabled} onClose={props.onClose} />\n ) : (\n <VirtualProductInit item={item} copy={copy} loading={loading} disabled={disabled} onConfirm={handleConfirm} />\n )}\n {errorInfo && (\n <div className=\"mx-auto max-w-full bg-white px-[48px] py-[12px] text-center text-[#FF0000] md:px-[16px]\">\n <Text className=\"text-[14px] font-semibold text-[#1F2021]\" html={errorInfo} />\n </div>\n )}\n </CreditsModalContainer>\n )\n}\n\nexport default RedeemVirtualProductModal\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["RedeemVirtualProductModal_exports", "__export", "RedeemVirtualProductModal_default", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_react", "import_provider", "import_useRedeemGoGift", "import_useRedeemProduct", "import_const", "import_ModalContainer", "import_lib", "import_VirtualProductInit", "import_VirtualProductSuccess", "RedeemVirtualProductModal", "item", "copy", "onError", "props", "giftCardId", "setGiftCardId", "errorInfo", "setErrorInfo", "disabled", "setDisabled", "profile", "fetchCreditInfo", "gtm", "isGoGift", "isGiftCard", "goGiftLoading", "triggerGoGift", "responseData", "handleRedeemError", "error", "productLoading", "triggerProduct", "loading", "code", "errorMsg", "handleConfirm", "defaultAddress"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var P=Object.create;var x=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var L=(t,l)=>{for(var e in l)x(t,e,{get:l[e],enumerable:!0})},_=(t,l,e,u)=>{if(l&&typeof l=="object"||typeof l=="function")for(let r of $(l))!E.call(t,r)&&r!==e&&x(t,r,{get:()=>l[r],enumerable:!(u=S(l,r))||u.enumerable});return t};var D=(t,l,e)=>(e=t!=null?P(z(t)):{},_(l||!t||!t.__esModule?x(e,"default",{value:t,enumerable:!0}):e,t)),O=t=>_(x({},"__esModule",{value:!0}),t);var A={};L(A,{RedeemableItem:()=>F});module.exports=O(A);var a=require("react/jsx-runtime"),n=require("@anker-in/headless-ui"),f=require("react"),v=D(require("classnames")),N=require("../context/provider"),o=require("../context/const"),d=require("../context/utils"),c=require("@anker-in/lib"),
|
|
1
|
+
"use strict";var P=Object.create;var x=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var L=(t,l)=>{for(var e in l)x(t,e,{get:l[e],enumerable:!0})},_=(t,l,e,u)=>{if(l&&typeof l=="object"||typeof l=="function")for(let r of $(l))!E.call(t,r)&&r!==e&&x(t,r,{get:()=>l[r],enumerable:!(u=S(l,r))||u.enumerable});return t};var D=(t,l,e)=>(e=t!=null?P(z(t)):{},_(l||!t||!t.__esModule?x(e,"default",{value:t,enumerable:!0}):e,t)),O=t=>_(x({},"__esModule",{value:!0}),t);var A={};L(A,{RedeemableItem:()=>F});module.exports=O(A);var a=require("react/jsx-runtime"),n=require("@anker-in/headless-ui"),f=require("react"),v=D(require("classnames")),N=require("../context/provider"),o=require("../context/const"),d=require("../context/utils"),c=require("@anker-in/lib"),R=require("./NonProductValue"),C=require("../../../constants");function F({copy:t,className:l,item:e,onRulesOpen:u,onRedeem:r}){const{creditInfo:b,profile:i,gtm:{pageGroup:h,pageHandle:p},pageCommon:s}=(0,N.useCreditsContext)(),{brand:T}=(0,c.useHeadlessContext)(),m=Object.keys(i||{}).length>0,w=C.ROUNDED_BRANDS.includes(T),I=(0,f.useMemo)(()=>!!(e.hasRedeemed||e.alpc?.remainingInventory<=0&&e.alpc?.isLimited||e.alpc?.consumeType===o.AlpcConsumeType.Product&&!e.variant?.availableForSale||m&&i?.activated&&e.alpc?.consumeCredits>Number(b?.available_credit||0)),[e.hasRedeemed,e.alpc?.remainingInventory,e.alpc?.isLimited,e.alpc?.consumeType,e.alpc?.consumeCredits,m,i?.activated,b?.available_credit,e.variant?.availableForSale]),y=(0,f.useMemo)(()=>m?e.alpc?.consumeType===o.AlpcConsumeType.Product?e.variant?.availableForSale?t.btnRedeem:s?.soldOut||"Sold Out":t.btnRedeem:t.unlockRewards,[m,e.alpc?.consumeType,e.variant?.availableForSale,t.btnRedeem,t.unlockRewards,s?.soldOut]),k=(0,f.useMemo)(()=>{if(!(e.config?.type!==o.ConsumeType.Product||!e.product?.handle))return(0,d.extractVariantId)(e.variant?.id)?`/products/${e.product.handle}?variant=${(0,d.extractVariantId)(e.variant?.id)}${p?`&ref=${p}`:""}`:`/products/${e.product.handle}${p?`?ref=${p}`:""}`},[e.config?.type,e.product?.handle,e.variant?.id,p]);return(0,a.jsxs)("div",{className:(0,v.default)("flex flex-col items-center rounded-[16px] bg-[#EAEAEC] p-[24px] md:rounded-[12px] md:px-[8px] xl:py-[16px] md-xl:px-[16px]",!w&&"rounded-none md:rounded-none",l),children:[e.config?.type===o.ConsumeType.Product?(0,a.jsx)("a",{href:k,className:(0,v.default)("relative mx-auto h-[224px] w-fit md:my-[10px] l:h-[120px] l-xxl:h-[138px]"),children:(0,a.jsx)(n.Picture,{className:"h-full w-auto [&_img]:h-full [&_img]:object-contain",source:e.config?.image?.url||e.product?.images?.[0]?.url})}):(0,a.jsxs)("div",{className:"relative mx-auto my-[30px] h-[164px] md:my-0 md:h-[66px] l-xxl:h-[138px] md-l:h-[80px]",children:[(0,a.jsx)(n.Picture,{source:s?.imageMapping?.[e.config?.type]?.url,className:"h-full [&_img]:h-full [&_img]:w-auto [&_img]:object-contain"}),(0,a.jsx)(R.NoneProductValue,{item:e})]}),(0,a.jsxs)("div",{className:(0,v.default)("mt-[10px] xl:mt-[8px] flex w-full flex-1 flex-col justify-between"),children:[(0,a.jsx)(n.Text,{html:e.config?.title||e.alpc?.title,title:e.config?.title||e.alpc?.title,size:2,className:"line-clamp-2 h-[58px] text-[24px] leading-[1.2] l:h-[40px] l:text-[16px] l-xxl:h-[48px] l-xxl:text-[20px]"}),e.config?.rules?.length>0&&(0,a.jsx)("button",{type:"button",onClick:()=>{u(e.config?.rules||[]),(0,c.gaTrack)({event:"ga4Event",event_name:"lp_button",member_active_status:i?.activated?"active":"not active",event_parameters:{page_group:h,position:t.title,button_name:s?.ruleLabel,info:e.alpc?.id?.toString()}})},className:"mt-[8px] w-fit text-[16px] font-bold underline md:text-[14px] l:mt-0",tabIndex:0,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&g.preventDefault()},children:s?.ruleLabel}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"mt-[26px] flex items-center l:mt-[12px] l-xl:mt-[16px]",children:[(0,a.jsx)(n.Picture,{className:"size-[24px] l-xxl:size-[22px] md-l:size-[18px] md:size-[16px]",source:"https://cdn.shopify.com/s/files/1/0511/6346/3874/files/icon_hire_purchase.png?v=1757496783"}),(0,a.jsx)(n.Text,{html:`${(0,d.numberFormat)(e.alpc?.consumeCredits)}`,size:2,as:"p",className:"ml-[4px] text-[24px] font-bold mt-[4px] leading-none l-xxl:text-[20px] l:text-[16px] "})]}),(0,a.jsx)(n.Button,{disabled:I,variant:"primary",size:"lg",className:"mt-[8px] md:px-[8px] l:w-full",onClick:()=>{r(e),(0,c.gaTrack)({event:"ga4Event",event_name:"lp_button",member_active_status:i?.activated?"active":"not active",event_parameters:{page_group:h,position:t.title,button_name:y,info:e.alpc?.id?.toString()}})},children:y})]})]})]})}
|
|
2
2
|
//# sourceMappingURL=RedeemableItem.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/credits/creditsRedeemList/RedeemableItem.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Button, Text, Picture } from '@anker-in/headless-ui'\n\nimport { useMemo } from 'react'\n\nimport classNames from 'classnames'\nimport { useCreditsContext } from '../context/provider'\nimport type { RedeemableItem as RedeemableItemType } from '../type'\nimport { AlpcConsumeType, ConsumeType } from '../context/const'\nimport { numberFormat, extractVariantId } from '../context/utils'\nimport type { CreditsRedeemListCopy } from './type'\nimport { gaTrack, useHeadlessContext } from '@anker-in/lib'\nimport { NoneProductValue } from './NonProductValue'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport function RedeemableItem({\n copy,\n className,\n item,\n onRulesOpen,\n onRedeem,\n}: {\n copy: CreditsRedeemListCopy\n className?: string\n item: RedeemableItemType\n onRulesOpen: (rules: string[]) => void\n onRedeem: (item: RedeemableItemType) => void\n}) {\n const {\n creditInfo,\n profile,\n gtm: { pageGroup, pageHandle },\n pageCommon,\n } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const isLogin = Object.keys(profile || {}).length > 0\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isDisabled = useMemo(() => {\n if (item.alpc?.remainingInventory <= 0 && item.alpc?.isLimited) {\n // \u6709\u5E93\u5B58\u9650\u5236\n return true\n }\n\n if (item.alpc?.consumeType === AlpcConsumeType.Product) {\n if (!item.variant?.availableForSale) {\n return true\n }\n }\n if (isLogin && profile?.activated && item.alpc?.consumeCredits > Number(creditInfo?.available_credit || 0)) {\n return true\n }\n return false\n }, [\n item.alpc?.remainingInventory,\n item.alpc?.isLimited,\n item.alpc?.consumeType,\n item.alpc?.consumeCredits,\n isLogin,\n profile?.activated,\n creditInfo?.available_credit,\n item.variant?.availableForSale,\n ])\n\n const redeemButtonText = useMemo(() => {\n if (!isLogin) {\n return copy.unlockRewards\n }\n\n // \u7F3A\u8D27\u6587\u6848\n if (item.alpc?.consumeType === AlpcConsumeType.Product) {\n return item.variant?.availableForSale ? copy.btnRedeem : pageCommon?.soldOut || 'Sold Out'\n }\n return copy.btnRedeem\n }, [\n isLogin,\n item.alpc?.consumeType,\n item.variant?.availableForSale,\n copy.btnRedeem,\n copy.unlockRewards,\n pageCommon?.soldOut,\n ])\n\n // \u751F\u6210\u4EA7\u54C1 listing \u9875\u9762\u94FE\u63A5\n const productUrl = useMemo(() => {\n if (item.config?.type !== ConsumeType.Product || !item.product?.handle) {\n return undefined\n }\n return extractVariantId(item.variant?.id)\n ? `/products/${item.product.handle}?variant=${extractVariantId(item.variant?.id)}${pageHandle ? `&ref=${pageHandle}` : ''}`\n : `/products/${item.product.handle}${pageHandle ? `?ref=${pageHandle}` : ''}`\n }, [item.config?.type, item.product?.handle, item.variant?.id, pageHandle])\n\n return (\n <div\n className={classNames(\n 'flex flex-col items-center rounded-[16px] bg-[#EAEAEC] p-[24px] md:rounded-[12px] md:px-[8px] xl:py-[16px] md-xl:px-[16px]',\n !rounded && 'rounded-none md:rounded-none',\n className\n )}\n >\n {item.config?.type === ConsumeType.Product ? (\n <a\n href={productUrl}\n className={classNames('relative mx-auto h-[224px] w-fit md:my-[10px] l:h-[120px] l-xxl:h-[138px]')}\n >\n <Picture\n className=\"h-full w-auto [&_img]:h-full [&_img]:object-contain\"\n source={item.config?.image?.url || item.product?.images?.[0]?.url}\n ></Picture>\n </a>\n ) : (\n <div className=\"relative mx-auto my-[30px] h-[164px] md:my-0 md:h-[66px] l-xxl:h-[138px] md-l:h-[80px]\">\n <Picture\n source={pageCommon?.imageMapping?.[item.config?.type]?.url}\n className=\"h-full [&_img]:h-full [&_img]:w-auto [&_img]:object-contain\"\n ></Picture>\n\n <NoneProductValue item={item} />\n </div>\n )}\n <div className={classNames('mt-[10px] xl:mt-[8px] flex w-full flex-1 flex-col justify-between')}>\n <Text\n html={item.config?.title || item.alpc?.title}\n title={item.config?.title || item.alpc?.title}\n size={2}\n className=\"line-clamp-2 h-[58px] text-[24px] leading-[1.2] l:h-[40px] l:text-[16px] l-xxl:h-[48px] l-xxl:text-[20px]\"\n />\n {item.config?.rules?.length > 0 && (\n <button\n type=\"button\"\n onClick={() => {\n onRulesOpen(item.config?.rules || [])\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: pageGroup,\n position: copy.title,\n button_name: pageCommon?.ruleLabel,\n info: item.alpc?.id?.toString(),\n },\n })\n }}\n className=\"mt-[8px] w-fit text-[16px] font-bold underline md:text-[14px] l:mt-0\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {pageCommon?.ruleLabel}\n </button>\n )}\n <div>\n <div className=\"mt-[26px] flex items-center l:mt-[12px] l-xl:mt-[16px]\">\n <Picture\n className=\"size-[24px] l-xxl:size-[22px] md-l:size-[18px] md:size-[16px]\"\n source=\"https://cdn.shopify.com/s/files/1/0511/6346/3874/files/icon_hire_purchase.png?v=1757496783\"\n />\n <Text\n html={`${numberFormat(item.alpc?.consumeCredits)}`}\n size={2}\n as=\"p\"\n className=\"ml-[4px] text-[24px] font-bold mt-[4px] leading-none l-xxl:text-[20px] l:text-[16px] \"\n />\n </div>\n\n <Button\n disabled={isDisabled}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[8px] md:px-[8px] l:w-full\"\n onClick={() => {\n onRedeem(item)\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: pageGroup,\n position: copy.title,\n button_name: redeemButtonText,\n info: item.alpc?.id?.toString(),\n },\n })\n }}\n >\n {redeemButtonText}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n"],
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,
|
|
4
|
+
"sourcesContent": ["import { Button, Text, Picture } from '@anker-in/headless-ui'\n\nimport { useMemo } from 'react'\n\nimport classNames from 'classnames'\nimport { useCreditsContext } from '../context/provider'\nimport type { RedeemableItem as RedeemableItemType } from '../type'\nimport { AlpcConsumeType, ConsumeType } from '../context/const'\nimport { numberFormat, extractVariantId } from '../context/utils'\nimport type { CreditsRedeemListCopy } from './type'\nimport { gaTrack, useHeadlessContext } from '@anker-in/lib'\nimport { NoneProductValue } from './NonProductValue'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport function RedeemableItem({\n copy,\n className,\n item,\n onRulesOpen,\n onRedeem,\n}: {\n copy: CreditsRedeemListCopy\n className?: string\n item: RedeemableItemType\n onRulesOpen: (rules: string[]) => void\n onRedeem: (item: RedeemableItemType) => void\n}) {\n const {\n creditInfo,\n profile,\n gtm: { pageGroup, pageHandle },\n pageCommon,\n } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const isLogin = Object.keys(profile || {}).length > 0\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isDisabled = useMemo(() => {\n if (item.hasRedeemed) {\n return true\n }\n\n if (item.alpc?.remainingInventory <= 0 && item.alpc?.isLimited) {\n // \u6709\u5E93\u5B58\u9650\u5236\n return true\n }\n\n if (item.alpc?.consumeType === AlpcConsumeType.Product) {\n if (!item.variant?.availableForSale) {\n return true\n }\n }\n if (isLogin && profile?.activated && item.alpc?.consumeCredits > Number(creditInfo?.available_credit || 0)) {\n return true\n }\n return false\n }, [\n item.hasRedeemed,\n item.alpc?.remainingInventory,\n item.alpc?.isLimited,\n item.alpc?.consumeType,\n item.alpc?.consumeCredits,\n isLogin,\n profile?.activated,\n creditInfo?.available_credit,\n item.variant?.availableForSale,\n ])\n\n const redeemButtonText = useMemo(() => {\n if (!isLogin) {\n return copy.unlockRewards\n }\n\n // \u7F3A\u8D27\u6587\u6848\n if (item.alpc?.consumeType === AlpcConsumeType.Product) {\n return item.variant?.availableForSale ? copy.btnRedeem : pageCommon?.soldOut || 'Sold Out'\n }\n return copy.btnRedeem\n }, [\n isLogin,\n item.alpc?.consumeType,\n item.variant?.availableForSale,\n copy.btnRedeem,\n copy.unlockRewards,\n pageCommon?.soldOut,\n ])\n\n // \u751F\u6210\u4EA7\u54C1 listing \u9875\u9762\u94FE\u63A5\n const productUrl = useMemo(() => {\n if (item.config?.type !== ConsumeType.Product || !item.product?.handle) {\n return undefined\n }\n return extractVariantId(item.variant?.id)\n ? `/products/${item.product.handle}?variant=${extractVariantId(item.variant?.id)}${pageHandle ? `&ref=${pageHandle}` : ''}`\n : `/products/${item.product.handle}${pageHandle ? `?ref=${pageHandle}` : ''}`\n }, [item.config?.type, item.product?.handle, item.variant?.id, pageHandle])\n\n return (\n <div\n className={classNames(\n 'flex flex-col items-center rounded-[16px] bg-[#EAEAEC] p-[24px] md:rounded-[12px] md:px-[8px] xl:py-[16px] md-xl:px-[16px]',\n !rounded && 'rounded-none md:rounded-none',\n className\n )}\n >\n {item.config?.type === ConsumeType.Product ? (\n <a\n href={productUrl}\n className={classNames('relative mx-auto h-[224px] w-fit md:my-[10px] l:h-[120px] l-xxl:h-[138px]')}\n >\n <Picture\n className=\"h-full w-auto [&_img]:h-full [&_img]:object-contain\"\n source={item.config?.image?.url || item.product?.images?.[0]?.url}\n ></Picture>\n </a>\n ) : (\n <div className=\"relative mx-auto my-[30px] h-[164px] md:my-0 md:h-[66px] l-xxl:h-[138px] md-l:h-[80px]\">\n <Picture\n source={pageCommon?.imageMapping?.[item.config?.type]?.url}\n className=\"h-full [&_img]:h-full [&_img]:w-auto [&_img]:object-contain\"\n ></Picture>\n\n <NoneProductValue item={item} />\n </div>\n )}\n <div className={classNames('mt-[10px] xl:mt-[8px] flex w-full flex-1 flex-col justify-between')}>\n <Text\n html={item.config?.title || item.alpc?.title}\n title={item.config?.title || item.alpc?.title}\n size={2}\n className=\"line-clamp-2 h-[58px] text-[24px] leading-[1.2] l:h-[40px] l:text-[16px] l-xxl:h-[48px] l-xxl:text-[20px]\"\n />\n {item.config?.rules?.length > 0 && (\n <button\n type=\"button\"\n onClick={() => {\n onRulesOpen(item.config?.rules || [])\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: pageGroup,\n position: copy.title,\n button_name: pageCommon?.ruleLabel,\n info: item.alpc?.id?.toString(),\n },\n })\n }}\n className=\"mt-[8px] w-fit text-[16px] font-bold underline md:text-[14px] l:mt-0\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {pageCommon?.ruleLabel}\n </button>\n )}\n <div>\n <div className=\"mt-[26px] flex items-center l:mt-[12px] l-xl:mt-[16px]\">\n <Picture\n className=\"size-[24px] l-xxl:size-[22px] md-l:size-[18px] md:size-[16px]\"\n source=\"https://cdn.shopify.com/s/files/1/0511/6346/3874/files/icon_hire_purchase.png?v=1757496783\"\n />\n <Text\n html={`${numberFormat(item.alpc?.consumeCredits)}`}\n size={2}\n as=\"p\"\n className=\"ml-[4px] text-[24px] font-bold mt-[4px] leading-none l-xxl:text-[20px] l:text-[16px] \"\n />\n </div>\n\n <Button\n disabled={isDisabled}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[8px] md:px-[8px] l:w-full\"\n onClick={() => {\n onRedeem(item)\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: pageGroup,\n position: copy.title,\n button_name: redeemButtonText,\n info: item.alpc?.id?.toString(),\n },\n })\n }}\n >\n {redeemButtonText}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["RedeemableItem_exports", "__export", "RedeemableItem", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_react", "import_classnames", "import_provider", "import_const", "import_utils", "import_lib", "import_NonProductValue", "import_constants", "copy", "className", "item", "onRulesOpen", "onRedeem", "creditInfo", "profile", "pageGroup", "pageHandle", "pageCommon", "brand", "isLogin", "rounded", "isDisabled", "redeemButtonText", "productUrl", "classNames", "e"]
|
|
7
7
|
}
|
|
@@ -30,6 +30,7 @@ export type RedeemableItem = {
|
|
|
30
30
|
};
|
|
31
31
|
product?: Product;
|
|
32
32
|
variant?: ProductVariant;
|
|
33
|
+
hasRedeemed?: boolean;
|
|
33
34
|
};
|
|
34
35
|
export interface ShippingCountry {
|
|
35
36
|
id: string;
|
|
@@ -110,6 +111,7 @@ export type CreditsPageCommon = {
|
|
|
110
111
|
infoIcon?: string;
|
|
111
112
|
ruleLabel?: string;
|
|
112
113
|
soldOut?: string;
|
|
114
|
+
redeemed?: string;
|
|
113
115
|
copied?: string;
|
|
114
116
|
off?: string;
|
|
115
117
|
copy?: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var s=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var
|
|
1
|
+
"use strict";var s=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var c=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of g(t))!a.call(e,r)&&r!==n&&s(e,r,{get:()=>t[r],enumerable:!(i=o(t,r))||i.enumerable});return e};var l=e=>c(s({},"__esModule",{value:!0}),e);var p={};module.exports=l(p);
|
|
2
2
|
//# sourceMappingURL=type.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/credits/type.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Product, ProductVariant } from '@anker-in/lib'\nimport type { AlpcConsumeType, ConsumeType } from './context/const'\nimport { MyActivitiesMetafields } from './modal/ActivitiesModal'\nimport { RewardsCopy } from './modal/RewardsModal'\n\nexport interface Subscription {\n preference: {\n subscribe: boolean\n brand: string\n }[]\n}\n\nexport type RedeemableItem = {\n config: {\n title: string\n desc: string\n rules: string[]\n image: {\n url: string\n }\n type: ConsumeType\n value: string\n }\n alpc: {\n id: string\n consumeCredits: number\n remainingInventory: number\n isLimited: boolean\n consumeType: AlpcConsumeType\n showCredit: boolean\n title: string\n }\n product?: Product\n variant?: ProductVariant\n}\n\nexport interface ShippingCountry {\n id: string\n name: string\n code: string\n provinces: {\n id: string\n name: string\n code: string\n }[]\n}\n\nexport interface ShippingZone {\n name: string\n countries: ShippingCountry[]\n}\n\nexport type RedeemModalCommon = {\n confirmTitle: string\n confirmButton: string\n commonError: string\n redeemLimitError: string\n inventoryNotEnough: string\n creditsNotEnough: string\n crossSiteError: string\n errorImageUrl: string\n coupon: {\n successDesc: string\n successTitle: string\n successButton: string\n successButtonUrl: string\n }\n virtualProduct: {\n successDesc: string\n successTitle: string\n successButton: string\n successButtonUrl: string\n stepTitle?: string\n steps?: {\n imageUrl: string\n title: string\n }[]\n }\n product: {\n required: string\n invalidEmail: string\n shippingAddress: string\n shippingProduct: string\n addressForm: {\n key: string\n type: string\n label: string\n isSelect: boolean\n required: boolean\n placeholder: string\n }[][]\n form: {\n key: string\n type: string\n isSelect: boolean\n required: boolean\n placeholder: string\n }[][]\n successDesc: string[]\n rules: string[]\n steps: {\n imageUrl: string\n title: string\n }[]\n quantityLabel: string\n totalPriceLabel: string\n variantLabel: string\n shippingFeeLabel: string\n paymentButton: string\n stepTitle: string\n }\n}\n\nexport type CreditsPageCommon = {\n pointUnit?: string\n infoIcon?: string\n ruleLabel?: string\n soldOut?: string\n copied?: string\n off?: string\n copy?: string\n giftCardLabel?: string\n goGiftLabel?: string\n imageMapping?: {\n [key in ConsumeType]: {\n url: string\n }\n }\n activitiesModal?: MyActivitiesMetafields\n rewardsModal?: RewardsCopy\n redeemModal?: RedeemModalCommon\n insufficientCredits?: string\n validatorInfo?: {\n addressInfo: {\n name: string\n country: string\n province: string\n city: string\n address: string\n }\n }\n}\n"],
|
|
4
|
+
"sourcesContent": ["import type { Product, ProductVariant } from '@anker-in/lib'\nimport type { AlpcConsumeType, ConsumeType } from './context/const'\nimport { MyActivitiesMetafields } from './modal/ActivitiesModal'\nimport { RewardsCopy } from './modal/RewardsModal'\n\nexport interface Subscription {\n preference: {\n subscribe: boolean\n brand: string\n }[]\n}\n\nexport type RedeemableItem = {\n config: {\n title: string\n desc: string\n rules: string[]\n image: {\n url: string\n }\n type: ConsumeType\n value: string\n }\n alpc: {\n id: string\n consumeCredits: number\n remainingInventory: number\n isLimited: boolean\n consumeType: AlpcConsumeType\n showCredit: boolean\n title: string\n }\n product?: Product\n variant?: ProductVariant\n hasRedeemed?: boolean\n}\n\nexport interface ShippingCountry {\n id: string\n name: string\n code: string\n provinces: {\n id: string\n name: string\n code: string\n }[]\n}\n\nexport interface ShippingZone {\n name: string\n countries: ShippingCountry[]\n}\n\nexport type RedeemModalCommon = {\n confirmTitle: string\n confirmButton: string\n commonError: string\n redeemLimitError: string\n inventoryNotEnough: string\n creditsNotEnough: string\n crossSiteError: string\n errorImageUrl: string\n coupon: {\n successDesc: string\n successTitle: string\n successButton: string\n successButtonUrl: string\n }\n virtualProduct: {\n successDesc: string\n successTitle: string\n successButton: string\n successButtonUrl: string\n stepTitle?: string\n steps?: {\n imageUrl: string\n title: string\n }[]\n }\n product: {\n required: string\n invalidEmail: string\n shippingAddress: string\n shippingProduct: string\n addressForm: {\n key: string\n type: string\n label: string\n isSelect: boolean\n required: boolean\n placeholder: string\n }[][]\n form: {\n key: string\n type: string\n isSelect: boolean\n required: boolean\n placeholder: string\n }[][]\n successDesc: string[]\n rules: string[]\n steps: {\n imageUrl: string\n title: string\n }[]\n quantityLabel: string\n totalPriceLabel: string\n variantLabel: string\n shippingFeeLabel: string\n paymentButton: string\n stepTitle: string\n }\n}\n\nexport type CreditsPageCommon = {\n pointUnit?: string\n infoIcon?: string\n ruleLabel?: string\n soldOut?: string\n redeemed?: string\n copied?: string\n off?: string\n copy?: string\n giftCardLabel?: string\n goGiftLabel?: string\n imageMapping?: {\n [key in ConsumeType]: {\n url: string\n }\n }\n activitiesModal?: MyActivitiesMetafields\n rewardsModal?: RewardsCopy\n redeemModal?: RedeemModalCommon\n insufficientCredits?: string\n validatorInfo?: {\n addressInfo: {\n name: string\n country: string\n province: string\n city: string\n address: string\n }\n }\n}\n"],
|
|
5
5
|
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
6
|
"names": ["type_exports", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useCallback as
|
|
1
|
+
import{useCallback as R,useEffect as C,useState as d}from"react";import{ALPC_COUNTRY_MAP as b,AlpcConsumeType as A}from"../const";import{useAlpcMutation as M}from"./useAlpcFetch";import{useCreditsContext as w}from"../provider";import{useHeadlessContext as L}from"@anker-in/lib";function T({page:o,pageSize:s,consumeType:r}){const{profile:e,alpcBrand:i}=w(),{brand:c,locale:n,appName:l}=L(),g=i||c,[a,_]=d([]),[u,f]=d(0),{isMutating:p,trigger:y}=M({url:"/v1/credit/log/coupon",initData:{brand:g,country:b.get(n)||n,app_name:l}}),t=R(async()=>{e?.user_id&&await y({consume_type:r||A.Coupon,page:o,page_size:s,user_id:e?.user_id},{onSuccess(m){f(m?.data?.total),_(m?.data?.redeem_logs||[])}})},[r,o,s,e?.user_id]);return C(()=>{t()},[t]),{myRewards:a,isLoading:p,total:u,getMyRewards:t,canNext:u>a.length&&!p}}var P=T;export{P as default};
|
|
2
2
|
//# sourceMappingURL=useMyRewards.js.map
|