@anker-in/campaign-ui 0.4.5-beta.8 → 0.4.5

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.
Files changed (56) hide show
  1. package/dist/cjs/components/credits/context/hooks/useActivities.js +1 -1
  2. package/dist/cjs/components/credits/context/hooks/useActivities.js.map +2 -2
  3. package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js +1 -1
  4. package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js.map +2 -2
  5. package/dist/cjs/components/credits/context/hooks/useMyRewards.js +1 -1
  6. package/dist/cjs/components/credits/context/hooks/useMyRewards.js.map +2 -2
  7. package/dist/cjs/components/credits/context/hooks/useRedeemAndBuy.js +1 -1
  8. package/dist/cjs/components/credits/context/hooks/useRedeemAndBuy.js.map +3 -3
  9. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
  10. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  11. package/dist/cjs/components/credits/context/hooks/useUploadReceipt.js +1 -1
  12. package/dist/cjs/components/credits/context/hooks/useUploadReceipt.js.map +2 -2
  13. package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
  14. package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
  15. package/dist/cjs/components/credits/creditsRedeemList/RedeemCouponModal.js +1 -1
  16. package/dist/cjs/components/credits/creditsRedeemList/RedeemCouponModal.js.map +3 -3
  17. package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal.js +1 -1
  18. package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal.js.map +2 -2
  19. package/dist/cjs/components/credits/modal/ActivitiesModal.js +1 -1
  20. package/dist/cjs/components/credits/modal/ActivitiesModal.js.map +2 -2
  21. package/dist/cjs/components/credits/modal/RewardsModal.js +1 -1
  22. package/dist/cjs/components/credits/modal/RewardsModal.js.map +2 -2
  23. package/dist/esm/components/credits/context/hooks/useActivities.js +1 -1
  24. package/dist/esm/components/credits/context/hooks/useActivities.js.map +2 -2
  25. package/dist/esm/components/credits/context/hooks/useAlpcFetch.js +1 -1
  26. package/dist/esm/components/credits/context/hooks/useAlpcFetch.js.map +2 -2
  27. package/dist/esm/components/credits/context/hooks/useMyRewards.js +1 -1
  28. package/dist/esm/components/credits/context/hooks/useMyRewards.js.map +2 -2
  29. package/dist/esm/components/credits/context/hooks/useRedeemAndBuy.js +1 -1
  30. package/dist/esm/components/credits/context/hooks/useRedeemAndBuy.js.map +3 -3
  31. package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
  32. package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  33. package/dist/esm/components/credits/context/hooks/useUploadReceipt.js +1 -1
  34. package/dist/esm/components/credits/context/hooks/useUploadReceipt.js.map +2 -2
  35. package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
  36. package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
  37. package/dist/esm/components/credits/creditsRedeemList/RedeemCouponModal.js +1 -1
  38. package/dist/esm/components/credits/creditsRedeemList/RedeemCouponModal.js.map +3 -3
  39. package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal.js +1 -1
  40. package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal.js.map +2 -2
  41. package/dist/esm/components/credits/modal/ActivitiesModal.js +1 -1
  42. package/dist/esm/components/credits/modal/ActivitiesModal.js.map +2 -2
  43. package/dist/esm/components/credits/modal/RewardsModal.js +1 -1
  44. package/dist/esm/components/credits/modal/RewardsModal.js.map +2 -2
  45. package/package.json +1 -1
  46. package/src/components/credits/context/hooks/useActivities.ts +6 -4
  47. package/src/components/credits/context/hooks/useAlpcFetch.ts +12 -5
  48. package/src/components/credits/context/hooks/useMyRewards.ts +3 -3
  49. package/src/components/credits/context/hooks/useRedeemAndBuy.ts +2 -3
  50. package/src/components/credits/context/hooks/useRedeemableList.ts +2 -2
  51. package/src/components/credits/context/hooks/useUploadReceipt.tsx +2 -2
  52. package/src/components/credits/creditsCash/CreditsCash.tsx +12 -5
  53. package/src/components/credits/creditsRedeemList/RedeemCouponModal.tsx +2 -3
  54. package/src/components/credits/creditsRedeemList/RedeemVirtualProductModal.tsx +3 -3
  55. package/src/components/credits/modal/ActivitiesModal.tsx +53 -51
  56. package/src/components/credits/modal/RewardsModal.tsx +5 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/credits/creditsRedeemList/RedeemCouponModal.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 { useRedeemCoupon } from '../context/hooks/useRedeemCoupon'\nimport { AlpcErrorCode } from '../context/const'\nimport { CreditsModalContainer } from '../modal/ModalContainer'\nimport type { RedeemableItem as RedeemableItemType, RedeemModalCommon } from '../type'\nimport { CouponInit } from './RedeemCouponModal/CouponInit'\nimport { CouponSuccess } from './RedeemCouponModal/CouponSuccess'\n\nfunction RedeemCouponModal({\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 [couponCode, setCouponCode] = useState<string>()\n const [errorInfo, setErrorInfo] = useState<string>()\n const [disabled, setDisabled] = useState(false)\n\n const { profile, fetchCreditInfo } = useCreditsContext()\n\n const { isMutating: loading, trigger } = useRedeemCoupon({\n onSuccess(responseData) {\n if (!responseData) {\n setErrorInfo(copy.commonError)\n return\n }\n\n const data = responseData?.data || responseData\n if (data?.success) {\n setCouponCode(data.coupon_code)\n fetchCreditInfo(profile?.user_id)\n } else {\n let errorMsg\n if (responseData.code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n errorMsg = copy.redeemLimitError\n setDisabled(true)\n } else if (responseData.code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n errorMsg = copy.inventoryNotEnough\n setDisabled(true)\n } else if (responseData.code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n errorMsg = copy.creditsNotEnough\n setDisabled(true)\n fetchCreditInfo(profile?.user_id)\n } else if (responseData.code === AlpcErrorCode.CodeCrossSiteError) {\n errorMsg = copy.crossSiteError\n setDisabled(true)\n }\n\n setErrorInfo(errorMsg || copy.commonError || '')\n onError && onError(responseData.code)\n }\n },\n onError(error) {\n setErrorInfo(error.message || copy.commonError)\n },\n })\n\n const handleConfirm = useCallback(async () => {\n setErrorInfo('')\n trigger({\n user_id: profile?.user_id,\n rule_id: Number(item.alpc?.id),\n })\n }, [item, profile, trigger])\n\n useEffect(() => {\n return () => {\n setDisabled(false)\n setErrorInfo('')\n setCouponCode(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 {couponCode && !loading ? (\n <CouponSuccess item={item} copy={copy} couponCode={couponCode} disabled={disabled} onClose={props.onClose} />\n ) : (\n <CouponInit 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 RedeemCouponModal\n"],
5
- "mappings": "AAiFI,OAQI,OAAAA,EARJ,QAAAC,MAAA,oBAjFJ,OAAS,QAAAC,MAAY,wBACrB,OAAS,eAAAC,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,qBAAAC,MAAyB,sBAClC,OAAS,mBAAAC,MAAuB,mCAChC,OAAS,iBAAAC,MAAqB,mBAC9B,OAAS,yBAAAC,MAA6B,0BAEtC,OAAS,cAAAC,MAAkB,iCAC3B,OAAS,iBAAAC,MAAqB,oCAE9B,SAASC,EAAkB,CACzB,KAAAC,EACA,KAAAC,EACA,QAAAC,EACA,GAAGC,CACL,EAIG,CACD,KAAM,CAACC,EAAYC,CAAa,EAAIb,EAAiB,EAC/C,CAACc,EAAWC,CAAY,EAAIf,EAAiB,EAC7C,CAACgB,EAAUC,CAAW,EAAIjB,EAAS,EAAK,EAExC,CAAE,QAAAkB,EAAS,gBAAAC,CAAgB,EAAIlB,EAAkB,EAEjD,CAAE,WAAYmB,EAAS,QAAAC,CAAQ,EAAInB,EAAgB,CACvD,UAAUoB,EAAc,CACtB,GAAI,CAACA,EAAc,CACjBP,EAAaN,EAAK,WAAW,EAC7B,MACF,CAEA,MAAMc,EAAOD,GAAc,MAAQA,EACnC,GAAIC,GAAM,QACRV,EAAcU,EAAK,WAAW,EAC9BJ,EAAgBD,GAAS,OAAO,MAC3B,CACL,IAAIM,EACAF,EAAa,OAASnB,EAAc,qCACtCqB,EAAWf,EAAK,iBAChBQ,EAAY,EAAI,GACPK,EAAa,OAASnB,EAAc,+BAC7CqB,EAAWf,EAAK,mBAChBQ,EAAY,EAAI,GACPK,EAAa,OAASnB,EAAc,yBAC7CqB,EAAWf,EAAK,iBAChBQ,EAAY,EAAI,EAChBE,EAAgBD,GAAS,OAAO,GACvBI,EAAa,OAASnB,EAAc,qBAC7CqB,EAAWf,EAAK,eAChBQ,EAAY,EAAI,GAGlBF,EAAaS,GAAYf,EAAK,aAAe,EAAE,EAC/CC,GAAWA,EAAQY,EAAa,IAAI,CACtC,CACF,EACA,QAAQG,EAAO,CACbV,EAAaU,EAAM,SAAWhB,EAAK,WAAW,CAChD,CACF,CAAC,EAEKiB,EAAgB5B,EAAY,SAAY,CAC5CiB,EAAa,EAAE,EACfM,EAAQ,CACN,QAASH,GAAS,QAClB,QAAS,OAAOV,EAAK,MAAM,EAAE,CAC/B,CAAC,CACH,EAAG,CAACA,EAAMU,EAASG,CAAO,CAAC,EAE3B,OAAAtB,EAAU,IACD,IAAM,CACXkB,EAAY,EAAK,EACjBF,EAAa,EAAE,EACfF,EAAc,MAAS,CACzB,EACC,CAAC,CAAC,EAGHjB,EAACQ,EAAA,CACE,GAAGO,EACJ,OAAQ,CAAC,CAACH,EACV,UAAU,sBACV,gBAAgB,yCAChB,eAAe,wBAEd,UAAAI,GAAc,CAACQ,EACdzB,EAACW,EAAA,CAAc,KAAME,EAAM,KAAMC,EAAM,WAAYG,EAAY,SAAUI,EAAU,QAASL,EAAM,QAAS,EAE3GhB,EAACU,EAAA,CAAW,KAAMG,EAAM,KAAMC,EAAM,QAASW,EAAS,SAAUJ,EAAU,UAAWU,EAAe,EAErGZ,GACCnB,EAAC,OAAI,UAAU,0FACb,SAAAA,EAACE,EAAA,CAAK,UAAU,2CAA2C,KAAMiB,EAAW,EAC9E,GAEJ,CAEJ,CAEA,IAAOa,EAAQpB",
6
- "names": ["jsx", "jsxs", "Text", "useCallback", "useEffect", "useState", "useCreditsContext", "useRedeemCoupon", "AlpcErrorCode", "CreditsModalContainer", "CouponInit", "CouponSuccess", "RedeemCouponModal", "item", "copy", "onError", "props", "couponCode", "setCouponCode", "errorInfo", "setErrorInfo", "disabled", "setDisabled", "profile", "fetchCreditInfo", "loading", "trigger", "responseData", "data", "errorMsg", "error", "handleConfirm", "RedeemCouponModal_default"]
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 { useRedeemCoupon } from '../context/hooks/useRedeemCoupon'\nimport { AlpcErrorCode } from '../context/const'\nimport { CreditsModalContainer } from '../modal/ModalContainer'\nimport type { RedeemableItem as RedeemableItemType, RedeemModalCommon } from '../type'\nimport { CouponInit } from './RedeemCouponModal/CouponInit'\nimport { CouponSuccess } from './RedeemCouponModal/CouponSuccess'\n\nfunction RedeemCouponModal({\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 [couponCode, setCouponCode] = useState<string>()\n const [errorInfo, setErrorInfo] = useState<string>()\n const [disabled, setDisabled] = useState(false)\n\n const { profile, fetchCreditInfo } = useCreditsContext()\n\n const { isMutating: loading, trigger } = useRedeemCoupon({\n onSuccess(responseData) {\n if (!responseData) {\n setErrorInfo(copy.commonError)\n return\n }\n\n if (responseData.data?.success) {\n setCouponCode(responseData.data.coupon_code)\n fetchCreditInfo(profile?.user_id)\n } else {\n let errorMsg\n if (responseData.code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n errorMsg = copy.redeemLimitError\n setDisabled(true)\n } else if (responseData.code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n errorMsg = copy.inventoryNotEnough\n setDisabled(true)\n } else if (responseData.code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n errorMsg = copy.creditsNotEnough\n setDisabled(true)\n fetchCreditInfo(profile?.user_id)\n } else if (responseData.code === AlpcErrorCode.CodeCrossSiteError) {\n errorMsg = copy.crossSiteError\n setDisabled(true)\n }\n\n setErrorInfo(errorMsg || copy.commonError || '')\n onError && onError(responseData.code)\n }\n },\n onError(error) {\n setErrorInfo(error.message || copy.commonError)\n },\n })\n\n const handleConfirm = useCallback(async () => {\n setErrorInfo('')\n trigger({\n user_id: profile?.user_id,\n rule_id: Number(item.alpc?.id),\n })\n }, [item, profile, trigger])\n\n useEffect(() => {\n return () => {\n setDisabled(false)\n setErrorInfo('')\n setCouponCode(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 {couponCode && !loading ? (\n <CouponSuccess item={item} copy={copy} couponCode={couponCode} disabled={disabled} onClose={props.onClose} />\n ) : (\n <CouponInit 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 RedeemCouponModal\n"],
5
+ "mappings": "AAgFI,OAQI,OAAAA,EARJ,QAAAC,MAAA,oBAhFJ,OAAS,QAAAC,MAAY,wBACrB,OAAS,eAAAC,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,qBAAAC,MAAyB,sBAClC,OAAS,mBAAAC,MAAuB,mCAChC,OAAS,iBAAAC,MAAqB,mBAC9B,OAAS,yBAAAC,MAA6B,0BAEtC,OAAS,cAAAC,MAAkB,iCAC3B,OAAS,iBAAAC,MAAqB,oCAE9B,SAASC,EAAkB,CACzB,KAAAC,EACA,KAAAC,EACA,QAAAC,EACA,GAAGC,CACL,EAIG,CACD,KAAM,CAACC,EAAYC,CAAa,EAAIb,EAAiB,EAC/C,CAACc,EAAWC,CAAY,EAAIf,EAAiB,EAC7C,CAACgB,EAAUC,CAAW,EAAIjB,EAAS,EAAK,EAExC,CAAE,QAAAkB,EAAS,gBAAAC,CAAgB,EAAIlB,EAAkB,EAEjD,CAAE,WAAYmB,EAAS,QAAAC,CAAQ,EAAInB,EAAgB,CACvD,UAAUoB,EAAc,CACtB,GAAI,CAACA,EAAc,CACjBP,EAAaN,EAAK,WAAW,EAC7B,MACF,CAEA,GAAIa,EAAa,MAAM,QACrBT,EAAcS,EAAa,KAAK,WAAW,EAC3CH,EAAgBD,GAAS,OAAO,MAC3B,CACL,IAAIK,EACAD,EAAa,OAASnB,EAAc,qCACtCoB,EAAWd,EAAK,iBAChBQ,EAAY,EAAI,GACPK,EAAa,OAASnB,EAAc,+BAC7CoB,EAAWd,EAAK,mBAChBQ,EAAY,EAAI,GACPK,EAAa,OAASnB,EAAc,yBAC7CoB,EAAWd,EAAK,iBAChBQ,EAAY,EAAI,EAChBE,EAAgBD,GAAS,OAAO,GACvBI,EAAa,OAASnB,EAAc,qBAC7CoB,EAAWd,EAAK,eAChBQ,EAAY,EAAI,GAGlBF,EAAaQ,GAAYd,EAAK,aAAe,EAAE,EAC/CC,GAAWA,EAAQY,EAAa,IAAI,CACtC,CACF,EACA,QAAQE,EAAO,CACbT,EAAaS,EAAM,SAAWf,EAAK,WAAW,CAChD,CACF,CAAC,EAEKgB,EAAgB3B,EAAY,SAAY,CAC5CiB,EAAa,EAAE,EACfM,EAAQ,CACN,QAASH,GAAS,QAClB,QAAS,OAAOV,EAAK,MAAM,EAAE,CAC/B,CAAC,CACH,EAAG,CAACA,EAAMU,EAASG,CAAO,CAAC,EAE3B,OAAAtB,EAAU,IACD,IAAM,CACXkB,EAAY,EAAK,EACjBF,EAAa,EAAE,EACfF,EAAc,MAAS,CACzB,EACC,CAAC,CAAC,EAGHjB,EAACQ,EAAA,CACE,GAAGO,EACJ,OAAQ,CAAC,CAACH,EACV,UAAU,sBACV,gBAAgB,yCAChB,eAAe,wBAEd,UAAAI,GAAc,CAACQ,EACdzB,EAACW,EAAA,CAAc,KAAME,EAAM,KAAMC,EAAM,WAAYG,EAAY,SAAUI,EAAU,QAASL,EAAM,QAAS,EAE3GhB,EAACU,EAAA,CAAW,KAAMG,EAAM,KAAMC,EAAM,QAASW,EAAS,SAAUJ,EAAU,UAAWS,EAAe,EAErGX,GACCnB,EAAC,OAAI,UAAU,0FACb,SAAAA,EAACE,EAAA,CAAK,UAAU,2CAA2C,KAAMiB,EAAW,EAC9E,GAEJ,CAEJ,CAEA,IAAOY,EAAQnB",
6
+ "names": ["jsx", "jsxs", "Text", "useCallback", "useEffect", "useState", "useCreditsContext", "useRedeemCoupon", "AlpcErrorCode", "CreditsModalContainer", "CouponInit", "CouponSuccess", "RedeemCouponModal", "item", "copy", "onError", "props", "couponCode", "setCouponCode", "errorInfo", "setErrorInfo", "disabled", "setDisabled", "profile", "fetchCreditInfo", "loading", "trigger", "responseData", "errorMsg", "error", "handleConfirm", "RedeemCouponModal_default"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{jsx as m,jsxs as B}from"react/jsx-runtime";import{Text as S}from"@anker-in/headless-ui";import{useCallback as y,useEffect as P,useState as f}from"react";import{useCreditsContext as L}from"../context/provider";import{useRedeemGoGift as F}from"../context/hooks/useRedeemGoGift";import{useRedeemProduct as T}from"../context/hooks/useRedeemProduct";import{AlpcErrorCode as s,ConsumeType as N}from"../context/const";import{CreditsModalContainer as O}from"../modal/ModalContainer";import{gaTrack as w}from"@anker-in/lib";import{VirtualProductInit as A}from"./RedeemVirtualProductModal/VirtualProductInit";import{VirtualProductSuccess as V}from"./RedeemVirtualProductModal/VirtualProductSuccess";function k({item:t,copy:r,onError:c,...p}){const[h,a]=f(),[g,n]=f(),[C,d]=f(!1),{profile:o,fetchCreditInfo:l,gtm:b}=L(),u=t.config?.type===N.GoGift,x=t.config?.type===N.GiftCard,{isMutating:R,trigger:E}=F({onSuccess(e){if(!e){n(r?.commonError);return}const i=e?.data||e;i?.id?(a(i.id),l(o?.user_id)):G(e.code)},onError(e){n(e.message||r?.commonError)}}),{isMutating:M,trigger:v}=T({onSuccess(e){if(!e){n(r?.commonError);return}e?.code===0?(a("success"),l(o?.user_id)):G(e.code)},onError(){n(r?.commonError)}}),_=u?R:M,G=e=>{let i;e===s.CodeLpcShopifyCouponRuleRedeemLimit?(i=r?.redeemLimitError,d(!0)):e===s.CodeLpcRuleInventoryNotEnough?(i=r?.inventoryNotEnough,d(!0)):e===s.CodeLpcNotEnoughCredits?(i=r?.creditsNotEnough,d(!0),l(o?.user_id)):e===s.CodeCrossSiteError&&(i=r?.crossSiteError,d(!0)),n(i||r?.commonError||""),c&&c(e)},I=y(async()=>{if(n(""),w({event:"ga4Event",event_name:"lp_button",member_active_status:o?.activated?"active":"not active",event_parameters:{page_group:b.pageGroup,position:"redeem virtual product modal",button_name:r.confirmButton,info:t.alpc?.id}}),u)E({user_id:o?.user_id,rule_id:Number(t.alpc?.id)});else if(x){const e={email:o?.email||"",first_name:o?.firstName||"",last_name:o?.lastName||"",address1:"Default Address",city:"Default City",province:"Default Province",country:"US",zip:"00000"};v({address:btoa(JSON.stringify(e)),rule_id:Number(t.alpc?.id)})}},[t,o,E,v,u,x,r.confirmButton,b.pageGroup]);return P(()=>()=>{d(!1),n(""),a(void 0)},[]),B(O,{...p,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:[h&&!_?m(V,{item:t,copy:r,disabled:C,onClose:p.onClose}):m(A,{item:t,copy:r,loading:_,disabled:C,onConfirm:I}),g&&m("div",{className:"mx-auto max-w-full bg-white px-[48px] py-[12px] text-center text-[#FF0000] md:px-[16px]",children:m(S,{className:"text-[14px] font-semibold text-[#1F2021]",html:g})})]})}var Z=k;export{Z as default};
1
+ import{jsx as a,jsxs as B}from"react/jsx-runtime";import{Text as S}from"@anker-in/headless-ui";import{useCallback as y,useEffect as P,useState as f}from"react";import{useCreditsContext as L}from"../context/provider";import{useRedeemGoGift as F}from"../context/hooks/useRedeemGoGift";import{useRedeemProduct as T}from"../context/hooks/useRedeemProduct";import{AlpcErrorCode as s,ConsumeType as N}from"../context/const";import{CreditsModalContainer as A}from"../modal/ModalContainer";import{gaTrack as O}from"@anker-in/lib";import{VirtualProductInit as k}from"./RedeemVirtualProductModal/VirtualProductInit";import{VirtualProductSuccess as w}from"./RedeemVirtualProductModal/VirtualProductSuccess";function V({item:t,copy:r,onError:c,...p}){const[h,m]=f(),[g,n]=f(),[C,d]=f(!1),{profile:o,fetchCreditInfo:l,gtm:b}=L(),u=t.config?.type===N.GoGift,x=t.config?.type===N.GiftCard,{isMutating:R,trigger:E}=F({onSuccess(e){if(!e){n(r?.commonError);return}const i=e.data;i?.id?(m(i.id),l(o?.user_id)):G(e.code)},onError(e){n(e.message||r?.commonError)}}),{isMutating:M,trigger:v}=T({onSuccess(e){if(!e){n(r?.commonError);return}e?.code===0?(m("success"),l(o?.user_id)):G(e.code)},onError(){n(r?.commonError)}}),_=u?R:M,G=e=>{let i;e===s.CodeLpcShopifyCouponRuleRedeemLimit?(i=r?.redeemLimitError,d(!0)):e===s.CodeLpcRuleInventoryNotEnough?(i=r?.inventoryNotEnough,d(!0)):e===s.CodeLpcNotEnoughCredits?(i=r?.creditsNotEnough,d(!0),l(o?.user_id)):e===s.CodeCrossSiteError&&(i=r?.crossSiteError,d(!0)),n(i||r?.commonError||""),c&&c(e)},I=y(async()=>{if(n(""),O({event:"ga4Event",event_name:"lp_button",member_active_status:o?.activated?"active":"not active",event_parameters:{page_group:b.pageGroup,position:"redeem virtual product modal",button_name:r.confirmButton,info:t.alpc?.id}}),u)E({user_id:o?.user_id,rule_id:Number(t.alpc?.id)});else if(x){const e={email:o?.email||"",first_name:o?.firstName||"Anker",last_name:o?.lastName||"Direct",address1:"Default Address",city:"Default City",province:"Default Province",country:"US",zip:"00000"};v({address:btoa(JSON.stringify(e)),rule_id:Number(t.alpc?.id)})}},[t,o,E,v,u,x,r.confirmButton,b.pageGroup]);return P(()=>()=>{d(!1),n(""),m(void 0)},[]),B(A,{...p,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:[h&&!_?a(w,{item:t,copy:r,disabled:C,onClose:p.onClose}):a(k,{item:t,copy:r,loading:_,disabled:C,onConfirm:I}),g&&a("div",{className:"mx-auto max-w-full bg-white px-[48px] py-[12px] text-center text-[#FF0000] md:px-[16px]",children:a(S,{className:"text-[14px] font-semibold text-[#1F2021]",html:g})})]})}var Y=V;export{Y as default};
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 { 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 const data = responseData?.data || responseData\n if (data?.id) {\n setGiftCardId(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 first_name: profile?.firstName || '',\n last_name: 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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",
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 const data = responseData.data\n if (data?.id) {\n setGiftCardId(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 first_name: profile?.firstName || 'Anker',\n last_name: profile?.lastName || 'Direct',\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
6
  "names": ["jsx", "jsxs", "Text", "useCallback", "useEffect", "useState", "useCreditsContext", "useRedeemGoGift", "useRedeemProduct", "AlpcErrorCode", "ConsumeType", "CreditsModalContainer", "gaTrack", "VirtualProductInit", "VirtualProductSuccess", "RedeemVirtualProductModal", "item", "copy", "onError", "props", "giftCardId", "setGiftCardId", "errorInfo", "setErrorInfo", "disabled", "setDisabled", "profile", "fetchCreditInfo", "gtm", "isGoGift", "isGiftCard", "goGiftLoading", "triggerGoGift", "responseData", "data", "handleRedeemError", "error", "productLoading", "triggerProduct", "loading", "code", "errorMsg", "handleConfirm", "defaultAddress", "RedeemVirtualProductModal_default"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Fragment as V,jsx as i,jsxs as n}from"react/jsx-runtime";import{useCallback as E,useMemo as g,useState as h}from"react";import{useCreditsContext as R}from"../context/provider";import{CreditType as p,DTC_TASK_TYPE as f,TaskSubType as r,TaskType as Y}from"../context/const";import w from"../context/hooks/useActivities";import{CreditsModalContainer as B}from"./ModalContainer";import{classNames as v,useHeadlessContext as I}from"@anker-in/lib";import{Tabs as O,TabsList as j,TabsTrigger as F}from"@anker-in/headless-ui";import H from"./LoadingDots";import{Picture as z,Text as N}from"@anker-in/headless-ui";import{ROUNDED_BRANDS as q}from"../../../constants";import A from"dayjs";function K({data:e,...c}){const[l,_]=h(1),{taskIdToTypeMapping:u}=R(),{brand:M}=I(),k=q.includes(M),P=g(()=>({page:c.isOpen?l:0,pageSize:1e3}),[c.isOpen,l]),[o,C]=h(p.All),D=g(()=>{const s=[{title:e.allTab,type:p.All},{title:e.earnedTab,type:p.Earned},{title:e.deductedTab,type:p.Deducted}];return e.expiredTab&&s.push({title:e.expiredTab,type:p.Expired}),s},[e]),{activities:x=[],canNext:y,isLoading:b}=w(P),T=g(()=>{const s={[r.Activation]:e.activationTask,[r.UpdateName]:e.updateNameTask,[r.UpdatePhone]:e.updatePhoneTask,[r.UpdateBirthday]:e.updateBirthdayTask,[r.Subscription]:e.subscriptionTask,[r.UpadteAppName]:e.updateAppNameTask,[r.Refund]:e.refundTask,[r.ProductUnApproved]:e.productUnApprovedTask},m={[f.FirstPurchase]:e.firstPurchaseTask,[f.UploadReceipt]:e.uploadReceiptTask,[f.Shopping]:e.shoppingTask};function U(t){return t.task_type===Y.Redeem&&t.task_sub_type===r.ProductUnApproved&&e.productUnApprovedTask?t.task_name.replace("Refund",e.productUnApprovedTask):u?.[String(t.task_rule_id)]?m[u?.[String(t.task_rule_id)]]:s[t.task_sub_type]||t.task_name}let a=x.map(t=>({title:U(t),date:new Date(t.create_time*1e3),value:t.credit,type:t.credit_type,pending_time:t.pending_time,credit_type:t.credit_type,status:t.status}))||[];return o===p.Earned?a=a?.filter(t=>t.type===1):o===p.Deducted?a=a?.filter(t=>t.type===2&&t.status!==3):o===p.Expired&&(a=a?.filter(t=>t.type===2&&t.status===3)),a.map(t=>{let{value:d,...L}=t;return t.type===p.Deducted&&d>0&&(d=-d),{value:d,...L}})},[e.activationTask,e.updateNameTask,e.updatePhoneTask,e.updateBirthdayTask,e.subscriptionTask,e.updateAppNameTask,e.refundTask,e.productUnApprovedTask,e.firstPurchaseTask,e.uploadReceiptTask,e.shoppingTask,x,o,u]),S=E(()=>{y&&_(l+1)},[l,y]);return n(B,{title:e.title,className:v("h-[800px] w-[640px]"),useAnimation:!0,animationClassName:"md:translate-y-[100vh]",scrollClassName:"",...c,onScrollEnd:S,children:[i("div",{className:"w-full sticky top-0 bg-white z-10 pb-[24px] overflow-x-auto",children:i(O,{align:"left",shape:k?"rounded":"square",value:o.toString(),onValueChange:s=>{C(Number(s))},className:"",children:i(j,{children:D.map(s=>i(F,{value:s.type.toString(),children:s.title},s.type))})})}),n("div",{className:"grid gap-[18px] overflow-auto overscroll-contain md:gap-[12px]",children:[b&&i("div",{className:"flex h-full flex-col items-center justify-center",children:i(H,{})}),!b&&i(V,{children:T.length>0?T.map((s,m)=>n("div",{className:v("flex h-fit items-center justify-between rounded-[8px] bg-[#f2f0f1] px-[16px] py-[20px] text-[16px]",!k&&"rounded-none"),children:[n("div",{className:"grid gap-[6px]",children:[i("div",{className:"font-bold",children:s.title}),i("div",{className:"text-[14px] font-semibold text-[#999]",children:A(s.date).format("YYYY-MM-DD HH:mm").toString()}),!e.pendingTips&&n("div",{className:`hidden text-[14px] font-semibold text-[#777] ${s.status===2&&s.credit_type===1?"!flex":""}`,children:[i(N,{html:e.pendingTips}),i("span",{children:A.unix(s.pending_time).add(1,"day").format("YYYY-MM-DD")}),e.pendingTips2&&i(N,{html:e.pendingTips2})]})]}),n("div",{className:v("font-bold",s.value>=0||s.credit_type===p.Expired?"text-[#52C41A]":"text-[#F84D4F]"),children:[s.value>=0&&"+",s.value]})]},m)):n("div",{className:"flex h-full flex-col items-center justify-center",children:[i(z,{className:"mb-[16px] h-[120px] w-[160px]",source:e?.emptyListImage?.url,alt:e?.emptyListImage?.alt||"empty list image"}),i("div",{className:"leading-1.4 text-[16px] font-semibold",children:e?.emptyListLabel})]})})]}),T.length>0&&i("div",{className:"mt-[12px] pb-[24px] text-[14px] font-semibold text-[#999]",children:e.tips})]})}var re=K;export{re as default};
1
+ import{Fragment as V,jsx as i,jsxs as n}from"react/jsx-runtime";import{useCallback as E,useMemo as f,useState as N}from"react";import{useCreditsContext as R}from"../context/provider";import{CreditType as p,DTC_TASK_TYPE as g,TaskSubType as a,TaskType as Y}from"../context/const";import w from"../context/hooks/useActivities";import{CreditsModalContainer as B}from"./ModalContainer";import{classNames as v,useHeadlessContext as I}from"@anker-in/lib";import{Tabs as O,TabsList as j,TabsTrigger as F}from"@anker-in/headless-ui";import H from"./LoadingDots";import{Picture as z,Text as h}from"@anker-in/headless-ui";import{ROUNDED_BRANDS as q}from"../../../constants";import A from"dayjs";function K({data:e,...c}){const[l,_]=N(1),{taskIdToTypeMapping:u}=R(),{brand:M}=I(),x=q.includes(M),P=f(()=>({page:c.isOpen?l:0,pageSize:1e3}),[c.isOpen,l]),[o,C]=N(p.All),D=f(()=>{const s=[{title:e.allTab,type:p.All},{title:e.earnedTab,type:p.Earned},{title:e.deductedTab,type:p.Deducted}];return e.expiredTab&&s.push({title:e.expiredTab,type:p.Expired}),s},[e]),{activities:k=[],canNext:y,isLoading:b}=w(P),T=f(()=>{const s={[a.Activation]:e.activationTask,[a.UpdateName]:e.updateNameTask,[a.UpdatePhone]:e.updatePhoneTask,[a.UpdateBirthday]:e.updateBirthdayTask,[a.Subscription]:e.subscriptionTask,[a.UpadteAppName]:e.updateAppNameTask,[a.Refund]:e.refundTask,[a.ProductUnApproved]:e.productUnApprovedTask},m={[g.FirstPurchase]:e.firstPurchaseTask,[g.UploadReceipt]:e.uploadReceiptTask,[g.Shopping]:e.shoppingTask};function U(t){return t.task_type===Y.Redeem&&t.task_sub_type===a.ProductUnApproved&&e.productUnApprovedTask?t.task_name.replace("Refund",e.productUnApprovedTask):u?.[String(t.task_rule_id)]?m[u?.[String(t.task_rule_id)]]||t.task_name:s[t.task_sub_type]||t.task_name}let r=k.map(t=>({title:U(t),date:new Date(t.create_time*1e3),value:t.credit,type:t.credit_type,pending_time:t.pending_time,credit_type:t.credit_type,status:t.status}))||[];return o===p.Earned?r=r?.filter(t=>t.type===1):o===p.Deducted?r=r?.filter(t=>t.type===2&&t.status!==3):o===p.Expired&&(r=r?.filter(t=>t.type===2&&t.status===3)),r.map(t=>{let{value:d,...L}=t;return t.type===p.Deducted&&d>0&&(d=-d),{value:d,...L}})},[e.activationTask,e.updateNameTask,e.updatePhoneTask,e.updateBirthdayTask,e.subscriptionTask,e.updateAppNameTask,e.refundTask,e.productUnApprovedTask,e.firstPurchaseTask,e.uploadReceiptTask,e.shoppingTask,k,o,u]),S=E(()=>{y&&_(l+1)},[l,y]);return n(B,{title:e.title,className:v("h-[800px] w-[640px]"),useAnimation:!0,animationClassName:"md:translate-y-[100vh]",scrollClassName:"flex flex-col",...c,onScrollEnd:S,children:[i("div",{className:"w-full sticky top-0 bg-white z-10 pb-[24px] overflow-x-auto",children:i(O,{align:"left",shape:x?"rounded":"square",value:o.toString(),onValueChange:s=>{C(Number(s))},className:"",children:i(j,{children:D.map(s=>i(F,{value:s.type.toString(),children:s.title},s.type))})})}),i("div",{className:"flex-1 overflow-auto overscroll-contain",children:n("div",{className:"grid gap-[18px] md:gap-[12px]",children:[b&&i("div",{className:"flex flex-1 flex-col items-center justify-center",children:i(H,{})}),!b&&i(V,{children:T.length>0?T.map((s,m)=>n("div",{className:v("flex h-fit items-center justify-between rounded-[8px] bg-[#f2f0f1] px-[16px] py-[20px] text-[16px]",!x&&"rounded-none"),children:[n("div",{className:"grid gap-[6px]",children:[i("div",{className:"font-bold",children:s.title}),i("div",{className:"text-[14px] font-semibold text-[#999]",children:A(s.date).format("YYYY-MM-DD HH:mm").toString()}),!e.pendingTips&&n("div",{className:`hidden text-[14px] font-semibold text-[#777] ${s.status===2&&s.credit_type===1?"!flex":""}`,children:[i(h,{html:e.pendingTips}),i("span",{children:A.unix(s.pending_time).add(1,"day").format("YYYY-MM-DD")}),e.pendingTips2&&i(h,{html:e.pendingTips2})]})]}),n("div",{className:v("font-bold",s.value>=0||s.credit_type===p.Expired?"text-[#52C41A]":"text-[#F84D4F]"),children:[s.value>=0&&"+",s.value]})]},m)):n("div",{className:"flex flex-col items-center justify-center py-[40px]",children:[i(z,{className:"mb-[16px] h-[120px] w-[160px]",source:e?.emptyListImage?.url,alt:e?.emptyListImage?.alt||"empty list image"}),i("div",{className:"leading-1.4 text-[16px] font-semibold",children:e?.emptyListLabel})]})})]})}),T.length>0&&i("div",{className:"mt-[12px] pb-[24px] text-[14px] font-semibold text-[#999]",children:e.tips})]})}var ae=K;export{ae as default};
2
2
  //# sourceMappingURL=ActivitiesModal.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/credits/modal/ActivitiesModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useMemo, useState } from 'react'\nimport { useCreditsContext } from '../context/provider'\nimport { CreditType, DTC_TASK_TYPE, TaskSubType, TaskType } from '../context/const'\nimport useActivities from '../context/hooks/useActivities'\nimport type { Task } from '../context/response'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport LoadingDots from './LoadingDots'\nimport { Picture, Text } from '@anker-in/headless-ui'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport dayjs from 'dayjs'\n\nexport interface MyActivitiesMetafields {\n title: string\n tips: string\n allTab: string\n earnedTab: string\n deductedTab: string\n expiredTab: string\n activationTask: string\n updateNameTask: string\n updatePhoneTask: string\n updateBirthdayTask: string\n updateAppNameTask: string\n subscriptionTask: string\n refundTask: string\n productUnApprovedTask: string\n pendingTips?: string\n pendingTips2?: string\n firstPurchaseTask: string\n uploadReceiptTask: string\n shoppingTask: string\n emptyListImage: {\n url: string\n alt?: string\n }\n emptyListLabel: string\n}\n\ninterface ActivitiesModalProps extends ModalContainerProps {\n data: MyActivitiesMetafields\n}\n\nfunction ActivitiesModal({ data, ...props }: ActivitiesModalProps) {\n const [page, setPage] = useState(1)\n const { taskIdToTypeMapping } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const myActivitiesOptions = useMemo(() => {\n return {\n page: props.isOpen ? page : 0,\n pageSize: 1000,\n }\n }, [props.isOpen, page])\n\n const [activeTab, setActiveTab] = useState(CreditType.All)\n const tabs = useMemo(() => {\n const tabs = [\n {\n title: data.allTab,\n type: CreditType.All,\n },\n {\n title: data.earnedTab,\n type: CreditType.Earned,\n },\n {\n title: data.deductedTab,\n type: CreditType.Deducted,\n },\n ]\n if (data.expiredTab) {\n tabs.push({\n title: data.expiredTab,\n type: CreditType.Expired,\n })\n }\n return tabs\n }, [data])\n\n const { activities = [], canNext, isLoading } = useActivities(myActivitiesOptions)\n\n const list = useMemo(() => {\n const taskNameMap = {\n [TaskSubType.Activation]: data.activationTask,\n [TaskSubType.UpdateName]: data.updateNameTask,\n [TaskSubType.UpdatePhone]: data.updatePhoneTask,\n [TaskSubType.UpdateBirthday]: data.updateBirthdayTask,\n [TaskSubType.Subscription]: data.subscriptionTask,\n [TaskSubType.UpadteAppName]: data.updateAppNameTask,\n [TaskSubType.Refund]: data.refundTask,\n [TaskSubType.ProductUnApproved]: data.productUnApprovedTask,\n }\n const dtcTaskTypeToNameMap = {\n [DTC_TASK_TYPE.FirstPurchase]: data.firstPurchaseTask,\n [DTC_TASK_TYPE.UploadReceipt]: data.uploadReceiptTask,\n [DTC_TASK_TYPE.Shopping]: data.shoppingTask,\n }\n\n function getTitle(item: Task) {\n if (\n item.task_type === TaskType.Redeem &&\n item.task_sub_type === TaskSubType.ProductUnApproved &&\n data.productUnApprovedTask\n ) {\n // \u65B0\u589E\u7684\u90E8\u5206\u4EFB\u52A1\u90FD\u4F7F\u7528\u4E86 alpc \u540C\u4E00\u4E2A\u4EFB\u52A1\u7C7B\u578B\uFF0C\u9700\u8981\u7528\u4EFB\u52A1 id \u6765\u533A\u5206\n return item.task_name.replace('Refund', data.productUnApprovedTask)\n } else if (taskIdToTypeMapping?.[String(item.task_rule_id)]) {\n return dtcTaskTypeToNameMap[taskIdToTypeMapping?.[String(item.task_rule_id)]]\n } else {\n return taskNameMap[item.task_sub_type] || item.task_name\n }\n }\n\n const all = activities.map(item => ({\n title: getTitle(item),\n date: new Date(item.create_time * 1000),\n value: item.credit,\n type: item.credit_type,\n pending_time: item.pending_time,\n credit_type: item.credit_type,\n status: item.status,\n }))\n\n let filtered = all || []\n if (activeTab === CreditType.Earned) {\n filtered = filtered?.filter(item => item.type === 1)\n } else if (activeTab === CreditType.Deducted) {\n filtered = filtered?.filter(item => item.type === 2 && item.status !== 3)\n } else if (activeTab === CreditType.Expired) {\n filtered = filtered?.filter(item => item.type === 2 && item.status === 3)\n }\n\n return filtered.map(item => {\n let { value, ...otherItem } = item\n if (item.type === CreditType.Deducted && value > 0) {\n value = -value\n }\n\n return {\n value,\n ...otherItem,\n }\n })\n }, [\n data.activationTask,\n data.updateNameTask,\n data.updatePhoneTask,\n data.updateBirthdayTask,\n data.subscriptionTask,\n data.updateAppNameTask,\n data.refundTask,\n data.productUnApprovedTask,\n data.firstPurchaseTask,\n data.uploadReceiptTask,\n data.shoppingTask,\n activities,\n activeTab,\n taskIdToTypeMapping,\n ])\n\n const handleScrollEnd = useCallback(() => {\n if (!canNext) {\n return\n }\n setPage(page + 1)\n }, [page, canNext])\n\n return (\n <CreditsModalContainer\n title={data.title}\n className={cn('h-[800px] w-[640px]')}\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n scrollClassName=\"\"\n {...props}\n onScrollEnd={handleScrollEnd}\n >\n <div className=\"w-full sticky top-0 bg-white z-10 pb-[24px] overflow-x-auto\">\n <Tabs\n align=\"left\"\n shape={rounded ? 'rounded' : 'square'}\n value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(Number(value))\n }}\n className=\"\"\n >\n <TabsList>\n {tabs.map(tab => (\n <TabsTrigger key={tab.type} value={tab.type.toString()}>\n {tab.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n\n <div className=\"grid gap-[18px] overflow-auto overscroll-contain md:gap-[12px]\">\n {isLoading && (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <LoadingDots />\n </div>\n )}\n\n {!isLoading && (\n <>\n {list.length > 0 ? (\n list.map((item, index) => (\n <div\n key={index}\n className={cn(\n 'flex h-fit items-center justify-between rounded-[8px] bg-[#f2f0f1] px-[16px] py-[20px] text-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <div className=\"grid gap-[6px]\">\n <div className=\"font-bold\">{item.title}</div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {dayjs(item.date).format('YYYY-MM-DD HH:mm').toString()}\n </div>\n {!data.pendingTips && (\n <div\n className={`hidden text-[14px] font-semibold text-[#777] ${item.status === 2 && item.credit_type === 1 ? '!flex' : ''}`}\n >\n <Text html={data.pendingTips} />\n <span>{dayjs.unix(item.pending_time).add(1, 'day').format('YYYY-MM-DD')}</span>\n {data.pendingTips2 && <Text html={data.pendingTips2} />}\n </div>\n )}\n </div>\n <div\n className={cn(\n 'font-bold',\n item.value >= 0 || item.credit_type === CreditType.Expired ? 'text-[#52C41A]' : 'text-[#F84D4F]'\n )}\n >\n {item.value >= 0 && '+'}\n {item.value}\n </div>\n </div>\n ))\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <Picture\n className=\"mb-[16px] h-[120px] w-[160px]\"\n source={data?.emptyListImage?.url}\n alt={data?.emptyListImage?.alt || 'empty list image'}\n ></Picture>\n <div className=\"leading-1.4 text-[16px] font-semibold\">{data?.emptyListLabel}</div>\n </div>\n )}\n </>\n )}\n </div>\n {/* \u79EF\u5206\u5230\u8D26\u65F6\u95F4\u63D0\u9192 */}\n {list.length > 0 && <div className=\"mt-[12px] pb-[24px] text-[14px] font-semibold text-[#999]\">{data.tips}</div>}\n </CreditsModalContainer>\n )\n}\n\nexport default ActivitiesModal\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useCallback, useMemo, useState } from 'react'\nimport { useCreditsContext } from '../context/provider'\nimport { CreditType, DTC_TASK_TYPE, TaskSubType, TaskType } from '../context/const'\nimport useActivities from '../context/hooks/useActivities'\nimport type { Task } from '../context/response'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport LoadingDots from './LoadingDots'\nimport { Picture, Text } from '@anker-in/headless-ui'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport dayjs from 'dayjs'\n\nexport interface MyActivitiesMetafields {\n title: string\n tips: string\n allTab: string\n earnedTab: string\n deductedTab: string\n expiredTab: string\n activationTask: string\n updateNameTask: string\n updatePhoneTask: string\n updateBirthdayTask: string\n updateAppNameTask: string\n subscriptionTask: string\n refundTask: string\n productUnApprovedTask: string\n pendingTips?: string\n pendingTips2?: string\n firstPurchaseTask: string\n uploadReceiptTask: string\n shoppingTask: string\n emptyListImage: {\n url: string\n alt?: string\n }\n emptyListLabel: string\n}\n\ninterface ActivitiesModalProps extends ModalContainerProps {\n data: MyActivitiesMetafields\n}\n\nfunction ActivitiesModal({ data, ...props }: ActivitiesModalProps) {\n const [page, setPage] = useState(1)\n const { taskIdToTypeMapping } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const myActivitiesOptions = useMemo(() => {\n return {\n page: props.isOpen ? page : 0,\n pageSize: 1000,\n }\n }, [props.isOpen, page])\n\n const [activeTab, setActiveTab] = useState(CreditType.All)\n const tabs = useMemo(() => {\n const tabs = [\n {\n title: data.allTab,\n type: CreditType.All,\n },\n {\n title: data.earnedTab,\n type: CreditType.Earned,\n },\n {\n title: data.deductedTab,\n type: CreditType.Deducted,\n },\n ]\n if (data.expiredTab) {\n tabs.push({\n title: data.expiredTab,\n type: CreditType.Expired,\n })\n }\n return tabs\n }, [data])\n\n const { activities = [], canNext, isLoading } = useActivities(myActivitiesOptions)\n\n const list = useMemo(() => {\n const taskNameMap = {\n [TaskSubType.Activation]: data.activationTask,\n [TaskSubType.UpdateName]: data.updateNameTask,\n [TaskSubType.UpdatePhone]: data.updatePhoneTask,\n [TaskSubType.UpdateBirthday]: data.updateBirthdayTask,\n [TaskSubType.Subscription]: data.subscriptionTask,\n [TaskSubType.UpadteAppName]: data.updateAppNameTask,\n [TaskSubType.Refund]: data.refundTask,\n [TaskSubType.ProductUnApproved]: data.productUnApprovedTask,\n }\n const dtcTaskTypeToNameMap = {\n [DTC_TASK_TYPE.FirstPurchase]: data.firstPurchaseTask,\n [DTC_TASK_TYPE.UploadReceipt]: data.uploadReceiptTask,\n [DTC_TASK_TYPE.Shopping]: data.shoppingTask,\n }\n\n function getTitle(item: Task) {\n if (\n item.task_type === TaskType.Redeem &&\n item.task_sub_type === TaskSubType.ProductUnApproved &&\n data.productUnApprovedTask\n ) {\n // \u65B0\u589E\u7684\u90E8\u5206\u4EFB\u52A1\u90FD\u4F7F\u7528\u4E86 alpc \u540C\u4E00\u4E2A\u4EFB\u52A1\u7C7B\u578B\uFF0C\u9700\u8981\u7528\u4EFB\u52A1 id \u6765\u533A\u5206\n return item.task_name.replace('Refund', data.productUnApprovedTask)\n } else if (taskIdToTypeMapping?.[String(item.task_rule_id)]) {\n return dtcTaskTypeToNameMap[taskIdToTypeMapping?.[String(item.task_rule_id)]] || item.task_name\n } else {\n return taskNameMap[item.task_sub_type] || item.task_name\n }\n }\n\n const all = activities.map(item => ({\n title: getTitle(item),\n date: new Date(item.create_time * 1000),\n value: item.credit,\n type: item.credit_type,\n pending_time: item.pending_time,\n credit_type: item.credit_type,\n status: item.status,\n }))\n\n let filtered = all || []\n if (activeTab === CreditType.Earned) {\n filtered = filtered?.filter(item => item.type === 1)\n } else if (activeTab === CreditType.Deducted) {\n filtered = filtered?.filter(item => item.type === 2 && item.status !== 3)\n } else if (activeTab === CreditType.Expired) {\n filtered = filtered?.filter(item => item.type === 2 && item.status === 3)\n }\n\n return filtered.map(item => {\n let { value, ...otherItem } = item\n if (item.type === CreditType.Deducted && value > 0) {\n value = -value\n }\n\n return {\n value,\n ...otherItem,\n }\n })\n }, [\n data.activationTask,\n data.updateNameTask,\n data.updatePhoneTask,\n data.updateBirthdayTask,\n data.subscriptionTask,\n data.updateAppNameTask,\n data.refundTask,\n data.productUnApprovedTask,\n data.firstPurchaseTask,\n data.uploadReceiptTask,\n data.shoppingTask,\n activities,\n activeTab,\n taskIdToTypeMapping,\n ])\n\n const handleScrollEnd = useCallback(() => {\n if (!canNext) {\n return\n }\n setPage(page + 1)\n }, [page, canNext])\n\n return (\n <CreditsModalContainer\n title={data.title}\n className={cn('h-[800px] w-[640px]')}\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n scrollClassName=\"flex flex-col\"\n {...props}\n onScrollEnd={handleScrollEnd}\n >\n <div className=\"w-full sticky top-0 bg-white z-10 pb-[24px] overflow-x-auto\">\n <Tabs\n align=\"left\"\n shape={rounded ? 'rounded' : 'square'}\n value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(Number(value))\n }}\n className=\"\"\n >\n <TabsList>\n {tabs.map(tab => (\n <TabsTrigger key={tab.type} value={tab.type.toString()}>\n {tab.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n\n <div className=\"flex-1 overflow-auto overscroll-contain\">\n <div className=\"grid gap-[18px] md:gap-[12px]\">\n {isLoading && (\n <div className=\"flex flex-1 flex-col items-center justify-center\">\n <LoadingDots />\n </div>\n )}\n\n {!isLoading && (\n <>\n {list.length > 0 ? (\n list.map((item, index) => (\n <div\n key={index}\n className={cn(\n 'flex h-fit items-center justify-between rounded-[8px] bg-[#f2f0f1] px-[16px] py-[20px] text-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <div className=\"grid gap-[6px]\">\n <div className=\"font-bold\">{item.title}</div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {dayjs(item.date).format('YYYY-MM-DD HH:mm').toString()}\n </div>\n {!data.pendingTips && (\n <div\n className={`hidden text-[14px] font-semibold text-[#777] ${item.status === 2 && item.credit_type === 1 ? '!flex' : ''}`}\n >\n <Text html={data.pendingTips} />\n <span>{dayjs.unix(item.pending_time).add(1, 'day').format('YYYY-MM-DD')}</span>\n {data.pendingTips2 && <Text html={data.pendingTips2} />}\n </div>\n )}\n </div>\n <div\n className={cn(\n 'font-bold',\n item.value >= 0 || item.credit_type === CreditType.Expired ? 'text-[#52C41A]' : 'text-[#F84D4F]'\n )}\n >\n {item.value >= 0 && '+'}\n {item.value}\n </div>\n </div>\n ))\n ) : (\n <div className=\"flex flex-col items-center justify-center py-[40px]\">\n <Picture\n className=\"mb-[16px] h-[120px] w-[160px]\"\n source={data?.emptyListImage?.url}\n alt={data?.emptyListImage?.alt || 'empty list image'}\n ></Picture>\n <div className=\"leading-1.4 text-[16px] font-semibold\">{data?.emptyListLabel}</div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n {/* \u79EF\u5206\u5230\u8D26\u65F6\u95F4\u63D0\u9192 */}\n {list.length > 0 && <div className=\"mt-[12px] pb-[24px] text-[14px] font-semibold text-[#999]\">{data.tips}</div>}\n </CreditsModalContainer>\n )\n}\n\nexport default ActivitiesModal\n"],
5
+ "mappings": "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",
6
6
  "names": ["Fragment", "jsx", "jsxs", "useCallback", "useMemo", "useState", "useCreditsContext", "CreditType", "DTC_TASK_TYPE", "TaskSubType", "TaskType", "useActivities", "CreditsModalContainer", "cn", "useHeadlessContext", "Tabs", "TabsList", "TabsTrigger", "LoadingDots", "Picture", "Text", "ROUNDED_BRANDS", "dayjs", "ActivitiesModal", "data", "props", "page", "setPage", "taskIdToTypeMapping", "brand", "rounded", "myActivitiesOptions", "activeTab", "setActiveTab", "tabs", "activities", "canNext", "isLoading", "list", "taskNameMap", "dtcTaskTypeToNameMap", "getTitle", "item", "filtered", "value", "otherItem", "handleScrollEnd", "tab", "index", "ActivitiesModal_default"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as n}from"react/jsx-runtime";import{Tabs as _,TabsList as h,TabsTrigger as j,Picture as E}from"@anker-in/headless-ui";import d from"classnames";import U from"copy-to-clipboard";import I from"dayjs";import{useCallback as a,useEffect as Y,useMemo as p,useState as u}from"react";import{ApprovalStatus as g,AlpcConsumeType as s,RewardType as e}from"../context/const";import{CreditsModalContainer as H}from"./ModalContainer";import O from"./Tip";import $ from"./LoadingDots";import q from"../context/hooks/useMyRewards";import{useHeadlessContext as z}from"@anker-in/lib";import{ROUNDED_BRANDS as B}from"../../../constants";function K({data:t,...L}){const[r,k]=u(s.Coupon),{brand:N}=z(),f=B.includes(N),[P,b]=u(1),[R,m]=u(-1),F=p(()=>[{title:t.couponTab,type:s.Coupon},{title:t.productTab,type:s.Product},{title:t.externalProductTab,type:s.ExternalProduct}].filter(i=>!!i.title),[t.couponTab,t.productTab,t.externalProductTab]);Y(()=>{b(1)},[r]);const{myRewards:v=[],canNext:x,isLoading:C}=q({page:P,pageSize:1e3,consumeType:r}),y=a(i=>i.fulfillment_status&&i.fulfillment_status!=="null"?i.fulfillment_status==="fulfilled"?e.Fulfilled:e.Unfulfilled:i.approval_status===g.Success||i.approval_status===g.DoubleConfirm?e.ApproveSuccess:i.approval_status===g.Failed?e.Failed:e.Pending,[]),G=a(i=>{const l={0:e.GogiftPending,1:e.GogiftApproved,2:e.GogiftSecondConfirm,3:e.GogiftRejected,4:e.GogiftCallbackPending,5:e.GogiftCallbackSuccess,6:e.GogiftCallbackTimeout};return i!==void 0?l[i]??e.GogiftPending:e.GogiftPending},[]),S=p(()=>v.map(i=>{const l={title:i.goods_title,value:i.consume_credits,date:new Date(i.create_time*1e3)};return r===s.Coupon?{...l,type:e.Received,couponCode:i.coupon_code,orderNumber:"",link:""}:r===s.Product?{...l,type:y(i),orderNumber:i.order_number,couponCode:"",link:""}:r===s.ExternalProduct?{...l,type:G(i.approval_status),orderNumber:"",couponCode:"",link:i.link||""}:{...l,type:e.Received,couponCode:"",orderNumber:"",link:""}}),[r,v,y,G]),A=p(()=>({[e.Received]:t.receivedLabel,[e.Pending]:t.pendingLabel,[e.ApproveFail]:t.failedLabel,[e.ApproveSuccess]:t.approveSuccessLabel,[e.Unfulfilled]:t.unfulfilledLabel,[e.Fulfilled]:t.fulfilledLabel,[e.Failed]:t.failedLabel,[e.GogiftPending]:t.goGiftStatus?.pending?.label||t.pendingLabel,[e.GogiftApproved]:t.goGiftStatus?.approved?.label||t.approveSuccessLabel,[e.GogiftSecondConfirm]:t.goGiftStatus?.secondConfirm?.label||t.approveSuccessLabel,[e.GogiftRejected]:t.goGiftStatus?.rejected?.label||t.failedLabel,[e.GogiftCallbackPending]:t.goGiftStatus?.callbackPending?.label||t.pendingLabel,[e.GogiftCallbackSuccess]:t.goGiftStatus?.callbackSuccess?.label||t.receivedLabel,[e.GogiftCallbackTimeout]:t.goGiftStatus?.callbackTimeout?.label||t.failedLabel}),[t]),T=p(()=>({[e.Received]:"",[e.Pending]:t.pendingTip,[e.ApproveFail]:"",[e.ApproveSuccess]:t.confirmedTip,[e.Unfulfilled]:t.processingTip,[e.Fulfilled]:t.ShippedTip,[e.Failed]:"",[e.GogiftPending]:t.goGiftStatus?.pending?.tip||"",[e.GogiftApproved]:t.goGiftStatus?.approved?.tip||"",[e.GogiftSecondConfirm]:t.goGiftStatus?.secondConfirm?.tip||"",[e.GogiftRejected]:t.goGiftStatus?.rejected?.tip||"",[e.GogiftCallbackPending]:t.goGiftStatus?.callbackPending?.tip||"",[e.GogiftCallbackSuccess]:t.goGiftStatus?.callbackSuccess?.tip||"",[e.GogiftCallbackTimeout]:t.goGiftStatus?.callbackTimeout?.tip||""}),[t]),w=p(()=>({[e.Received]:"#52C41A",[e.Pending]:"#999",[e.ApproveFail]:"#F84D4F",[e.ApproveSuccess]:"#999",[e.Unfulfilled]:"#999",[e.Fulfilled]:"#999",[e.Failed]:"#F84D4F",[e.GogiftPending]:"#999",[e.GogiftApproved]:"#999",[e.GogiftSecondConfirm]:"#999",[e.GogiftRejected]:"#F84D4F",[e.GogiftCallbackPending]:"#999",[e.GogiftCallbackSuccess]:"#52C41A",[e.GogiftCallbackTimeout]:"#F84D4F"}),[]),D=a(()=>{x&&b(i=>i+1)},[x]),M=a((i,l)=>{m(l),U(i),setTimeout(()=>{m(-1)},2e3)},[]);return n(H,{title:t.title,className:d("h-[800px] w-[640px]"),useAnimation:!0,animationClassName:"md:translate-y-[100vh]",scrollClassName:"md:mb-0",...L,onScrollEnd:D,children:[o("div",{className:"",children:o(_,{align:"left",shape:f?"rounded":"square",value:r.toString(),onValueChange:i=>{k(Number(i))},children:o(h,{children:F.map(i=>o(j,{value:i.type.toString(),children:i.title},i.type))})})}),C&&o("div",{className:"flex h-full flex-col items-center justify-center",children:o($,{})}),!C&&o("div",{className:"mt-[24px] overflow-auto overscroll-contain",children:S.length>0?o("div",{className:"grid gap-[18px] md:gap-[12px]",children:S.map((i,l)=>n("div",{className:"grid gap-[8px]",children:[i?.orderNumber&&n("div",{className:"text-[15px] font-semibold leading-[1.4] text-[#777]",children:[t.orderNumberLabel,": ",i.orderNumber]}),n("div",{className:d("flex items-center justify-between rounded-[8px] bg-[#f7f8f9] px-[16px] py-[20px]",!f&&"rounded-none"),children:[n("div",{className:"grid gap-[4px]",children:[o("div",{className:"text-[16px] font-bold leading-[1.4]",children:i.title}),n("div",{className:"text-[14px] font-semibold text-[#999]",children:[t.valueLabel,": ",i.value," ",t?.pointUnit]}),n("div",{className:"text-[14px] font-semibold text-[#999]",children:[i?.couponCode?`${t?.code||"Code"}: ${i.couponCode} `:"",i?.couponCode&&o("span",{className:"cursor-pointer text-[14px] font-semibold text-brand underline",onClick:()=>{M(i.couponCode,l)},role:"button",tabIndex:0,onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&c.preventDefault()},children:R===l?t?.copied||"COPIED":t?.copy||"COPY"})]}),i?.link&&o("div",{className:"text-[14px] font-semibold text-[#999]",children:o("a",{href:i.link,target:"_blank",rel:"noopener noreferrer",className:"text-brand underline",children:t?.redeemLinkLabel||"Redeem Link"})})]}),n("div",{className:"grid gap-[4px] text-right",children:[n("div",{className:d("flex items-center justify-end text-[16px] font-bold leading-[1.4]",`text-[${w[i.type]}]`),children:[o("span",{children:A[i.type]}),T[i.type]&&o(O,{info:T[i.type],index:l})]}),o("div",{className:"text-[14px] font-semibold text-[#999]",children:I(i.date).format("YYYY-MM-DD HH:mm").toString()})]})]})]},l))}):n("div",{className:"flex h-full flex-col items-center justify-center",children:[o(E,{className:"mb-[12px] w-[160px]",source:t?.emptyListImage?.url,alt:t?.emptyListImage?.alt||"empty list image"}),o("div",{className:"text-[16px] font-semibold leading-[1.4]",children:t?.emptyListLabel})]})})]})}var re=K;export{re as default};
1
+ import{jsx as o,jsxs as n}from"react/jsx-runtime";import{Tabs as _,TabsList as h,TabsTrigger as j,Picture as E}from"@anker-in/headless-ui";import d from"classnames";import U from"copy-to-clipboard";import I from"dayjs";import{useCallback as a,useEffect as Y,useMemo as p,useState as u}from"react";import{ApprovalStatus as f,AlpcConsumeType as s,RewardType as e}from"../context/const";import{CreditsModalContainer as H}from"./ModalContainer";import O from"./Tip";import $ from"./LoadingDots";import q from"../context/hooks/useMyRewards";import{useHeadlessContext as z}from"@anker-in/lib";import{ROUNDED_BRANDS as B}from"../../../constants";function K({data:t,...L}){const[r,k]=u(s.Coupon),{brand:N}=z(),g=B.includes(N),[P,b]=u(1),[R,m]=u(-1),F=p(()=>[{title:t.couponTab,type:s.Coupon},{title:t.productTab,type:s.Product},{title:t.externalProductTab,type:s.ExternalProduct}].filter(i=>!!i.title),[t.couponTab,t.productTab,t.externalProductTab]);Y(()=>{b(1)},[r]);const{myRewards:v=[],canNext:x,isLoading:C}=q({page:P,pageSize:1e3,consumeType:r}),y=a(i=>i.fulfillment_status&&i.fulfillment_status!=="null"?i.fulfillment_status==="fulfilled"?e.Fulfilled:e.Unfulfilled:i.approval_status===f.Success||i.approval_status===f.DoubleConfirm?e.ApproveSuccess:i.approval_status===f.Failed?e.Failed:e.Pending,[]),G=a(i=>{const l={0:e.GogiftPending,1:e.GogiftApproved,2:e.GogiftSecondConfirm,3:e.GogiftRejected,4:e.GogiftCallbackPending,5:e.GogiftCallbackSuccess,6:e.GogiftCallbackTimeout};return i!==void 0?l[i]??e.GogiftPending:e.GogiftPending},[]),S=p(()=>v.map(i=>{const l={title:i.goods_title,value:i.consume_credits,date:new Date(i.create_time*1e3)};return r===s.Coupon?{...l,type:e.Received,couponCode:i.coupon_code,orderNumber:"",link:""}:r===s.Product?{...l,type:y(i),orderNumber:i.order_number,couponCode:"",link:""}:r===s.ExternalProduct?{...l,type:G(i.approval_status),orderNumber:"",couponCode:"",link:i.link||""}:{...l,type:e.Received,couponCode:"",orderNumber:"",link:""}}),[r,v,y,G]),A=p(()=>({[e.Received]:t.receivedLabel,[e.Pending]:t.pendingLabel,[e.ApproveFail]:t.failedLabel,[e.ApproveSuccess]:t.approveSuccessLabel,[e.Unfulfilled]:t.unfulfilledLabel,[e.Fulfilled]:t.fulfilledLabel,[e.Failed]:t.failedLabel,[e.GogiftPending]:t.goGiftStatus?.pending?.label||t.pendingLabel,[e.GogiftApproved]:t.goGiftStatus?.approved?.label||t.approveSuccessLabel,[e.GogiftSecondConfirm]:t.goGiftStatus?.secondConfirm?.label||t.approveSuccessLabel,[e.GogiftRejected]:t.goGiftStatus?.rejected?.label||t.failedLabel,[e.GogiftCallbackPending]:t.goGiftStatus?.callbackPending?.label||t.pendingLabel,[e.GogiftCallbackSuccess]:t.goGiftStatus?.callbackSuccess?.label||t.receivedLabel,[e.GogiftCallbackTimeout]:t.goGiftStatus?.callbackTimeout?.label||t.failedLabel}),[t]),T=p(()=>({[e.Received]:"",[e.Pending]:t.pendingTip,[e.ApproveFail]:"",[e.ApproveSuccess]:t.confirmedTip,[e.Unfulfilled]:t.processingTip,[e.Fulfilled]:t.ShippedTip,[e.Failed]:"",[e.GogiftPending]:t.goGiftStatus?.pending?.tip||"",[e.GogiftApproved]:t.goGiftStatus?.approved?.tip||"",[e.GogiftSecondConfirm]:t.goGiftStatus?.secondConfirm?.tip||"",[e.GogiftRejected]:t.goGiftStatus?.rejected?.tip||"",[e.GogiftCallbackPending]:t.goGiftStatus?.callbackPending?.tip||"",[e.GogiftCallbackSuccess]:t.goGiftStatus?.callbackSuccess?.tip||"",[e.GogiftCallbackTimeout]:t.goGiftStatus?.callbackTimeout?.tip||""}),[t]),w=p(()=>({[e.Received]:"#52C41A",[e.Pending]:"#999",[e.ApproveFail]:"#F84D4F",[e.ApproveSuccess]:"#999",[e.Unfulfilled]:"#999",[e.Fulfilled]:"#999",[e.Failed]:"#F84D4F",[e.GogiftPending]:"#999",[e.GogiftApproved]:"#999",[e.GogiftSecondConfirm]:"#999",[e.GogiftRejected]:"#F84D4F",[e.GogiftCallbackPending]:"#999",[e.GogiftCallbackSuccess]:"#52C41A",[e.GogiftCallbackTimeout]:"#F84D4F"}),[]),D=a(()=>{x&&b(i=>i+1)},[x]),M=a((i,l)=>{m(l),U(i),setTimeout(()=>{m(-1)},2e3)},[]);return n(H,{title:t.title,className:d("h-[800px] w-[640px]"),useAnimation:!0,animationClassName:"md:translate-y-[100vh]",scrollClassName:"md:mb-0 flex flex-col",...L,onScrollEnd:D,children:[o("div",{className:"shrink-0",children:o(_,{align:"left",shape:g?"rounded":"square",value:r.toString(),onValueChange:i=>{k(Number(i))},children:o(h,{children:F.map(i=>o(j,{value:i.type.toString(),children:i.title},i.type))})})}),C&&o("div",{className:"flex flex-1 flex-col items-center justify-center",children:o($,{})}),!C&&o("div",{className:"mt-[24px] flex-1 overflow-auto overscroll-contain pb-[24px] md:pb-[48px]",children:S.length>0?o("div",{className:"grid gap-[18px] md:gap-[12px]",children:S.map((i,l)=>n("div",{className:"grid gap-[8px]",children:[i?.orderNumber&&n("div",{className:"text-[15px] font-semibold leading-[1.4] text-[#777]",children:[t.orderNumberLabel,": ",i.orderNumber]}),n("div",{className:d("flex items-center justify-between rounded-[8px] bg-[#f7f8f9] px-[16px] py-[20px]",!g&&"rounded-none"),children:[n("div",{className:"grid gap-[4px]",children:[o("div",{className:"text-[16px] font-bold leading-[1.4]",children:i.title}),n("div",{className:"text-[14px] font-semibold text-[#999]",children:[t.valueLabel,": ",i.value," ",t?.pointUnit]}),n("div",{className:"text-[14px] font-semibold text-[#999]",children:[i?.couponCode?`${t?.code||"Code"}: ${i.couponCode} `:"",i?.couponCode&&o("span",{className:"cursor-pointer text-[14px] font-semibold text-brand underline",onClick:()=>{M(i.couponCode,l)},role:"button",tabIndex:0,onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&c.preventDefault()},children:R===l?t?.copied||"COPIED":t?.copy||"COPY"})]}),i?.link&&o("div",{className:"text-[14px] font-semibold text-[#999]",children:o("a",{href:i.link,target:"_blank",rel:"noopener noreferrer",className:"text-brand underline",children:t?.redeemLinkLabel||"Redeem Link"})})]}),n("div",{className:"grid gap-[4px] text-right",children:[n("div",{className:d("flex items-center justify-end text-[16px] font-bold leading-[1.4]",`text-[${w[i.type]}]`),children:[o("span",{children:A[i.type]}),T[i.type]&&o(O,{info:T[i.type],index:l})]}),o("div",{className:"text-[14px] font-semibold text-[#999]",children:I(i.date).format("YYYY-MM-DD HH:mm").toString()})]})]})]},l))}):n("div",{className:"flex h-full flex-col items-center justify-center",children:[o(E,{className:"mb-[12px] w-[160px]",source:t?.emptyListImage?.url,alt:t?.emptyListImage?.alt||"empty list image"}),o("div",{className:"text-[16px] font-semibold leading-[1.4]",children:t?.emptyListLabel})]})})]})}var re=K;export{re as default};
2
2
  //# sourceMappingURL=RewardsModal.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/credits/modal/RewardsModal.tsx"],
4
- "sourcesContent": ["import { Tabs, TabsList, TabsTrigger, Picture } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport clipboard from 'copy-to-clipboard'\nimport dayjs from 'dayjs'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { ApprovalStatus, AlpcConsumeType, RewardType } from '../context/const'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\nimport Tip from './Tip'\nimport LoadingDots from './LoadingDots'\nimport useMyRewards from '../context/hooks/useMyRewards'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport interface RewardsCopy {\n title: string\n orderNumberLabel: string\n valueLabel: string\n receivedLabel: string\n failedLabel: string\n approveSuccessLabel: string\n couponTab: string\n productTab: string\n externalProductTab?: string\n pendingLabel: string\n unfulfilledLabel: string\n fulfilledLabel: string\n confirmedTip: string\n pendingTip: string\n processingTip: string\n ShippedTip: string\n emptyListLabel: string\n pointUnit: string\n code: string\n copied: string\n copy: string\n redeemLinkLabel?: string\n goGiftStatus?: {\n pending?: {\n label: string\n tip: string\n }\n approved?: {\n label: string\n tip: string\n }\n secondConfirm?: {\n label: string\n tip: string\n }\n rejected?: {\n label: string\n tip: string\n }\n callbackPending?: {\n label: string\n tip: string\n }\n callbackSuccess?: {\n label: string\n tip: string\n }\n callbackTimeout?: {\n label: string\n tip: string\n }\n }\n emptyListImage: {\n url: string\n alt?: string\n }\n}\ninterface RewardsModalProps extends ModalContainerProps {\n data: RewardsCopy\n}\n\nfunction RewardsModal({ data, ...props }: RewardsModalProps) {\n const [activeTab, setActiveTab] = useState(AlpcConsumeType.Coupon)\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const [page, setPage] = useState(1)\n const [copied, setCopied] = useState(-1)\n\n const tabs = useMemo(() => {\n return [\n { title: data.couponTab, type: AlpcConsumeType.Coupon },\n { title: data.productTab, type: AlpcConsumeType.Product },\n { title: data.externalProductTab, type: AlpcConsumeType.ExternalProduct },\n ].filter((tab): tab is { title: string; type: number } => !!tab.title)\n }, [data.couponTab, data.productTab, data.externalProductTab])\n\n // Reset page when switching tabs\n useEffect(() => {\n setPage(1)\n }, [activeTab])\n\n const { myRewards = [], canNext, isLoading } = useMyRewards({\n page,\n pageSize: 1000,\n consumeType: activeTab,\n })\n\n const getProductType = useCallback((item: any) => {\n if (item.fulfillment_status && item.fulfillment_status !== 'null') {\n return item.fulfillment_status === 'fulfilled' ? RewardType.Fulfilled : RewardType.Unfulfilled\n }\n\n if (item.approval_status === ApprovalStatus.Success || item.approval_status === ApprovalStatus.DoubleConfirm) {\n return RewardType.ApproveSuccess\n }\n\n if (item.approval_status === ApprovalStatus.Failed) {\n return RewardType.Failed\n }\n\n return RewardType.Pending\n }, [])\n\n const getGoGiftType = useCallback((status?: number) => {\n const statusMap: Record<number, RewardType> = {\n 0: RewardType.GogiftPending,\n 1: RewardType.GogiftApproved,\n 2: RewardType.GogiftSecondConfirm,\n 3: RewardType.GogiftRejected,\n 4: RewardType.GogiftCallbackPending,\n 5: RewardType.GogiftCallbackSuccess,\n 6: RewardType.GogiftCallbackTimeout,\n }\n return status !== undefined ? (statusMap[status] ?? RewardType.GogiftPending) : RewardType.GogiftPending\n }, [])\n\n const list = useMemo(() => {\n return myRewards.map(item => {\n const base = {\n title: item.goods_title,\n value: item.consume_credits,\n date: new Date(item.create_time * 1000),\n }\n\n if (activeTab === AlpcConsumeType.Coupon) {\n return {\n ...base,\n type: RewardType.Received,\n couponCode: item.coupon_code,\n orderNumber: '',\n link: '',\n }\n }\n\n if (activeTab === AlpcConsumeType.Product) {\n return {\n ...base,\n type: getProductType(item),\n orderNumber: item.order_number,\n couponCode: '',\n link: '',\n }\n }\n\n if (activeTab === AlpcConsumeType.ExternalProduct) {\n return {\n ...base,\n type: getGoGiftType(item.approval_status),\n orderNumber: '',\n couponCode: '',\n link: item.link || '',\n }\n }\n\n return { ...base, type: RewardType.Received, couponCode: '', orderNumber: '', link: '' }\n })\n }, [activeTab, myRewards, getProductType, getGoGiftType])\n\n\n const TypeMap = useMemo(() => {\n return {\n [RewardType.Received]: data.receivedLabel,\n [RewardType.Pending]: data.pendingLabel,\n [RewardType.ApproveFail]: data.failedLabel,\n [RewardType.ApproveSuccess]: data.approveSuccessLabel,\n [RewardType.Unfulfilled]: data.unfulfilledLabel,\n [RewardType.Fulfilled]: data.fulfilledLabel,\n [RewardType.Failed]: data.failedLabel,\n [RewardType.GogiftPending]: data.goGiftStatus?.pending?.label || data.pendingLabel,\n [RewardType.GogiftApproved]: data.goGiftStatus?.approved?.label || data.approveSuccessLabel,\n [RewardType.GogiftSecondConfirm]: data.goGiftStatus?.secondConfirm?.label || data.approveSuccessLabel,\n [RewardType.GogiftRejected]: data.goGiftStatus?.rejected?.label || data.failedLabel,\n [RewardType.GogiftCallbackPending]: data.goGiftStatus?.callbackPending?.label || data.pendingLabel,\n [RewardType.GogiftCallbackSuccess]: data.goGiftStatus?.callbackSuccess?.label || data.receivedLabel,\n [RewardType.GogiftCallbackTimeout]: data.goGiftStatus?.callbackTimeout?.label || data.failedLabel,\n }\n }, [data])\n\n const TipMap = useMemo(() => {\n return {\n [RewardType.Received]: '',\n [RewardType.Pending]: data.pendingTip,\n [RewardType.ApproveFail]: '',\n [RewardType.ApproveSuccess]: data.confirmedTip,\n [RewardType.Unfulfilled]: data.processingTip,\n [RewardType.Fulfilled]: data.ShippedTip,\n [RewardType.Failed]: '',\n [RewardType.GogiftPending]: data.goGiftStatus?.pending?.tip || '',\n [RewardType.GogiftApproved]: data.goGiftStatus?.approved?.tip || '',\n [RewardType.GogiftSecondConfirm]: data.goGiftStatus?.secondConfirm?.tip || '',\n [RewardType.GogiftRejected]: data.goGiftStatus?.rejected?.tip || '',\n [RewardType.GogiftCallbackPending]: data.goGiftStatus?.callbackPending?.tip || '',\n [RewardType.GogiftCallbackSuccess]: data.goGiftStatus?.callbackSuccess?.tip || '',\n [RewardType.GogiftCallbackTimeout]: data.goGiftStatus?.callbackTimeout?.tip || '',\n }\n }, [data])\n\n const ColorMap = useMemo(() => {\n return {\n [RewardType.Received]: '#52C41A',\n [RewardType.Pending]: '#999',\n [RewardType.ApproveFail]: '#F84D4F',\n [RewardType.ApproveSuccess]: '#999',\n [RewardType.Unfulfilled]: '#999',\n [RewardType.Fulfilled]: '#999',\n [RewardType.Failed]: '#F84D4F',\n [RewardType.GogiftPending]: '#999',\n [RewardType.GogiftApproved]: '#999',\n [RewardType.GogiftSecondConfirm]: '#999',\n [RewardType.GogiftRejected]: '#F84D4F',\n [RewardType.GogiftCallbackPending]: '#999',\n [RewardType.GogiftCallbackSuccess]: '#52C41A',\n [RewardType.GogiftCallbackTimeout]: '#F84D4F',\n }\n }, [])\n\n const handleScrollEnd = useCallback(() => {\n if (canNext) {\n setPage(prev => prev + 1)\n }\n }, [canNext])\n\n const handleCopy = useCallback((code: string, idx: number) => {\n setCopied(idx)\n clipboard(code)\n setTimeout(() => {\n setCopied(-1)\n }, 2000)\n }, [])\n\n\n return (\n <CreditsModalContainer\n title={data.title}\n className={classNames('h-[800px] w-[640px]')}\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n scrollClassName=\"md:mb-0\"\n {...props}\n onScrollEnd={handleScrollEnd}\n >\n <div className=\"\">\n <Tabs\n align=\"left\"\n shape={rounded ? 'rounded' : 'square'}\n value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(Number(value))\n }}\n >\n <TabsList>\n {tabs.map(tab => (\n <TabsTrigger key={tab.type} value={tab.type.toString()}>\n {tab.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n\n {isLoading && (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <LoadingDots />\n </div>\n )}\n\n {!isLoading && (\n <div className=\"mt-[24px] overflow-auto overscroll-contain\">\n {list.length > 0 ? (\n <div className=\"grid gap-[18px] md:gap-[12px]\">\n {list.map((item, index) => (\n <div key={index} className=\"grid gap-[8px]\">\n {item?.orderNumber && (\n <div className=\"text-[15px] font-semibold leading-[1.4] text-[#777]\">\n {data.orderNumberLabel}: {item.orderNumber}\n </div>\n )}\n <div\n className={classNames(\n 'flex items-center justify-between rounded-[8px] bg-[#f7f8f9] px-[16px] py-[20px]',\n !rounded && 'rounded-none'\n )}\n >\n <div className=\"grid gap-[4px]\">\n <div className=\"text-[16px] font-bold leading-[1.4]\">{item.title}</div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {data.valueLabel}: {item.value} {data?.pointUnit}\n </div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {item?.couponCode ? `${data?.code || 'Code'}: ${item.couponCode} ` : ''}\n {item?.couponCode && (\n <span\n className=\"cursor-pointer text-[14px] font-semibold text-brand underline\"\n onClick={() => {\n handleCopy(item.couponCode, index)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {copied === index ? data?.copied || 'COPIED' : data?.copy || 'COPY'}\n </span>\n )}\n </div>\n {item?.link && (\n <div className=\"text-[14px] font-semibold text-[#999]\">\n <a\n href={item.link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-brand underline\"\n >\n {data?.redeemLinkLabel || 'Redeem Link'}\n </a>\n </div>\n )}\n </div>\n <div className=\"grid gap-[4px] text-right\">\n <div\n className={classNames(\n 'flex items-center justify-end text-[16px] font-bold leading-[1.4]',\n `text-[${ColorMap[item.type]}]`\n )}\n >\n <span>{TypeMap[item.type]}</span>\n {TipMap[item.type] && <Tip info={TipMap[item.type]} index={index} />}\n </div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {dayjs(item.date).format('YYYY-MM-DD HH:mm').toString()}\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <Picture\n className=\"mb-[12px] w-[160px]\"\n source={data?.emptyListImage?.url}\n alt={data?.emptyListImage?.alt || 'empty list image'}\n ></Picture>\n <div className=\"text-[16px] font-semibold leading-[1.4]\">{data?.emptyListLabel}</div>\n </div>\n )}\n </div>\n )}\n </CreditsModalContainer>\n )\n}\n\nexport default RewardsModal\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Tabs, TabsList, TabsTrigger, Picture } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport clipboard from 'copy-to-clipboard'\nimport dayjs from 'dayjs'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { ApprovalStatus, AlpcConsumeType, RewardType } from '../context/const'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\nimport Tip from './Tip'\nimport LoadingDots from './LoadingDots'\nimport useMyRewards from '../context/hooks/useMyRewards'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport interface RewardsCopy {\n title: string\n orderNumberLabel: string\n valueLabel: string\n receivedLabel: string\n failedLabel: string\n approveSuccessLabel: string\n couponTab: string\n productTab: string\n externalProductTab?: string\n pendingLabel: string\n unfulfilledLabel: string\n fulfilledLabel: string\n confirmedTip: string\n pendingTip: string\n processingTip: string\n ShippedTip: string\n emptyListLabel: string\n pointUnit: string\n code: string\n copied: string\n copy: string\n redeemLinkLabel?: string\n goGiftStatus?: {\n pending?: {\n label: string\n tip: string\n }\n approved?: {\n label: string\n tip: string\n }\n secondConfirm?: {\n label: string\n tip: string\n }\n rejected?: {\n label: string\n tip: string\n }\n callbackPending?: {\n label: string\n tip: string\n }\n callbackSuccess?: {\n label: string\n tip: string\n }\n callbackTimeout?: {\n label: string\n tip: string\n }\n }\n emptyListImage: {\n url: string\n alt?: string\n }\n}\ninterface RewardsModalProps extends ModalContainerProps {\n data: RewardsCopy\n}\n\nfunction RewardsModal({ data, ...props }: RewardsModalProps) {\n const [activeTab, setActiveTab] = useState(AlpcConsumeType.Coupon)\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const [page, setPage] = useState(1)\n const [copied, setCopied] = useState(-1)\n\n const tabs = useMemo(() => {\n return [\n { title: data.couponTab, type: AlpcConsumeType.Coupon },\n { title: data.productTab, type: AlpcConsumeType.Product },\n { title: data.externalProductTab, type: AlpcConsumeType.ExternalProduct },\n ].filter((tab): tab is { title: string; type: number } => !!tab.title)\n }, [data.couponTab, data.productTab, data.externalProductTab])\n\n // Reset page when switching tabs\n useEffect(() => {\n setPage(1)\n }, [activeTab])\n\n const { myRewards = [], canNext, isLoading } = useMyRewards({\n page,\n pageSize: 1000,\n consumeType: activeTab,\n })\n\n const getProductType = useCallback((item: any) => {\n if (item.fulfillment_status && item.fulfillment_status !== 'null') {\n return item.fulfillment_status === 'fulfilled' ? RewardType.Fulfilled : RewardType.Unfulfilled\n }\n\n if (item.approval_status === ApprovalStatus.Success || item.approval_status === ApprovalStatus.DoubleConfirm) {\n return RewardType.ApproveSuccess\n }\n\n if (item.approval_status === ApprovalStatus.Failed) {\n return RewardType.Failed\n }\n\n return RewardType.Pending\n }, [])\n\n const getGoGiftType = useCallback((status?: number) => {\n const statusMap: Record<number, RewardType> = {\n 0: RewardType.GogiftPending,\n 1: RewardType.GogiftApproved,\n 2: RewardType.GogiftSecondConfirm,\n 3: RewardType.GogiftRejected,\n 4: RewardType.GogiftCallbackPending,\n 5: RewardType.GogiftCallbackSuccess,\n 6: RewardType.GogiftCallbackTimeout,\n }\n return status !== undefined ? (statusMap[status] ?? RewardType.GogiftPending) : RewardType.GogiftPending\n }, [])\n\n const list = useMemo(() => {\n return myRewards.map(item => {\n const base = {\n title: item.goods_title,\n value: item.consume_credits,\n date: new Date(item.create_time * 1000),\n }\n\n if (activeTab === AlpcConsumeType.Coupon) {\n return {\n ...base,\n type: RewardType.Received,\n couponCode: item.coupon_code,\n orderNumber: '',\n link: '',\n }\n }\n\n if (activeTab === AlpcConsumeType.Product) {\n return {\n ...base,\n type: getProductType(item),\n orderNumber: item.order_number,\n couponCode: '',\n link: '',\n }\n }\n\n if (activeTab === AlpcConsumeType.ExternalProduct) {\n return {\n ...base,\n type: getGoGiftType(item.approval_status),\n orderNumber: '',\n couponCode: '',\n link: item.link || '',\n }\n }\n\n return { ...base, type: RewardType.Received, couponCode: '', orderNumber: '', link: '' }\n })\n }, [activeTab, myRewards, getProductType, getGoGiftType])\n\n\n const TypeMap = useMemo(() => {\n return {\n [RewardType.Received]: data.receivedLabel,\n [RewardType.Pending]: data.pendingLabel,\n [RewardType.ApproveFail]: data.failedLabel,\n [RewardType.ApproveSuccess]: data.approveSuccessLabel,\n [RewardType.Unfulfilled]: data.unfulfilledLabel,\n [RewardType.Fulfilled]: data.fulfilledLabel,\n [RewardType.Failed]: data.failedLabel,\n [RewardType.GogiftPending]: data.goGiftStatus?.pending?.label || data.pendingLabel,\n [RewardType.GogiftApproved]: data.goGiftStatus?.approved?.label || data.approveSuccessLabel,\n [RewardType.GogiftSecondConfirm]: data.goGiftStatus?.secondConfirm?.label || data.approveSuccessLabel,\n [RewardType.GogiftRejected]: data.goGiftStatus?.rejected?.label || data.failedLabel,\n [RewardType.GogiftCallbackPending]: data.goGiftStatus?.callbackPending?.label || data.pendingLabel,\n [RewardType.GogiftCallbackSuccess]: data.goGiftStatus?.callbackSuccess?.label || data.receivedLabel,\n [RewardType.GogiftCallbackTimeout]: data.goGiftStatus?.callbackTimeout?.label || data.failedLabel,\n }\n }, [data])\n\n const TipMap = useMemo(() => {\n return {\n [RewardType.Received]: '',\n [RewardType.Pending]: data.pendingTip,\n [RewardType.ApproveFail]: '',\n [RewardType.ApproveSuccess]: data.confirmedTip,\n [RewardType.Unfulfilled]: data.processingTip,\n [RewardType.Fulfilled]: data.ShippedTip,\n [RewardType.Failed]: '',\n [RewardType.GogiftPending]: data.goGiftStatus?.pending?.tip || '',\n [RewardType.GogiftApproved]: data.goGiftStatus?.approved?.tip || '',\n [RewardType.GogiftSecondConfirm]: data.goGiftStatus?.secondConfirm?.tip || '',\n [RewardType.GogiftRejected]: data.goGiftStatus?.rejected?.tip || '',\n [RewardType.GogiftCallbackPending]: data.goGiftStatus?.callbackPending?.tip || '',\n [RewardType.GogiftCallbackSuccess]: data.goGiftStatus?.callbackSuccess?.tip || '',\n [RewardType.GogiftCallbackTimeout]: data.goGiftStatus?.callbackTimeout?.tip || '',\n }\n }, [data])\n\n const ColorMap = useMemo(() => {\n return {\n [RewardType.Received]: '#52C41A',\n [RewardType.Pending]: '#999',\n [RewardType.ApproveFail]: '#F84D4F',\n [RewardType.ApproveSuccess]: '#999',\n [RewardType.Unfulfilled]: '#999',\n [RewardType.Fulfilled]: '#999',\n [RewardType.Failed]: '#F84D4F',\n [RewardType.GogiftPending]: '#999',\n [RewardType.GogiftApproved]: '#999',\n [RewardType.GogiftSecondConfirm]: '#999',\n [RewardType.GogiftRejected]: '#F84D4F',\n [RewardType.GogiftCallbackPending]: '#999',\n [RewardType.GogiftCallbackSuccess]: '#52C41A',\n [RewardType.GogiftCallbackTimeout]: '#F84D4F',\n }\n }, [])\n\n const handleScrollEnd = useCallback(() => {\n if (canNext) {\n setPage(prev => prev + 1)\n }\n }, [canNext])\n\n const handleCopy = useCallback((code: string, idx: number) => {\n setCopied(idx)\n clipboard(code)\n setTimeout(() => {\n setCopied(-1)\n }, 2000)\n }, [])\n\n\n return (\n <CreditsModalContainer\n title={data.title}\n className={classNames('h-[800px] w-[640px]')}\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n scrollClassName=\"md:mb-0 flex flex-col\"\n {...props}\n onScrollEnd={handleScrollEnd}\n >\n <div className=\"shrink-0\">\n <Tabs\n align=\"left\"\n shape={rounded ? 'rounded' : 'square'}\n value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(Number(value))\n }}\n >\n <TabsList>\n {tabs.map(tab => (\n <TabsTrigger key={tab.type} value={tab.type.toString()}>\n {tab.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n\n {isLoading && (\n <div className=\"flex flex-1 flex-col items-center justify-center\">\n <LoadingDots />\n </div>\n )}\n\n {!isLoading && (\n <div className=\"mt-[24px] flex-1 overflow-auto overscroll-contain pb-[24px] md:pb-[48px]\">\n {list.length > 0 ? (\n <div className=\"grid gap-[18px] md:gap-[12px]\">\n {list.map((item, index) => (\n <div key={index} className=\"grid gap-[8px]\">\n {item?.orderNumber && (\n <div className=\"text-[15px] font-semibold leading-[1.4] text-[#777]\">\n {data.orderNumberLabel}: {item.orderNumber}\n </div>\n )}\n <div\n className={classNames(\n 'flex items-center justify-between rounded-[8px] bg-[#f7f8f9] px-[16px] py-[20px]',\n !rounded && 'rounded-none'\n )}\n >\n <div className=\"grid gap-[4px]\">\n <div className=\"text-[16px] font-bold leading-[1.4]\">{item.title}</div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {data.valueLabel}: {item.value} {data?.pointUnit}\n </div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {item?.couponCode ? `${data?.code || 'Code'}: ${item.couponCode} ` : ''}\n {item?.couponCode && (\n <span\n className=\"cursor-pointer text-[14px] font-semibold text-brand underline\"\n onClick={() => {\n handleCopy(item.couponCode, index)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {copied === index ? data?.copied || 'COPIED' : data?.copy || 'COPY'}\n </span>\n )}\n </div>\n {item?.link && (\n <div className=\"text-[14px] font-semibold text-[#999]\">\n <a\n href={item.link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-brand underline\"\n >\n {data?.redeemLinkLabel || 'Redeem Link'}\n </a>\n </div>\n )}\n </div>\n <div className=\"grid gap-[4px] text-right\">\n <div\n className={classNames(\n 'flex items-center justify-end text-[16px] font-bold leading-[1.4]',\n `text-[${ColorMap[item.type]}]`\n )}\n >\n <span>{TypeMap[item.type]}</span>\n {TipMap[item.type] && <Tip info={TipMap[item.type]} index={index} />}\n </div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {dayjs(item.date).format('YYYY-MM-DD HH:mm').toString()}\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <Picture\n className=\"mb-[12px] w-[160px]\"\n source={data?.emptyListImage?.url}\n alt={data?.emptyListImage?.alt || 'empty list image'}\n ></Picture>\n <div className=\"text-[16px] font-semibold leading-[1.4]\">{data?.emptyListLabel}</div>\n </div>\n )}\n </div>\n )}\n </CreditsModalContainer>\n )\n}\n\nexport default RewardsModal\n"],
5
+ "mappings": "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",
6
6
  "names": ["jsx", "jsxs", "Tabs", "TabsList", "TabsTrigger", "Picture", "classNames", "clipboard", "dayjs", "useCallback", "useEffect", "useMemo", "useState", "ApprovalStatus", "AlpcConsumeType", "RewardType", "CreditsModalContainer", "Tip", "LoadingDots", "useMyRewards", "useHeadlessContext", "ROUNDED_BRANDS", "RewardsModal", "data", "props", "activeTab", "setActiveTab", "brand", "rounded", "page", "setPage", "copied", "setCopied", "tabs", "tab", "myRewards", "canNext", "isLoading", "getProductType", "item", "getGoGiftType", "status", "statusMap", "list", "base", "TypeMap", "TipMap", "ColorMap", "handleScrollEnd", "prev", "handleCopy", "code", "idx", "value", "index", "e", "RewardsModal_default"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anker-in/campaign-ui",
3
- "version": "0.4.5-beta.08",
3
+ "version": "0.4.5",
4
4
  "description": "Campaign UI components and utilities for Anker projects",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -16,8 +16,10 @@ function useActivities({ page, pageSize, options = {} }: { page: number; pageSiz
16
16
 
17
17
  const { isMutating: isLoading, trigger } = useAlpcMutation<
18
18
  {
19
- total: number
20
- creditLogs: CreditLogResponse[]
19
+ data: {
20
+ total: number
21
+ creditLogs: CreditLogResponse[]
22
+ }
21
23
  },
22
24
  {
23
25
  page: number
@@ -42,8 +44,8 @@ function useActivities({ page, pageSize, options = {} }: { page: number; pageSiz
42
44
  trigger(params, {
43
45
  onSuccess(responseData) {
44
46
  setCurrentPage(page)
45
- setTotal(responseData?.total)
46
- setActivities(activities.concat(responseData?.creditLogs || []))
47
+ setTotal(responseData?.data?.total)
48
+ setActivities(activities.concat(responseData?.data?.creditLogs || []))
47
49
  },
48
50
  })
49
51
  }, [activities, profile, page, pageSize, options, trigger])
@@ -36,18 +36,25 @@ type Fetcher<TData, TBody> = (url: string, data: { arg: TBody }) => Promise<TDat
36
36
  /**
37
37
  * 统一处理 ALPC 接口返回的数据结构
38
38
  * 兼容一层 data 和两层 data 的场景:
39
- * - 两层 data: {data: {data: ..., code: 27004}}
40
- * - 一层 data: {data: ..., code: 27004}
39
+ * - 两层 data: {data: {data: ..., code: 27004}} → 剥掉外层,返回内层 {data: ..., code: 27004}
40
+ * - 一层 data: {data: ..., code: 27004} → 直接返回,不做处理
41
+ *
42
+ * 判断两层的依据:responseData.data.data 存在(外层 data 内部还有一层 data)
41
43
  */
42
44
  const normalizeResponseData = (responseData: any) => {
43
45
  if (!responseData) return responseData
44
46
 
45
- // 如果 responseData.data 存在且是一个对象(不是数组),说明是两层 data 结构
46
- if (responseData.data && typeof responseData.data === 'object' && !Array.isArray(responseData.data)) {
47
+ // 两层结构:responseData.data 是对象,且其内部还有 data 字段
48
+ if (
49
+ responseData.data &&
50
+ typeof responseData.data === 'object' &&
51
+ !Array.isArray(responseData.data) &&
52
+ 'data' in responseData.data
53
+ ) {
47
54
  return responseData.data
48
55
  }
49
56
 
50
- // 一层 data 结构或其他情况,直接返回
57
+ // 一层结构,直接返回
51
58
  return responseData
52
59
  }
53
60
 
@@ -23,7 +23,7 @@ function useMyRewards({
23
23
  const [total, setTotal] = useState(0)
24
24
 
25
25
  const { isMutating: isLoading, trigger } = useAlpcMutation<
26
- { redeem_logs: RedeemLogResponse[]; total: number },
26
+ { data: { redeem_logs: RedeemLogResponse[]; total: number } },
27
27
  {
28
28
  page: number
29
29
  page_size: number
@@ -52,8 +52,8 @@ function useMyRewards({
52
52
  },
53
53
  {
54
54
  onSuccess(responseData) {
55
- setTotal(responseData?.total)
56
- setMyRewards(responseData?.redeem_logs || [])
55
+ setTotal(responseData?.data?.total)
56
+ setMyRewards(responseData?.data?.redeem_logs || [])
57
57
  },
58
58
  }
59
59
  )
@@ -38,10 +38,9 @@ export const useRedeemAndBuy = (
38
38
  user_id: profile?.user_id,
39
39
  rule_id: arg.redeemId,
40
40
  })
41
- const data = (res?.data || res) as { success?: boolean; coupon_code?: string }
42
- if (res && data?.coupon_code) {
41
+ if (res && res.data?.coupon_code) {
43
42
  buyNow({
44
- discountCodes: [data.coupon_code],
43
+ discountCodes: [res.data.coupon_code],
45
44
  lineItems: [
46
45
  {
47
46
  variant: arg.productVariant,
@@ -21,7 +21,7 @@ function useRedeemableList(props?: { consumeType: AlpcConsumeType }) {
21
21
  const [redeemableList, setRedeemableList] = useState<ConsumeCreditRuleResponse[]>([])
22
22
  const { isMutating: listLoading, trigger } = useAlpcMutation<
23
23
  {
24
- consume_credit_rules: ConsumeCreditRuleResponse[]
24
+ data: { consume_credit_rules: ConsumeCreditRuleResponse[] }
25
25
  },
26
26
  { consume_type?: AlpcConsumeType; user_id?: string }
27
27
  >({
@@ -44,7 +44,7 @@ function useRedeemableList(props?: { consumeType: AlpcConsumeType }) {
44
44
  {
45
45
  onSuccess(responseData) {
46
46
  console.log('responseData', responseData)
47
- let list = responseData?.consume_credit_rules || []
47
+ let list = responseData?.data?.consume_credit_rules || []
48
48
  setRedeemableList(list)
49
49
  },
50
50
  }
@@ -41,8 +41,8 @@ export const useUploadReceipt = () => {
41
41
  const result = await response.json()
42
42
  const normalizedData = normalizeResponseData(result)
43
43
  return {
44
- ok: normalizedData?.code === 0,
45
- code: normalizedData?.code ?? -1,
44
+ ok: normalizedData?.data?.code === 0,
45
+ code: normalizedData?.data?.code ?? -1,
46
46
  }
47
47
  }
48
48
 
@@ -28,13 +28,20 @@ export const CreditsCash = ({ copy, id }: { copy: CreditsCashCopy; id?: string }
28
28
  })
29
29
 
30
30
  const list = useMemo(() => {
31
- return productByHandles
32
- ?.map((product: Product) => {
33
- const config = (copy.list || []).find(item => item.products?.[0]?.handle === product.handle)
31
+ return (copy?.list || [])
32
+ .map(config => {
33
+ const handle = config?.products?.[0]?.handle
34
+ const sku = config?.products?.[0]?.sku
34
35
  const alpcData = redeemableList.find(item => item.id?.toString() === config?.redeemId?.toString())
35
- const productVariant =
36
- product.variants?.find((variant: any) => variant.sku === config?.products?.[0]?.sku) || product.variants?.[0]
36
+
37
+ // productByHandles 中找到对应 handle product
38
+ const product = productByHandles?.find((p: Product) => p.handle === handle)
39
+ if (!product) return null
40
+
41
+ // 在 product 的 variants 中找到对应 sku 的 variant
42
+ const productVariant = product.variants?.find((variant: any) => variant.sku === sku) || product.variants?.[0]
37
43
  if (!alpcData || !productVariant) return null
44
+
38
45
  return {
39
46
  product,
40
47
  productVariant,
@@ -32,9 +32,8 @@ function RedeemCouponModal({
32
32
  return
33
33
  }
34
34
 
35
- const data = responseData?.data || responseData
36
- if (data?.success) {
37
- setCouponCode(data.coupon_code)
35
+ if (responseData.data?.success) {
36
+ setCouponCode(responseData.data.coupon_code)
38
37
  fetchCreditInfo(profile?.user_id)
39
38
  } else {
40
39
  let errorMsg
@@ -40,7 +40,7 @@ function RedeemVirtualProductModal({
40
40
  return
41
41
  }
42
42
 
43
- const data = responseData?.data || responseData
43
+ const data = responseData.data
44
44
  if (data?.id) {
45
45
  setGiftCardId(data.id)
46
46
  fetchCreditInfo(profile?.user_id)
@@ -121,8 +121,8 @@ function RedeemVirtualProductModal({
121
121
  // GiftCard 类型使用 Product 接口,传递默认地址
122
122
  const defaultAddress = {
123
123
  email: profile?.email || '',
124
- first_name: profile?.firstName || '',
125
- last_name: profile?.lastName || '',
124
+ first_name: profile?.firstName || 'Anker',
125
+ last_name: profile?.lastName || 'Direct',
126
126
  address1: 'Default Address',
127
127
  city: 'Default City',
128
128
  province: 'Default Province',