@anker-in/campaign-ui 0.4.5-beta.9 → 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 (36) hide show
  1. package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js +1 -1
  2. package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js.map +2 -2
  3. package/dist/cjs/components/credits/context/hooks/useRedeemAndBuy.js +1 -1
  4. package/dist/cjs/components/credits/context/hooks/useRedeemAndBuy.js.map +3 -3
  5. package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
  6. package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
  7. package/dist/cjs/components/credits/creditsRedeemList/RedeemCouponModal.js +1 -1
  8. package/dist/cjs/components/credits/creditsRedeemList/RedeemCouponModal.js.map +3 -3
  9. package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal.js +1 -1
  10. package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal.js.map +2 -2
  11. package/dist/cjs/components/credits/modal/ActivitiesModal.js +1 -1
  12. package/dist/cjs/components/credits/modal/ActivitiesModal.js.map +2 -2
  13. package/dist/cjs/components/credits/modal/RewardsModal.js +1 -1
  14. package/dist/cjs/components/credits/modal/RewardsModal.js.map +2 -2
  15. package/dist/esm/components/credits/context/hooks/useAlpcFetch.js +1 -1
  16. package/dist/esm/components/credits/context/hooks/useAlpcFetch.js.map +2 -2
  17. package/dist/esm/components/credits/context/hooks/useRedeemAndBuy.js +1 -1
  18. package/dist/esm/components/credits/context/hooks/useRedeemAndBuy.js.map +3 -3
  19. package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
  20. package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
  21. package/dist/esm/components/credits/creditsRedeemList/RedeemCouponModal.js +1 -1
  22. package/dist/esm/components/credits/creditsRedeemList/RedeemCouponModal.js.map +3 -3
  23. package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal.js +1 -1
  24. package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal.js.map +2 -2
  25. package/dist/esm/components/credits/modal/ActivitiesModal.js +1 -1
  26. package/dist/esm/components/credits/modal/ActivitiesModal.js.map +2 -2
  27. package/dist/esm/components/credits/modal/RewardsModal.js +1 -1
  28. package/dist/esm/components/credits/modal/RewardsModal.js.map +2 -2
  29. package/package.json +1 -1
  30. package/src/components/credits/context/hooks/useAlpcFetch.ts +12 -5
  31. package/src/components/credits/context/hooks/useRedeemAndBuy.ts +2 -3
  32. package/src/components/credits/creditsCash/CreditsCash.tsx +12 -5
  33. package/src/components/credits/creditsRedeemList/RedeemCouponModal.tsx +2 -3
  34. package/src/components/credits/creditsRedeemList/RedeemVirtualProductModal.tsx +3 -3
  35. package/src/components/credits/modal/ActivitiesModal.tsx +53 -51
  36. 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/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": ["RewardsModal_exports", "__export", "RewardsModal_default", "__toCommonJS", "import_jsx_runtime", "import_headless_ui", "import_classnames", "import_copy_to_clipboard", "import_dayjs", "import_react", "import_const", "import_ModalContainer", "import_Tip", "import_LoadingDots", "import_useMyRewards", "import_lib", "import_constants", "RewardsModal", "data", "props", "activeTab", "setActiveTab", "brand", "rounded", "page", "setPage", "copied", "setCopied", "tabs", "tab", "myRewards", "canNext", "isLoading", "useMyRewards", "getProductType", "item", "getGoGiftType", "status", "statusMap", "list", "base", "TypeMap", "TipMap", "ColorMap", "handleScrollEnd", "prev", "handleCopy", "code", "idx", "clipboard", "classNames", "value", "LoadingDots", "index", "e", "Tip", "dayjs"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import D from"js-cookie";import{useCallback as E,useRef as m,useState as O}from"react";import F from"swr";import{useHeadlessContext as B}from"@anker-in/lib";import{getAlpcPath as A}from"../utils";import{useCreditsContext as w}from"../provider";let b;const U=t=>t&&(t.data&&typeof t.data=="object"&&!Array.isArray(t.data)?t.data:t),M=t=>fetch(A(t.locale,t.apiBaseUrl)+t.url,t.fetchOptions).then(async a=>{if(a.status<300){const n=await a.json();return U(n)}if(a.status===401&&t.onReAuth){b||(b=t.onReAuth());const n=await b;if(b=void 0,n)return fetch(A(t.locale,t.apiBaseUrl)+t.url,t.fetchOptions).then(async r=>{if(r.status<300){const e=await r.json();return U(e)}if(r.status===401){t.onUnAuth&&t.onUnAuth();return}});t.onUnAuth&&t.onUnAuth();return}}),S=async(t,a,n,r)=>{let e=await fetch(`${A(t,r)}/cloud/login`,{method:"POST"}),s=await e.json(),o=U(s);if(e.status<300&&!a&&o?.code===27004){const i=D.get("alpcEU");if(Number(i)===1?D.set("alpcEU","0",{expires:30,domain:`.${n}.com`}):D.set("alpcEU","1",{expires:30,domain:`.${n}.com`}),e=await fetch(`${A(t,r)}/cloud/login`,{method:"POST"}),s=await e.json(),o=U(s),e.status>300)return!1}return!o?.code},q=(t,a,n={},r)=>{const e=m(!1),[s,o]=O(),[i,f]=O(!1),c=m(t),l=m(a),d=m(n),h=E(async(g,T={})=>{if(console.log("[useAlpcMutation] trigger called with:",{url:c.current,fetchData:g,brand:r.current}),e.current){console.log("[useAlpcMutation] already mutating, skipping");return}if(!r.current){console.log("[useAlpcMutation] brand not available, skipping request");return}e.current=!0,f(!0);const y={...d.current,...T},{onSuccess:R,onError:p}=y||{};try{const u=await l.current(c.current,{arg:g});return o(u),f(!1),e.current=!1,R&&R(u),u}catch(u){f(!1),e.current=!1,p&&p(u)}},[]);return{isMutating:i,trigger:h,data:s}},z=(t,a)=>{const[n,r]=O(!1),{removeProfile:e,alpcBrand:s,apiBaseUrl:o}=w(),{enable:i,...f}=a||{},{locale:c="",brand:l}=B(),d=s||l,{queryKey:h=[],body:g={},headers:T,...y}=t,R=i??!0,[p,u]=h;return F([p,u],!R||!d?null:([C,P])=>M({url:C,locale:c,apiBaseUrl:o,fetchOptions:{method:"POST",headers:{"current-language":c,...T},body:JSON.stringify({...g,...P}),...y},onReAuth:async()=>await S(c,n,d,o)?(r(!0),!0):!1,onUnAuth(){e()}}),{revalidateOnFocus:!1,...f})},J=(t,a)=>{const[n,r]=O(!1),{removeProfile:e,alpcBrand:s,apiBaseUrl:o}=w(),{locale:i="",brand:f}=B(),c=s||f,l=m(c);l.current=c;const{url:d,initData:h,headers:g,...T}=t,y=m(h);return y.current=h,q(d,(p,u)=>l.current?M({url:p,locale:i,apiBaseUrl:o,fetchOptions:{method:"POST",headers:{"current-language":i,...g},...T,body:JSON.stringify({...y.current,...u.arg})},onReAuth:async()=>await S(i,n,l.current,o)?(r(!0),!0):!1,onUnAuth(){e()}}):Promise.resolve(void 0),a,l)};export{z as useAlpcFetch,J as useAlpcMutation};
