@anker-in/campaign-ui 0.2.11-beta.2 → 0.2.11-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.d.ts +43 -0
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js +2 -0
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/api/chat.d.ts +25 -0
- package/dist/cjs/components/LiveChatWidget/api/chat.js +3 -0
- package/dist/cjs/components/LiveChatWidget/api/chat.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatBubble.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js +5 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +48 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js +5 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +70 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +78 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageList.d.ts +74 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageList.js +5 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageList.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
- package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
- package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/constants.d.ts +8 -0
- package/dist/cjs/components/LiveChatWidget/constants.js +2 -0
- package/dist/cjs/components/LiveChatWidget/constants.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.d.ts +51 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.d.ts +120 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js +2 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useSession.js +2 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useSession.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/index.d.ts +12 -0
- package/dist/cjs/components/LiveChatWidget/index.js +2 -0
- package/dist/cjs/components/LiveChatWidget/index.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/types.d.ts +609 -0
- package/dist/cjs/components/LiveChatWidget/types.js +2 -0
- package/dist/cjs/components/LiveChatWidget/types.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
- package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
- package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
- package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/userId.d.ts +18 -0
- package/dist/cjs/components/LiveChatWidget/utils/userId.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/userId.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/utils/validation.d.ts +37 -0
- package/dist/cjs/components/LiveChatWidget/utils/validation.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/validation.js.map +7 -0
- package/dist/cjs/components/chat/markdown.js +1 -1
- package/dist/cjs/components/chat/markdown.js.map +2 -2
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.d.ts +2 -2
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js.map +2 -2
- package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
- package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +2 -2
- package/dist/cjs/components/credits/context/memberPriceConst.d.ts +0 -5
- package/dist/cjs/components/credits/context/memberPriceConst.js +1 -1
- package/dist/cjs/components/credits/context/memberPriceConst.js.map +3 -3
- package/dist/cjs/components/credits/context/memberPriceTypes.d.ts +1 -22
- package/dist/cjs/components/credits/context/memberPriceTypes.js +1 -1
- package/dist/cjs/components/credits/context/memberPriceTypes.js.map +1 -1
- package/dist/cjs/components/credits/context/provider.d.ts +16 -1
- package/dist/cjs/components/credits/context/provider.js +1 -1
- package/dist/cjs/components/credits/context/provider.js.map +3 -3
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.d.ts +2 -2
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +1 -1
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +1 -1
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +2 -2
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +1 -1
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +1 -1
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +2 -2
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +1 -1
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +1 -1
- package/dist/cjs/components/credits/context/utils.d.ts +4 -0
- package/dist/cjs/components/credits/context/utils.js +1 -1
- package/dist/cjs/components/credits/context/utils.js.map +3 -3
- package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
- package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
- package/dist/cjs/components/credits/creditsBanner/index.d.ts +2 -0
- package/dist/cjs/components/credits/creditsBanner/index.js +12 -1
- package/dist/cjs/components/credits/creditsBanner/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js +1 -1
- package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsBenefits/IconInfo.js +1 -1
- package/dist/cjs/components/credits/creditsBenefits/IconInfo.js.map +1 -1
- package/dist/cjs/components/credits/creditsBenefits/index.js +3 -3
- package/dist/cjs/components/credits/creditsBenefits/index.js.map +2 -2
- package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
- package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.js +1 -1
- package/dist/cjs/components/credits/creditsCash/RedeemableItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsCash/type.d.ts +1 -0
- package/dist/cjs/components/credits/creditsCash/type.js +1 -1
- package/dist/cjs/components/credits/creditsCash/type.js.map +1 -1
- package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
- package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsFaq/index.js +1 -1
- package/dist/cjs/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/cjs/components/credits/creditsInfoCard/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
- package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
- package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
- package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsMemberPrice/Pagination.d.ts +7 -0
- package/dist/cjs/components/credits/creditsMemberPrice/Pagination.js +2 -0
- package/dist/cjs/components/credits/creditsMemberPrice/Pagination.js.map +7 -0
- package/dist/cjs/components/credits/creditsMemberPrice/type.d.ts +3 -5
- package/dist/cjs/components/credits/creditsMemberPrice/type.js +1 -1
- package/dist/cjs/components/credits/creditsMemberPrice/type.js.map +1 -1
- package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
- package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +3 -3
- package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
- package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
- package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
- package/dist/cjs/components/credits/modal/MyRewardsModal.js +1 -1
- package/dist/cjs/components/credits/modal/MyRewardsModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/activitiesModal.js +1 -1
- package/dist/cjs/components/credits/modal/activitiesModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js +1 -1
- package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/modalContainer.js +1 -1
- package/dist/cjs/components/credits/modal/modalContainer.js.map +3 -3
- package/dist/cjs/components/credits/modal/subscribeModal.js +1 -1
- package/dist/cjs/components/credits/modal/subscribeModal.js.map +3 -3
- package/dist/cjs/components/credits/modal/tip.js +1 -1
- package/dist/cjs/components/credits/modal/tip.js.map +3 -3
- package/dist/cjs/components/index.d.ts +3 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/components/registration/authCodeActivate/index.js +1 -1
- package/dist/cjs/components/registration/authCodeActivate/index.js.map +3 -3
- package/dist/cjs/components/registration/modalContainer.js +1 -1
- package/dist/cjs/components/registration/modalContainer.js.map +3 -3
- package/dist/cjs/constants.d.ts +1 -0
- package/dist/cjs/constants.js +2 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/stories/CartCard.stories.d.ts +33 -0
- package/dist/cjs/stories/CartCard.stories.js +21 -0
- package/dist/cjs/stories/CartCard.stories.js.map +7 -0
- package/dist/cjs/stories/LiveChatWidget.stories.d.ts +92 -0
- package/dist/cjs/stories/LiveChatWidget.stories.js +98 -0
- package/dist/cjs/stories/LiveChatWidget.stories.js.map +7 -0
- package/dist/cjs/templates/Credits.d.ts +15 -1
- package/dist/cjs/templates/Credits.js +1 -1
- package/dist/cjs/templates/Credits.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.d.ts +43 -0
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.js +2 -0
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/api/chat.d.ts +25 -0
- package/dist/esm/components/LiveChatWidget/api/chat.js +3 -0
- package/dist/esm/components/LiveChatWidget/api/chat.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
- package/dist/esm/components/LiveChatWidget/components/ChatBubble.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
- package/dist/esm/components/LiveChatWidget/components/ChatHeader.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
- package/dist/esm/components/LiveChatWidget/components/ChatInput.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ChatInput.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
- package/dist/esm/components/LiveChatWidget/components/ChatMessage.js +5 -0
- package/dist/esm/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +48 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js +5 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +70 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +78 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageList.d.ts +74 -0
- package/dist/esm/components/LiveChatWidget/components/MessageList.js +5 -0
- package/dist/esm/components/LiveChatWidget/components/MessageList.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
- package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
- package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/constants.d.ts +8 -0
- package/dist/esm/components/LiveChatWidget/constants.js +2 -0
- package/dist/esm/components/LiveChatWidget/constants.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.d.ts +51 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.d.ts +120 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.js +2 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
- package/dist/esm/components/LiveChatWidget/hooks/useSession.js +2 -0
- package/dist/esm/components/LiveChatWidget/hooks/useSession.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/index.d.ts +12 -0
- package/dist/esm/components/LiveChatWidget/index.js +2 -0
- package/dist/esm/components/LiveChatWidget/index.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/types.d.ts +609 -0
- package/dist/esm/components/LiveChatWidget/types.js +1 -0
- package/dist/esm/components/LiveChatWidget/types.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
- package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
- package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
- package/dist/esm/components/LiveChatWidget/utils/productTransformers.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/userId.d.ts +18 -0
- package/dist/esm/components/LiveChatWidget/utils/userId.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/userId.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/utils/validation.d.ts +37 -0
- package/dist/esm/components/LiveChatWidget/utils/validation.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/validation.js.map +7 -0
- package/dist/esm/components/chat/markdown.js +1 -1
- package/dist/esm/components/chat/markdown.js.map +2 -2
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.d.ts +2 -2
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +1 -1
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js.map +2 -2
- package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
- package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +2 -2
- package/dist/esm/components/credits/context/memberPriceConst.d.ts +0 -5
- package/dist/esm/components/credits/context/memberPriceConst.js +1 -1
- package/dist/esm/components/credits/context/memberPriceConst.js.map +3 -3
- package/dist/esm/components/credits/context/memberPriceTypes.d.ts +1 -22
- package/dist/esm/components/credits/context/provider.d.ts +16 -1
- package/dist/esm/components/credits/context/provider.js +1 -1
- package/dist/esm/components/credits/context/provider.js.map +3 -3
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.d.ts +2 -2
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +1 -1
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +1 -1
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +2 -2
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +1 -1
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +1 -1
- package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +2 -2
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js +1 -1
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +1 -1
- package/dist/esm/components/credits/context/utils.d.ts +4 -0
- package/dist/esm/components/credits/context/utils.js +1 -1
- package/dist/esm/components/credits/context/utils.js.map +3 -3
- package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
- package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
- package/dist/esm/components/credits/creditsBanner/index.d.ts +2 -0
- package/dist/esm/components/credits/creditsBanner/index.js +12 -1
- package/dist/esm/components/credits/creditsBanner/index.js.map +3 -3
- package/dist/esm/components/credits/creditsBenefits/BenefitItem.js +1 -1
- package/dist/esm/components/credits/creditsBenefits/BenefitItem.js.map +3 -3
- package/dist/esm/components/credits/creditsBenefits/IconInfo.js +1 -1
- package/dist/esm/components/credits/creditsBenefits/IconInfo.js.map +1 -1
- package/dist/esm/components/credits/creditsBenefits/index.js +3 -3
- package/dist/esm/components/credits/creditsBenefits/index.js.map +2 -2
- package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
- package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
- package/dist/esm/components/credits/creditsCash/RedeemableItem.js +1 -1
- package/dist/esm/components/credits/creditsCash/RedeemableItem.js.map +3 -3
- package/dist/esm/components/credits/creditsCash/type.d.ts +1 -0
- package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
- package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
- package/dist/esm/components/credits/creditsFaq/index.js +1 -1
- package/dist/esm/components/credits/creditsFaq/index.js.map +3 -3
- package/dist/esm/components/credits/creditsInfoCard/index.js +1 -1
- package/dist/esm/components/credits/creditsInfoCard/index.js.map +2 -2
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
- package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
- package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
- package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
- package/dist/esm/components/credits/creditsMemberPrice/Pagination.d.ts +7 -0
- package/dist/esm/components/credits/creditsMemberPrice/Pagination.js +2 -0
- package/dist/esm/components/credits/creditsMemberPrice/Pagination.js.map +7 -0
- package/dist/esm/components/credits/creditsMemberPrice/type.d.ts +3 -5
- package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
- package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.js.map +3 -3
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +2 -2
- package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
- package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
- package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
- package/dist/esm/components/credits/modal/MyRewardsModal.js +1 -1
- package/dist/esm/components/credits/modal/MyRewardsModal.js.map +2 -2
- package/dist/esm/components/credits/modal/activitiesModal.js +1 -1
- package/dist/esm/components/credits/modal/activitiesModal.js.map +3 -3
- package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js +1 -1
- package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
- package/dist/esm/components/credits/modal/modalContainer.js +1 -1
- package/dist/esm/components/credits/modal/modalContainer.js.map +3 -3
- package/dist/esm/components/credits/modal/subscribeModal.js +1 -1
- package/dist/esm/components/credits/modal/subscribeModal.js.map +3 -3
- package/dist/esm/components/credits/modal/tip.js +1 -1
- package/dist/esm/components/credits/modal/tip.js.map +3 -3
- package/dist/esm/components/index.d.ts +3 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +3 -3
- package/dist/esm/components/registration/authCodeActivate/index.js +1 -1
- package/dist/esm/components/registration/authCodeActivate/index.js.map +3 -3
- package/dist/esm/components/registration/modalContainer.js +1 -1
- package/dist/esm/components/registration/modalContainer.js.map +3 -3
- package/dist/esm/constants.d.ts +1 -0
- package/dist/esm/constants.js +2 -0
- package/dist/esm/constants.js.map +7 -0
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/stories/CartCard.stories.d.ts +33 -0
- package/dist/esm/stories/CartCard.stories.js +21 -0
- package/dist/esm/stories/CartCard.stories.js.map +7 -0
- package/dist/esm/stories/LiveChatWidget.stories.d.ts +92 -0
- package/dist/esm/stories/LiveChatWidget.stories.js +98 -0
- package/dist/esm/stories/LiveChatWidget.stories.js.map +7 -0
- package/dist/esm/templates/Credits.d.ts +15 -1
- package/dist/esm/templates/Credits.js +1 -1
- package/dist/esm/templates/Credits.js.map +3 -3
- package/package.json +7 -3
- package/src/components/LiveChatWidget/LiveChatWidget.tsx +599 -0
- package/src/components/LiveChatWidget/api/chat.ts +136 -0
- package/src/components/LiveChatWidget/components/ChatBubble.tsx +152 -0
- package/src/components/LiveChatWidget/components/ChatHeader.tsx +151 -0
- package/src/components/LiveChatWidget/components/ChatInput.tsx +216 -0
- package/src/components/LiveChatWidget/components/ChatMessage.tsx +182 -0
- package/src/components/LiveChatWidget/components/ChatWindow.tsx +304 -0
- package/src/components/LiveChatWidget/components/MessageContent/CartCard.tsx +198 -0
- package/src/components/LiveChatWidget/components/MessageContent/ErrorBlock.tsx +75 -0
- package/src/components/LiveChatWidget/components/MessageContent/FAQList.tsx +127 -0
- package/src/components/LiveChatWidget/components/MessageContent/PolicyBlock.tsx +150 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductCard.tsx +139 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx +348 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductList.tsx +275 -0
- package/src/components/LiveChatWidget/components/MessageContent/PromotionList.tsx +207 -0
- package/src/components/LiveChatWidget/components/MessageContent/QuickReplies.tsx +91 -0
- package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +89 -0
- package/src/components/LiveChatWidget/components/MessageContent/ThinkingBlock.tsx +53 -0
- package/src/components/LiveChatWidget/components/MessageContent/index.ts +16 -0
- package/src/components/LiveChatWidget/components/MessageContent.tsx +110 -0
- package/src/components/LiveChatWidget/components/MessageList.tsx +261 -0
- package/src/components/LiveChatWidget/components/ScrollAnchor.tsx +75 -0
- package/src/components/LiveChatWidget/constants.ts +15 -0
- package/src/components/LiveChatWidget/hooks/useChatAPI.ts +136 -0
- package/src/components/LiveChatWidget/hooks/useChatState.ts +542 -0
- package/src/components/LiveChatWidget/hooks/useSession.ts +123 -0
- package/src/components/LiveChatWidget/index.tsx +62 -0
- package/src/components/LiveChatWidget/types.ts +769 -0
- package/src/components/LiveChatWidget/utils/cartTransformers.ts +72 -0
- package/src/components/LiveChatWidget/utils/messageRenderers.ts +120 -0
- package/src/components/LiveChatWidget/utils/productTransformers.ts +149 -0
- package/src/components/LiveChatWidget/utils/userId.ts +140 -0
- package/src/components/LiveChatWidget/utils/validation.ts +99 -0
- package/src/components/chat/markdown.tsx +1 -1
- package/src/components/credits/context/hooks/useRedeemableList.ts +1 -1
- package/src/components/credits/context/memberPriceConst.ts +0 -7
- package/src/components/credits/context/memberPriceTypes.ts +1 -26
- package/src/components/credits/context/provider.tsx +16 -0
- package/src/components/credits/context/utils.ts +9 -0
- package/src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx +44 -41
- package/src/components/credits/creditsBanner/index.tsx +31 -3
- package/src/components/credits/creditsBenefits/BenefitItem.tsx +13 -5
- package/src/components/credits/creditsBenefits/IconInfo.tsx +1 -1
- package/src/components/credits/creditsBenefits/index.tsx +1 -1
- package/src/components/credits/creditsCash/CreditsCash.tsx +6 -3
- package/src/components/credits/creditsCash/RedeemableItem.tsx +29 -11
- package/src/components/credits/creditsCash/type.ts +1 -0
- package/src/components/credits/creditsFaq/faqItem/FaqItem.tsx +25 -23
- package/src/components/credits/creditsFaq/index.tsx +2 -1
- package/src/components/credits/creditsInfoCard/index.tsx +10 -3
- package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +160 -136
- package/src/components/credits/creditsMemberPrice/MemberPriceItem.tsx +134 -29
- package/src/components/credits/creditsMemberPrice/Pagination.tsx +113 -0
- package/src/components/credits/creditsMemberPrice/type.ts +3 -5
- package/src/components/credits/creditsNavigation/CreditsNavigation.tsx +3 -3
- package/src/components/credits/creditsRedeemList/AddressForm/CountrySelect.tsx +2 -1
- package/src/components/credits/creditsRedeemList/AddressForm/StateSelect.tsx +2 -1
- package/src/components/credits/creditsRedeemList/AddressForm/index.tsx +2 -1
- package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +32 -18
- package/src/components/credits/creditsRedeemList/RedeemProductModal/Address.tsx +2 -1
- package/src/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.tsx +6 -4
- package/src/components/credits/creditsRedeemList/RedeemProductModal/Success.tsx +2 -1
- package/src/components/credits/creditsRedeemList/RedeemableItem.tsx +21 -7
- package/src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx +34 -20
- package/src/components/credits/modal/MyRewardsModal.tsx +2 -1
- package/src/components/credits/modal/activitiesModal.tsx +2 -1
- package/src/components/credits/modal/creditsUploadReceiptModal.tsx +2 -1
- package/src/components/credits/modal/modalContainer.tsx +2 -1
- package/src/components/credits/modal/subscribeModal.tsx +2 -1
- package/src/components/credits/modal/tip.tsx +2 -1
- package/src/components/index.ts +23 -1
- package/src/components/registration/authCodeActivate/index.tsx +3 -1
- package/src/components/registration/modalContainer.tsx +2 -1
- package/src/constants.ts +1 -0
- package/src/index.ts +3 -2
- package/src/stories/CartCard.stories.tsx +459 -0
- package/src/stories/LiveChatWidget.stories.tsx +461 -0
- package/src/styles/livechat.css +263 -0
- package/src/templates/Credits.tsx +26 -9
- package/src/components/credits/context/hooks/useFunctionMemberPrice.ts +0 -33
- package/src/components/credits/context/utils/atobID.ts +0 -8
- package/src/components/credits/context/utils/functionDiscountCalculate.ts +0 -57
- package/src/components/credits/context/utils/getFunctionMemberPrice.ts +0 -135
- package/src/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.ts +0 -51
- package/src/components/credits/context/utils/variantGetCoupon.ts +0 -34
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { Container, Heading, Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'
|
|
2
|
-
import { useMemo, useState, useEffect, useCallback } from 'react'
|
|
2
|
+
import { useMemo, useState, useEffect, useCallback, useRef } from 'react'
|
|
3
3
|
import Decimal from 'decimal.js'
|
|
4
4
|
|
|
5
5
|
import MemberPriceItem from './MemberPriceItem'
|
|
6
6
|
import RedeemableItem from '../creditsCash/RedeemableItem'
|
|
7
7
|
import useRedeemableList from '../context/hooks/useRedeemableList'
|
|
8
8
|
import RulesModal from '../modal/rulesModal'
|
|
9
|
-
import {
|
|
9
|
+
import { Pagination } from './Pagination'
|
|
10
|
+
import { useProductsByHandles, useHeadlessContext, gaTrack } from '@anker-in/lib'
|
|
10
11
|
import { CreditsMemberPriceCopy, MemberPriceProduct } from './type'
|
|
11
12
|
import { Product, classNames as cn } from '@anker-in/lib'
|
|
12
13
|
import { useCreditsContext } from '../context/provider'
|
|
13
14
|
import { RedeemItem } from '../creditsCash/type'
|
|
14
15
|
import { FunctionDiscountType } from '../context/memberPriceConst'
|
|
16
|
+
import { ROUNDED_BRANDS } from '../../../constants'
|
|
15
17
|
|
|
16
18
|
export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy; id?: string }) => {
|
|
17
19
|
const [activeTab, setActiveTab] = useState<'memberPrice' | 'redeem'>(copy.tabs[0]?.type || 'memberPrice')
|
|
@@ -19,27 +21,38 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
|
|
|
19
21
|
const [currentPage, setCurrentPage] = useState(1)
|
|
20
22
|
const [itemsPerPage, setItemsPerPage] = useState(9) // 默认 1024px 以上:3列 × 3行 = 9
|
|
21
23
|
const { redeemableList } = useRedeemableList()
|
|
22
|
-
const { pageCommon, memberPriceDiscount } = useCreditsContext()
|
|
24
|
+
const { pageCommon, memberPriceDiscount, profile, gtm } = useCreditsContext()
|
|
25
|
+
const { brand } = useHeadlessContext()
|
|
26
|
+
const rounded = ROUNDED_BRANDS.includes(brand)
|
|
27
|
+
const containerRef = useRef<HTMLDivElement>(null)
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// 定义需要获取的 metafield,包括透明图
|
|
29
|
+
// 定义需要获取的 metafield,包括透明图和优惠券信息
|
|
27
30
|
const variantMetafieldIdentifiers: any[] = [
|
|
28
31
|
{
|
|
29
32
|
namespace: 'global',
|
|
30
33
|
key: 'transparentImg',
|
|
31
34
|
},
|
|
35
|
+
{
|
|
36
|
+
namespace: '__discountCodeApp',
|
|
37
|
+
key: 'data',
|
|
38
|
+
},
|
|
32
39
|
]
|
|
33
40
|
|
|
34
41
|
// 根据屏幕尺寸动态调整每页显示的商品数量
|
|
35
42
|
useEffect(() => {
|
|
36
43
|
const updateItemsPerPage = () => {
|
|
37
44
|
const width = window.innerWidth
|
|
38
|
-
if (width >=
|
|
39
|
-
//
|
|
45
|
+
if (width >= 1440) {
|
|
46
|
+
// 1920px 以上:4列 × 3行 = 12个
|
|
47
|
+
setItemsPerPage(12)
|
|
48
|
+
} else if (width >= 1024) {
|
|
49
|
+
// 1024px - 1919px:3列 × 3行 = 9个
|
|
40
50
|
setItemsPerPage(9)
|
|
51
|
+
} else if (width >= 768) {
|
|
52
|
+
// 1024px 以下:3列 × 4行 = 12个
|
|
53
|
+
setItemsPerPage(12)
|
|
41
54
|
} else {
|
|
42
|
-
//
|
|
55
|
+
// 768px 以下:2列 × 4行 = 8个
|
|
43
56
|
setItemsPerPage(8)
|
|
44
57
|
}
|
|
45
58
|
}
|
|
@@ -57,18 +70,24 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
|
|
|
57
70
|
// 根据配置的 ruleId 查找对应的会员价规则
|
|
58
71
|
const targetRule = useMemo(() => {
|
|
59
72
|
if (!memberPriceDiscount || !copy.memberPriceTab.memberPriceRuleId) return null
|
|
60
|
-
return memberPriceDiscount
|
|
61
|
-
.find(rule => String(rule.rule_id) === String(copy.memberPriceTab.memberPriceRuleId))
|
|
62
|
-
?.result_detail?.member_discounts?.find(discount => discount.user_identity === 1)
|
|
73
|
+
return memberPriceDiscount.find(rule => String(rule.rule_id) === String(copy.memberPriceTab.memberPriceRuleId))
|
|
63
74
|
}, [memberPriceDiscount, copy.memberPriceTab.memberPriceRuleId])
|
|
64
75
|
|
|
65
|
-
console.log('targetRule in CreditsMemberPrice', targetRule)
|
|
66
|
-
|
|
67
76
|
const memberPriceHandles = useMemo(() => {
|
|
68
77
|
if (!targetRule) return []
|
|
69
78
|
|
|
70
|
-
|
|
71
|
-
|
|
79
|
+
// 获取所有 user_identity === 1 的 discounts
|
|
80
|
+
const allDiscounts = targetRule.result_detail?.member_discounts?.filter(
|
|
81
|
+
(discount: any) => discount.user_identity === 1
|
|
82
|
+
) || []
|
|
83
|
+
|
|
84
|
+
// 合并所有 discounts 的 variants 的 handles
|
|
85
|
+
const handles = allDiscounts.flatMap((discount: any) =>
|
|
86
|
+
discount.main_products?.variants?.map((variant: any) => variant.handle) || []
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
return handles
|
|
90
|
+
}, [targetRule])
|
|
72
91
|
|
|
73
92
|
// 获取会员价产品数据(通过从 memberPriceDiscount 提取的 handles 获取产品)
|
|
74
93
|
const { data: memberPriceProducts } = useProductsByHandles({
|
|
@@ -86,12 +105,45 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
|
|
|
86
105
|
},
|
|
87
106
|
})
|
|
88
107
|
|
|
89
|
-
//
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
108
|
+
// 从 variant metafields 中获取有效的 coupon 折扣金额
|
|
109
|
+
const getCouponDiscount = useCallback((variant: any) => {
|
|
110
|
+
try {
|
|
111
|
+
const discountData = variant?.metafields?.__discountCodeApp?.data
|
|
112
|
+
if (!discountData) return 0
|
|
113
|
+
|
|
114
|
+
// discountData 已经是对象,不需要 JSON.parse
|
|
115
|
+
const discounts = discountData
|
|
116
|
+
if (!Array.isArray(discounts) || discounts.length === 0) return 0
|
|
117
|
+
|
|
118
|
+
// 获取第一个有效的 coupon(检查时间范围)
|
|
119
|
+
const now = new Date()
|
|
120
|
+
const validDiscount = discounts.find((discount: any) => {
|
|
121
|
+
const startsAt = discount.starts_at ? new Date(discount.starts_at) : null
|
|
122
|
+
const endsAt = discount.ends_at ? new Date(discount.ends_at) : null
|
|
123
|
+
|
|
124
|
+
// 检查 coupon 是否在有效期内
|
|
125
|
+
if (startsAt && startsAt > now) return false
|
|
126
|
+
if (endsAt && endsAt < now) return false
|
|
127
|
+
|
|
128
|
+
return true
|
|
129
|
+
})
|
|
93
130
|
|
|
94
|
-
|
|
131
|
+
// 返回折扣金额(fixed_amount 类型)
|
|
132
|
+
if (validDiscount?.fixed_value) {
|
|
133
|
+
return parseFloat(validDiscount.fixed_value)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return 0
|
|
137
|
+
} catch (error) {
|
|
138
|
+
console.error('Failed to get coupon discount:', error)
|
|
139
|
+
return 0
|
|
140
|
+
}
|
|
141
|
+
}, [])
|
|
142
|
+
|
|
143
|
+
// 计算会员价的辅助函数(仅使用普通会员 user_identity = 1 的折扣,并叠加 coupon 折扣)
|
|
144
|
+
const calculateMemberPrice = useCallback(
|
|
145
|
+
(price: number, discount: any, variant?: any) => {
|
|
146
|
+
const discountConfig = discount?.discount_conf
|
|
95
147
|
if (!discountConfig) return null
|
|
96
148
|
|
|
97
149
|
// 根据折扣类型计算会员价
|
|
@@ -108,28 +160,58 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
|
|
|
108
160
|
break
|
|
109
161
|
}
|
|
110
162
|
|
|
163
|
+
// 叠加 coupon 折扣
|
|
164
|
+
if (variant) {
|
|
165
|
+
const couponDiscount = getCouponDiscount(variant)
|
|
166
|
+
if (couponDiscount > 0) {
|
|
167
|
+
salePrice = salePrice.sub(couponDiscount)
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// 确保价格不为负数
|
|
172
|
+
if (salePrice.lessThan(0)) {
|
|
173
|
+
salePrice = new Decimal(0)
|
|
174
|
+
}
|
|
175
|
+
|
|
111
176
|
return {
|
|
112
177
|
memberPrice: salePrice.toNumber(),
|
|
113
178
|
originalPrice: price,
|
|
114
179
|
}
|
|
115
180
|
},
|
|
116
|
-
[
|
|
181
|
+
[getCouponDiscount]
|
|
117
182
|
)
|
|
118
183
|
|
|
119
184
|
// 处理会员价产品列表(仅普通会员 user_identity = 1 的折扣)
|
|
120
185
|
const memberPriceList = useMemo(() => {
|
|
121
186
|
if (!targetRule || !memberPriceProducts) return []
|
|
122
187
|
|
|
188
|
+
// 获取所有 user_identity === 1 的 discounts
|
|
189
|
+
const allDiscounts = targetRule.result_detail?.member_discounts?.filter(
|
|
190
|
+
(discount: any) => discount.user_identity === 1
|
|
191
|
+
) || []
|
|
192
|
+
|
|
193
|
+
// 合并所有 discounts 的 variants,并保存对应的 discount 信息
|
|
194
|
+
const allVariantsWithDiscount = allDiscounts.flatMap((discount: any) =>
|
|
195
|
+
(discount.main_products?.variants || []).map((variant: any) => ({
|
|
196
|
+
...variant,
|
|
197
|
+
discount, // 将 discount 信息保存到 variant 中
|
|
198
|
+
}))
|
|
199
|
+
)
|
|
200
|
+
|
|
123
201
|
return (
|
|
124
|
-
(
|
|
125
|
-
.map(
|
|
126
|
-
const product = memberPriceProducts.find(p => p.handle ===
|
|
202
|
+
(allVariantsWithDiscount
|
|
203
|
+
.map((variantWithDiscount: any) => {
|
|
204
|
+
const product = memberPriceProducts.find(p => p.handle === variantWithDiscount.handle)
|
|
127
205
|
if (!product) return null
|
|
128
206
|
|
|
129
|
-
const productVariant = product.variants?.find(v => v.sku ===
|
|
207
|
+
const productVariant = product.variants?.find(v => v.sku === variantWithDiscount.sku) || product.variants?.[0]
|
|
130
208
|
if (!productVariant || !productVariant.availableForSale) return null
|
|
131
209
|
|
|
132
|
-
const priceResult = calculateMemberPrice(
|
|
210
|
+
const priceResult = calculateMemberPrice(
|
|
211
|
+
productVariant.price.amount,
|
|
212
|
+
variantWithDiscount.discount,
|
|
213
|
+
productVariant
|
|
214
|
+
)
|
|
133
215
|
if (!priceResult) return null
|
|
134
216
|
|
|
135
217
|
return {
|
|
@@ -208,122 +290,56 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
|
|
|
208
290
|
}
|
|
209
291
|
}, [redeemList, currentPage, itemsPerPage])
|
|
210
292
|
|
|
211
|
-
//
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
if (i === 1 || i === totalPages || (i >= currentPage - delta && i <= currentPage + delta)) {
|
|
223
|
-
range.push(i)
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
let prev = 0
|
|
228
|
-
for (const i of range) {
|
|
229
|
-
if (prev && i - prev > 1) {
|
|
230
|
-
rangeWithDots.push('...')
|
|
231
|
-
}
|
|
232
|
-
rangeWithDots.push(i)
|
|
233
|
-
prev = i
|
|
293
|
+
// 处理页面切换,滚动到模块顶部
|
|
294
|
+
const handlePageChange = useCallback(
|
|
295
|
+
(page: number) => {
|
|
296
|
+
setCurrentPage(page)
|
|
297
|
+
// 滚动到模块顶部
|
|
298
|
+
if (containerRef.current) {
|
|
299
|
+
const top = containerRef.current.offsetTop
|
|
300
|
+
window.scrollTo({
|
|
301
|
+
top: top - 80, // 减去 80px 的偏移量,避免被固定头部遮挡
|
|
302
|
+
behavior: 'smooth',
|
|
303
|
+
})
|
|
234
304
|
}
|
|
305
|
+
},
|
|
306
|
+
[setCurrentPage]
|
|
307
|
+
)
|
|
235
308
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
</svg>
|
|
261
|
-
</button>
|
|
262
|
-
|
|
263
|
-
{/* 页码按钮 */}
|
|
264
|
-
{pages.map((page, index) => {
|
|
265
|
-
if (page === '...') {
|
|
266
|
-
return (
|
|
267
|
-
<div
|
|
268
|
-
key={`ellipsis-${index}`}
|
|
269
|
-
className="flex size-[32px] xl:size-[24px] items-center justify-center overflow-hidden bg-white"
|
|
270
|
-
>
|
|
271
|
-
<svg width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
272
|
-
<circle cx="4.5" cy="10" r="1.25" fill="#2A2C32" />
|
|
273
|
-
<circle cx="10" cy="10" r="1.25" fill="#2A2C32" />
|
|
274
|
-
<circle cx="15.5" cy="10" r="1.25" fill="#2A2C32" />
|
|
275
|
-
</svg>
|
|
276
|
-
</div>
|
|
277
|
-
)
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
const isActive = currentPage === page
|
|
281
|
-
return (
|
|
282
|
-
<button
|
|
283
|
-
key={page}
|
|
284
|
-
onClick={() => setCurrentPage(page as number)}
|
|
285
|
-
className={cn(
|
|
286
|
-
'flex size-[32px] xl:size-[24px] pt-[4px] items-center justify-center overflow-hidden text-[16px] xl:text-[14px] font-bold leading-[1.4] tracking-[-0.28px]',
|
|
287
|
-
isActive ? 'bg-[#080a0f] text-white' : 'bg-white text-[#080a0f]'
|
|
288
|
-
)}
|
|
289
|
-
>
|
|
290
|
-
{page}
|
|
291
|
-
</button>
|
|
292
|
-
)
|
|
293
|
-
})}
|
|
294
|
-
|
|
295
|
-
{/* 下一页按钮 */}
|
|
296
|
-
<button
|
|
297
|
-
onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}
|
|
298
|
-
disabled={currentPage === totalPages}
|
|
299
|
-
className={cn(
|
|
300
|
-
'flex size-[32px] xl:size-[24px] items-center justify-center overflow-hidden bg-white',
|
|
301
|
-
currentPage === totalPages && 'cursor-not-allowed opacity-50'
|
|
302
|
-
)}
|
|
303
|
-
>
|
|
304
|
-
<svg width="16" height="16" viewBox="0 0 16 16" fill="none">
|
|
305
|
-
<path
|
|
306
|
-
d="M6 4L10 8L6 12"
|
|
307
|
-
stroke={currentPage === totalPages ? '#767880' : '#080A0F'}
|
|
308
|
-
strokeWidth="1.5"
|
|
309
|
-
strokeLinecap="round"
|
|
310
|
-
strokeLinejoin="round"
|
|
311
|
-
/>
|
|
312
|
-
</svg>
|
|
313
|
-
</button>
|
|
314
|
-
</div>
|
|
315
|
-
)
|
|
316
|
-
}
|
|
309
|
+
// 处理 tab 切换并发送埋点
|
|
310
|
+
const handleTabChange = useCallback(
|
|
311
|
+
(value: string) => {
|
|
312
|
+
const tabType = value as 'memberPrice' | 'redeem'
|
|
313
|
+
setActiveTab(tabType)
|
|
314
|
+
|
|
315
|
+
// 查找当前 tab 的 label
|
|
316
|
+
const currentTab = copy.tabs.find(tab => tab.type === tabType)
|
|
317
|
+
const tabLabel = currentTab?.label || ''
|
|
318
|
+
|
|
319
|
+
// 发送 tab 点击埋点
|
|
320
|
+
gaTrack({
|
|
321
|
+
event: 'ga4Event',
|
|
322
|
+
event_name: 'lp_button',
|
|
323
|
+
member_active_status: profile?.activated ? 'active' : 'not active',
|
|
324
|
+
event_parameters: {
|
|
325
|
+
page_group: gtm.pageGroup,
|
|
326
|
+
position: copy.title,
|
|
327
|
+
button_name: tabLabel,
|
|
328
|
+
},
|
|
329
|
+
})
|
|
330
|
+
},
|
|
331
|
+
[copy.tabs, copy.title, profile?.activated, gtm.pageGroup]
|
|
332
|
+
)
|
|
317
333
|
|
|
318
334
|
return (
|
|
319
|
-
<Container id={id} className={cn('bg-[#F5F5F5]')}>
|
|
335
|
+
<Container id={id} className={cn('bg-[#F5F5F5]')} ref={containerRef}>
|
|
320
336
|
<Heading as="h2" size="4" html={copy.title} className="mx:px-[16px]" />
|
|
321
337
|
|
|
322
338
|
<Tabs
|
|
323
339
|
align="left"
|
|
324
340
|
className="mt-[24px]"
|
|
325
341
|
value={activeTab}
|
|
326
|
-
onValueChange={
|
|
342
|
+
onValueChange={handleTabChange}
|
|
327
343
|
>
|
|
328
344
|
<TabsList>
|
|
329
345
|
{copy.tabs.map((tab, index) => (
|
|
@@ -344,7 +360,11 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
|
|
|
344
360
|
<MemberPriceItem key={index} itemData={item} copy={copy.memberPriceTab} />
|
|
345
361
|
))}
|
|
346
362
|
</div>
|
|
347
|
-
|
|
363
|
+
<Pagination
|
|
364
|
+
currentPage={currentPage}
|
|
365
|
+
totalPages={memberPricePagination.totalPages}
|
|
366
|
+
onPageChange={handlePageChange}
|
|
367
|
+
/>
|
|
348
368
|
</>
|
|
349
369
|
)}
|
|
350
370
|
|
|
@@ -365,7 +385,11 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
|
|
|
365
385
|
/>
|
|
366
386
|
))}
|
|
367
387
|
</div>
|
|
368
|
-
|
|
388
|
+
<Pagination
|
|
389
|
+
currentPage={currentPage}
|
|
390
|
+
totalPages={redeemPagination.totalPages}
|
|
391
|
+
onPageChange={handlePageChange}
|
|
392
|
+
/>
|
|
369
393
|
</>
|
|
370
394
|
)}
|
|
371
395
|
</div>
|
|
@@ -374,7 +398,7 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
|
|
|
374
398
|
{rules && (
|
|
375
399
|
<RulesModal
|
|
376
400
|
overlayClassName="md:px-[16px] md:items-center"
|
|
377
|
-
className=
|
|
401
|
+
className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}
|
|
378
402
|
isOpen={rules.length > 0}
|
|
379
403
|
onClose={() => setRules([])}
|
|
380
404
|
titleClassName="border-b-transparent h-[56px]"
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Button, Text, Picture } from '@anker-in/headless-ui'
|
|
2
|
-
import { useMemo } from 'react'
|
|
1
|
+
import { Button, Text, Picture, Badge } from '@anker-in/headless-ui'
|
|
2
|
+
import { useMemo, useState } from 'react'
|
|
3
3
|
|
|
4
4
|
import { CreditsMemberPriceCopy, MemberPriceProduct } from './type'
|
|
5
|
-
import { formatPrice } from '../context/utils'
|
|
6
|
-
import { classNames as cn,
|
|
5
|
+
import { formatPrice, extractVariantId } from '../context/utils'
|
|
6
|
+
import { classNames as cn, useHeadlessContext, useBuyNow } from '@anker-in/lib'
|
|
7
7
|
import { useCreditsContext } from '../context/provider'
|
|
8
|
+
import { ROUNDED_BRANDS } from '../../../constants'
|
|
8
9
|
|
|
9
10
|
function MemberPriceItem({
|
|
10
11
|
itemData,
|
|
@@ -16,23 +17,110 @@ function MemberPriceItem({
|
|
|
16
17
|
className?: string
|
|
17
18
|
}) {
|
|
18
19
|
const { brand, locale } = useHeadlessContext()
|
|
19
|
-
const { profile } = useCreditsContext()
|
|
20
|
+
const { profile, openSignUpPopup, cartConfig, gtm } = useCreditsContext()
|
|
20
21
|
const rounded = ROUNDED_BRANDS.includes(brand)
|
|
21
22
|
|
|
22
23
|
// 使用 buyNow hook 来处理结算
|
|
23
24
|
const { trigger: buyNow, isMutating: isBuying } = useBuyNow({}, { throwOnError: true })
|
|
24
25
|
|
|
26
|
+
// 本地 loading 状态,避免全局 loading 影响所有卡片
|
|
27
|
+
const [isAddingToCart, setIsAddingToCart] = useState(false)
|
|
28
|
+
|
|
25
29
|
const isAvailable = useMemo(() => {
|
|
26
30
|
return itemData.productVariant?.availableForSale
|
|
27
31
|
}, [itemData.productVariant?.availableForSale])
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
const isLogin = useMemo(() => {
|
|
34
|
+
return !!profile
|
|
35
|
+
}, [profile])
|
|
36
|
+
|
|
37
|
+
// 从 variant metafields 中获取 coupon code
|
|
38
|
+
const getCouponCode = useMemo(() => {
|
|
39
|
+
try {
|
|
40
|
+
const discountData = itemData.productVariant?.metafields?.__discountCodeApp?.data
|
|
41
|
+
if (!discountData) return undefined
|
|
42
|
+
|
|
43
|
+
// discountData 已经是对象,不需要 JSON.parse
|
|
44
|
+
const discounts = discountData
|
|
45
|
+
if (!Array.isArray(discounts) || discounts.length === 0) return undefined
|
|
46
|
+
|
|
47
|
+
// 获取第一个有效的 coupon(检查时间范围)
|
|
48
|
+
const now = new Date()
|
|
49
|
+
const validDiscount = discounts.find((discount: any) => {
|
|
50
|
+
const startsAt = discount.starts_at ? new Date(discount.starts_at) : null
|
|
51
|
+
const endsAt = discount.ends_at ? new Date(discount.ends_at) : null
|
|
52
|
+
|
|
53
|
+
// 检查 coupon 是否在有效期内
|
|
54
|
+
if (startsAt && startsAt > now) return false
|
|
55
|
+
if (endsAt && endsAt < now) return false
|
|
56
|
+
|
|
57
|
+
return true
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
return validDiscount?.title
|
|
61
|
+
} catch (error) {
|
|
62
|
+
console.error('Failed to get discount code:', error)
|
|
63
|
+
return undefined
|
|
64
|
+
}
|
|
65
|
+
}, [itemData.productVariant?.metafields])
|
|
66
|
+
|
|
67
|
+
// Add to Cart 按钮点击 - 调用加购方法
|
|
68
|
+
const handleAddToCart = async () => {
|
|
69
|
+
if (!cartConfig?.addToCart) {
|
|
70
|
+
console.warn('cartConfig.addToCart is required')
|
|
71
|
+
return
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
setIsAddingToCart(true)
|
|
76
|
+
|
|
77
|
+
// 构建 lineItem attributes
|
|
78
|
+
const lineItemAttributes: Array<{ key: string; value: string }> = []
|
|
79
|
+
if (getCouponCode) {
|
|
80
|
+
lineItemAttributes.push({
|
|
81
|
+
key: '_member_price',
|
|
82
|
+
value: JSON.stringify({ code: getCouponCode }),
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
await cartConfig.addToCart({
|
|
87
|
+
variantList: [
|
|
88
|
+
{
|
|
89
|
+
variant: itemData.productVariant,
|
|
90
|
+
quantity: 1,
|
|
91
|
+
attributes: lineItemAttributes.length > 0 ? lineItemAttributes : undefined,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
cartAttributes: {
|
|
95
|
+
_member_type: String(profile?.memberType || 0),
|
|
96
|
+
},
|
|
97
|
+
discountCodes: getCouponCode ? [getCouponCode] : undefined,
|
|
98
|
+
})
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.error('Add to cart failed:', error)
|
|
101
|
+
} finally {
|
|
102
|
+
setIsAddingToCart(false)
|
|
103
|
+
}
|
|
32
104
|
}
|
|
33
105
|
|
|
34
|
-
// Shop Now 按钮点击 -
|
|
106
|
+
// Shop Now 按钮点击 - 检查登录状态后使用 buyNow 进行结算
|
|
35
107
|
const handleShopNow = () => {
|
|
108
|
+
// 如果未登录,弹出登录弹窗
|
|
109
|
+
if (!isLogin) {
|
|
110
|
+
openSignUpPopup()
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// 构建 lineItem attributes
|
|
115
|
+
const lineItemAttributes: Array<{ key: string; value: string }> = []
|
|
116
|
+
if (getCouponCode) {
|
|
117
|
+
lineItemAttributes.push({
|
|
118
|
+
key: '_member_price',
|
|
119
|
+
value: JSON.stringify({ code: getCouponCode }),
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// 已登录,执行购买
|
|
36
124
|
buyNow({
|
|
37
125
|
customAttributes: [
|
|
38
126
|
{
|
|
@@ -44,34 +132,50 @@ function MemberPriceItem({
|
|
|
44
132
|
{
|
|
45
133
|
variant: itemData.productVariant,
|
|
46
134
|
quantity: 1,
|
|
135
|
+
attributes: lineItemAttributes.length > 0 ? lineItemAttributes : undefined,
|
|
47
136
|
},
|
|
48
137
|
],
|
|
138
|
+
discountCodes: getCouponCode ? [getCouponCode] : undefined,
|
|
139
|
+
gtmParams: {
|
|
140
|
+
pageGroup: gtm.pageGroup,
|
|
141
|
+
position: 'mmeber-price-card',
|
|
142
|
+
},
|
|
49
143
|
})
|
|
50
144
|
}
|
|
51
145
|
|
|
52
146
|
return (
|
|
53
147
|
<div
|
|
54
148
|
className={cn(
|
|
55
|
-
'relative flex flex-col items-center bg-[#EAEAEC]
|
|
149
|
+
'relative flex flex-col items-center bg-[#EAEAEC] px-[24px] pb-[24px] l:px-[8px] l:pb-[8px] rounded-[16px] md-xl:px-[16px] md-xl:pb-[16px] md:rounded-[12px]',
|
|
56
150
|
!rounded && 'rounded-none md:rounded-none',
|
|
151
|
+
copy.badgeLabel ? 'pt-[48px] l:pt-[44px]' : 'pt-[24px] md-xl:pt-[16px] l:pt-[8px]',
|
|
57
152
|
className
|
|
58
153
|
)}
|
|
59
154
|
>
|
|
60
|
-
{/* Member
|
|
61
|
-
{copy.
|
|
62
|
-
<
|
|
63
|
-
className="absolute left-[24px]
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
155
|
+
{/* Member 标签 Badge */}
|
|
156
|
+
{copy.badgeLabel && (
|
|
157
|
+
<Badge
|
|
158
|
+
className="absolute left-[24px] !bg-gradient-brand l:left-[16px] top-[16px] z-10"
|
|
159
|
+
size="lg"
|
|
160
|
+
variant="promotional"
|
|
161
|
+
promotionalType="regular-member"
|
|
162
|
+
>
|
|
163
|
+
{copy.badgeLabel}
|
|
164
|
+
</Badge>
|
|
68
165
|
)}
|
|
69
166
|
|
|
70
167
|
{/* 产品图片 - 优先使用产品的 metafields 透明图 */}
|
|
71
|
-
<a
|
|
168
|
+
<a
|
|
169
|
+
href={
|
|
170
|
+
extractVariantId(itemData.productVariant?.id)
|
|
171
|
+
? `/products/${itemData.product.handle}?variant=${extractVariantId(itemData.productVariant?.id)}${gtm.pageHandle ? `&ref=${gtm.pageHandle}` : ''}`
|
|
172
|
+
: `/products/${itemData.product.handle}${gtm.pageHandle ? `?ref=${gtm.pageHandle}` : ''}`
|
|
173
|
+
}
|
|
174
|
+
className={cn('relative mx-auto h-[196px] w-fit md:h-[120px] md-xxl:h-[138px]')}
|
|
175
|
+
>
|
|
72
176
|
<Picture
|
|
73
|
-
className="mx-auto
|
|
74
|
-
imgClassName="object-contain"
|
|
177
|
+
className="mx-auto h-full w-auto"
|
|
178
|
+
imgClassName="h-full object-contain"
|
|
75
179
|
source={
|
|
76
180
|
itemData?.productVariant?.metafields?.global?.transparentImg ||
|
|
77
181
|
itemData?.config?.image?.url ||
|
|
@@ -81,16 +185,16 @@ function MemberPriceItem({
|
|
|
81
185
|
</a>
|
|
82
186
|
|
|
83
187
|
{/* 产品信息 */}
|
|
84
|
-
<div className={cn('mt-[
|
|
188
|
+
<div className={cn('mt-[10px] xl:mt-[8px] w-full')}>
|
|
85
189
|
{/* 产品标题 - 使用产品的真实标题 */}
|
|
86
190
|
<Text
|
|
87
191
|
html={itemData?.product?.title}
|
|
88
192
|
title={itemData?.product?.title}
|
|
89
|
-
className="line-clamp-2 text-[24px] l-xxl:text-[20px] l:text-[16px] font-bold leading-[1.2] tracking-[-0.8px] text-[#080A0F]"
|
|
193
|
+
className="line-clamp-2 text-[24px] min-h-[58px] l-xxl:min-h-[48px] l:min-h-[38px] l-xxl:text-[20px] l:text-[16px] font-bold leading-[1.2] tracking-[-0.8px] text-[#080A0F]"
|
|
90
194
|
/>
|
|
91
195
|
|
|
92
196
|
{/* 价格信息 */}
|
|
93
|
-
<div className="mt-[
|
|
197
|
+
<div className="mt-[24px] l:mt-[12px] flex flex-col gap-[8px] l:gap-0">
|
|
94
198
|
{/* Member Price 标签 - 使用 text-brand-color-1 */}
|
|
95
199
|
<Text
|
|
96
200
|
html={copy.memberPriceLabel}
|
|
@@ -125,16 +229,17 @@ function MemberPriceItem({
|
|
|
125
229
|
</div>
|
|
126
230
|
|
|
127
231
|
{/* 按钮组 */}
|
|
128
|
-
<div className="flex w-full gap-[8px]
|
|
129
|
-
{/*
|
|
232
|
+
<div className="flex w-full mt-[8px] gap-[8px] l:flex-col">
|
|
233
|
+
{/* Add to Cart 按钮 */}
|
|
130
234
|
<Button
|
|
131
235
|
variant="secondary"
|
|
132
236
|
className="flex-1 md:w-full"
|
|
133
237
|
size="lg"
|
|
134
|
-
onClick={
|
|
135
|
-
disabled={!isAvailable}
|
|
238
|
+
onClick={handleAddToCart}
|
|
239
|
+
disabled={!isAvailable || !cartConfig?.addToCart || isAddingToCart}
|
|
240
|
+
loading={isAddingToCart}
|
|
136
241
|
>
|
|
137
|
-
{copy.
|
|
242
|
+
{copy.addToCart}
|
|
138
243
|
</Button>
|
|
139
244
|
|
|
140
245
|
{/* Shop Now 按钮 */}
|