1
+ import D from"js-cookie";import{useCallback as E,useRef as m,useState as O}from"react";import F from"swr";import{useHeadlessContext as B}from"@anker-in/lib";import{getAlpcPath as A}from"../utils";import{useCreditsContext as w}from"../provider";let b;const U=t=>t&&(t.data&&typeof t.data=="object"&&!Array.isArray(t.data)&&"data"in t.data?t.data:t),M=t=>fetch(A(t.locale,t.apiBaseUrl)+t.url,t.fetchOptions).then(async a=>{if(a.status<300){const n=await a.json();return U(n)}if(a.status===401&&t.onReAuth){b||(b=t.onReAuth());const n=await b;if(b=void 0,n)return fetch(A(t.locale,t.apiBaseUrl)+t.url,t.fetchOptions).then(async r=>{if(r.status<300){const e=await r.json();return U(e)}if(r.status===401){t.onUnAuth&&t.onUnAuth();return}});t.onUnAuth&&t.onUnAuth();return}}),S=async(t,a,n,r)=>{let e=await fetch(`${A(t,r)}/cloud/login`,{method:"POST"}),s=await e.json(),o=U(s);if(e.status<300&&!a&&o?.code===27004){const i=D.get("alpcEU");if(Number(i)===1?D.set("alpcEU","0",{expires:30,domain:`.${n}.com`}):D.set("alpcEU","1",{expires:30,domain:`.${n}.com`}),e=await fetch(`${A(t,r)}/cloud/login`,{method:"POST"}),s=await e.json(),o=U(s),e.status>300)return!1}return!o?.code},q=(t,a,n={},r)=>{const e=m(!1),[s,o]=O(),[i,f]=O(!1),c=m(t),l=m(a),d=m(n),h=E(async(g,T={})=>{if(console.log("[useAlpcMutation] trigger called with:",{url:c.current,fetchData:g,brand:r.current}),e.current){console.log("[useAlpcMutation] already mutating, skipping");return}if(!r.current){console.log("[useAlpcMutation] brand not available, skipping request");return}e.current=!0,f(!0);const y={...d.current,...T},{onSuccess:R,onError:p}=y||{};try{const u=await l.current(c.current,{arg:g});return o(u),f(!1),e.current=!1,R&&R(u),u}catch(u){f(!1),e.current=!1,p&&p(u)}},[]);return{isMutating:i,trigger:h,data:s}},z=(t,a)=>{const[n,r]=O(!1),{removeProfile:e,alpcBrand:s,apiBaseUrl:o}=w(),{enable:i,...f}=a||{},{locale:c="",brand:l}=B(),d=s||l,{queryKey:h=[],body:g={},headers:T,...y}=t,R=i??!0,[p,u]=h;return F([p,u],!R||!d?null:([C,P])=>M({url:C,locale:c,apiBaseUrl:o,fetchOptions:{method:"POST",headers:{"current-language":c,...T},body:JSON.stringify({...g,...P}),...y},onReAuth:async()=>await S(c,n,d,o)?(r(!0),!0):!1,onUnAuth(){e()}}),{revalidateOnFocus:!1,...f})},J=(t,a)=>{const[n,r]=O(!1),{removeProfile:e,alpcBrand:s,apiBaseUrl:o}=w(),{locale:i="",brand:f}=B(),c=s||f,l=m(c);l.current=c;const{url:d,initData:h,headers:g,...T}=t,y=m(h);return y.current=h,q(d,(p,u)=>l.current?M({url:p,locale:i,apiBaseUrl:o,fetchOptions:{method:"POST",headers:{"current-language":i,...g},...T,body:JSON.stringify({...y.current,...u.arg})},onReAuth:async()=>await S(i,n,l.current,o)?(r(!0),!0):!1,onUnAuth(){e()}}):Promise.resolve(void 0),a,l)};export{z as useAlpcFetch,J as useAlpcMutation};
2
2
  //# sourceMappingURL=useAlpcFetch.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/credits/context/hooks/useAlpcFetch.ts"],
4
- "sourcesContent": ["import Cookies from 'js-cookie'\nimport { useCallback, useRef, useState } from 'react'\nimport useSWR, { type SWRConfiguration } from 'swr'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nimport { getAlpcPath } from '../utils'\nimport { useCreditsContext } from '../provider'\n\ninterface UseAlpcFetchOptionsSwrOptions<TData, Error> extends SWRConfiguration<TData, Error> {\n enable?: boolean\n}\n\ninterface FetchOptions extends RequestInit {\n queryKey: [string, Record<string, any>]\n data?: Record<string, any>\n}\n\ninterface MutationOptions extends RequestInit {\n url: string\n initData: Record<string, any>\n}\n\ninterface FetcherOptions {\n url: string\n locale: string\n fetchOptions: RequestInit\n onReAuth: () => Promise<boolean>\n onUnAuth: () => void\n apiBaseUrl?: string\n}\n\nlet reAuthPromise: Promise<boolean> | undefined\n\ntype Fetcher<TData, TBody> = (url: string, data: { arg: TBody }) => Promise<TData>\n\n/**\n * \u7EDF\u4E00\u5904\u7406 ALPC \u63A5\u53E3\u8FD4\u56DE\u7684\u6570\u636E\u7ED3\u6784\n * \u517C\u5BB9\u4E00\u5C42 data \u548C\u4E24\u5C42 data \u7684\u573A\u666F\uFF1A\n * - \u4E24\u5C42 data: {data: {data: ..., code: 27004}}\n * - \u4E00\u5C42 data: {data: ..., code: 27004}\n */\nconst normalizeResponseData = (responseData: any) => {\n if (!responseData) return responseData\n\n // \u5982\u679C responseData.data \u5B58\u5728\u4E14\u662F\u4E00\u4E2A\u5BF9\u8C61\uFF08\u4E0D\u662F\u6570\u7EC4\uFF09\uFF0C\u8BF4\u660E\u662F\u4E24\u5C42 data \u7ED3\u6784\n if (responseData.data && typeof responseData.data === 'object' && !Array.isArray(responseData.data)) {\n return responseData.data\n }\n\n // \u4E00\u5C42 data \u7ED3\u6784\u6216\u5176\u4ED6\u60C5\u51B5\uFF0C\u76F4\u63A5\u8FD4\u56DE\n return responseData\n}\n\nconst fetcher = (options: FetcherOptions) => {\n return fetch(getAlpcPath(options.locale, options.apiBaseUrl) + options.url, options.fetchOptions).then(async response => {\n if (response.status < 300) {\n const responseData = await response.json()\n return normalizeResponseData(responseData)\n }\n\n // \u9519\u8BEF\u5904\u7406\n if (response.status === 401) {\n // \u91CD\u65B0\u767B\u5F55\u5C1D\u8BD5\n if (options.onReAuth) {\n if (!reAuthPromise) {\n reAuthPromise = options.onReAuth()\n }\n\n const result = await reAuthPromise\n\n reAuthPromise = undefined\n\n if (result) {\n // \u8DE8\u533A\u91CD\u65B0\u767B\u5F55\u540E\u9700\u8981\u66FF\u6362\u533A\u57DF\u6807\u5FD7\uFF0C\u6240\u4EE5\u4E0D\u80FD\u7528\u6700\u5F00\u59CB\u8BF7\u6C42\u7684\u90A3\u4E2A\u94FE\u63A5\n return fetch(getAlpcPath(options.locale, options.apiBaseUrl) + options.url, options.fetchOptions).then(async response => {\n if (response.status < 300) {\n const responseData = await response.json()\n return normalizeResponseData(responseData)\n }\n\n if (response.status === 401) {\n if (options.onUnAuth) {\n options.onUnAuth()\n }\n return\n }\n })\n } else {\n if (options.onUnAuth) {\n options.onUnAuth()\n }\n return\n }\n }\n }\n })\n}\n\nconst reAuth = async (locale: string, retry: boolean, brand: string, apiBaseUrl?: string) => {\n let reloginResponse = await fetch(`${getAlpcPath(locale, apiBaseUrl)}/cloud/login`, {\n method: 'POST',\n })\n let reloginResponseData = await reloginResponse.json()\n // \u517C\u5BB9\u4E24\u5C42 data \u7ED3\u6784\n let normalizedData = normalizeResponseData(reloginResponseData)\n\n if (reloginResponse!.status < 300 && !retry) {\n if (normalizedData?.code === 27004) {\n // \u8DE8\u533A\u767B\u5F55\u9519\u8BEF\n const alpcEUCookie = Cookies.get('alpcEU')\n\n if (Number(alpcEUCookie) === 1) {\n Cookies.set('alpcEU', '0', {\n expires: 30,\n domain: `.${brand}.com`,\n })\n } else {\n Cookies.set('alpcEU', '1', {\n expires: 30,\n domain: `.${brand}.com`,\n })\n }\n\n // \u91CD\u65B0\u5C1D\u8BD5\u6362\u533A\u767B\u5F55\n reloginResponse = await fetch(`${getAlpcPath(locale, apiBaseUrl)}/cloud/login`, {\n method: 'POST',\n })\n reloginResponseData = await reloginResponse.json()\n normalizedData = normalizeResponseData(reloginResponseData)\n\n if (reloginResponse.status > 300) {\n return false\n }\n }\n }\n if (!normalizedData?.code) {\n // \u91CD\u65B0\u767B\u5F55\u6210\u529F\n return true\n }\n\n return false\n}\n\nexport interface UseMutationConfig<TData> {\n onSuccess?: (response: TData) => any\n onError?: (error: Error) => any\n}\n\nconst useMutation = <TData, TBody>(\n url: string,\n fetcher: Fetcher<TData, TBody>,\n mutationConfig: UseMutationConfig<TData> = {},\n brandRef: React.MutableRefObject<string | undefined>\n) => {\n const innerMutating = useRef<boolean>(false)\n\n const [data, setData] = useState<TData>()\n const [isMutating, setIsMutating] = useState(false)\n\n const urlRef = useRef(url)\n const fetcherRef = useRef(fetcher)\n const configRef = useRef(mutationConfig)\n\n const trigger = useCallback(\n async (fetchData: TBody, opts: UseMutationConfig<TData> = {}) => {\n console.log('[useAlpcMutation] trigger called with:', { url: urlRef.current, fetchData, brand: brandRef.current })\n\n if (innerMutating.current) {\n console.log('[useAlpcMutation] already mutating, skipping')\n return\n }\n\n if (!brandRef.current) {\n console.log('[useAlpcMutation] brand not available, skipping request')\n return\n }\n\n innerMutating.current = true\n setIsMutating(true)\n\n const config = {\n ...configRef.current,\n ...opts,\n }\n\n const { onSuccess, onError } = config || {}\n\n try {\n const fetchResult = await fetcherRef.current(urlRef.current, {\n arg: fetchData,\n })\n setData(fetchResult)\n\n setIsMutating(false)\n innerMutating.current = false\n\n if (onSuccess) {\n onSuccess(fetchResult)\n }\n return fetchResult\n } catch (err: any) {\n setIsMutating(false)\n innerMutating.current = false\n\n if (onError) {\n onError(err)\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n\n return {\n isMutating,\n trigger,\n data,\n }\n}\n\nexport const useAlpcFetch = <TData>(\n options: FetchOptions,\n swrOptions?: UseAlpcFetchOptionsSwrOptions<TData, Error>\n) => {\n const [retry, setRetry] = useState(false)\n const { removeProfile, alpcBrand, apiBaseUrl } = useCreditsContext()\n\n const { enable, ...otherSwrOptions } = swrOptions || {}\n\n const { locale = '', brand: headlessBrand } = useHeadlessContext()\n // \u4F18\u5148\u4F7F\u7528 creditsContext \u4E2D\u7684 alpcBrand\uFF0C\u5982\u679C\u6CA1\u6709\u5219\u4F7F\u7528 headlessConfig \u4E2D\u7684 brand\n const brand = alpcBrand || headlessBrand\n\n const { queryKey = [], body: fetchBody = {}, headers, ...fetchOptions } = options\n const fetchEnable = enable ?? true\n\n const [url, requestBody] = queryKey\n\n const context = useSWR<TData>(\n [url, requestBody],\n !fetchEnable || !brand\n ? null\n : ([requestUrl, data]: [string, Record<string, any>]) =>\n fetcher({\n url: requestUrl,\n locale,\n apiBaseUrl,\n fetchOptions: {\n method: 'POST',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n body: JSON.stringify({\n ...fetchBody,\n ...data,\n }),\n ...fetchOptions,\n },\n onReAuth: async () => {\n const result = await reAuth(locale, retry, brand, apiBaseUrl)\n\n if (result) {\n setRetry(true)\n return true\n }\n\n return false\n },\n onUnAuth() {\n // \u5931\u8D25\u540E\u9000\u51FA\u767B\u5F55\n removeProfile()\n },\n }),\n {\n revalidateOnFocus: false,\n ...otherSwrOptions,\n }\n )\n\n return context\n}\n\nexport const useAlpcMutation = <TData, TBody>(options: MutationOptions, mutationOptions?: UseMutationConfig<TData>) => {\n const [retry, setRetry] = useState(false)\n const { removeProfile, alpcBrand, apiBaseUrl } = useCreditsContext()\n\n const { locale = '', brand: headlessBrand } = useHeadlessContext()\n // \u4F18\u5148\u4F7F\u7528 creditsContext \u4E2D\u7684 alpcBrand\uFF0C\u5982\u679C\u6CA1\u6709\u5219\u4F7F\u7528 headlessConfig \u4E2D\u7684 brand\n const brand = alpcBrand || headlessBrand\n const brandRef = useRef(brand)\n brandRef.current = brand\n\n const { url, initData, headers, ...fetchOptions } = options\n const initDataRef = useRef(initData)\n initDataRef.current = initData\n\n const context = useMutation<TData, TBody>(\n url,\n (requestUrl, data: { arg: TBody }) => {\n // Prevent requests when brand is not available\n if (!brandRef.current) {\n return Promise.resolve(undefined as unknown as TData)\n }\n\n return fetcher({\n url: requestUrl,\n locale,\n apiBaseUrl,\n fetchOptions: {\n method: 'POST',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n ...fetchOptions,\n body: JSON.stringify({\n ...initDataRef.current,\n ...data.arg,\n }),\n },\n onReAuth: async () => {\n const result = await reAuth(locale, retry, brandRef.current!, apiBaseUrl)\n\n if (result) {\n setRetry(true)\n return true\n }\n\n return false\n },\n onUnAuth() {\n // \u5931\u8D25\u540E\u9000\u51FA\u767B\u5F55\n removeProfile()\n },\n })\n },\n mutationOptions,\n brandRef\n )\n\n return context\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import Cookies from 'js-cookie'\nimport { useCallback, useRef, useState } from 'react'\nimport useSWR, { type SWRConfiguration } from 'swr'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nimport { getAlpcPath } from '../utils'\nimport { useCreditsContext } from '../provider'\n\ninterface UseAlpcFetchOptionsSwrOptions<TData, Error> extends SWRConfiguration<TData, Error> {\n enable?: boolean\n}\n\ninterface FetchOptions extends RequestInit {\n queryKey: [string, Record<string, any>]\n data?: Record<string, any>\n}\n\ninterface MutationOptions extends RequestInit {\n url: string\n initData: Record<string, any>\n}\n\ninterface FetcherOptions {\n url: string\n locale: string\n fetchOptions: RequestInit\n onReAuth: () => Promise<boolean>\n onUnAuth: () => void\n apiBaseUrl?: string\n}\n\nlet reAuthPromise: Promise<boolean> | undefined\n\ntype Fetcher<TData, TBody> = (url: string, data: { arg: TBody }) => Promise<TData>\n\n/**\n * \u7EDF\u4E00\u5904\u7406 ALPC \u63A5\u53E3\u8FD4\u56DE\u7684\u6570\u636E\u7ED3\u6784\n * \u517C\u5BB9\u4E00\u5C42 data \u548C\u4E24\u5C42 data \u7684\u573A\u666F\uFF1A\n * - \u4E24\u5C42 data: {data: {data: ..., code: 27004}} \u2192 \u5265\u6389\u5916\u5C42\uFF0C\u8FD4\u56DE\u5185\u5C42 {data: ..., code: 27004}\n * - \u4E00\u5C42 data: {data: ..., code: 27004} \u2192 \u76F4\u63A5\u8FD4\u56DE\uFF0C\u4E0D\u505A\u5904\u7406\n *\n * \u5224\u65AD\u4E24\u5C42\u7684\u4F9D\u636E\uFF1AresponseData.data.data \u5B58\u5728\uFF08\u5916\u5C42 data \u5185\u90E8\u8FD8\u6709\u4E00\u5C42 data\uFF09\n */\nconst normalizeResponseData = (responseData: any) => {\n if (!responseData) return responseData\n\n // \u4E24\u5C42\u7ED3\u6784\uFF1AresponseData.data \u662F\u5BF9\u8C61\uFF0C\u4E14\u5176\u5185\u90E8\u8FD8\u6709 data \u5B57\u6BB5\n if (\n responseData.data &&\n typeof responseData.data === 'object' &&\n !Array.isArray(responseData.data) &&\n 'data' in responseData.data\n ) {\n return responseData.data\n }\n\n // \u4E00\u5C42\u7ED3\u6784\uFF0C\u76F4\u63A5\u8FD4\u56DE\n return responseData\n}\n\nconst fetcher = (options: FetcherOptions) => {\n return fetch(getAlpcPath(options.locale, options.apiBaseUrl) + options.url, options.fetchOptions).then(async response => {\n if (response.status < 300) {\n const responseData = await response.json()\n return normalizeResponseData(responseData)\n }\n\n // \u9519\u8BEF\u5904\u7406\n if (response.status === 401) {\n // \u91CD\u65B0\u767B\u5F55\u5C1D\u8BD5\n if (options.onReAuth) {\n if (!reAuthPromise) {\n reAuthPromise = options.onReAuth()\n }\n\n const result = await reAuthPromise\n\n reAuthPromise = undefined\n\n if (result) {\n // \u8DE8\u533A\u91CD\u65B0\u767B\u5F55\u540E\u9700\u8981\u66FF\u6362\u533A\u57DF\u6807\u5FD7\uFF0C\u6240\u4EE5\u4E0D\u80FD\u7528\u6700\u5F00\u59CB\u8BF7\u6C42\u7684\u90A3\u4E2A\u94FE\u63A5\n return fetch(getAlpcPath(options.locale, options.apiBaseUrl) + options.url, options.fetchOptions).then(async response => {\n if (response.status < 300) {\n const responseData = await response.json()\n return normalizeResponseData(responseData)\n }\n\n if (response.status === 401) {\n if (options.onUnAuth) {\n options.onUnAuth()\n }\n return\n }\n })\n } else {\n if (options.onUnAuth) {\n options.onUnAuth()\n }\n return\n }\n }\n }\n })\n}\n\nconst reAuth = async (locale: string, retry: boolean, brand: string, apiBaseUrl?: string) => {\n let reloginResponse = await fetch(`${getAlpcPath(locale, apiBaseUrl)}/cloud/login`, {\n method: 'POST',\n })\n let reloginResponseData = await reloginResponse.json()\n // \u517C\u5BB9\u4E24\u5C42 data \u7ED3\u6784\n let normalizedData = normalizeResponseData(reloginResponseData)\n\n if (reloginResponse!.status < 300 && !retry) {\n if (normalizedData?.code === 27004) {\n // \u8DE8\u533A\u767B\u5F55\u9519\u8BEF\n const alpcEUCookie = Cookies.get('alpcEU')\n\n if (Number(alpcEUCookie) === 1) {\n Cookies.set('alpcEU', '0', {\n expires: 30,\n domain: `.${brand}.com`,\n })\n } else {\n Cookies.set('alpcEU', '1', {\n expires: 30,\n domain: `.${brand}.com`,\n })\n }\n\n // \u91CD\u65B0\u5C1D\u8BD5\u6362\u533A\u767B\u5F55\n reloginResponse = await fetch(`${getAlpcPath(locale, apiBaseUrl)}/cloud/login`, {\n method: 'POST',\n })\n reloginResponseData = await reloginResponse.json()\n normalizedData = normalizeResponseData(reloginResponseData)\n\n if (reloginResponse.status > 300) {\n return false\n }\n }\n }\n if (!normalizedData?.code) {\n // \u91CD\u65B0\u767B\u5F55\u6210\u529F\n return true\n }\n\n return false\n}\n\nexport interface UseMutationConfig<TData> {\n onSuccess?: (response: TData) => any\n onError?: (error: Error) => any\n}\n\nconst useMutation = <TData, TBody>(\n url: string,\n fetcher: Fetcher<TData, TBody>,\n mutationConfig: UseMutationConfig<TData> = {},\n brandRef: React.MutableRefObject<string | undefined>\n) => {\n const innerMutating = useRef<boolean>(false)\n\n const [data, setData] = useState<TData>()\n const [isMutating, setIsMutating] = useState(false)\n\n const urlRef = useRef(url)\n const fetcherRef = useRef(fetcher)\n const configRef = useRef(mutationConfig)\n\n const trigger = useCallback(\n async (fetchData: TBody, opts: UseMutationConfig<TData> = {}) => {\n console.log('[useAlpcMutation] trigger called with:', { url: urlRef.current, fetchData, brand: brandRef.current })\n\n if (innerMutating.current) {\n console.log('[useAlpcMutation] already mutating, skipping')\n return\n }\n\n if (!brandRef.current) {\n console.log('[useAlpcMutation] brand not available, skipping request')\n return\n }\n\n innerMutating.current = true\n setIsMutating(true)\n\n const config = {\n ...configRef.current,\n ...opts,\n }\n\n const { onSuccess, onError } = config || {}\n\n try {\n const fetchResult = await fetcherRef.current(urlRef.current, {\n arg: fetchData,\n })\n setData(fetchResult)\n\n setIsMutating(false)\n innerMutating.current = false\n\n if (onSuccess) {\n onSuccess(fetchResult)\n }\n return fetchResult\n } catch (err: any) {\n setIsMutating(false)\n innerMutating.current = false\n\n if (onError) {\n onError(err)\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n\n return {\n isMutating,\n trigger,\n data,\n }\n}\n\nexport const useAlpcFetch = <TData>(\n options: FetchOptions,\n swrOptions?: UseAlpcFetchOptionsSwrOptions<TData, Error>\n) => {\n const [retry, setRetry] = useState(false)\n const { removeProfile, alpcBrand, apiBaseUrl } = useCreditsContext()\n\n const { enable, ...otherSwrOptions } = swrOptions || {}\n\n const { locale = '', brand: headlessBrand } = useHeadlessContext()\n // \u4F18\u5148\u4F7F\u7528 creditsContext \u4E2D\u7684 alpcBrand\uFF0C\u5982\u679C\u6CA1\u6709\u5219\u4F7F\u7528 headlessConfig \u4E2D\u7684 brand\n const brand = alpcBrand || headlessBrand\n\n const { queryKey = [], body: fetchBody = {}, headers, ...fetchOptions } = options\n const fetchEnable = enable ?? true\n\n const [url, requestBody] = queryKey\n\n const context = useSWR<TData>(\n [url, requestBody],\n !fetchEnable || !brand\n ? null\n : ([requestUrl, data]: [string, Record<string, any>]) =>\n fetcher({\n url: requestUrl,\n locale,\n apiBaseUrl,\n fetchOptions: {\n method: 'POST',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n body: JSON.stringify({\n ...fetchBody,\n ...data,\n }),\n ...fetchOptions,\n },\n onReAuth: async () => {\n const result = await reAuth(locale, retry, brand, apiBaseUrl)\n\n if (result) {\n setRetry(true)\n return true\n }\n\n return false\n },\n onUnAuth() {\n // \u5931\u8D25\u540E\u9000\u51FA\u767B\u5F55\n removeProfile()\n },\n }),\n {\n revalidateOnFocus: false,\n ...otherSwrOptions,\n }\n )\n\n return context\n}\n\nexport const useAlpcMutation = <TData, TBody>(options: MutationOptions, mutationOptions?: UseMutationConfig<TData>) => {\n const [retry, setRetry] = useState(false)\n const { removeProfile, alpcBrand, apiBaseUrl } = useCreditsContext()\n\n const { locale = '', brand: headlessBrand } = useHeadlessContext()\n // \u4F18\u5148\u4F7F\u7528 creditsContext \u4E2D\u7684 alpcBrand\uFF0C\u5982\u679C\u6CA1\u6709\u5219\u4F7F\u7528 headlessConfig \u4E2D\u7684 brand\n const brand = alpcBrand || headlessBrand\n const brandRef = useRef(brand)\n brandRef.current = brand\n\n const { url, initData, headers, ...fetchOptions } = options\n const initDataRef = useRef(initData)\n initDataRef.current = initData\n\n const context = useMutation<TData, TBody>(\n url,\n (requestUrl, data: { arg: TBody }) => {\n // Prevent requests when brand is not available\n if (!brandRef.current) {\n return Promise.resolve(undefined as unknown as TData)\n }\n\n return fetcher({\n url: requestUrl,\n locale,\n apiBaseUrl,\n fetchOptions: {\n method: 'POST',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n ...fetchOptions,\n body: JSON.stringify({\n ...initDataRef.current,\n ...data.arg,\n }),\n },\n onReAuth: async () => {\n const result = await reAuth(locale, retry, brandRef.current!, apiBaseUrl)\n\n if (result) {\n setRetry(true)\n return true\n }\n\n return false\n },\n onUnAuth() {\n // \u5931\u8D25\u540E\u9000\u51FA\u767B\u5F55\n removeProfile()\n },\n })\n },\n mutationOptions,\n brandRef\n )\n\n return context\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Cookies", "useCallback", "useRef", "useState", "useSWR", "useHeadlessContext", "getAlpcPath", "useCreditsContext", "reAuthPromise", "normalizeResponseData", "responseData", "fetcher", "options", "response", "result", "reAuth", "locale", "retry", "brand", "apiBaseUrl", "reloginResponse", "reloginResponseData", "normalizedData", "alpcEUCookie", "useMutation", "url", "mutationConfig", "brandRef", "innerMutating", "data", "setData", "isMutating", "setIsMutating", "urlRef", "fetcherRef", "configRef", "trigger", "fetchData", "opts", "config", "onSuccess", "onError", "fetchResult", "err", "useAlpcFetch", "swrOptions", "setRetry", "removeProfile", "alpcBrand", "enable", "otherSwrOptions", "headlessBrand", "queryKey", "fetchBody", "headers", "fetchOptions", "fetchEnable", "requestBody", "requestUrl", "useAlpcMutation", "mutationOptions", "initData", "initDataRef"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import a from"swr/mutation";import{useRedeemCoupon as d}from"./useRedeemCoupon";import{useCreditsContext as s}from"../provider";import{useBuyNow as c}from"@anker-in/lib";const w=(m,t)=>{const{trigger:n}=d(),{profile:i}=s(),{trigger:u}=c({},{throwOnError:!0});return a("redeemAndBuy",async(p,{arg:o})=>{const r=await n({user_id:i?.user_id,rule_id:o.redeemId}),e=r?.data||r;if(r&&e?.coupon_code)u({discountCodes:[e.coupon_code],lineItems:[{variant:o.productVariant,quantity:o.quantity||1}]});else throw new Error(`Redeem failed: ${r?.msg}`)},t)};export{w as useRedeemAndBuy};
1
+ import u from"swr/mutation";import{useRedeemCoupon as a}from"./useRedeemCoupon";import{useCreditsContext as d}from"../provider";import{useBuyNow as s}from"@anker-in/lib";const w=(m,t)=>{const{trigger:o}=a(),{profile:n}=d(),{trigger:i}=s({},{throwOnError:!0});return u("redeemAndBuy",async(c,{arg:e})=>{const r=await o({user_id:n?.user_id,rule_id:e.redeemId});if(r&&r.data?.coupon_code)i({discountCodes:[r.data.coupon_code],lineItems:[{variant:e.productVariant,quantity:e.quantity||1}]});else throw new Error(`Redeem failed: ${r?.msg}`)},t)};export{w as useRedeemAndBuy};
2
2
  //# sourceMappingURL=useRedeemAndBuy.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/credits/context/hooks/useRedeemAndBuy.ts"],
4
- "sourcesContent": ["import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'\nimport { useRedeemCoupon } from './useRedeemCoupon'\nimport type { ProductVariant } from '@anker-in/lib'\nimport { useCreditsContext } from '../provider'\nimport { useBuyNow } from '@anker-in/lib'\n\nexport const useRedeemAndBuy = (\n _: any,\n swrOptions?: SWRMutationConfiguration<undefined, Error, string, any> & {\n throwOnError?: boolean\n }\n) => {\n const { trigger } = useRedeemCoupon()\n const { profile } = useCreditsContext()\n\n const { trigger: buyNow } = useBuyNow(\n {},\n {\n throwOnError: true,\n }\n )\n\n return useSWRMutation(\n 'redeemAndBuy',\n async (\n _,\n {\n arg,\n }: {\n arg: {\n productVariant: ProductVariant\n quantity?: number\n redeemId: number\n }\n }\n ) => {\n const res = await trigger({\n user_id: profile?.user_id,\n rule_id: arg.redeemId,\n })\n const data = (res?.data || res) as { success?: boolean; coupon_code?: string }\n if (res && data?.coupon_code) {\n buyNow({\n discountCodes: [data.coupon_code],\n lineItems: [\n {\n variant: arg.productVariant,\n quantity: arg.quantity || 1,\n },\n ],\n })\n } else {\n throw new Error(`Redeem failed: ${res?.msg}`)\n }\n },\n swrOptions\n )\n}\n"],
5
- "mappings": "AAAA,OAAOA,MAAkD,eACzD,OAAS,mBAAAC,MAAuB,oBAEhC,OAAS,qBAAAC,MAAyB,cAClC,OAAS,aAAAC,MAAiB,gBAEnB,MAAMC,EAAkB,CAC7BC,EACAC,IAGG,CACH,KAAM,CAAE,QAAAC,CAAQ,EAAIN,EAAgB,EAC9B,CAAE,QAAAO,CAAQ,EAAIN,EAAkB,EAEhC,CAAE,QAASO,CAAO,EAAIN,EAC1B,CAAC,EACD,CACE,aAAc,EAChB,CACF,EAEA,OAAOH,EACL,eACA,MACEK,EACA,CACE,IAAAK,CACF,IAOG,CACH,MAAMC,EAAM,MAAMJ,EAAQ,CACxB,QAASC,GAAS,QAClB,QAASE,EAAI,QACf,CAAC,EACKE,EAAQD,GAAK,MAAQA,EAC3B,GAAIA,GAAOC,GAAM,YACfH,EAAO,CACL,cAAe,CAACG,EAAK,WAAW,EAChC,UAAW,CACT,CACE,QAASF,EAAI,eACb,SAAUA,EAAI,UAAY,CAC5B,CACF,CACF,CAAC,MAED,OAAM,IAAI,MAAM,kBAAkBC,GAAK,GAAG,EAAE,CAEhD,EACAL,CACF,CACF",
6
- "names": ["useSWRMutation", "useRedeemCoupon", "useCreditsContext", "useBuyNow", "useRedeemAndBuy", "_", "swrOptions", "trigger", "profile", "buyNow", "arg", "res", "data"]
4
+ "sourcesContent": ["import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'\nimport { useRedeemCoupon } from './useRedeemCoupon'\nimport type { ProductVariant } from '@anker-in/lib'\nimport { useCreditsContext } from '../provider'\nimport { useBuyNow } from '@anker-in/lib'\n\nexport const useRedeemAndBuy = (\n _: any,\n swrOptions?: SWRMutationConfiguration<undefined, Error, string, any> & {\n throwOnError?: boolean\n }\n) => {\n const { trigger } = useRedeemCoupon()\n const { profile } = useCreditsContext()\n\n const { trigger: buyNow } = useBuyNow(\n {},\n {\n throwOnError: true,\n }\n )\n\n return useSWRMutation(\n 'redeemAndBuy',\n async (\n _,\n {\n arg,\n }: {\n arg: {\n productVariant: ProductVariant\n quantity?: number\n redeemId: number\n }\n }\n ) => {\n const res = await trigger({\n user_id: profile?.user_id,\n rule_id: arg.redeemId,\n })\n if (res && res.data?.coupon_code) {\n buyNow({\n discountCodes: [res.data.coupon_code],\n lineItems: [\n {\n variant: arg.productVariant,\n quantity: arg.quantity || 1,\n },\n ],\n })\n } else {\n throw new Error(`Redeem failed: ${res?.msg}`)\n }\n },\n swrOptions\n )\n}\n"],
5
+ "mappings": "AAAA,OAAOA,MAAkD,eACzD,OAAS,mBAAAC,MAAuB,oBAEhC,OAAS,qBAAAC,MAAyB,cAClC,OAAS,aAAAC,MAAiB,gBAEnB,MAAMC,EAAkB,CAC7BC,EACAC,IAGG,CACH,KAAM,CAAE,QAAAC,CAAQ,EAAIN,EAAgB,EAC9B,CAAE,QAAAO,CAAQ,EAAIN,EAAkB,EAEhC,CAAE,QAASO,CAAO,EAAIN,EAC1B,CAAC,EACD,CACE,aAAc,EAChB,CACF,EAEA,OAAOH,EACL,eACA,MACEK,EACA,CACE,IAAAK,CACF,IAOG,CACH,MAAMC,EAAM,MAAMJ,EAAQ,CACxB,QAASC,GAAS,QAClB,QAASE,EAAI,QACf,CAAC,EACD,GAAIC,GAAOA,EAAI,MAAM,YACnBF,EAAO,CACL,cAAe,CAACE,EAAI,KAAK,WAAW,EACpC,UAAW,CACT,CACE,QAASD,EAAI,eACb,SAAUA,EAAI,UAAY,CAC5B,CACF,CACF,CAAC,MAED,OAAM,IAAI,MAAM,kBAAkBC,GAAK,GAAG,EAAE,CAEhD,EACAL,CACF,CACF",
6
+ "names": ["useSWRMutation", "useRedeemCoupon", "useCreditsContext", "useBuyNow", "useRedeemAndBuy", "_", "swrOptions", "trigger", "profile", "buyNow", "arg", "res"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as B}from"react/jsx-runtime";import{Container as b,Heading as h}from"@anker-in/headless-ui";import{useMemo as y,useState as v}from"react";import N from"./RedeemableItem";import R from"../context/hooks/useRedeemableList";import D from"../modal/RulesModal";import{useProductsByHandles as I,useHeadlessContext as S}from"@anker-in/lib";import{classNames as c}from"@anker-in/lib";import{useCreditsContext as _}from"../context/provider";import{ROUNDED_BRANDS as k}from"../../../constants";const K=({copy:s,id:p})=>{const[a,d]=v(),{redeemableList:m}=R(),{pageCommon:u}=_(),{brand:f}=S(),C=k.includes(f),g=[],{data:o}=I({handles:s?.list?.map(e=>e.products?.[0]?.handle)||[],metafieldIdentifiers:{variant:g}}),x=y(()=>o?.map(e=>{const r=(s.list||[]).find(n=>n.products?.[0]?.handle===e.handle),t=m.find(n=>n.id?.toString()===r?.redeemId?.toString()),l=e.variants?.find(n=>n.sku===r?.products?.[0]?.sku)||e.variants?.[0];return!t||!l?null:{product:e,productVariant:l,alpcData:{id:t?.id,consumeCredits:t?.consume_credits,remainingInventory:t?.remaining_inventory,isLimited:t?.is_limited,consumeType:t?.consume_type,title:t?.name,desc:t?.note},config:r}}).filter(Boolean),[o,s.list,m]);return B(b,{id:p,className:c("bg-[#F5F5F5]"),children:[i(h,{as:"h2",size:"4",html:s.title}),i("div",{className:"relative mt-[24px] grid grid-cols-4 gap-[16px] l:gap-[12px] md:grid-cols-2 md-xl:grid-cols-3",children:x?.map((e,r)=>i(N,{copy:s,itemData:e,setRules:d,currencyCode:o?.[0]?.price.currencyCode||"USD"},r))}),a&&i(D,{overlayClassName:"md:px-[16px] md:items-center",className:c("md:h-fit md:rounded-b-[16px]",!C&&"md:rounded-none"),isOpen:a.length>0,onClose:()=>d([]),titleClassName:"border-b-transparent h-[56px]",rules:a,scrollClassName:"md:mt-[8px] md:mb-[24px] md:pt-0",title:u?.ruleLabel,ruleClassName:"text-[#1d1d1f] font-bold"})]})};export{K as CreditsCash};
1
+ import{jsx as o,jsxs as H}from"react/jsx-runtime";import{Container as y,Heading as v}from"@anker-in/headless-ui";import{useMemo as N,useState as R}from"react";import D from"./RedeemableItem";import I from"../context/hooks/useRedeemableList";import k from"../modal/RulesModal";import{useProductsByHandles as S,useHeadlessContext as _}from"@anker-in/lib";import{classNames as c}from"@anker-in/lib";import{useCreditsContext as B}from"../context/provider";import{ROUNDED_BRANDS as F}from"../../../constants";const W=({copy:s,id:p})=>{const[a,m]=R(),{redeemableList:l}=I(),{pageCommon:C}=B(),{brand:f}=_(),g=F.includes(f),x=[],{data:d}=S({handles:s?.list?.map(e=>e.products?.[0]?.handle)||[],metafieldIdentifiers:{variant:x}}),b=N(()=>(s?.list||[]).map(e=>{const i=e?.products?.[0]?.handle,h=e?.products?.[0]?.sku,t=l.find(r=>r.id?.toString()===e?.redeemId?.toString()),n=d?.find(r=>r.handle===i);if(!n)return null;const u=n.variants?.find(r=>r.sku===h)||n.variants?.[0];return!t||!u?null:{product:n,productVariant:u,alpcData:{id:t?.id,consumeCredits:t?.consume_credits,remainingInventory:t?.remaining_inventory,isLimited:t?.is_limited,consumeType:t?.consume_type,title:t?.name,desc:t?.note},config:e}}).filter(Boolean),[d,s.list,l]);return H(y,{id:p,className:c("bg-[#F5F5F5]"),children:[o(v,{as:"h2",size:"4",html:s.title}),o("div",{className:"relative mt-[24px] grid grid-cols-4 gap-[16px] l:gap-[12px] md:grid-cols-2 md-xl:grid-cols-3",children:b?.map((e,i)=>o(D,{copy:s,itemData:e,setRules:m,currencyCode:d?.[0]?.price.currencyCode||"USD"},i))}),a&&o(k,{overlayClassName:"md:px-[16px] md:items-center",className:c("md:h-fit md:rounded-b-[16px]",!g&&"md:rounded-none"),isOpen:a.length>0,onClose:()=>m([]),titleClassName:"border-b-transparent h-[56px]",rules:a,scrollClassName:"md:mt-[8px] md:mb-[24px] md:pt-0",title:C?.ruleLabel,ruleClassName:"text-[#1d1d1f] font-bold"})]})};export{W as CreditsCash};
2
2
  //# sourceMappingURL=CreditsCash.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/credits/creditsCash/CreditsCash.tsx"],
4
- "sourcesContent": ["import { Container, Heading, Text } from '@anker-in/headless-ui'\nimport { useMemo, useState } from 'react'\n\nimport RedeemableItem from './RedeemableItem'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport RulesModal from '../modal/RulesModal'\nimport { useProductsByHandles, useHeadlessContext } from '@anker-in/lib'\nimport { CreditsCashCopy, RedeemItem } from './type'\nimport { Product, classNames as cn } from '@anker-in/lib'\nimport { useCreditsContext } from '../context/provider'\nimport { numberFormat } from '../context/utils'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const CreditsCash = ({ copy, id }: { copy: CreditsCashCopy; id?: string }) => {\n const [rules, setRules] = useState<string | string[]>()\n const { redeemableList } = useRedeemableList()\n const { pageCommon } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const variantMetafieldIdentifiers: any[] = []\n\n const { data: productByHandles } = useProductsByHandles({\n handles: copy?.list?.map(item => item.products?.[0]?.handle) || [],\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n const list = useMemo(() => {\n return productByHandles\n ?.map((product: Product) => {\n const config = (copy.list || []).find(item => item.products?.[0]?.handle === product.handle)\n const alpcData = redeemableList.find(item => item.id?.toString() === config?.redeemId?.toString())\n const productVariant =\n product.variants?.find((variant: any) => variant.sku === config?.products?.[0]?.sku) || product.variants?.[0]\n if (!alpcData || !productVariant) return null\n return {\n product,\n productVariant,\n alpcData: {\n id: alpcData?.id,\n consumeCredits: alpcData?.consume_credits,\n remainingInventory: alpcData?.remaining_inventory,\n isLimited: alpcData?.is_limited,\n consumeType: alpcData?.consume_type,\n title: alpcData?.name,\n desc: alpcData?.note,\n },\n config,\n }\n })\n .filter(Boolean) as unknown as RedeemItem[]\n }, [productByHandles, copy.list, redeemableList])\n\n return (\n <Container id={id} className={cn('bg-[#F5F5F5]')}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} />\n\n <div className=\"relative mt-[24px] grid grid-cols-4 gap-[16px] l:gap-[12px] md:grid-cols-2 md-xl:grid-cols-3\">\n {list?.map((item, index: number) => (\n <RedeemableItem\n key={index}\n copy={copy}\n itemData={item}\n setRules={setRules}\n currencyCode={productByHandles?.[0]?.price.currencyCode || 'USD'}\n />\n ))}\n </div>\n\n {rules && (\n <RulesModal\n overlayClassName=\"md:px-[16px] md:items-center\"\n className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}\n isOpen={rules.length > 0}\n onClose={() => setRules([])}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] md:mb-[24px] md:pt-0\"\n title={pageCommon?.ruleLabel}\n ruleClassName=\"text-[#1d1d1f] font-bold\"\n />\n )}\n </Container>\n )\n}\n"],
5
- "mappings": "AAwDI,OACE,OAAAA,EADF,QAAAC,MAAA,oBAxDJ,OAAS,aAAAC,EAAW,WAAAC,MAAqB,wBACzC,OAAS,WAAAC,EAAS,YAAAC,MAAgB,QAElC,OAAOC,MAAoB,mBAC3B,OAAOC,MAAuB,qCAC9B,OAAOC,MAAgB,sBACvB,OAAS,wBAAAC,EAAsB,sBAAAC,MAA0B,gBAEzD,OAAkB,cAAcC,MAAU,gBAC1C,OAAS,qBAAAC,MAAyB,sBAElC,OAAS,kBAAAC,MAAsB,qBAExB,MAAMC,EAAc,CAAC,CAAE,KAAAC,EAAM,GAAAC,CAAG,IAA8C,CACnF,KAAM,CAACC,EAAOC,CAAQ,EAAIb,EAA4B,EAChD,CAAE,eAAAc,CAAe,EAAIZ,EAAkB,EACvC,CAAE,WAAAa,CAAW,EAAIR,EAAkB,EACnC,CAAE,MAAAS,CAAM,EAAIX,EAAmB,EAC/BY,EAAUT,EAAe,SAASQ,CAAK,EAEvCE,EAAqC,CAAC,EAEtC,CAAE,KAAMC,CAAiB,EAAIf,EAAqB,CACtD,QAASM,GAAM,MAAM,IAAIU,GAAQA,EAAK,WAAW,CAAC,GAAG,MAAM,GAAK,CAAC,EACjE,qBAAsB,CACpB,QAASF,CACX,CACF,CAAC,EAEKG,EAAOtB,EAAQ,IACZoB,GACH,IAAKG,GAAqB,CAC1B,MAAMC,GAAUb,EAAK,MAAQ,CAAC,GAAG,KAAKU,GAAQA,EAAK,WAAW,CAAC,GAAG,SAAWE,EAAQ,MAAM,EACrFE,EAAWV,EAAe,KAAKM,GAAQA,EAAK,IAAI,SAAS,IAAMG,GAAQ,UAAU,SAAS,CAAC,EAC3FE,EACJH,EAAQ,UAAU,KAAMI,GAAiBA,EAAQ,MAAQH,GAAQ,WAAW,CAAC,GAAG,GAAG,GAAKD,EAAQ,WAAW,CAAC,EAC9G,MAAI,CAACE,GAAY,CAACC,EAAuB,KAClC,CACL,QAAAH,EACA,eAAAG,EACA,SAAU,CACR,GAAID,GAAU,GACd,eAAgBA,GAAU,gBAC1B,mBAAoBA,GAAU,oBAC9B,UAAWA,GAAU,WACrB,YAAaA,GAAU,aACvB,MAAOA,GAAU,KACjB,KAAMA,GAAU,IAClB,EACA,OAAAD,CACF,CACF,CAAC,EACA,OAAO,OAAO,EAChB,CAACJ,EAAkBT,EAAK,KAAMI,CAAc,CAAC,EAEhD,OACElB,EAACC,EAAA,CAAU,GAAIc,EAAI,UAAWL,EAAG,cAAc,EAC7C,UAAAX,EAACG,EAAA,CAAQ,GAAG,KAAK,KAAK,IAAI,KAAMY,EAAK,MAAO,EAE5Cf,EAAC,OAAI,UAAU,+FACZ,SAAA0B,GAAM,IAAI,CAACD,EAAMO,IAChBhC,EAACM,EAAA,CAEC,KAAMS,EACN,SAAUU,EACV,SAAUP,EACV,aAAcM,IAAmB,CAAC,GAAG,MAAM,cAAgB,OAJtDQ,CAKP,CACD,EACH,EAECf,GACCjB,EAACQ,EAAA,CACC,iBAAiB,+BACjB,UAAWG,EAAG,+BAAgC,CAACW,GAAW,iBAAiB,EAC3E,OAAQL,EAAM,OAAS,EACvB,QAAS,IAAMC,EAAS,CAAC,CAAC,EAC1B,eAAe,gCACf,MAAOD,EACP,gBAAgB,mCAChB,MAAOG,GAAY,UACnB,cAAc,2BAChB,GAEJ,CAEJ",
6
- "names": ["jsx", "jsxs", "Container", "Heading", "useMemo", "useState", "RedeemableItem", "useRedeemableList", "RulesModal", "useProductsByHandles", "useHeadlessContext", "cn", "useCreditsContext", "ROUNDED_BRANDS", "CreditsCash", "copy", "id", "rules", "setRules", "redeemableList", "pageCommon", "brand", "rounded", "variantMetafieldIdentifiers", "productByHandles", "item", "list", "product", "config", "alpcData", "productVariant", "variant", "index"]
4
+ "sourcesContent": ["import { Container, Heading, Text } from '@anker-in/headless-ui'\nimport { useMemo, useState } from 'react'\n\nimport RedeemableItem from './RedeemableItem'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport RulesModal from '../modal/RulesModal'\nimport { useProductsByHandles, useHeadlessContext } from '@anker-in/lib'\nimport { CreditsCashCopy, RedeemItem } from './type'\nimport { Product, classNames as cn } from '@anker-in/lib'\nimport { useCreditsContext } from '../context/provider'\nimport { numberFormat } from '../context/utils'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const CreditsCash = ({ copy, id }: { copy: CreditsCashCopy; id?: string }) => {\n const [rules, setRules] = useState<string | string[]>()\n const { redeemableList } = useRedeemableList()\n const { pageCommon } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const variantMetafieldIdentifiers: any[] = []\n\n const { data: productByHandles } = useProductsByHandles({\n handles: copy?.list?.map(item => item.products?.[0]?.handle) || [],\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n const list = useMemo(() => {\n return (copy?.list || [])\n .map(config => {\n const handle = config?.products?.[0]?.handle\n const sku = config?.products?.[0]?.sku\n const alpcData = redeemableList.find(item => item.id?.toString() === config?.redeemId?.toString())\n\n // \u4ECE productByHandles \u4E2D\u627E\u5230\u5BF9\u5E94 handle \u7684 product\n const product = productByHandles?.find((p: Product) => p.handle === handle)\n if (!product) return null\n\n // \u5728 product \u7684 variants \u4E2D\u627E\u5230\u5BF9\u5E94 sku \u7684 variant\n const productVariant = product.variants?.find((variant: any) => variant.sku === sku) || product.variants?.[0]\n if (!alpcData || !productVariant) return null\n\n return {\n product,\n productVariant,\n alpcData: {\n id: alpcData?.id,\n consumeCredits: alpcData?.consume_credits,\n remainingInventory: alpcData?.remaining_inventory,\n isLimited: alpcData?.is_limited,\n consumeType: alpcData?.consume_type,\n title: alpcData?.name,\n desc: alpcData?.note,\n },\n config,\n }\n })\n .filter(Boolean) as unknown as RedeemItem[]\n }, [productByHandles, copy.list, redeemableList])\n\n return (\n <Container id={id} className={cn('bg-[#F5F5F5]')}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} />\n\n <div className=\"relative mt-[24px] grid grid-cols-4 gap-[16px] l:gap-[12px] md:grid-cols-2 md-xl:grid-cols-3\">\n {list?.map((item, index: number) => (\n <RedeemableItem\n key={index}\n copy={copy}\n itemData={item}\n setRules={setRules}\n currencyCode={productByHandles?.[0]?.price.currencyCode || 'USD'}\n />\n ))}\n </div>\n\n {rules && (\n <RulesModal\n overlayClassName=\"md:px-[16px] md:items-center\"\n className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}\n isOpen={rules.length > 0}\n onClose={() => setRules([])}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] md:mb-[24px] md:pt-0\"\n title={pageCommon?.ruleLabel}\n ruleClassName=\"text-[#1d1d1f] font-bold\"\n />\n )}\n </Container>\n )\n}\n"],
5
+ "mappings": "AA+DI,OACE,OAAAA,EADF,QAAAC,MAAA,oBA/DJ,OAAS,aAAAC,EAAW,WAAAC,MAAqB,wBACzC,OAAS,WAAAC,EAAS,YAAAC,MAAgB,QAElC,OAAOC,MAAoB,mBAC3B,OAAOC,MAAuB,qCAC9B,OAAOC,MAAgB,sBACvB,OAAS,wBAAAC,EAAsB,sBAAAC,MAA0B,gBAEzD,OAAkB,cAAcC,MAAU,gBAC1C,OAAS,qBAAAC,MAAyB,sBAElC,OAAS,kBAAAC,MAAsB,qBAExB,MAAMC,EAAc,CAAC,CAAE,KAAAC,EAAM,GAAAC,CAAG,IAA8C,CACnF,KAAM,CAACC,EAAOC,CAAQ,EAAIb,EAA4B,EAChD,CAAE,eAAAc,CAAe,EAAIZ,EAAkB,EACvC,CAAE,WAAAa,CAAW,EAAIR,EAAkB,EACnC,CAAE,MAAAS,CAAM,EAAIX,EAAmB,EAC/BY,EAAUT,EAAe,SAASQ,CAAK,EAEvCE,EAAqC,CAAC,EAEtC,CAAE,KAAMC,CAAiB,EAAIf,EAAqB,CACtD,QAASM,GAAM,MAAM,IAAIU,GAAQA,EAAK,WAAW,CAAC,GAAG,MAAM,GAAK,CAAC,EACjE,qBAAsB,CACpB,QAASF,CACX,CACF,CAAC,EAEKG,EAAOtB,EAAQ,KACXW,GAAM,MAAQ,CAAC,GACpB,IAAIY,GAAU,CACb,MAAMC,EAASD,GAAQ,WAAW,CAAC,GAAG,OAChCE,EAAMF,GAAQ,WAAW,CAAC,GAAG,IAC7BG,EAAWX,EAAe,KAAKM,GAAQA,EAAK,IAAI,SAAS,IAAME,GAAQ,UAAU,SAAS,CAAC,EAG3FI,EAAUP,GAAkB,KAAMQ,GAAeA,EAAE,SAAWJ,CAAM,EAC1E,GAAI,CAACG,EAAS,OAAO,KAGrB,MAAME,EAAiBF,EAAQ,UAAU,KAAMG,GAAiBA,EAAQ,MAAQL,CAAG,GAAKE,EAAQ,WAAW,CAAC,EAC5G,MAAI,CAACD,GAAY,CAACG,EAAuB,KAElC,CACL,QAAAF,EACA,eAAAE,EACA,SAAU,CACR,GAAIH,GAAU,GACd,eAAgBA,GAAU,gBAC1B,mBAAoBA,GAAU,oBAC9B,UAAWA,GAAU,WACrB,YAAaA,GAAU,aACvB,MAAOA,GAAU,KACjB,KAAMA,GAAU,IAClB,EACA,OAAAH,CACF,CACF,CAAC,EACA,OAAO,OAAO,EAChB,CAACH,EAAkBT,EAAK,KAAMI,CAAc,CAAC,EAEhD,OACElB,EAACC,EAAA,CAAU,GAAIc,EAAI,UAAWL,EAAG,cAAc,EAC7C,UAAAX,EAACG,EAAA,CAAQ,GAAG,KAAK,KAAK,IAAI,KAAMY,EAAK,MAAO,EAE5Cf,EAAC,OAAI,UAAU,+FACZ,SAAA0B,GAAM,IAAI,CAACD,EAAMU,IAChBnC,EAACM,EAAA,CAEC,KAAMS,EACN,SAAUU,EACV,SAAUP,EACV,aAAcM,IAAmB,CAAC,GAAG,MAAM,cAAgB,OAJtDW,CAKP,CACD,EACH,EAEClB,GACCjB,EAACQ,EAAA,CACC,iBAAiB,+BACjB,UAAWG,EAAG,+BAAgC,CAACW,GAAW,iBAAiB,EAC3E,OAAQL,EAAM,OAAS,EACvB,QAAS,IAAMC,EAAS,CAAC,CAAC,EAC1B,eAAe,gCACf,MAAOD,EACP,gBAAgB,mCAChB,MAAOG,GAAY,UACnB,cAAc,2BAChB,GAEJ,CAEJ",
6
+ "names": ["jsx", "jsxs", "Container", "Heading", "useMemo", "useState", "RedeemableItem", "useRedeemableList", "RulesModal", "useProductsByHandles", "useHeadlessContext", "cn", "useCreditsContext", "ROUNDED_BRANDS", "CreditsCash", "copy", "id", "rules", "setRules", "redeemableList", "pageCommon", "brand", "rounded", "variantMetafieldIdentifiers", "productByHandles", "item", "list", "config", "handle", "sku", "alpcData", "product", "p", "productVariant", "variant", "index"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{jsx as s,jsxs as L}from"react/jsx-runtime";import{Text as M}from"@anker-in/headless-ui";import{useCallback as N,useEffect as R,useState as l}from"react";import{useCreditsContext as I}from"../context/provider";import{useRedeemCoupon as F}from"../context/hooks/useRedeemCoupon";import{AlpcErrorCode as n}from"../context/const";import{CreditsModalContainer as S}from"../modal/ModalContainer";import{CouponInit as _}from"./RedeemCouponModal/CouponInit";import{CouponSuccess as v}from"./RedeemCouponModal/CouponSuccess";function y({item:r,copy:o,onError:u,...a}){const[c,p]=l(),[C,t]=l(),[f,d]=l(!1),{profile:m,fetchCreditInfo:x}=I(),{isMutating:b,trigger:g}=F({onSuccess(e){if(!e){t(o.commonError);return}const E=e?.data||e;if(E?.success)p(E.coupon_code),x(m?.user_id);else{let i;e.code===n.CodeLpcShopifyCouponRuleRedeemLimit?(i=o.redeemLimitError,d(!0)):e.code===n.CodeLpcRuleInventoryNotEnough?(i=o.inventoryNotEnough,d(!0)):e.code===n.CodeLpcNotEnoughCredits?(i=o.creditsNotEnough,d(!0),x(m?.user_id)):e.code===n.CodeCrossSiteError&&(i=o.crossSiteError,d(!0)),t(i||o.commonError||""),u&&u(e.code)}},onError(e){t(e.message||o.commonError)}}),h=N(async()=>{t(""),g({user_id:m?.user_id,rule_id:Number(r.alpc?.id)})},[r,m,g]);return R(()=>()=>{d(!1),t(""),p(void 0)},[]),L(S,{...a,isOpen:!!r,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] min-l:px-0 md:mb-[24px] px-0",titleClassName:"h-[56px] bg-[#F5F5F7]",children:[c&&!b?s(v,{item:r,copy:o,couponCode:c,disabled:f,onClose:a.onClose}):s(_,{item:r,copy:o,loading:b,disabled:f,onConfirm:h}),C&&s("div",{className:"mx-auto max-w-full bg-white px-[48px] py-[12px] text-center text-[#FF0000] md:px-[16px]",children:s(M,{className:"text-[14px] font-semibold text-[#1F2021]",html:C})})]})}var B=y;export{B as default};
1
+ import{jsx as s,jsxs as y}from"react/jsx-runtime";import{Text as h}from"@anker-in/headless-ui";import{useCallback as M,useEffect as N,useState as l}from"react";import{useCreditsContext as R}from"../context/provider";import{useRedeemCoupon as I}from"../context/hooks/useRedeemCoupon";import{AlpcErrorCode as n}from"../context/const";import{CreditsModalContainer as F}from"../modal/ModalContainer";import{CouponInit as S}from"./RedeemCouponModal/CouponInit";import{CouponSuccess as _}from"./RedeemCouponModal/CouponSuccess";function v({item:r,copy:o,onError:u,...a}){const[c,p]=l(),[C,t]=l(),[f,d]=l(!1),{profile:m,fetchCreditInfo:x}=R(),{isMutating:b,trigger:g}=I({onSuccess(e){if(!e){t(o.commonError);return}if(e.data?.success)p(e.data.coupon_code),x(m?.user_id);else{let i;e.code===n.CodeLpcShopifyCouponRuleRedeemLimit?(i=o.redeemLimitError,d(!0)):e.code===n.CodeLpcRuleInventoryNotEnough?(i=o.inventoryNotEnough,d(!0)):e.code===n.CodeLpcNotEnoughCredits?(i=o.creditsNotEnough,d(!0),x(m?.user_id)):e.code===n.CodeCrossSiteError&&(i=o.crossSiteError,d(!0)),t(i||o.commonError||""),u&&u(e.code)}},onError(e){t(e.message||o.commonError)}}),E=M(async()=>{t(""),g({user_id:m?.user_id,rule_id:Number(r.alpc?.id)})},[r,m,g]);return N(()=>()=>{d(!1),t(""),p(void 0)},[]),y(F,{...a,isOpen:!!r,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] min-l:px-0 md:mb-[24px] px-0",titleClassName:"h-[56px] bg-[#F5F5F7]",children:[c&&!b?s(_,{item:r,copy:o,couponCode:c,disabled:f,onClose:a.onClose}):s(S,{item:r,copy:o,loading:b,disabled:f,onConfirm:E}),C&&s("div",{className:"mx-auto max-w-full bg-white px-[48px] py-[12px] text-center text-[#FF0000] md:px-[16px]",children:s(h,{className:"text-[14px] font-semibold text-[#1F2021]",html:C})})]})}var z=v;export{z as default};
2
2
  //# sourceMappingURL=RedeemCouponModal.js.map
@@ -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