@anker-in/campaign-ui 0.4.5-beta.11 → 0.4.5-beta.13

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 (148) hide show
  1. package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js +1 -1
  2. package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js.map +3 -3
  3. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js +1 -1
  4. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +2 -2
  5. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js +1 -1
  6. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +2 -2
  7. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js +1 -1
  8. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js.map +2 -2
  9. package/dist/cjs/components/LiveChatWidget/constants.d.ts +0 -1
  10. package/dist/cjs/components/LiveChatWidget/constants.js +1 -1
  11. package/dist/cjs/components/LiveChatWidget/constants.js.map +3 -3
  12. package/dist/cjs/components/credits/context/hooks/useActivities.js +1 -1
  13. package/dist/cjs/components/credits/context/hooks/useActivities.js.map +2 -2
  14. package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js +1 -1
  15. package/dist/cjs/components/credits/context/hooks/useAlpcFetch.js.map +3 -3
  16. package/dist/cjs/components/credits/context/hooks/useCountries.js +1 -1
  17. package/dist/cjs/components/credits/context/hooks/useCountries.js.map +2 -2
  18. package/dist/cjs/components/credits/context/hooks/useMyRewards.js +1 -1
  19. package/dist/cjs/components/credits/context/hooks/useMyRewards.js.map +2 -2
  20. package/dist/cjs/components/credits/context/hooks/useRedeemAndBuy.js +1 -1
  21. package/dist/cjs/components/credits/context/hooks/useRedeemAndBuy.js.map +3 -3
  22. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
  23. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  24. package/dist/cjs/components/credits/context/hooks/useSubscribed.js +1 -1
  25. package/dist/cjs/components/credits/context/hooks/useSubscribed.js.map +3 -3
  26. package/dist/cjs/components/credits/context/hooks/useUploadReceipt.d.ts +0 -8
  27. package/dist/cjs/components/credits/context/hooks/useUploadReceipt.js +1 -1
  28. package/dist/cjs/components/credits/context/hooks/useUploadReceipt.js.map +3 -3
  29. package/dist/cjs/components/credits/context/provider.d.ts +2 -1
  30. package/dist/cjs/components/credits/context/provider.js +1 -1
  31. package/dist/cjs/components/credits/context/provider.js.map +3 -3
  32. package/dist/cjs/components/credits/context/utils.d.ts +1 -1
  33. package/dist/cjs/components/credits/context/utils.js +1 -1
  34. package/dist/cjs/components/credits/context/utils.js.map +3 -3
  35. package/dist/cjs/components/credits/creditsBenefits/index.js +2 -3
  36. package/dist/cjs/components/credits/creditsBenefits/index.js.map +2 -2
  37. package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
  38. package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
  39. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  40. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js.map +2 -2
  41. package/dist/cjs/components/credits/creditsRedeemList/RedeemCouponModal.js +1 -1
  42. package/dist/cjs/components/credits/creditsRedeemList/RedeemCouponModal.js.map +3 -3
  43. package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal.js +1 -1
  44. package/dist/cjs/components/credits/creditsRedeemList/RedeemVirtualProductModal.js.map +3 -3
  45. package/dist/cjs/components/credits/modal/ActivitiesModal.js +1 -1
  46. package/dist/cjs/components/credits/modal/ActivitiesModal.js.map +2 -2
  47. package/dist/cjs/components/credits/modal/SubscribeModal.js +1 -1
  48. package/dist/cjs/components/credits/modal/SubscribeModal.js.map +3 -3
  49. package/dist/cjs/components/index.d.ts +2 -2
  50. package/dist/cjs/components/index.js +1 -1
  51. package/dist/cjs/components/index.js.map +2 -2
  52. package/dist/cjs/components/registration/authCodeActivate/index.js +1 -1
  53. package/dist/cjs/components/registration/authCodeActivate/index.js.map +3 -3
  54. package/dist/cjs/templates/Credits.js +1 -1
  55. package/dist/cjs/templates/Credits.js.map +2 -2
  56. package/dist/cjs/templates/Credits.types.d.ts +1 -0
  57. package/dist/cjs/templates/Credits.types.js.map +1 -1
  58. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js +1 -1
  59. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js.map +3 -3
  60. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js +1 -1
  61. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +3 -3
  62. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js +1 -1
  63. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +3 -3
  64. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js +1 -1
  65. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js.map +3 -3
  66. package/dist/esm/components/LiveChatWidget/constants.d.ts +0 -1
  67. package/dist/esm/components/LiveChatWidget/constants.js +1 -1
  68. package/dist/esm/components/LiveChatWidget/constants.js.map +3 -3
  69. package/dist/esm/components/credits/context/hooks/useActivities.js +1 -1
  70. package/dist/esm/components/credits/context/hooks/useActivities.js.map +2 -2
  71. package/dist/esm/components/credits/context/hooks/useAlpcFetch.js +1 -1
  72. package/dist/esm/components/credits/context/hooks/useAlpcFetch.js.map +3 -3
  73. package/dist/esm/components/credits/context/hooks/useCountries.js +1 -1
  74. package/dist/esm/components/credits/context/hooks/useCountries.js.map +2 -2
  75. package/dist/esm/components/credits/context/hooks/useMyRewards.js +1 -1
  76. package/dist/esm/components/credits/context/hooks/useMyRewards.js.map +2 -2
  77. package/dist/esm/components/credits/context/hooks/useRedeemAndBuy.js +1 -1
  78. package/dist/esm/components/credits/context/hooks/useRedeemAndBuy.js.map +3 -3
  79. package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
  80. package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  81. package/dist/esm/components/credits/context/hooks/useSubscribed.js +1 -1
  82. package/dist/esm/components/credits/context/hooks/useSubscribed.js.map +3 -3
  83. package/dist/esm/components/credits/context/hooks/useUploadReceipt.d.ts +0 -8
  84. package/dist/esm/components/credits/context/hooks/useUploadReceipt.js +1 -1
  85. package/dist/esm/components/credits/context/hooks/useUploadReceipt.js.map +3 -3
  86. package/dist/esm/components/credits/context/provider.d.ts +2 -1
  87. package/dist/esm/components/credits/context/provider.js +1 -1
  88. package/dist/esm/components/credits/context/provider.js.map +3 -3
  89. package/dist/esm/components/credits/context/utils.d.ts +1 -1
  90. package/dist/esm/components/credits/context/utils.js +1 -1
  91. package/dist/esm/components/credits/context/utils.js.map +3 -3
  92. package/dist/esm/components/credits/creditsBenefits/index.js +2 -3
  93. package/dist/esm/components/credits/creditsBenefits/index.js.map +2 -2
  94. package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
  95. package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
  96. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  97. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js.map +2 -2
  98. package/dist/esm/components/credits/creditsRedeemList/RedeemCouponModal.js +1 -1
  99. package/dist/esm/components/credits/creditsRedeemList/RedeemCouponModal.js.map +3 -3
  100. package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal.js +1 -1
  101. package/dist/esm/components/credits/creditsRedeemList/RedeemVirtualProductModal.js.map +3 -3
  102. package/dist/esm/components/credits/modal/ActivitiesModal.js +1 -1
  103. package/dist/esm/components/credits/modal/ActivitiesModal.js.map +2 -2
  104. package/dist/esm/components/credits/modal/SubscribeModal.js +1 -1
  105. package/dist/esm/components/credits/modal/SubscribeModal.js.map +3 -3
  106. package/dist/esm/components/index.d.ts +2 -2
  107. package/dist/esm/components/index.js +1 -1
  108. package/dist/esm/components/index.js.map +2 -2
  109. package/dist/esm/components/registration/authCodeActivate/index.js +1 -1
  110. package/dist/esm/components/registration/authCodeActivate/index.js.map +3 -3
  111. package/dist/esm/templates/Credits.js +1 -1
  112. package/dist/esm/templates/Credits.js.map +2 -2
  113. package/dist/esm/templates/Credits.types.d.ts +1 -0
  114. package/dist/esm/templates/Credits.types.js.map +1 -1
  115. package/package.json +2 -3
  116. package/src/components/LiveChatWidget/components/MessageContent/CartCard.tsx +6 -2
  117. package/src/components/LiveChatWidget/components/MessageContent/ProductCard.tsx +6 -3
  118. package/src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx +5 -5
  119. package/src/components/LiveChatWidget/components/MessageContent/ProductList.tsx +6 -3
  120. package/src/components/LiveChatWidget/constants.ts +0 -9
  121. package/src/components/credits/context/hooks/useActivities.ts +2 -2
  122. package/src/components/credits/context/hooks/useAlpcFetch.ts +64 -20
  123. package/src/components/credits/context/hooks/useCountries.ts +7 -2
  124. package/src/components/credits/context/hooks/useMyRewards.ts +5 -2
  125. package/src/components/credits/context/hooks/useRedeemAndBuy.ts +3 -2
  126. package/src/components/credits/context/hooks/useRedeemableList.ts +22 -23
  127. package/src/components/credits/context/hooks/useSubscribed.ts +4 -3
  128. package/src/components/credits/context/hooks/useUploadReceipt.tsx +42 -21
  129. package/src/components/credits/context/provider.tsx +4 -0
  130. package/src/components/credits/context/utils.ts +6 -1
  131. package/src/components/credits/creditsBenefits/index.tsx +1 -2
  132. package/src/components/credits/creditsCash/CreditsCash.tsx +12 -5
  133. package/src/components/credits/creditsRedeemList/AddressForm/index.tsx +4 -6
  134. package/src/components/credits/creditsRedeemList/RedeemCouponModal.tsx +3 -2
  135. package/src/components/credits/creditsRedeemList/RedeemVirtualProductModal.tsx +5 -4
  136. package/src/components/credits/modal/ActivitiesModal.tsx +2 -2
  137. package/src/components/credits/modal/SubscribeModal.tsx +4 -6
  138. package/src/components/index.ts +2 -2
  139. package/src/components/registration/authCodeActivate/index.tsx +8 -6
  140. package/src/templates/Credits.tsx +1 -0
  141. package/src/templates/Credits.types.ts +1 -0
  142. package/dist/cjs/stories/CartCard.stories.d.ts +0 -33
  143. package/dist/cjs/stories/CartCard.stories.js +0 -21
  144. package/dist/cjs/stories/CartCard.stories.js.map +0 -7
  145. package/dist/esm/stories/CartCard.stories.d.ts +0 -33
  146. package/dist/esm/stories/CartCard.stories.js +0 -21
  147. package/dist/esm/stories/CartCard.stories.js.map +0 -7
  148. package/src/stories/CartCard.stories.tsx +0 -459
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as d}from"react/jsx-runtime";import{useState as P}from"react";import{formatCurrency as C,DEFAULT_COMMON_TEXT as m}from"../../constants.js";function N(e){const{amount:n,currency:s}=e;return C(n,s)}function _(e,n,s=m.off){if(!e.discount_type||e.discount_value===void 0)return"";const a=typeof e.discount_value=="string"?parseFloat(e.discount_value):e.discount_value;return isNaN(a)?"":e.discount_type==="percentage"?`${Math.round(a)}% ${s}`:e.discount_type==="fixed_amount"?`${C(Math.round(a),n)} ${s}`:""}const w=({product:e,onAddToCart:n,addToCartText:s=m.addToCart,offText:a=m.off})=>{const{title:r,description:l,price:o,imageUrl:c,stockStatus:u,averageRating:p,variants:f}=e,i=u==="out_of_stock",x=f?.[0],g=x?.discount?.has_discount,v=g?x?.discount?.discount_price:null,h=x?.discount,T=v?{amount:v,currency:o.currency}:o,y=h&&g?_(h,o.currency,a):"",k=b=>{b.preventDefault(),b.stopPropagation(),n&&n(e)};return t("div",{className:"block w-full overflow-hidden rounded-2xl bg-[#F5F6F7] transition-shadow",children:t("div",{className:"block",children:d("div",{className:"flex gap-2 p-4",children:[t("div",{className:" flex shrink-0 items-center overflow-hidden rounded-md ",style:{width:"40%"},children:t("img",{src:c,alt:r,className:`h-auto w-full object-cover ${i?"opacity-50":""}`,loading:"lazy"})}),d("div",{className:"flex flex-1 flex-col justify-center",children:[y&&t("div",{className:"livechat-tag-product mb-1 w-fit rounded-full px-2 text-sm font-bold leading-none tracking-[-0.04em] text-white",style:{backgroundColor:"#005D8E",paddingTop:"6px",paddingBottom:"4px"},children:y}),t("h4",{className:"line-clamp-2 text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#080A0F]",children:r}),l&&t("p",{className:"line-clamp-2 text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]",children:l}),d("div",{className:"mt-4 flex items-center gap-2",children:[d("div",{className:"flex items-center gap-1",children:[t("span",{className:"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]",children:N(T)}),g&&t("span",{className:"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#6D6D6F] line-through",children:N(o)})]}),p!==void 0&&d("div",{className:"flex items-center gap-0.5 text-xs text-gray-600",children:[t("span",{className:"text-yellow-500",children:"\u2B50"}),t("span",{children:p.toFixed(1)})]})]}),t("button",{type:"button",onClick:k,className:"livechat-btn-primary mt-2 w-fit rounded-full px-[20px] py-[10px] text-center text-sm font-bold leading-[1.2] tracking-[-0.04em] text-white",style:{backgroundColor:"#1D1D1F"},children:s})]})]})})})},D=({products:e,title:n,onAddToCart:s,commonText:a})=>{const[r,l]=P(!1),o={...m,...a},c=e.filter(i=>i&&i.shopifyId),u=3,p=c.length>u,f=r?c:c.slice(0,u);return d("div",{className:"flex w-full flex-col gap-2",children:[n&&t("h3",{className:"text-sm font-semibold text-gray-900",children:n}),t("div",{className:"flex flex-col gap-1.5",children:f.map(i=>!i||!i.shopifyId?null:t(w,{product:i,onAddToCart:s,addToCartText:o.addToCart,offText:o.off},i.shopifyId))}),p&&d("button",{type:"button",onClick:()=>l(!r),className:"flex items-center justify-center gap-1.5 px-3 py-2 text-[14px] font-bold leading-[1.2] tracking-tighter text-[#080A0F]",children:[t("span",{children:r?o.showLess:o.learnMore}),t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:`transition-transform ${r?"rotate-180":""}`,children:t("polyline",{points:"6 9 12 15 18 9"})})]})]})},I={render:e=>{const n=e,{products:s,title:a,onAddToCart:r,commonText:l}=n.data,o=s?.filter(c=>c&&c.shopifyId)||[];return o.length===0?null:t(D,{products:o,title:a,onAddToCart:r,commonText:l})}};export{I as ProductList};
1
+ import{jsx as t,jsxs as c}from"react/jsx-runtime";import{useState as P}from"react";import{CURRENCY_SYMBOLS as C,DEFAULT_COMMON_TEXT as p}from"../../constants.js";function N(e){const{amount:o,currency:s}=e;return`${C[s]||s}${o.toFixed(2)}`}function _(e,o,s=p.off){if(!e.discount_type||e.discount_value===void 0)return"";const a=typeof e.discount_value=="string"?parseFloat(e.discount_value):e.discount_value;return isNaN(a)?"":e.discount_type==="percentage"?`${Math.round(a)}% ${s}`:e.discount_type==="fixed_amount"?`${C[o]||o}${Math.round(a)} ${s}`:""}const w=({product:e,onAddToCart:o,addToCartText:s=p.addToCart,offText:a=p.off})=>{const{title:r,description:l,price:n,imageUrl:d,stockStatus:u,averageRating:m,variants:f}=e,i=u==="out_of_stock",x=f?.[0],g=x?.discount?.has_discount,v=g?x?.discount?.discount_price:null,y=x?.discount,T=v?{amount:v,currency:n.currency}:n,h=y&&g?_(y,n.currency,a):"",k=b=>{b.preventDefault(),b.stopPropagation(),o&&o(e)};return t("div",{className:"block w-full overflow-hidden rounded-2xl bg-[#F5F6F7] transition-shadow",children:t("div",{className:"block",children:c("div",{className:"flex gap-2 p-4",children:[t("div",{className:" flex shrink-0 items-center overflow-hidden rounded-md ",style:{width:"40%"},children:t("img",{src:d,alt:r,className:`h-auto w-full object-cover ${i?"opacity-50":""}`,loading:"lazy"})}),c("div",{className:"flex flex-1 flex-col justify-center",children:[h&&t("div",{className:"livechat-tag-product mb-1 w-fit rounded-full px-2 text-sm font-bold leading-none tracking-[-0.04em] text-white",style:{backgroundColor:"#005D8E",paddingTop:"6px",paddingBottom:"4px"},children:h}),t("h4",{className:"line-clamp-2 text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#080A0F]",children:r}),l&&t("p",{className:"line-clamp-2 text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]",children:l}),c("div",{className:"mt-4 flex items-center gap-2",children:[c("div",{className:"flex items-center gap-1",children:[t("span",{className:"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]",children:N(T)}),g&&t("span",{className:"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#6D6D6F] line-through",children:N(n)})]}),m!==void 0&&c("div",{className:"flex items-center gap-0.5 text-xs text-gray-600",children:[t("span",{className:"text-yellow-500",children:"\u2B50"}),t("span",{children:m.toFixed(1)})]})]}),t("button",{type:"button",onClick:k,className:"livechat-btn-primary mt-2 w-fit rounded-full px-[20px] py-[10px] text-center text-sm font-bold leading-[1.2] tracking-[-0.04em] text-white",style:{backgroundColor:"#1D1D1F"},children:s})]})]})})})},F=({products:e,title:o,onAddToCart:s,commonText:a})=>{const[r,l]=P(!1),n={...p,...a},d=e.filter(i=>i&&i.shopifyId),u=3,m=d.length>u,f=r?d:d.slice(0,u);return c("div",{className:"flex w-full flex-col gap-2",children:[o&&t("h3",{className:"text-sm font-semibold text-gray-900",children:o}),t("div",{className:"flex flex-col gap-1.5",children:f.map(i=>!i||!i.shopifyId?null:t(w,{product:i,onAddToCart:s,addToCartText:n.addToCart,offText:n.off},i.shopifyId))}),m&&c("button",{type:"button",onClick:()=>l(!r),className:"flex items-center justify-center gap-1.5 px-3 py-2 text-[14px] font-bold leading-[1.2] tracking-tighter text-[#080A0F]",children:[t("span",{children:r?n.showLess:n.learnMore}),t("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:`transition-transform ${r?"rotate-180":""}`,children:t("polyline",{points:"6 9 12 15 18 9"})})]})]})},M={render:e=>{const o=e,{products:s,title:a,onAddToCart:r,commonText:l}=o.data,n=s?.filter(d=>d&&d.shopifyId)||[];return n.length===0?null:t(F,{products:n,title:a,onAddToCart:r,commonText:l})}};export{M as ProductList};
2
2
  //# sourceMappingURL=ProductList.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/LiveChatWidget/components/MessageContent/ProductList.tsx"],
4
- "sourcesContent": ["/**\n * \u5546\u54C1\u5217\u8868\u6E32\u67D3\u5668\n * \u663E\u793A\u591A\u4E2A\u5546\u54C1\u7684\u7EB5\u5411\u5217\u8868\uFF0C\u652F\u6301\u5C55\u5F00/\u6536\u8D77\n * \u57FA\u4E8E specs/livechat-widget/data-model.md \u7684\u5546\u54C1\u6570\u636E\u6A21\u578B\n */\n\nimport React, { useState } from 'react'\nimport type { MessageRenderer, ProductListContent, Product, CommonText } from '../../types'\nimport { formatCurrency, DEFAULT_COMMON_TEXT } from '../../constants.js'\n\n/**\n * \u683C\u5F0F\u5316\u4EF7\u683C\n */\nfunction formatPrice(price: Product['price']): string {\n const { amount, currency } = price\n return formatCurrency(amount, currency)\n}\n\n/**\n * \u683C\u5F0F\u5316\u6298\u6263\u6807\u7B7E\u6587\u672C\n * @param discount \u6298\u6263\u5BF9\u8C61\n * @param currency \u8D27\u5E01\u4EE3\u7801\n * @param offText \"OFF\" \u6587\u6848\n * @returns \u683C\u5F0F\u5316\u540E\u7684\u6298\u6263\u6587\u672C\uFF08\u5982 \"$10 OFF\" \u6216 \"20% OFF\"\uFF09\n */\nfunction formatDiscountLabel(\n discount: { discount_type?: string; discount_value?: string | number },\n currency: string,\n offText: string = DEFAULT_COMMON_TEXT.off\n): string {\n if (!discount.discount_type || discount.discount_value === undefined) {\n return ''\n }\n\n // \u5C06 discount_value \u8F6C\u6362\u4E3A\u6570\u5B57\n const value =\n typeof discount.discount_value === 'string' ? parseFloat(discount.discount_value) : discount.discount_value\n\n if (isNaN(value)) {\n return ''\n }\n\n if (discount.discount_type === 'percentage') {\n return `${Math.round(value)}% ${offText}`\n }\n\n if (discount.discount_type === 'fixed_amount') {\n return `${formatCurrency(Math.round(value), currency)} ${offText}`\n }\n\n return ''\n}\n\n/**\n * \u7D27\u51D1\u578B\u5546\u54C1\u5361\u7247\uFF08\u7528\u4E8E\u7EB5\u5411\u5217\u8868\uFF09\n */\nconst CompactProductCard: React.FC<{\n product: Product\n onAddToCart?: (product: Product) => void\n addToCartText?: string\n offText?: string\n}> = ({ product, onAddToCart, addToCartText = DEFAULT_COMMON_TEXT.addToCart, offText = DEFAULT_COMMON_TEXT.off }) => {\n const { title, description, price, imageUrl, stockStatus, averageRating, variants } = product\n\n const isOutOfStock = stockStatus === 'out_of_stock'\n\n // \u83B7\u53D6\u7B2C\u4E00\u4E2A\u53D8\u4F53\u7684\u6298\u6263\u4FE1\u606F\n const firstVariant = variants?.[0]\n const hasDiscount = firstVariant?.discount?.has_discount\n const discountPrice = hasDiscount ? firstVariant?.discount?.discount_price : null\n const discount = firstVariant?.discount\n\n // \u5F53\u524D\u663E\u793A\u4EF7\u683C\uFF1A\u6709\u6298\u6263\u65F6\u663E\u793A\u6298\u6263\u4EF7\uFF0C\u5426\u5219\u663E\u793A\u539F\u4EF7\n const currentPrice = discountPrice ? { amount: discountPrice, currency: price.currency } : price\n\n // \u683C\u5F0F\u5316\u6298\u6263\u6807\u7B7E\n const discountLabel = discount && hasDiscount ? formatDiscountLabel(discount, price.currency, offText) : ''\n\n const handleAddToCart = (e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (onAddToCart) {\n onAddToCart(product)\n }\n }\n\n return (\n <div className=\"block w-full overflow-hidden rounded-2xl bg-[#F5F6F7] transition-shadow\">\n <div className=\"block\">\n <div className=\"flex gap-2 p-4\">\n {/* \u5546\u54C1\u56FE\u7247 */}\n <div className=\" flex shrink-0 items-center overflow-hidden rounded-md \" style={{ width: '40%' }}>\n <img\n src={imageUrl}\n alt={title}\n className={`h-auto w-full object-cover ${isOutOfStock ? 'opacity-50' : ''}`}\n loading=\"lazy\"\n />\n </div>\n\n {/* \u5546\u54C1\u4FE1\u606F */}\n <div className=\"flex flex-1 flex-col justify-center\">\n {/* \u6298\u6263\u6807\u7B7E */}\n {discountLabel && (\n <div\n className=\"livechat-tag-product mb-1 w-fit rounded-full px-2 text-sm font-bold leading-none tracking-[-0.04em] text-white\"\n style={{ backgroundColor: '#005D8E', paddingTop: '6px', paddingBottom: '4px' }}\n >\n {discountLabel}\n </div>\n )}\n\n {/* \u6807\u9898 */}\n <h4 className=\"line-clamp-2 text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#080A0F]\">\n {title}\n </h4>\n\n {/* \u63CF\u8FF0\uFF08\u53EF\u9009\uFF09 */}\n {description && (\n <p className=\"line-clamp-2 text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">\n {description}\n </p>\n )}\n\n {/* \u4EF7\u683C\u548C\u8BC4\u5206 */}\n <div className=\"mt-4 flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n {/* \u5F53\u524D\u4EF7\u683C\uFF08\u6709\u6298\u6263\u65F6\u663E\u793A\u6298\u6263\u4EF7\uFF0C\u5426\u5219\u663E\u793A\u539F\u4EF7\uFF09 */}\n <span className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">\n {formatPrice(currentPrice)}\n </span>\n {/* \u539F\u4EF7\uFF08\u5212\u7EBF\u4EF7\uFF09- \u4EC5\u5728\u6709\u6298\u6263\u65F6\u663E\u793A */}\n {hasDiscount && (\n <span className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#6D6D6F] line-through\">\n {formatPrice(price)}\n </span>\n )}\n </div>\n {/* \u8BC4\u5206\uFF08\u53EF\u9009\uFF09 */}\n {averageRating !== undefined && (\n <div className=\"flex items-center gap-0.5 text-xs text-gray-600\">\n <span className=\"text-yellow-500\">\u2B50</span>\n <span>{averageRating.toFixed(1)}</span>\n </div>\n )}\n </div>\n\n {/* Add to Cart \u6309\u94AE - \u5728\u4EF7\u683C\u4E0B\u65B9 */}\n <button\n type=\"button\"\n onClick={handleAddToCart}\n className=\"livechat-btn-primary mt-2 w-fit rounded-full px-[20px] py-[10px] text-center text-sm font-bold leading-[1.2] tracking-[-0.04em] text-white\"\n style={{ backgroundColor: '#1D1D1F' }}\n >\n {addToCartText}\n </button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * \u5546\u54C1\u5217\u8868\u5185\u90E8\u7EC4\u4EF6\uFF08\u652F\u6301\u5C55\u5F00/\u6536\u8D77\uFF09\n */\nconst ProductListComponent: React.FC<{\n products: Product[]\n title?: string\n onAddToCart?: (product: Product) => void\n commonText?: CommonText\n}> = ({ products, title, onAddToCart, commonText }) => {\n const [isExpanded, setIsExpanded] = useState(false)\n\n // \u5408\u5E76\u9ED8\u8BA4\u6587\u6848\u548C\u81EA\u5B9A\u4E49\u6587\u6848\n const mergedText = { ...DEFAULT_COMMON_TEXT, ...commonText }\n\n // \u8FC7\u6EE4\u6389 null \u6216\u65E0\u6548\u7684\u4EA7\u54C1\n const validProducts = products.filter(p => p && p.shopifyId)\n\n // \u9ED8\u8BA4\u663E\u793A\u524D3\u4E2A\u4EA7\u54C1\n const INITIAL_DISPLAY_COUNT = 3\n const hasMore = validProducts.length > INITIAL_DISPLAY_COUNT\n const displayedProducts = isExpanded ? validProducts : validProducts.slice(0, INITIAL_DISPLAY_COUNT)\n\n return (\n <div className=\"flex w-full flex-col gap-2\">\n {/* \u5217\u8868\u6807\u9898\uFF08\u53EF\u9009\uFF09 */}\n {title && <h3 className=\"text-sm font-semibold text-gray-900\">{title}</h3>}\n\n {/* \u7EB5\u5411\u6392\u5217\u7684\u5546\u54C1\u5217\u8868 */}\n <div className=\"flex flex-col gap-1.5\">\n {displayedProducts.map(product => {\n if (!product || !product.shopifyId) return null\n return (\n <CompactProductCard\n key={product.shopifyId}\n product={product}\n onAddToCart={onAddToCart}\n addToCartText={mergedText.addToCart}\n offText={mergedText.off}\n />\n )\n })}\n </div>\n\n {/* Learn More \u6309\u94AE */}\n {hasMore && (\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-center gap-1.5 px-3 py-2 text-[14px] font-bold leading-[1.2] tracking-tighter text-[#080A0F]\"\n >\n <span>{isExpanded ? mergedText.showLess : mergedText.learnMore}</span>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n )}\n </div>\n )\n}\n\n/**\n * \u5546\u54C1\u5217\u8868\u6E32\u67D3\u5668\n *\n * \u529F\u80FD\uFF1A\n * - \u7EB5\u5411\u5C55\u793A\u591A\u4E2A\u5546\u54C1\n * - \u9ED8\u8BA4\u663E\u793A\u524D3\u4E2A\u4EA7\u54C1\n * - \u652F\u6301\u5C55\u5F00/\u6536\u8D77\u67E5\u770B\u5168\u90E8\n * - \u7D27\u51D1\u578B\u5361\u7247\u8BBE\u8BA1\n * - \u53EF\u9009\u6807\u9898\n *\n * \u5E03\u5C40\uFF1A\n * ```\n * \u6807\u9898\uFF08\u53EF\u9009\uFF09\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 [\u56FE] \u5546\u54C1\u6807\u9898 \u2502\n * \u2502 $29.99 \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 [\u56FE] \u5546\u54C1\u6807\u9898 \u2502\n * \u2502 $39.99 \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 [\u56FE] \u5546\u54C1\u6807\u9898 \u2502\n * \u2502 $49.99 \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * [ Learn More \u2193 ]\n * ```\n *\n * @example\n * ```tsx\n * const content: ProductListContent = {\n * type: 'product_list',\n * data: {\n * title: '\u76F8\u5173\u5546\u54C1\u63A8\u8350',\n * products: [product1, product2, product3, product4, product5]\n * }\n * }\n * <ProductList.render(content, false, false) />\n * ```\n */\nexport const ProductList: MessageRenderer = {\n render: content => {\n const productListContent = content as ProductListContent\n const { products, title, onAddToCart, commonText } = productListContent.data\n\n // \u8FC7\u6EE4\u6389 null \u6216\u65E0\u6548\u7684\u4EA7\u54C1\n const validProducts = products?.filter(p => p && p.shopifyId) || []\n\n if (validProducts.length === 0) {\n return null\n }\n\n return (\n <ProductListComponent products={validProducts} title={title} onAddToCart={onAddToCart} commonText={commonText} />\n )\n },\n}\n"],
5
- "mappings": "AA4FY,cAAAA,EAkCE,QAAAC,MAlCF,oBAtFZ,OAAgB,YAAAC,MAAgB,QAEhC,OAAS,kBAAAC,EAAgB,uBAAAC,MAA2B,qBAKpD,SAASC,EAAYC,EAAiC,CACpD,KAAM,CAAE,OAAAC,EAAQ,SAAAC,CAAS,EAAIF,EAC7B,OAAOH,EAAeI,EAAQC,CAAQ,CACxC,CASA,SAASC,EACPC,EACAF,EACAG,EAAkBP,EAAoB,IAC9B,CACR,GAAI,CAACM,EAAS,eAAiBA,EAAS,iBAAmB,OACzD,MAAO,GAIT,MAAME,EACJ,OAAOF,EAAS,gBAAmB,SAAW,WAAWA,EAAS,cAAc,EAAIA,EAAS,eAE/F,OAAI,MAAME,CAAK,EACN,GAGLF,EAAS,gBAAkB,aACtB,GAAG,KAAK,MAAME,CAAK,CAAC,KAAKD,CAAO,GAGrCD,EAAS,gBAAkB,eACtB,GAAGP,EAAe,KAAK,MAAMS,CAAK,EAAGJ,CAAQ,CAAC,IAAIG,CAAO,GAG3D,EACT,CAKA,MAAME,EAKD,CAAC,CAAE,QAAAC,EAAS,YAAAC,EAAa,cAAAC,EAAgBZ,EAAoB,UAAW,QAAAO,EAAUP,EAAoB,GAAI,IAAM,CACnH,KAAM,CAAE,MAAAa,EAAO,YAAAC,EAAa,MAAAZ,EAAO,SAAAa,EAAU,YAAAC,EAAa,cAAAC,EAAe,SAAAC,CAAS,EAAIR,EAEhFS,EAAeH,IAAgB,eAG/BI,EAAeF,IAAW,CAAC,EAC3BG,EAAcD,GAAc,UAAU,aACtCE,EAAgBD,EAAcD,GAAc,UAAU,eAAiB,KACvEd,EAAWc,GAAc,SAGzBG,EAAeD,EAAgB,CAAE,OAAQA,EAAe,SAAUpB,EAAM,QAAS,EAAIA,EAGrFsB,EAAgBlB,GAAYe,EAAchB,EAAoBC,EAAUJ,EAAM,SAAUK,CAAO,EAAI,GAEnGkB,EAAmBC,GAAwB,CAC/CA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EACdf,GACFA,EAAYD,CAAO,CAEvB,EAEA,OACEd,EAAC,OAAI,UAAU,0EACb,SAAAA,EAAC,OAAI,UAAU,QACb,SAAAC,EAAC,OAAI,UAAU,iBAEb,UAAAD,EAAC,OAAI,UAAU,0DAA0D,MAAO,CAAE,MAAO,KAAM,EAC7F,SAAAA,EAAC,OACC,IAAKmB,EACL,IAAKF,EACL,UAAW,8BAA8BM,EAAe,aAAe,EAAE,GACzE,QAAQ,OACV,EACF,EAGAtB,EAAC,OAAI,UAAU,sCAEZ,UAAA2B,GACC5B,EAAC,OACC,UAAU,iHACV,MAAO,CAAE,gBAAiB,UAAW,WAAY,MAAO,cAAe,KAAM,EAE5E,SAAA4B,EACH,EAIF5B,EAAC,MAAG,UAAU,mFACX,SAAAiB,EACH,EAGCC,GACClB,EAAC,KAAE,UAAU,iFACV,SAAAkB,EACH,EAIFjB,EAAC,OAAI,UAAU,+BACb,UAAAA,EAAC,OAAI,UAAU,0BAEb,UAAAD,EAAC,QAAK,UAAU,sEACb,SAAAK,EAAYsB,CAAY,EAC3B,EAECF,GACCzB,EAAC,QAAK,UAAU,mFACb,SAAAK,EAAYC,CAAK,EACpB,GAEJ,EAECe,IAAkB,QACjBpB,EAAC,OAAI,UAAU,kDACb,UAAAD,EAAC,QAAK,UAAU,kBAAkB,kBAAC,EACnCA,EAAC,QAAM,SAAAqB,EAAc,QAAQ,CAAC,EAAE,GAClC,GAEJ,EAGArB,EAAC,UACC,KAAK,SACL,QAAS6B,EACT,UAAU,6IACV,MAAO,CAAE,gBAAiB,SAAU,EAEnC,SAAAb,EACH,GACF,GACF,EACF,EACF,CAEJ,EAKMe,EAKD,CAAC,CAAE,SAAAC,EAAU,MAAAf,EAAO,YAAAF,EAAa,WAAAkB,CAAW,IAAM,CACrD,KAAM,CAACC,EAAYC,CAAa,EAAIjC,EAAS,EAAK,EAG5CkC,EAAa,CAAE,GAAGhC,EAAqB,GAAG6B,CAAW,EAGrDI,EAAgBL,EAAS,OAAOM,GAAKA,GAAKA,EAAE,SAAS,EAGrDC,EAAwB,EACxBC,EAAUH,EAAc,OAASE,EACjCE,EAAoBP,EAAaG,EAAgBA,EAAc,MAAM,EAAGE,CAAqB,EAEnG,OACEtC,EAAC,OAAI,UAAU,6BAEZ,UAAAgB,GAASjB,EAAC,MAAG,UAAU,sCAAuC,SAAAiB,EAAM,EAGrEjB,EAAC,OAAI,UAAU,wBACZ,SAAAyC,EAAkB,IAAI3B,GACjB,CAACA,GAAW,CAACA,EAAQ,UAAkB,KAEzCd,EAACa,EAAA,CAEC,QAASC,EACT,YAAaC,EACb,cAAeqB,EAAW,UAC1B,QAASA,EAAW,KAJftB,EAAQ,SAKf,CAEH,EACH,EAGC0B,GACCvC,EAAC,UACC,KAAK,SACL,QAAS,IAAMkC,EAAc,CAACD,CAAU,EACxC,UAAU,0HAEV,UAAAlC,EAAC,QAAM,SAAAkC,EAAaE,EAAW,SAAWA,EAAW,UAAU,EAC/DpC,EAAC,OACC,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAW,wBAAwBkC,EAAa,aAAe,EAAE,GAEjE,SAAAlC,EAAC,YAAS,OAAO,iBAAiB,EACpC,GACF,GAEJ,CAEJ,EA0Ca0C,EAA+B,CAC1C,OAAQC,GAAW,CACjB,MAAMC,EAAqBD,EACrB,CAAE,SAAAX,EAAU,MAAAf,EAAO,YAAAF,EAAa,WAAAkB,CAAW,EAAIW,EAAmB,KAGlEP,EAAgBL,GAAU,OAAOM,GAAKA,GAAKA,EAAE,SAAS,GAAK,CAAC,EAElE,OAAID,EAAc,SAAW,EACpB,KAIPrC,EAAC+B,EAAA,CAAqB,SAAUM,EAAe,MAAOpB,EAAO,YAAaF,EAAa,WAAYkB,EAAY,CAEnH,CACF",
6
- "names": ["jsx", "jsxs", "useState", "formatCurrency", "DEFAULT_COMMON_TEXT", "formatPrice", "price", "amount", "currency", "formatDiscountLabel", "discount", "offText", "value", "CompactProductCard", "product", "onAddToCart", "addToCartText", "title", "description", "imageUrl", "stockStatus", "averageRating", "variants", "isOutOfStock", "firstVariant", "hasDiscount", "discountPrice", "currentPrice", "discountLabel", "handleAddToCart", "e", "ProductListComponent", "products", "commonText", "isExpanded", "setIsExpanded", "mergedText", "validProducts", "p", "INITIAL_DISPLAY_COUNT", "hasMore", "displayedProducts", "ProductList", "content", "productListContent"]
4
+ "sourcesContent": ["/**\n * \u5546\u54C1\u5217\u8868\u6E32\u67D3\u5668\n * \u663E\u793A\u591A\u4E2A\u5546\u54C1\u7684\u7EB5\u5411\u5217\u8868\uFF0C\u652F\u6301\u5C55\u5F00/\u6536\u8D77\n * \u57FA\u4E8E specs/livechat-widget/data-model.md \u7684\u5546\u54C1\u6570\u636E\u6A21\u578B\n */\n\nimport React, { useState } from 'react'\nimport type { MessageRenderer, ProductListContent, Product, CommonText } from '../../types'\nimport { CURRENCY_SYMBOLS, DEFAULT_COMMON_TEXT } from '../../constants.js'\n\n/**\n * \u683C\u5F0F\u5316\u4EF7\u683C\n */\nfunction formatPrice(price: Product['price']): string {\n const { amount, currency } = price\n\n const symbol = CURRENCY_SYMBOLS[currency] || currency\n return `${symbol}${amount.toFixed(2)}`\n}\n\n/**\n * \u683C\u5F0F\u5316\u6298\u6263\u6807\u7B7E\u6587\u672C\n * @param discount \u6298\u6263\u5BF9\u8C61\n * @param currency \u8D27\u5E01\u4EE3\u7801\n * @param offText \"OFF\" \u6587\u6848\n * @returns \u683C\u5F0F\u5316\u540E\u7684\u6298\u6263\u6587\u672C\uFF08\u5982 \"$10 OFF\" \u6216 \"20% OFF\"\uFF09\n */\nfunction formatDiscountLabel(\n discount: { discount_type?: string; discount_value?: string | number },\n currency: string,\n offText: string = DEFAULT_COMMON_TEXT.off\n): string {\n if (!discount.discount_type || discount.discount_value === undefined) {\n return ''\n }\n\n // \u5C06 discount_value \u8F6C\u6362\u4E3A\u6570\u5B57\n const value =\n typeof discount.discount_value === 'string' ? parseFloat(discount.discount_value) : discount.discount_value\n\n if (isNaN(value)) {\n return ''\n }\n\n if (discount.discount_type === 'percentage') {\n return `${Math.round(value)}% ${offText}`\n }\n\n if (discount.discount_type === 'fixed_amount') {\n const symbol = CURRENCY_SYMBOLS[currency] || currency\n return `${symbol}${Math.round(value)} ${offText}`\n }\n\n return ''\n}\n\n/**\n * \u7D27\u51D1\u578B\u5546\u54C1\u5361\u7247\uFF08\u7528\u4E8E\u7EB5\u5411\u5217\u8868\uFF09\n */\nconst CompactProductCard: React.FC<{\n product: Product\n onAddToCart?: (product: Product) => void\n addToCartText?: string\n offText?: string\n}> = ({ product, onAddToCart, addToCartText = DEFAULT_COMMON_TEXT.addToCart, offText = DEFAULT_COMMON_TEXT.off }) => {\n const { title, description, price, imageUrl, stockStatus, averageRating, variants } = product\n\n const isOutOfStock = stockStatus === 'out_of_stock'\n\n // \u83B7\u53D6\u7B2C\u4E00\u4E2A\u53D8\u4F53\u7684\u6298\u6263\u4FE1\u606F\n const firstVariant = variants?.[0]\n const hasDiscount = firstVariant?.discount?.has_discount\n const discountPrice = hasDiscount ? firstVariant?.discount?.discount_price : null\n const discount = firstVariant?.discount\n\n // \u5F53\u524D\u663E\u793A\u4EF7\u683C\uFF1A\u6709\u6298\u6263\u65F6\u663E\u793A\u6298\u6263\u4EF7\uFF0C\u5426\u5219\u663E\u793A\u539F\u4EF7\n const currentPrice = discountPrice ? { amount: discountPrice, currency: price.currency } : price\n\n // \u683C\u5F0F\u5316\u6298\u6263\u6807\u7B7E\n const discountLabel = discount && hasDiscount ? formatDiscountLabel(discount, price.currency, offText) : ''\n\n const handleAddToCart = (e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (onAddToCart) {\n onAddToCart(product)\n }\n }\n\n return (\n <div className=\"block w-full overflow-hidden rounded-2xl bg-[#F5F6F7] transition-shadow\">\n <div className=\"block\">\n <div className=\"flex gap-2 p-4\">\n {/* \u5546\u54C1\u56FE\u7247 */}\n <div className=\" flex shrink-0 items-center overflow-hidden rounded-md \" style={{ width: '40%' }}>\n <img\n src={imageUrl}\n alt={title}\n className={`h-auto w-full object-cover ${isOutOfStock ? 'opacity-50' : ''}`}\n loading=\"lazy\"\n />\n </div>\n\n {/* \u5546\u54C1\u4FE1\u606F */}\n <div className=\"flex flex-1 flex-col justify-center\">\n {/* \u6298\u6263\u6807\u7B7E */}\n {discountLabel && (\n <div\n className=\"livechat-tag-product mb-1 w-fit rounded-full px-2 text-sm font-bold leading-none tracking-[-0.04em] text-white\"\n style={{ backgroundColor: '#005D8E', paddingTop: '6px', paddingBottom: '4px' }}\n >\n {discountLabel}\n </div>\n )}\n\n {/* \u6807\u9898 */}\n <h4 className=\"line-clamp-2 text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#080A0F]\">\n {title}\n </h4>\n\n {/* \u63CF\u8FF0\uFF08\u53EF\u9009\uFF09 */}\n {description && (\n <p className=\"line-clamp-2 text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">\n {description}\n </p>\n )}\n\n {/* \u4EF7\u683C\u548C\u8BC4\u5206 */}\n <div className=\"mt-4 flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n {/* \u5F53\u524D\u4EF7\u683C\uFF08\u6709\u6298\u6263\u65F6\u663E\u793A\u6298\u6263\u4EF7\uFF0C\u5426\u5219\u663E\u793A\u539F\u4EF7\uFF09 */}\n <span className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">\n {formatPrice(currentPrice)}\n </span>\n {/* \u539F\u4EF7\uFF08\u5212\u7EBF\u4EF7\uFF09- \u4EC5\u5728\u6709\u6298\u6263\u65F6\u663E\u793A */}\n {hasDiscount && (\n <span className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#6D6D6F] line-through\">\n {formatPrice(price)}\n </span>\n )}\n </div>\n {/* \u8BC4\u5206\uFF08\u53EF\u9009\uFF09 */}\n {averageRating !== undefined && (\n <div className=\"flex items-center gap-0.5 text-xs text-gray-600\">\n <span className=\"text-yellow-500\">\u2B50</span>\n <span>{averageRating.toFixed(1)}</span>\n </div>\n )}\n </div>\n\n {/* Add to Cart \u6309\u94AE - \u5728\u4EF7\u683C\u4E0B\u65B9 */}\n <button\n type=\"button\"\n onClick={handleAddToCart}\n className=\"livechat-btn-primary mt-2 w-fit rounded-full px-[20px] py-[10px] text-center text-sm font-bold leading-[1.2] tracking-[-0.04em] text-white\"\n style={{ backgroundColor: '#1D1D1F' }}\n >\n {addToCartText}\n </button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * \u5546\u54C1\u5217\u8868\u5185\u90E8\u7EC4\u4EF6\uFF08\u652F\u6301\u5C55\u5F00/\u6536\u8D77\uFF09\n */\nconst ProductListComponent: React.FC<{\n products: Product[]\n title?: string\n onAddToCart?: (product: Product) => void\n commonText?: CommonText\n}> = ({ products, title, onAddToCart, commonText }) => {\n const [isExpanded, setIsExpanded] = useState(false)\n\n // \u5408\u5E76\u9ED8\u8BA4\u6587\u6848\u548C\u81EA\u5B9A\u4E49\u6587\u6848\n const mergedText = { ...DEFAULT_COMMON_TEXT, ...commonText }\n\n // \u8FC7\u6EE4\u6389 null \u6216\u65E0\u6548\u7684\u4EA7\u54C1\n const validProducts = products.filter(p => p && p.shopifyId)\n\n // \u9ED8\u8BA4\u663E\u793A\u524D3\u4E2A\u4EA7\u54C1\n const INITIAL_DISPLAY_COUNT = 3\n const hasMore = validProducts.length > INITIAL_DISPLAY_COUNT\n const displayedProducts = isExpanded ? validProducts : validProducts.slice(0, INITIAL_DISPLAY_COUNT)\n\n return (\n <div className=\"flex w-full flex-col gap-2\">\n {/* \u5217\u8868\u6807\u9898\uFF08\u53EF\u9009\uFF09 */}\n {title && <h3 className=\"text-sm font-semibold text-gray-900\">{title}</h3>}\n\n {/* \u7EB5\u5411\u6392\u5217\u7684\u5546\u54C1\u5217\u8868 */}\n <div className=\"flex flex-col gap-1.5\">\n {displayedProducts.map(product => {\n if (!product || !product.shopifyId) return null\n return (\n <CompactProductCard\n key={product.shopifyId}\n product={product}\n onAddToCart={onAddToCart}\n addToCartText={mergedText.addToCart}\n offText={mergedText.off}\n />\n )\n })}\n </div>\n\n {/* Learn More \u6309\u94AE */}\n {hasMore && (\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-center gap-1.5 px-3 py-2 text-[14px] font-bold leading-[1.2] tracking-tighter text-[#080A0F]\"\n >\n <span>{isExpanded ? mergedText.showLess : mergedText.learnMore}</span>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n )}\n </div>\n )\n}\n\n/**\n * \u5546\u54C1\u5217\u8868\u6E32\u67D3\u5668\n *\n * \u529F\u80FD\uFF1A\n * - \u7EB5\u5411\u5C55\u793A\u591A\u4E2A\u5546\u54C1\n * - \u9ED8\u8BA4\u663E\u793A\u524D3\u4E2A\u4EA7\u54C1\n * - \u652F\u6301\u5C55\u5F00/\u6536\u8D77\u67E5\u770B\u5168\u90E8\n * - \u7D27\u51D1\u578B\u5361\u7247\u8BBE\u8BA1\n * - \u53EF\u9009\u6807\u9898\n *\n * \u5E03\u5C40\uFF1A\n * ```\n * \u6807\u9898\uFF08\u53EF\u9009\uFF09\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 [\u56FE] \u5546\u54C1\u6807\u9898 \u2502\n * \u2502 $29.99 \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 [\u56FE] \u5546\u54C1\u6807\u9898 \u2502\n * \u2502 $39.99 \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 [\u56FE] \u5546\u54C1\u6807\u9898 \u2502\n * \u2502 $49.99 \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * [ Learn More \u2193 ]\n * ```\n *\n * @example\n * ```tsx\n * const content: ProductListContent = {\n * type: 'product_list',\n * data: {\n * title: '\u76F8\u5173\u5546\u54C1\u63A8\u8350',\n * products: [product1, product2, product3, product4, product5]\n * }\n * }\n * <ProductList.render(content, false, false) />\n * ```\n */\nexport const ProductList: MessageRenderer = {\n render: content => {\n const productListContent = content as ProductListContent\n const { products, title, onAddToCart, commonText } = productListContent.data\n\n // \u8FC7\u6EE4\u6389 null \u6216\u65E0\u6548\u7684\u4EA7\u54C1\n const validProducts = products?.filter(p => p && p.shopifyId) || []\n\n if (validProducts.length === 0) {\n return null\n }\n\n return (\n <ProductListComponent products={validProducts} title={title} onAddToCart={onAddToCart} commonText={commonText} />\n )\n },\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "useState", "CURRENCY_SYMBOLS", "DEFAULT_COMMON_TEXT", "formatPrice", "price", "amount", "currency", "formatDiscountLabel", "discount", "offText", "value", "CompactProductCard", "product", "onAddToCart", "addToCartText", "title", "description", "imageUrl", "stockStatus", "averageRating", "variants", "isOutOfStock", "firstVariant", "hasDiscount", "discountPrice", "currentPrice", "discountLabel", "handleAddToCart", "e", "ProductListComponent", "products", "commonText", "isExpanded", "setIsExpanded", "mergedText", "validProducts", "p", "INITIAL_DISPLAY_COUNT", "hasMore", "displayedProducts", "ProductList", "content", "productListContent"]
7
7
  }
@@ -7,7 +7,6 @@ import type { CommonText } from './types';
7
7
  * 用于将货币代码转换为对应的符号
8
8
  */
9
9
  export declare const CURRENCY_SYMBOLS: Record<string, string>;
10
- export declare function formatCurrency(amount: number | string, currency?: string): string;
11
10
  /**
12
11
  * 默认文案配置
13
12
  */
@@ -1,2 +1,2 @@
1
- const n={USD:"$",CAD:"CA$",GBP:"\xA3",EUR:"\u20AC",AUD:"$",SGD:"$",NZD:"NZ$",AED:"AED ",VND:"\u20AB",TWD:"NT$",PLN:"z\u0142",RON:"Lei"},i=new Set(["VND","RON","PLN"]);function N(t,e="USD"){const r=n[e]||e,o=typeof t=="string"?parseFloat(t):t,s=Number.isInteger(o)?String(o):o.toFixed(2);return i.has(e)?`${s} ${r}`:`${r}${s}`}const C={learnMore:"Learn More",showLess:"Show Less",addToCart:"Add to Cart",viewMore:"View More",off:"OFF",total:"Total"};export{n as CURRENCY_SYMBOLS,C as DEFAULT_COMMON_TEXT,N as formatCurrency};
1
+ const o={USD:"$",CAD:"CA$",GBP:"\xA3",EUR:"\u20AC",AUD:"$",SGD:"$",NZD:"NZ$",AED:"AED ",VND:"\u20AB",TWD:"NT$",PLN:"z\u0142",RON:"Lei"},e={learnMore:"Learn More",showLess:"Show Less",addToCart:"Add to Cart",viewMore:"View More",off:"OFF",total:"Total"};export{o as CURRENCY_SYMBOLS,e as DEFAULT_COMMON_TEXT};
2
2
  //# sourceMappingURL=constants.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/LiveChatWidget/constants.ts"],
4
- "sourcesContent": ["/**\n * LiveChat \u7EC4\u4EF6\u5E38\u91CF\u5B9A\u4E49\n */\n\nimport type { CommonText } from './types'\n\n/**\n * \u8D27\u5E01\u7B26\u53F7\u6620\u5C04\u8868\n * \u7528\u4E8E\u5C06\u8D27\u5E01\u4EE3\u7801\u8F6C\u6362\u4E3A\u5BF9\u5E94\u7684\u7B26\u53F7\n */\nexport const CURRENCY_SYMBOLS: Record<string, string> = {\n USD: \"$\",\n CAD: \"CA$\",\n GBP: \"\u00A3\",\n EUR: \"\u20AC\",\n AUD: \"$\",\n SGD: \"$\",\n NZD: \"NZ$\",\n AED: \"AED \",\n VND: \"\u20AB\",\n TWD: \"NT$\",\n PLN: \"z\u0142\",\n RON: \"Lei\"\n}\n\nconst SUFFIX_CURRENCIES = new Set([\"VND\", \"RON\", \"PLN\"])\n\nexport function formatCurrency(amount: number | string, currency: string = 'USD'): string {\n const symbol = CURRENCY_SYMBOLS[currency] || currency\n const value = typeof amount === 'string' ? parseFloat(amount) : amount\n const formatted = Number.isInteger(value) ? String(value) : value.toFixed(2)\n return SUFFIX_CURRENCIES.has(currency) ? `${formatted} ${symbol}` : `${symbol}${formatted}`\n}\n\n/**\n * \u9ED8\u8BA4\u6587\u6848\u914D\u7F6E\n */\nexport const DEFAULT_COMMON_TEXT: Required<CommonText> = {\n learnMore: 'Learn More',\n showLess: 'Show Less',\n addToCart: 'Add to Cart',\n viewMore: 'View More',\n off: 'OFF',\n total: 'Total',\n}\n"],
5
- "mappings": "AAUO,MAAMA,EAA2C,CACpD,IAAK,IACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,MACL,IAAK,UACL,IAAK,KACT,EAEMC,EAAoB,IAAI,IAAI,CAAC,MAAO,MAAO,KAAK,CAAC,EAEhD,SAASC,EAAeC,EAAyBC,EAAmB,MAAe,CACxF,MAAMC,EAASL,EAAiBI,CAAQ,GAAKA,EACvCE,EAAQ,OAAOH,GAAW,SAAW,WAAWA,CAAM,EAAIA,EAC1DI,EAAY,OAAO,UAAUD,CAAK,EAAI,OAAOA,CAAK,EAAIA,EAAM,QAAQ,CAAC,EAC3E,OAAOL,EAAkB,IAAIG,CAAQ,EAAI,GAAGG,CAAS,IAAIF,CAAM,GAAK,GAAGA,CAAM,GAAGE,CAAS,EAC3F,CAKO,MAAMC,EAA4C,CACvD,UAAW,aACX,SAAU,YACV,UAAW,cACX,SAAU,YACV,IAAK,MACL,MAAO,OACT",
6
- "names": ["CURRENCY_SYMBOLS", "SUFFIX_CURRENCIES", "formatCurrency", "amount", "currency", "symbol", "value", "formatted", "DEFAULT_COMMON_TEXT"]
4
+ "sourcesContent": ["/**\n * LiveChat \u7EC4\u4EF6\u5E38\u91CF\u5B9A\u4E49\n */\n\nimport type { CommonText } from './types'\n\n/**\n * \u8D27\u5E01\u7B26\u53F7\u6620\u5C04\u8868\n * \u7528\u4E8E\u5C06\u8D27\u5E01\u4EE3\u7801\u8F6C\u6362\u4E3A\u5BF9\u5E94\u7684\u7B26\u53F7\n */\nexport const CURRENCY_SYMBOLS: Record<string, string> = {\n USD: \"$\",\n CAD: \"CA$\",\n GBP: \"\u00A3\",\n EUR: \"\u20AC\",\n AUD: \"$\",\n SGD: \"$\",\n NZD: \"NZ$\",\n AED: \"AED \",\n VND: \"\u20AB\",\n TWD: \"NT$\",\n PLN: \"z\u0142\",\n RON: \"Lei\"\n}\n\n/**\n * \u9ED8\u8BA4\u6587\u6848\u914D\u7F6E\n */\nexport const DEFAULT_COMMON_TEXT: Required<CommonText> = {\n learnMore: 'Learn More',\n showLess: 'Show Less',\n addToCart: 'Add to Cart',\n viewMore: 'View More',\n off: 'OFF',\n total: 'Total',\n}\n"],
5
+ "mappings": "AAUO,MAAMA,EAA2C,CACpD,IAAK,IACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,MACL,IAAK,UACL,IAAK,KACT,EAKaC,EAA4C,CACvD,UAAW,aACX,SAAU,YACV,UAAW,cACX,SAAU,YACV,IAAK,MACL,MAAO,OACT",
6
+ "names": ["CURRENCY_SYMBOLS", "DEFAULT_COMMON_TEXT"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{useCallback as _,useEffect as x,useState as r}from"react";import{useAlpcMutation as A}from"./useAlpcFetch";import{useCreditsContext as y}from"../provider";import{useHeadlessContext as P}from"@anker-in/lib";function R({page:t,pageSize:o,options:n={}}){const{profile:e,isLoadingProfile:a,alpcBrand:m}=y(),{brand:p}=P(),f=m||p,[s,b]=r([]),[c,C]=r(0),[u,L]=r(0),{isMutating:i,trigger:d}=A({url:"/v1/credit/log",initData:{brand:f}}),g=_(async()=>{const v={page:t,page_size:o,user_id:e?.user_id,...n};d(v,{onSuccess(l){L(t),C(l?.data?.total),b(s.concat(l?.data?.creditLogs||[]))}})},[s,e,t,o,n,d]);return x(()=>{a||!e||i||t!==u&&t&&g()},[g,a,i,e,t,u]),{activities:s,isLoading:i,total:c,canNext:c>s.length&&!i}}var S=R;export{S as default};
1
+ import{useCallback as _,useEffect as x,useState as o}from"react";import{useAlpcMutation as A}from"./useAlpcFetch";import{useCreditsContext as y}from"../provider";import{useHeadlessContext as P}from"@anker-in/lib";function R({page:t,pageSize:n,options:a={}}){const{profile:e,isLoadingProfile:c,alpcBrand:p}=y(),{brand:f}=P(),r=p||f,[s,b]=o([]),[u,C]=o(0),[d,L]=o(0),{isMutating:i,trigger:g}=A({url:"/v1/credit/log",initData:{brand:r}}),l=_(async()=>{const v={page:t,page_size:n,user_id:e?.user_id,...a};g(v,{onSuccess(m){L(t),C(m?.data?.total),b(s.concat(m?.data?.creditLogs||[]))}})},[s,e,t,n,a,g]);return x(()=>{c||!e||!r||i||t!==d&&t&&l()},[l,c,i,e,r,t,d]),{activities:s,isLoading:i,total:u,canNext:u>s.length&&!i}}var S=R;export{S as default};
2
2
  //# sourceMappingURL=useActivities.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/credits/context/hooks/useActivities.ts"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { useAlpcMutation } from './useAlpcFetch'\nimport type { CreditLogResponse } from '../response'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useActivities({ page, pageSize, options = {} }: { page: number; pageSize: number; options?: any }) {\n const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()\n const { brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n const [activities, setActivities] = useState<CreditLogResponse[]>([])\n const [total, setTotal] = useState(0)\n\n const [currentPage, setCurrentPage] = useState(0)\n\n const { isMutating: isLoading, trigger } = useAlpcMutation<\n {\n data: {\n total: number\n creditLogs: CreditLogResponse[]\n }\n },\n {\n page: number\n page_size: number\n user_id: string\n }\n >({\n url: `/v1/credit/log`,\n initData: {\n brand,\n },\n })\n\n const getActivities = useCallback(async () => {\n const params = {\n page: page,\n page_size: pageSize,\n user_id: profile?.user_id,\n ...options,\n }\n\n trigger(params, {\n onSuccess(responseData) {\n setCurrentPage(page)\n setTotal(responseData?.data?.total)\n setActivities(activities.concat(responseData?.data?.creditLogs || []))\n },\n })\n }, [activities, profile, page, pageSize, options, trigger])\n\n useEffect(() => {\n if (isLoadingProfile || !profile || isLoading) {\n return\n }\n\n if (page !== currentPage && page) {\n getActivities()\n }\n }, [getActivities, isLoadingProfile, isLoading, profile, page, currentPage])\n\n return {\n activities,\n isLoading,\n total,\n canNext: total > activities.length && !isLoading,\n }\n}\n\nexport default useActivities\n"],
5
- "mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,mBAAAC,MAAuB,iBAEhC,OAAS,qBAAAC,MAAyB,cAClC,OAAS,sBAAAC,MAA0B,gBAEnC,SAASC,EAAc,CAAE,KAAAC,EAAM,SAAAC,EAAU,QAAAC,EAAU,CAAC,CAAE,EAAsD,CAC1G,KAAM,CAAE,QAAAC,EAAS,iBAAAC,EAAkB,UAAAC,CAAU,EAAIR,EAAkB,EAC7D,CAAE,MAAOS,CAAc,EAAIR,EAAmB,EAC9CS,EAAQF,GAAaC,EACrB,CAACE,EAAYC,CAAa,EAAId,EAA8B,CAAC,CAAC,EAC9D,CAACe,EAAOC,CAAQ,EAAIhB,EAAS,CAAC,EAE9B,CAACiB,EAAaC,CAAc,EAAIlB,EAAS,CAAC,EAE1C,CAAE,WAAYmB,EAAW,QAAAC,CAAQ,EAAInB,EAYzC,CACA,IAAK,iBACL,SAAU,CACR,MAAAW,CACF,CACF,CAAC,EAEKS,EAAgBvB,EAAY,SAAY,CAC5C,MAAMwB,EAAS,CACb,KAAMjB,EACN,UAAWC,EACX,QAASE,GAAS,QAClB,GAAGD,CACL,EAEAa,EAAQE,EAAQ,CACd,UAAUC,EAAc,CACtBL,EAAeb,CAAI,EACnBW,EAASO,GAAc,MAAM,KAAK,EAClCT,EAAcD,EAAW,OAAOU,GAAc,MAAM,YAAc,CAAC,CAAC,CAAC,CACvE,CACF,CAAC,CACH,EAAG,CAACV,EAAYL,EAASH,EAAMC,EAAUC,EAASa,CAAO,CAAC,EAE1D,OAAArB,EAAU,IAAM,CACVU,GAAoB,CAACD,GAAWW,GAIhCd,IAASY,GAAeZ,GAC1BgB,EAAc,CAElB,EAAG,CAACA,EAAeZ,EAAkBU,EAAWX,EAASH,EAAMY,CAAW,CAAC,EAEpE,CACL,WAAAJ,EACA,UAAAM,EACA,MAAAJ,EACA,QAASA,EAAQF,EAAW,QAAU,CAACM,CACzC,CACF,CAEA,IAAOK,EAAQpB",
4
+ "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { useAlpcMutation } from './useAlpcFetch'\nimport type { CreditLogResponse } from '../response'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useActivities({ page, pageSize, options = {} }: { page: number; pageSize: number; options?: any }) {\n const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()\n const { brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n const [activities, setActivities] = useState<CreditLogResponse[]>([])\n const [total, setTotal] = useState(0)\n\n const [currentPage, setCurrentPage] = useState(0)\n\n const { isMutating: isLoading, trigger } = useAlpcMutation<\n {\n data: {\n total: number\n creditLogs: CreditLogResponse[]\n }\n },\n {\n page: number\n page_size: number\n user_id: string\n }\n >({\n url: `/v1/credit/log`,\n initData: {\n brand,\n },\n })\n\n const getActivities = useCallback(async () => {\n const params = {\n page: page,\n page_size: pageSize,\n user_id: profile?.user_id,\n ...options,\n }\n\n trigger(params, {\n onSuccess(responseData) {\n setCurrentPage(page)\n setTotal(responseData?.data?.total)\n setActivities(activities.concat(responseData?.data?.creditLogs || []))\n },\n })\n }, [activities, profile, page, pageSize, options, trigger])\n\n useEffect(() => {\n if (isLoadingProfile || !profile || !brand || isLoading) {\n return\n }\n\n if (page !== currentPage && page) {\n getActivities()\n }\n }, [getActivities, isLoadingProfile, isLoading, profile, brand, page, currentPage])\n\n return {\n activities,\n isLoading,\n total,\n canNext: total > activities.length && !isLoading,\n }\n}\n\nexport default useActivities\n"],
5
+ "mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,mBAAAC,MAAuB,iBAEhC,OAAS,qBAAAC,MAAyB,cAClC,OAAS,sBAAAC,MAA0B,gBAEnC,SAASC,EAAc,CAAE,KAAAC,EAAM,SAAAC,EAAU,QAAAC,EAAU,CAAC,CAAE,EAAsD,CAC1G,KAAM,CAAE,QAAAC,EAAS,iBAAAC,EAAkB,UAAAC,CAAU,EAAIR,EAAkB,EAC7D,CAAE,MAAOS,CAAc,EAAIR,EAAmB,EAC9CS,EAAQF,GAAaC,EACrB,CAACE,EAAYC,CAAa,EAAId,EAA8B,CAAC,CAAC,EAC9D,CAACe,EAAOC,CAAQ,EAAIhB,EAAS,CAAC,EAE9B,CAACiB,EAAaC,CAAc,EAAIlB,EAAS,CAAC,EAE1C,CAAE,WAAYmB,EAAW,QAAAC,CAAQ,EAAInB,EAYzC,CACA,IAAK,iBACL,SAAU,CACR,MAAAW,CACF,CACF,CAAC,EAEKS,EAAgBvB,EAAY,SAAY,CAC5C,MAAMwB,EAAS,CACb,KAAMjB,EACN,UAAWC,EACX,QAASE,GAAS,QAClB,GAAGD,CACL,EAEAa,EAAQE,EAAQ,CACd,UAAUC,EAAc,CACtBL,EAAeb,CAAI,EACnBW,EAASO,GAAc,MAAM,KAAK,EAClCT,EAAcD,EAAW,OAAOU,GAAc,MAAM,YAAc,CAAC,CAAC,CAAC,CACvE,CACF,CAAC,CACH,EAAG,CAACV,EAAYL,EAASH,EAAMC,EAAUC,EAASa,CAAO,CAAC,EAE1D,OAAArB,EAAU,IAAM,CACVU,GAAoB,CAACD,GAAW,CAACI,GAASO,GAI1Cd,IAASY,GAAeZ,GAC1BgB,EAAc,CAElB,EAAG,CAACA,EAAeZ,EAAkBU,EAAWX,EAASI,EAAOP,EAAMY,CAAW,CAAC,EAE3E,CACL,WAAAJ,EACA,UAAAM,EACA,MAAAJ,EACA,QAASA,EAAQF,EAAW,QAAU,CAACM,CACzC,CACF,CAEA,IAAOK,EAAQpB",
6
6
  "names": ["useCallback", "useEffect", "useState", "useAlpcMutation", "useCreditsContext", "useHeadlessContext", "useActivities", "page", "pageSize", "options", "profile", "isLoadingProfile", "alpcBrand", "headlessBrand", "brand", "activities", "setActivities", "total", "setTotal", "currentPage", "setCurrentPage", "isLoading", "trigger", "getActivities", "params", "responseData", "useActivities_default"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import A from"js-cookie";import{useCallback as C,useRef as m,useState as D}from"react";import E from"swr";import{useHeadlessContext as U}from"@anker-in/lib";import{getAlpcPath as O}from"../utils";import{useCreditsContext as b}from"../provider";let R;const S=t=>fetch(O(t.locale)+t.url,t.fetchOptions).then(async n=>{if(n.status<300)return(await n.json()).data;if(n.status===401&&t.onReAuth){R||(R=t.onReAuth());const r=await R;if(R=void 0,r)return fetch(O(t.locale)+t.url,t.fetchOptions).then(async e=>{if(e.status<300)return(await e.json()).data;if(e.status===401){t.onUnAuth&&t.onUnAuth();return}});t.onUnAuth&&t.onUnAuth();return}}),x=async(t,n,r)=>{let e=await fetch(`${O(t)}/cloud/login`,{method:"POST"}),a=await e.json();if(e.status<300&&!n&&a?.data?.code===27004){const o=A.get("alpcEU");if(Number(o)===1?A.set("alpcEU","0",{expires:30,domain:`.${r}.com`}):A.set("alpcEU","1",{expires:30,domain:`.${r}.com`}),e=await fetch(`${O(t)}/cloud/login`,{method:"POST"}),a=await e.json(),e.status>300)return!1}return!a?.data?.code},M=(t,n,r={})=>{const e=m(!1),[a,o]=D(),[s,c]=D(!1),i=m(t),f=m(n),d=m(r),h=C(async(g,T={})=>{if(e.current)return;e.current=!0,c(!0);const y={...d.current,...T},{onSuccess:l,onError:p}=y||{};try{const u=await f.current(i.current,{arg:g});return o(u),c(!1),e.current=!1,l&&l(u),u}catch(u){c(!1),e.current=!1,p&&p(u)}},[]);return{isMutating:s,trigger:h,data:a}},N=(t,n)=>{const[r,e]=D(!1),{removeProfile:a,alpcBrand:o}=b(),{enable:s,...c}=n||{},{locale:i="",brand:f}=U(),d=o||f,{queryKey:h=[],body:g={},headers:T,...y}=t,l=s??!0,[p,u]=h;return E([p,u],l?([B,w])=>S({url:B,locale:i,fetchOptions:{method:"POST",headers:{"current-language":i,...T},body:JSON.stringify({...g,...w}),...y},onReAuth:async()=>await x(i,r,d)?(e(!0),!0):!1,onUnAuth(){a()}}):null,{revalidateOnFocus:!1,...c})},W=(t,n)=>{const[r,e]=D(!1),{removeProfile:a,alpcBrand:o}=b(),{locale:s="",brand:c}=U(),i=o||c,{url:f,initData:d,headers:h,...g}=t;return M(f,(y,l)=>S({url:y,locale:s,fetchOptions:{method:"POST",headers:{"current-language":s,...h},...g,body:JSON.stringify({...d,...l.arg})},onReAuth:async()=>await x(s,r,i)?(e(!0),!0):!1,onUnAuth(){a()}}),n)};export{N as useAlpcFetch,W 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)?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}\n\nlet reAuthPromise: Promise<boolean> | undefined\n\ntype Fetcher<TData, TBody> = (url: string, data: { arg: TBody }) => Promise<TData>\n\nconst fetcher = (options: FetcherOptions) => {\n return fetch(getAlpcPath(options.locale) + options.url, options.fetchOptions).then(async response => {\n if (response.status < 300) {\n const responseData = await response.json()\n return responseData.data\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.url, options.fetchOptions).then(async response => {\n if (response.status < 300) {\n const responseData = await response.json()\n return responseData.data\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) => {\n let reloginResponse = await fetch(`${getAlpcPath(locale)}/cloud/login`, {\n method: 'POST',\n })\n let reloginResponseData = await reloginResponse.json()\n\n if (reloginResponse!.status < 300 && !retry) {\n if (reloginResponseData?.data?.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)}/cloud/login`, {\n method: 'POST',\n })\n reloginResponseData = await reloginResponse.json()\n\n if (reloginResponse.status > 300) {\n return false\n }\n }\n }\n if (!reloginResponseData?.data?.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) => {\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 if (innerMutating.current) {\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 } = 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\n ? null\n : ([requestUrl, data]: [string, Record<string, any>]) =>\n fetcher({\n url: requestUrl,\n locale,\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)\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 } = 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\n const { url, initData, headers, ...fetchOptions } = options\n\n const context = useMutation<TData, TBody>(\n url,\n (requestUrl, data: { arg: TBody }) =>\n fetcher({\n url: requestUrl,\n locale,\n fetchOptions: {\n method: 'POST',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n ...fetchOptions,\n body: JSON.stringify({\n ...initData,\n ...data.arg,\n }),\n },\n onReAuth: async () => {\n const result = await reAuth(locale, retry, brand)\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 mutationOptions\n )\n\n return context\n}\n"],
5
- "mappings": "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",
6
- "names": ["Cookies", "useCallback", "useRef", "useState", "useSWR", "useHeadlessContext", "getAlpcPath", "useCreditsContext", "reAuthPromise", "fetcher", "options", "response", "result", "reAuth", "locale", "retry", "brand", "reloginResponse", "reloginResponseData", "alpcEUCookie", "useMutation", "url", "mutationConfig", "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"]
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": "AAAA,OAAOA,MAAa,YACpB,OAAS,eAAAC,EAAa,UAAAC,EAAQ,YAAAC,MAAgB,QAC9C,OAAOC,MAAuC,MAC9C,OAAS,sBAAAC,MAA0B,gBAEnC,OAAS,eAAAC,MAAmB,WAC5B,OAAS,qBAAAC,MAAyB,cAyBlC,IAAIC,EAUJ,MAAMC,EAAyBC,GACxBA,IAGDA,EAAa,MAAQ,OAAOA,EAAa,MAAS,UAAY,CAAC,MAAM,QAAQA,EAAa,IAAI,EACzFA,EAAa,KAIfA,GAGHC,EAAWC,GACR,MAAMN,EAAYM,EAAQ,OAAQA,EAAQ,UAAU,EAAIA,EAAQ,IAAKA,EAAQ,YAAY,EAAE,KAAK,MAAMC,GAAY,CACvH,GAAIA,EAAS,OAAS,IAAK,CACzB,MAAMH,EAAe,MAAMG,EAAS,KAAK,EACzC,OAAOJ,EAAsBC,CAAY,CAC3C,CAGA,GAAIG,EAAS,SAAW,KAElBD,EAAQ,SAAU,CACfJ,IACHA,EAAgBI,EAAQ,SAAS,GAGnC,MAAME,EAAS,MAAMN,EAIrB,GAFAA,EAAgB,OAEZM,EAEF,OAAO,MAAMR,EAAYM,EAAQ,OAAQA,EAAQ,UAAU,EAAIA,EAAQ,IAAKA,EAAQ,YAAY,EAAE,KAAK,MAAMC,GAAY,CACvH,GAAIA,EAAS,OAAS,IAAK,CACzB,MAAMH,EAAe,MAAMG,EAAS,KAAK,EACzC,OAAOJ,EAAsBC,CAAY,CAC3C,CAEA,GAAIG,EAAS,SAAW,IAAK,CACvBD,EAAQ,UACVA,EAAQ,SAAS,EAEnB,MACF,CACF,CAAC,EAEGA,EAAQ,UACVA,EAAQ,SAAS,EAEnB,MAEJ,CAEJ,CAAC,EAGGG,EAAS,MAAOC,EAAgBC,EAAgBC,EAAeC,IAAwB,CAC3F,IAAIC,EAAkB,MAAM,MAAM,GAAGd,EAAYU,EAAQG,CAAU,CAAC,eAAgB,CAClF,OAAQ,MACV,CAAC,EACGE,EAAsB,MAAMD,EAAgB,KAAK,EAEjDE,EAAiBb,EAAsBY,CAAmB,EAE9D,GAAID,EAAiB,OAAS,KAAO,CAACH,GAChCK,GAAgB,OAAS,MAAO,CAElC,MAAMC,EAAevB,EAAQ,IAAI,QAAQ,EAqBzC,GAnBI,OAAOuB,CAAY,IAAM,EAC3BvB,EAAQ,IAAI,SAAU,IAAK,CACzB,QAAS,GACT,OAAQ,IAAIkB,CAAK,MACnB,CAAC,EAEDlB,EAAQ,IAAI,SAAU,IAAK,CACzB,QAAS,GACT,OAAQ,IAAIkB,CAAK,MACnB,CAAC,EAIHE,EAAkB,MAAM,MAAM,GAAGd,EAAYU,EAAQG,CAAU,CAAC,eAAgB,CAC9E,OAAQ,MACV,CAAC,EACDE,EAAsB,MAAMD,EAAgB,KAAK,EACjDE,EAAiBb,EAAsBY,CAAmB,EAEtDD,EAAgB,OAAS,IAC3B,MAAO,EAEX,CAEF,MAAK,CAAAE,GAAgB,IAMvB,EAOME,EAAc,CAClBC,EACAd,EACAe,EAA2C,CAAC,EAC5CC,IACG,CACH,MAAMC,EAAgB1B,EAAgB,EAAK,EAErC,CAAC2B,EAAMC,CAAO,EAAI3B,EAAgB,EAClC,CAAC4B,EAAYC,CAAa,EAAI7B,EAAS,EAAK,EAE5C8B,EAAS/B,EAAOuB,CAAG,EACnBS,EAAahC,EAAOS,CAAO,EAC3BwB,EAAYjC,EAAOwB,CAAc,EAEjCU,EAAUnC,EACd,MAAOoC,EAAkBC,EAAiC,CAAC,IAAM,CAG/D,GAFA,QAAQ,IAAI,yCAA0C,CAAE,IAAKL,EAAO,QAAS,UAAAI,EAAW,MAAOV,EAAS,OAAQ,CAAC,EAE7GC,EAAc,QAAS,CACzB,QAAQ,IAAI,8CAA8C,EAC1D,MACF,CAEA,GAAI,CAACD,EAAS,QAAS,CACrB,QAAQ,IAAI,yDAAyD,EACrE,MACF,CAEAC,EAAc,QAAU,GACxBI,EAAc,EAAI,EAElB,MAAMO,EAAS,CACb,GAAGJ,EAAU,QACb,GAAGG,CACL,EAEM,CAAE,UAAAE,EAAW,QAAAC,CAAQ,EAAIF,GAAU,CAAC,EAE1C,GAAI,CACF,MAAMG,EAAc,MAAMR,EAAW,QAAQD,EAAO,QAAS,CAC3D,IAAKI,CACP,CAAC,EACD,OAAAP,EAAQY,CAAW,EAEnBV,EAAc,EAAK,EACnBJ,EAAc,QAAU,GAEpBY,GACFA,EAAUE,CAAW,EAEhBA,CACT,OAASC,EAAU,CACjBX,EAAc,EAAK,EACnBJ,EAAc,QAAU,GAEpBa,GACFA,EAAQE,CAAG,CAEf,CACF,EAEA,CAAC,CACH,EAEA,MAAO,CACL,WAAAZ,EACA,QAAAK,EACA,KAAAP,CACF,CACF,EAEae,EAAe,CAC1BhC,EACAiC,IACG,CACH,KAAM,CAAC5B,EAAO6B,CAAQ,EAAI3C,EAAS,EAAK,EAClC,CAAE,cAAA4C,EAAe,UAAAC,EAAW,WAAA7B,CAAW,EAAIZ,EAAkB,EAE7D,CAAE,OAAA0C,EAAQ,GAAGC,CAAgB,EAAIL,GAAc,CAAC,EAEhD,CAAE,OAAA7B,EAAS,GAAI,MAAOmC,CAAc,EAAI9C,EAAmB,EAE3Da,EAAQ8B,GAAaG,EAErB,CAAE,SAAAC,EAAW,CAAC,EAAG,KAAMC,EAAY,CAAC,EAAG,QAAAC,EAAS,GAAGC,CAAa,EAAI3C,EACpE4C,EAAcP,GAAU,GAExB,CAACxB,EAAKgC,CAAW,EAAIL,EA4C3B,OA1CgBhD,EACd,CAACqB,EAAKgC,CAAW,EACjB,CAACD,GAAe,CAACtC,EACb,KACA,CAAC,CAACwC,EAAY7B,CAAI,IAChBlB,EAAQ,CACN,IAAK+C,EACL,OAAA1C,EACA,WAAAG,EACA,aAAc,CACZ,OAAQ,OACR,QAAS,CACP,mBAAoBH,EACpB,GAAGsC,CACL,EACA,KAAM,KAAK,UAAU,CACnB,GAAGD,EACH,GAAGxB,CACL,CAAC,EACD,GAAG0B,CACL,EACA,SAAU,SACO,MAAMxC,EAAOC,EAAQC,EAAOC,EAAOC,CAAU,GAG1D2B,EAAS,EAAI,EACN,IAGF,GAET,UAAW,CAETC,EAAc,CAChB,CACF,CAAC,EACP,CACE,kBAAmB,GACnB,GAAGG,CACL,CACF,CAGF,EAEaS,EAAkB,CAAe/C,EAA0BgD,IAA+C,CACrH,KAAM,CAAC3C,EAAO6B,CAAQ,EAAI3C,EAAS,EAAK,EAClC,CAAE,cAAA4C,EAAe,UAAAC,EAAW,WAAA7B,CAAW,EAAIZ,EAAkB,EAE7D,CAAE,OAAAS,EAAS,GAAI,MAAOmC,CAAc,EAAI9C,EAAmB,EAE3Da,EAAQ8B,GAAaG,EACrBxB,EAAWzB,EAAOgB,CAAK,EAC7BS,EAAS,QAAUT,EAEnB,KAAM,CAAE,IAAAO,EAAK,SAAAoC,EAAU,QAAAP,EAAS,GAAGC,CAAa,EAAI3C,EAC9CkD,EAAc5D,EAAO2D,CAAQ,EACnC,OAAAC,EAAY,QAAUD,EAENrC,EACdC,EACA,CAACiC,EAAY7B,IAENF,EAAS,QAIPhB,EAAQ,CACb,IAAK+C,EACL,OAAA1C,EACA,WAAAG,EACA,aAAc,CACZ,OAAQ,OACR,QAAS,CACP,mBAAoBH,EACpB,GAAGsC,CACL,EACA,GAAGC,EACH,KAAM,KAAK,UAAU,CACnB,GAAGO,EAAY,QACf,GAAGjC,EAAK,GACV,CAAC,CACH,EACA,SAAU,SACO,MAAMd,EAAOC,EAAQC,EAAOU,EAAS,QAAUR,CAAU,GAGtE2B,EAAS,EAAI,EACN,IAGF,GAET,UAAW,CAETC,EAAc,CAChB,CACF,CAAC,EAjCQ,QAAQ,QAAQ,MAA6B,EAmCxDa,EACAjC,CACF,CAGF",
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{useEffect as l,useState as a}from"react";import{useHeadlessContext as d}from"@anker-in/lib";function g({shopifyStoreDomain:c}){const{locale:p=""}=d(),[u,s]=a(!1),[f,n]=a([]);return l(()=>{(async()=>{s(!0);try{const h=await(await fetch(`/api/multipass/rainbowbridge/uc/shop/shipping_zones?shop=${c}`)).json();let o=[];const i=new Set;h.data.data.forEach(t=>{t.countries.forEach(e=>{i.has(e.code)||(i.add(e.code),o.push(e))})}),o=o.sort((t,e)=>t.code.localeCompare(e.code)),console.log("fetch shipsToCountries",o),n(o)}catch(r){n([]),console.error(r)}finally{s(!1)}})()},[p]),{isLoading:u,countries:f}}var w=g;export{w as default};
1
+ import{useEffect as l,useState as p}from"react";import{useHeadlessContext as d}from"@anker-in/lib";function g({shopifyStoreDomain:u}){const{locale:t=""}=d(),[h,n]=p(!1),[f,i]=p([]);return l(()=>{(async()=>{n(!0);try{const a=await(await fetch(`/api/multipass/rainbowbridge/uc/shop/shipping_zones?shop=${u}`,{headers:{"current-language":t}})).json();let e=[];const c=new Set;(a?.data?.data||a?.data||[]).forEach(s=>{s.countries.forEach(o=>{c.has(o.code)||(c.add(o.code),e.push(o))})}),e=e.sort((s,o)=>s.code.localeCompare(o.code)),console.log("fetch shipsToCountries",e),i(e)}catch(r){i([]),console.error(r)}finally{n(!1)}})()},[t]),{isLoading:h,countries:f}}var E=g;export{E as default};
2
2
  //# sourceMappingURL=useCountries.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/credits/context/hooks/useCountries.ts"],
4
- "sourcesContent": ["import { useEffect, useState } from 'react'\n\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { type ShippingCountry, type ShippingZone } from '../../type'\n\nfunction useCountries({ shopifyStoreDomain }: { shopifyStoreDomain: string }) {\n const { locale = '' } = useHeadlessContext()\n\n const [isLoading, setLoading] = useState(false)\n const [countries, setCountries] = useState<ShippingCountry[]>([])\n\n useEffect(() => {\n const fetchCountries = async () => {\n setLoading(true)\n try {\n const response = await fetch(`/api/multipass/rainbowbridge/uc/shop/shipping_zones?shop=${shopifyStoreDomain}`)\n const res: any = await response.json()\n\n // \u56FD\u5BB6\u8FC7\u6EE4\n let shipsToCountries: ShippingCountry[] = []\n const countrySet = new Set()\n res.data.data.forEach((shippingZoneItem: ShippingZone) => {\n shippingZoneItem.countries.forEach(shippingZoneCountryItem => {\n if (!countrySet.has(shippingZoneCountryItem.code)) {\n countrySet.add(shippingZoneCountryItem.code)\n shipsToCountries.push(shippingZoneCountryItem)\n }\n })\n })\n\n // \u5B57\u6BCD\u987A\u5E8F\u6392\u5E8F\n shipsToCountries = shipsToCountries.sort((a, b) => {\n return a.code.localeCompare(b.code)\n })\n\n console.log('fetch shipsToCountries', shipsToCountries)\n setCountries(shipsToCountries)\n } catch (e) {\n setCountries([])\n console.error(e)\n } finally {\n setLoading(false)\n }\n }\n\n fetchCountries()\n }, [locale])\n\n return {\n isLoading,\n countries,\n }\n}\n\nexport default useCountries\n"],
5
- "mappings": "AAAA,OAAS,aAAAA,EAAW,YAAAC,MAAgB,QAEpC,OAAS,sBAAAC,MAA0B,gBAGnC,SAASC,EAAa,CAAE,mBAAAC,CAAmB,EAAmC,CAC5E,KAAM,CAAE,OAAAC,EAAS,EAAG,EAAIH,EAAmB,EAErC,CAACI,EAAWC,CAAU,EAAIN,EAAS,EAAK,EACxC,CAACO,EAAWC,CAAY,EAAIR,EAA4B,CAAC,CAAC,EAEhE,OAAAD,EAAU,IAAM,EACS,SAAY,CACjCO,EAAW,EAAI,EACf,GAAI,CAEF,MAAMG,EAAW,MADA,MAAM,MAAM,4DAA4DN,CAAkB,EAAE,GAC7E,KAAK,EAGrC,IAAIO,EAAsC,CAAC,EAC3C,MAAMC,EAAa,IAAI,IACvBF,EAAI,KAAK,KAAK,QAASG,GAAmC,CACxDA,EAAiB,UAAU,QAAQC,GAA2B,CACvDF,EAAW,IAAIE,EAAwB,IAAI,IAC9CF,EAAW,IAAIE,EAAwB,IAAI,EAC3CH,EAAiB,KAAKG,CAAuB,EAEjD,CAAC,CACH,CAAC,EAGDH,EAAmBA,EAAiB,KAAK,CAACI,EAAGC,IACpCD,EAAE,KAAK,cAAcC,EAAE,IAAI,CACnC,EAED,QAAQ,IAAI,yBAA0BL,CAAgB,EACtDF,EAAaE,CAAgB,CAC/B,OAASM,EAAG,CACVR,EAAa,CAAC,CAAC,EACf,QAAQ,MAAMQ,CAAC,CACjB,QAAE,CACAV,EAAW,EAAK,CAClB,CACF,GAEe,CACjB,EAAG,CAACF,CAAM,CAAC,EAEJ,CACL,UAAAC,EACA,UAAAE,CACF,CACF,CAEA,IAAOU,EAAQf",
4
+ "sourcesContent": ["import { useEffect, useState } from 'react'\n\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { type ShippingCountry, type ShippingZone } from '../../type'\n\nfunction useCountries({ shopifyStoreDomain }: { shopifyStoreDomain: string }) {\n const { locale = '' } = useHeadlessContext()\n\n const [isLoading, setLoading] = useState(false)\n const [countries, setCountries] = useState<ShippingCountry[]>([])\n\n useEffect(() => {\n const fetchCountries = async () => {\n setLoading(true)\n try {\n const response = await fetch(`/api/multipass/rainbowbridge/uc/shop/shipping_zones?shop=${shopifyStoreDomain}`, {\n headers: {\n 'current-language': locale,\n },\n })\n const res: any = await response.json()\n\n // \u56FD\u5BB6\u8FC7\u6EE4\n let shipsToCountries: ShippingCountry[] = []\n const countrySet = new Set()\n const shippingZones = res?.data?.data || res?.data || []\n shippingZones.forEach((shippingZoneItem: ShippingZone) => {\n shippingZoneItem.countries.forEach(shippingZoneCountryItem => {\n if (!countrySet.has(shippingZoneCountryItem.code)) {\n countrySet.add(shippingZoneCountryItem.code)\n shipsToCountries.push(shippingZoneCountryItem)\n }\n })\n })\n\n // \u5B57\u6BCD\u987A\u5E8F\u6392\u5E8F\n shipsToCountries = shipsToCountries.sort((a, b) => {\n return a.code.localeCompare(b.code)\n })\n\n console.log('fetch shipsToCountries', shipsToCountries)\n setCountries(shipsToCountries)\n } catch (e) {\n setCountries([])\n console.error(e)\n } finally {\n setLoading(false)\n }\n }\n\n fetchCountries()\n }, [locale])\n\n return {\n isLoading,\n countries,\n }\n}\n\nexport default useCountries\n"],
5
+ "mappings": "AAAA,OAAS,aAAAA,EAAW,YAAAC,MAAgB,QAEpC,OAAS,sBAAAC,MAA0B,gBAGnC,SAASC,EAAa,CAAE,mBAAAC,CAAmB,EAAmC,CAC5E,KAAM,CAAE,OAAAC,EAAS,EAAG,EAAIH,EAAmB,EAErC,CAACI,EAAWC,CAAU,EAAIN,EAAS,EAAK,EACxC,CAACO,EAAWC,CAAY,EAAIR,EAA4B,CAAC,CAAC,EAEhE,OAAAD,EAAU,IAAM,EACS,SAAY,CACjCO,EAAW,EAAI,EACf,GAAI,CAMF,MAAMG,EAAW,MALA,MAAM,MAAM,4DAA4DN,CAAkB,GAAI,CAC7G,QAAS,CACP,mBAAoBC,CACtB,CACF,CAAC,GAC+B,KAAK,EAGrC,IAAIM,EAAsC,CAAC,EAC3C,MAAMC,EAAa,IAAI,KACDF,GAAK,MAAM,MAAQA,GAAK,MAAQ,CAAC,GACzC,QAASG,GAAmC,CACxDA,EAAiB,UAAU,QAAQC,GAA2B,CACvDF,EAAW,IAAIE,EAAwB,IAAI,IAC9CF,EAAW,IAAIE,EAAwB,IAAI,EAC3CH,EAAiB,KAAKG,CAAuB,EAEjD,CAAC,CACH,CAAC,EAGDH,EAAmBA,EAAiB,KAAK,CAACI,EAAGC,IACpCD,EAAE,KAAK,cAAcC,EAAE,IAAI,CACnC,EAED,QAAQ,IAAI,yBAA0BL,CAAgB,EACtDF,EAAaE,CAAgB,CAC/B,OAASM,EAAG,CACVR,EAAa,CAAC,CAAC,EACf,QAAQ,MAAMQ,CAAC,CACjB,QAAE,CACAV,EAAW,EAAK,CAClB,CACF,GAEe,CACjB,EAAG,CAACF,CAAM,CAAC,EAEJ,CACL,UAAAC,EACA,UAAAE,CACF,CACF,CAEA,IAAOU,EAAQf",
6
6
  "names": ["useEffect", "useState", "useHeadlessContext", "useCountries", "shopifyStoreDomain", "locale", "isLoading", "setLoading", "countries", "setCountries", "res", "shipsToCountries", "countrySet", "shippingZoneItem", "shippingZoneCountryItem", "a", "b", "e", "useCountries_default"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{useCallback as R,useEffect as C,useState as d}from"react";import{ALPC_COUNTRY_MAP as b,AlpcConsumeType as A}from"../const";import{useAlpcMutation as M}from"./useAlpcFetch";import{useCreditsContext as w}from"../provider";import{useHeadlessContext as L}from"@anker-in/lib";function T({page:o,pageSize:s,consumeType:r}){const{profile:e,alpcBrand:i}=w(),{brand:c,locale:n,appName:l}=L(),g=i||c,[a,_]=d([]),[u,f]=d(0),{isMutating:p,trigger:y}=M({url:"/v1/credit/log/coupon",initData:{brand:g,country:b.get(n)||n,app_name:l}}),t=R(async()=>{e?.user_id&&await y({consume_type:r||A.Coupon,page:o,page_size:s,user_id:e?.user_id},{onSuccess(m){f(m?.data?.total),_(m?.data?.redeem_logs||[])}})},[r,o,s,e?.user_id]);return C(()=>{t()},[t]),{myRewards:a,isLoading:p,total:u,getMyRewards:t,canNext:u>a.length&&!p}}var P=T;export{P as default};
1
+ import{useCallback as R,useEffect as C,useState as d}from"react";import{ALPC_COUNTRY_MAP as b,AlpcConsumeType as A}from"../const";import{useAlpcMutation as M}from"./useAlpcFetch";import{useCreditsContext as w}from"../provider";import{useHeadlessContext as L}from"@anker-in/lib";function T({page:o,pageSize:r,consumeType:n}){const{profile:e,alpcBrand:c}=w(),{brand:l,locale:a,appName:g}=L(),t=c||l,[u,_]=d([]),[p,f]=d(0),{isMutating:i,trigger:y}=M({url:"/v1/credit/log/coupon",initData:{brand:t,country:b.get(a)||a,app_name:g}}),s=R(async()=>{e?.user_id&&await y({consume_type:n||A.Coupon,page:o,page_size:r,user_id:e?.user_id},{onSuccess(m){f(m?.data?.total),_(m?.data?.redeem_logs||[])}})},[n,o,r,e?.user_id]);return C(()=>{!t||!e?.user_id||s()},[s,t]),{myRewards:u,isLoading:i,total:p,getMyRewards:s,canNext:p>u.length&&!i}}var P=T;export{P as default};
2
2
  //# sourceMappingURL=useMyRewards.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/credits/context/hooks/useMyRewards.ts"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { ALPC_COUNTRY_MAP, AlpcConsumeType } from '../const'\nimport { useAlpcMutation } from './useAlpcFetch'\nimport type { RedeemLogResponse } from '../response'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useMyRewards({\n page,\n pageSize,\n consumeType,\n}: {\n page: number\n pageSize: number\n consumeType?: AlpcConsumeType\n}) {\n const { profile, alpcBrand } = useCreditsContext()\n const { brand: headlessBrand, locale, appName } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n const [myRewards, setMyRewards] = useState<RedeemLogResponse[]>([])\n const [total, setTotal] = useState(0)\n\n const { isMutating: isLoading, trigger } = useAlpcMutation<\n { data: { redeem_logs: RedeemLogResponse[]; total: number } },\n {\n page: number\n page_size: number\n consume_type: AlpcConsumeType\n user_id: string\n }\n >({\n url: `/v1/credit/log/coupon`,\n initData: {\n brand: brand,\n country: ALPC_COUNTRY_MAP.get(locale) || locale,\n app_name: appName,\n },\n })\n\n const getMyRewards = useCallback(async () => {\n if (!profile?.user_id) {\n return\n }\n await trigger(\n {\n consume_type: consumeType || AlpcConsumeType.Coupon,\n page,\n page_size: pageSize,\n user_id: profile?.user_id,\n },\n {\n onSuccess(responseData) {\n setTotal(responseData?.data?.total)\n setMyRewards(responseData?.data?.redeem_logs || [])\n },\n }\n )\n }, [consumeType, page, pageSize, profile?.user_id])\n\n useEffect(() => {\n getMyRewards()\n }, [getMyRewards])\n\n return {\n myRewards,\n isLoading,\n total,\n getMyRewards,\n canNext: total > myRewards.length && !isLoading,\n }\n}\n\nexport default useMyRewards\n"],
5
- "mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,oBAAAC,EAAkB,mBAAAC,MAAuB,WAClD,OAAS,mBAAAC,MAAuB,iBAEhC,OAAS,qBAAAC,MAAyB,cAClC,OAAS,sBAAAC,MAA0B,gBAEnC,SAASC,EAAa,CACpB,KAAAC,EACA,SAAAC,EACA,YAAAC,CACF,EAIG,CACD,KAAM,CAAG,QAAAC,EAAS,UAAAC,CAAU,EAAIP,EAAkB,EAC5C,CAAE,MAAOQ,EAAe,OAAAC,EAAQ,QAAAC,CAAQ,EAAIT,EAAmB,EAC/DU,EAAQJ,GAAaC,EAErB,CAACI,EAAWC,CAAY,EAAIjB,EAA8B,CAAC,CAAC,EAC5D,CAACkB,EAAOC,CAAQ,EAAInB,EAAS,CAAC,EAE9B,CAAE,WAAYoB,EAAW,QAAAC,CAAQ,EAAIlB,EAQzC,CACA,IAAK,wBACL,SAAU,CACR,MAAOY,EACP,QAASd,EAAiB,IAAIY,CAAM,GAAKA,EACzC,SAAUC,CACZ,CACF,CAAC,EAEKQ,EAAexB,EAAY,SAAY,CACtCY,GAAS,SAGd,MAAMW,EACJ,CACE,aAAcZ,GAAeP,EAAgB,OAC7C,KAAAK,EACA,UAAWC,EACX,QAASE,GAAS,OACpB,EACA,CACE,UAAUa,EAAc,CACtBJ,EAASI,GAAc,MAAM,KAAK,EAClCN,EAAaM,GAAc,MAAM,aAAe,CAAC,CAAC,CACpD,CACF,CACF,CACF,EAAG,CAACd,EAAaF,EAAMC,EAAUE,GAAS,OAAO,CAAC,EAElD,OAAAX,EAAU,IAAM,CACduB,EAAa,CACf,EAAG,CAACA,CAAY,CAAC,EAEV,CACL,UAAAN,EACA,UAAAI,EACA,MAAAF,EACA,aAAAI,EACA,QAASJ,EAAQF,EAAU,QAAU,CAACI,CACxC,CACF,CAEA,IAAOI,EAAQlB",
4
+ "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { ALPC_COUNTRY_MAP, AlpcConsumeType } from '../const'\nimport { useAlpcMutation } from './useAlpcFetch'\nimport type { RedeemLogResponse } from '../response'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useMyRewards({\n page,\n pageSize,\n consumeType,\n}: {\n page: number\n pageSize: number\n consumeType?: AlpcConsumeType\n}) {\n const { profile, alpcBrand } = useCreditsContext()\n const { brand: headlessBrand, locale, appName } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n const [myRewards, setMyRewards] = useState<RedeemLogResponse[]>([])\n const [total, setTotal] = useState(0)\n\n const { isMutating: isLoading, trigger } = useAlpcMutation<\n { data: { redeem_logs: RedeemLogResponse[]; total: number } },\n {\n page: number\n page_size: number\n consume_type: AlpcConsumeType\n user_id: string\n }\n >({\n url: `/v1/credit/log/coupon`,\n initData: {\n brand: brand,\n country: ALPC_COUNTRY_MAP.get(locale) || locale,\n app_name: appName,\n },\n })\n\n const getMyRewards = useCallback(async () => {\n if (!profile?.user_id) {\n return\n }\n await trigger(\n {\n consume_type: consumeType || AlpcConsumeType.Coupon,\n page,\n page_size: pageSize,\n user_id: profile?.user_id,\n },\n {\n onSuccess(responseData) {\n setTotal(responseData?.data?.total)\n setMyRewards(responseData?.data?.redeem_logs || [])\n },\n }\n )\n }, [consumeType, page, pageSize, profile?.user_id])\n\n useEffect(() => {\n if (!brand || !profile?.user_id) {\n return\n }\n getMyRewards()\n }, [getMyRewards, brand])\n\n return {\n myRewards,\n isLoading,\n total,\n getMyRewards,\n canNext: total > myRewards.length && !isLoading,\n }\n}\n\nexport default useMyRewards\n"],
5
+ "mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,oBAAAC,EAAkB,mBAAAC,MAAuB,WAClD,OAAS,mBAAAC,MAAuB,iBAEhC,OAAS,qBAAAC,MAAyB,cAClC,OAAS,sBAAAC,MAA0B,gBAEnC,SAASC,EAAa,CACpB,KAAAC,EACA,SAAAC,EACA,YAAAC,CACF,EAIG,CACD,KAAM,CAAE,QAAAC,EAAS,UAAAC,CAAU,EAAIP,EAAkB,EAC3C,CAAE,MAAOQ,EAAe,OAAAC,EAAQ,QAAAC,CAAQ,EAAIT,EAAmB,EAC/DU,EAAQJ,GAAaC,EAErB,CAACI,EAAWC,CAAY,EAAIjB,EAA8B,CAAC,CAAC,EAC5D,CAACkB,EAAOC,CAAQ,EAAInB,EAAS,CAAC,EAE9B,CAAE,WAAYoB,EAAW,QAAAC,CAAQ,EAAIlB,EAQzC,CACA,IAAK,wBACL,SAAU,CACR,MAAOY,EACP,QAASd,EAAiB,IAAIY,CAAM,GAAKA,EACzC,SAAUC,CACZ,CACF,CAAC,EAEKQ,EAAexB,EAAY,SAAY,CACtCY,GAAS,SAGd,MAAMW,EACJ,CACE,aAAcZ,GAAeP,EAAgB,OAC7C,KAAAK,EACA,UAAWC,EACX,QAASE,GAAS,OACpB,EACA,CACE,UAAUa,EAAc,CACtBJ,EAASI,GAAc,MAAM,KAAK,EAClCN,EAAaM,GAAc,MAAM,aAAe,CAAC,CAAC,CACpD,CACF,CACF,CACF,EAAG,CAACd,EAAaF,EAAMC,EAAUE,GAAS,OAAO,CAAC,EAElD,OAAAX,EAAU,IAAM,CACV,CAACgB,GAAS,CAACL,GAAS,SAGxBY,EAAa,CACf,EAAG,CAACA,EAAcP,CAAK,CAAC,EAEjB,CACL,UAAAC,EACA,UAAAI,EACA,MAAAF,EACA,aAAAI,EACA,QAASJ,EAAQF,EAAU,QAAU,CAACI,CACxC,CACF,CAEA,IAAOI,EAAQlB",
6
6
  "names": ["useCallback", "useEffect", "useState", "ALPC_COUNTRY_MAP", "AlpcConsumeType", "useAlpcMutation", "useCreditsContext", "useHeadlessContext", "useMyRewards", "page", "pageSize", "consumeType", "profile", "alpcBrand", "headlessBrand", "locale", "appName", "brand", "myRewards", "setMyRewards", "total", "setTotal", "isLoading", "trigger", "getMyRewards", "responseData", "useMyRewards_default"]
7
7
  }
@@ -1,2 +1,2 @@
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};
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};
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 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,GAAK,MAAM,YACpBF,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"]
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"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{useCallback as y,useEffect as _,useState as g}from"react";import{useAlpcMutation as T}from"./useAlpcFetch";import{ALPC_COUNTRY_MAP as R}from"../const";import{useCreditsContext as L}from"../provider";import{useHeadlessContext as b}from"@anker-in/lib";function A(c){let e="";const{profile:t,isLoadingProfile:o,alpcBrand:l}=L(),{locale:n,brand:m}=b(),p=l||m;n==="pl"?e="eu":e=n;const[a,d]=g([]),{isMutating:C,trigger:r}=T({url:"/v1/credit/consume_credit_rules",initData:{brand:p,page:1,page_size:999,country:(R.get(e)||e)?.toUpperCase()}}),s=y(u=>{r({user_id:t?.user_id,...u?.consumeType&&{consume_type:u.consumeType}},{onSuccess(i){console.log("responseData",i);let f=i.data.consume_credit_rules||[];d(f)}})},[t,r,e]);return _(()=>{o||s({consumeType:c?.consumeType})},[s,o]),{listLoading:C,redeemableList:a,getRedeemableList:s}}var h=A;export{h as default};
1
+ import{useCallback as y,useEffect as _,useState as g}from"react";import{useAlpcMutation as T}from"./useAlpcFetch";import{ALPC_COUNTRY_MAP as R}from"../const";import{useCreditsContext as L}from"../provider";import{useHeadlessContext as b}from"@anker-in/lib";function A(l){let e="";const{profile:o,isLoadingProfile:n,alpcBrand:m}=L(),{locale:r,brand:p}=b(),s=m||p;r==="pl"?e="eu":e=r;const[a,d]=g([]),{isMutating:C,trigger:u}=T({url:"/v1/credit/consume_credit_rules",initData:{brand:s,page:1,page_size:999,country:(R.get(e)||e)?.toUpperCase()}}),t=y(i=>{u({user_id:o?.user_id,...i?.consumeType&&{consume_type:i.consumeType}},{onSuccess(c){console.log("responseData",c);let f=c?.data?.consume_credit_rules||[];d(f)}})},[o,u,e]);return _(()=>{!s||n||t({consumeType:l?.consumeType})},[t,n,s]),{listLoading:C,redeemableList:a,getRedeemableList:t}}var h=A;export{h as default};
2
2
  //# sourceMappingURL=useRedeemableList.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/credits/context/hooks/useRedeemableList.ts"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { useAlpcMutation } from './useAlpcFetch'\nimport { ALPC_COUNTRY_MAP, AlpcConsumeType } from '../const'\nimport { useCreditsContext } from '../provider'\nimport type { ConsumeCreditRuleResponse } from '../response'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useRedeemableList(props?: { consumeType: AlpcConsumeType }) {\n let locale = '' as string\n const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()\n const { locale: contextLocale, brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n if (contextLocale === 'pl') {\n locale = 'eu'\n } else {\n locale = contextLocale\n }\n\n const [redeemableList, setRedeemableList] = useState<ConsumeCreditRuleResponse[]>([])\n const { isMutating: listLoading, trigger } = useAlpcMutation<\n {\n data: { consume_credit_rules: ConsumeCreditRuleResponse[] }\n },\n { consume_type?: AlpcConsumeType, user_id?: string}\n >({\n url: `/v1/credit/consume_credit_rules`,\n initData: {\n brand,\n page: 1,\n page_size: 999,\n country: (ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),\n },\n })\n\n const getRedeemableList = useCallback((props?: { consumeType?: AlpcConsumeType}) => {\n trigger(\n {\n user_id: profile?.user_id,\n ...(props?.consumeType && {consume_type: props.consumeType})\n },\n {\n onSuccess(responseData) {\n console.log('responseData', responseData)\n let list = responseData.data.consume_credit_rules || []\n // let cList = list.filter(i => i.consume_type == 1) || []\n // let pList = list.filter(i => i.consume_type == 2) || []\n // cList = cList.sort((prev, next) => prev.consume_credits - next.consume_credits)\n // pList = pList.sort((prev, next) => prev.consume_credits - next.consume_credits)\n // const resultList = cList.concat(pList)\n setRedeemableList(list)\n },\n }\n )\n }, [profile, trigger, locale])\n\n useEffect(() => {\n if (!isLoadingProfile) {\n getRedeemableList({ consumeType: props?.consumeType })\n }\n }, [getRedeemableList, isLoadingProfile])\n\n return {\n listLoading,\n redeemableList,\n getRedeemableList,\n }\n}\n\nexport default useRedeemableList\n"],
5
- "mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,mBAAAC,MAAuB,iBAChC,OAAS,oBAAAC,MAAyC,WAClD,OAAS,qBAAAC,MAAyB,cAElC,OAAS,sBAAAC,MAA0B,gBAEnC,SAASC,EAAkBC,EAA0C,CACnE,IAAIC,EAAS,GACb,KAAM,CAAE,QAAAC,EAAS,iBAAAC,EAAkB,UAAAC,CAAU,EAAIP,EAAkB,EAC7D,CAAE,OAAQQ,EAAe,MAAOC,CAAc,EAAIR,EAAmB,EACrES,EAAQH,GAAaE,EAEvBD,IAAkB,KACpBJ,EAAS,KAETA,EAASI,EAGX,KAAM,CAACG,EAAgBC,CAAiB,EAAIf,EAAsC,CAAC,CAAC,EAC9E,CAAE,WAAYgB,EAAa,QAAAC,CAAQ,EAAIhB,EAK3C,CACA,IAAK,kCACL,SAAU,CACR,MAAAY,EACA,KAAM,EACN,UAAW,IACX,SAAUX,EAAiB,IAAIK,CAAM,GAAKA,IAAS,YAAY,CACjE,CACF,CAAC,EAEKW,EAAoBpB,EAAaQ,GAA6C,CAClFW,EACE,CACE,QAAST,GAAS,QAClB,GAAIF,GAAO,aAAe,CAAC,aAAcA,EAAM,WAAW,CAC5D,EACA,CACE,UAAUa,EAAc,CACtB,QAAQ,IAAI,eAAgBA,CAAY,EACxC,IAAIC,EAAOD,EAAa,KAAK,sBAAwB,CAAC,EAMtDJ,EAAkBK,CAAI,CACxB,CACF,CACF,CACF,EAAG,CAACZ,EAASS,EAASV,CAAM,CAAC,EAE7B,OAAAR,EAAU,IAAM,CACTU,GACHS,EAAkB,CAAE,YAAaZ,GAAO,WAAY,CAAC,CAEzD,EAAG,CAACY,EAAmBT,CAAgB,CAAC,EAEjC,CACL,YAAAO,EACA,eAAAF,EACA,kBAAAI,CACF,CACF,CAEA,IAAOG,EAAQhB",
4
+ "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\n\nimport { useAlpcMutation } from './useAlpcFetch'\nimport { ALPC_COUNTRY_MAP, AlpcConsumeType } from '../const'\nimport { useCreditsContext } from '../provider'\nimport type { ConsumeCreditRuleResponse } from '../response'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useRedeemableList(props?: { consumeType: AlpcConsumeType }) {\n let locale = '' as string\n const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()\n const { locale: contextLocale, brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n if (contextLocale === 'pl') {\n locale = 'eu'\n } else {\n locale = contextLocale\n }\n\n const [redeemableList, setRedeemableList] = useState<ConsumeCreditRuleResponse[]>([])\n const { isMutating: listLoading, trigger } = useAlpcMutation<\n {\n data: { consume_credit_rules: ConsumeCreditRuleResponse[] }\n },\n { consume_type?: AlpcConsumeType; user_id?: string }\n >({\n url: `/v1/credit/consume_credit_rules`,\n initData: {\n brand,\n page: 1,\n page_size: 999,\n country: (ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),\n },\n })\n\n const getRedeemableList = useCallback(\n (props?: { consumeType?: AlpcConsumeType }) => {\n trigger(\n {\n user_id: profile?.user_id,\n ...(props?.consumeType && { consume_type: props.consumeType }),\n },\n {\n onSuccess(responseData) {\n console.log('responseData', responseData)\n let list = responseData?.data?.consume_credit_rules || []\n setRedeemableList(list)\n },\n }\n )\n },\n [profile, trigger, locale]\n )\n\n useEffect(() => {\n if (!brand || isLoadingProfile) {\n return\n }\n getRedeemableList({ consumeType: props?.consumeType })\n }, [getRedeemableList, isLoadingProfile, brand])\n\n return {\n listLoading,\n redeemableList,\n getRedeemableList,\n }\n}\n\nexport default useRedeemableList\n"],
5
+ "mappings": "AAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QAEjD,OAAS,mBAAAC,MAAuB,iBAChC,OAAS,oBAAAC,MAAyC,WAClD,OAAS,qBAAAC,MAAyB,cAElC,OAAS,sBAAAC,MAA0B,gBAEnC,SAASC,EAAkBC,EAA0C,CACnE,IAAIC,EAAS,GACb,KAAM,CAAE,QAAAC,EAAS,iBAAAC,EAAkB,UAAAC,CAAU,EAAIP,EAAkB,EAC7D,CAAE,OAAQQ,EAAe,MAAOC,CAAc,EAAIR,EAAmB,EACrES,EAAQH,GAAaE,EAEvBD,IAAkB,KACpBJ,EAAS,KAETA,EAASI,EAGX,KAAM,CAACG,EAAgBC,CAAiB,EAAIf,EAAsC,CAAC,CAAC,EAC9E,CAAE,WAAYgB,EAAa,QAAAC,CAAQ,EAAIhB,EAK3C,CACA,IAAK,kCACL,SAAU,CACR,MAAAY,EACA,KAAM,EACN,UAAW,IACX,SAAUX,EAAiB,IAAIK,CAAM,GAAKA,IAAS,YAAY,CACjE,CACF,CAAC,EAEKW,EAAoBpB,EACvBQ,GAA8C,CAC7CW,EACE,CACE,QAAST,GAAS,QAClB,GAAIF,GAAO,aAAe,CAAE,aAAcA,EAAM,WAAY,CAC9D,EACA,CACE,UAAUa,EAAc,CACtB,QAAQ,IAAI,eAAgBA,CAAY,EACxC,IAAIC,EAAOD,GAAc,MAAM,sBAAwB,CAAC,EACxDJ,EAAkBK,CAAI,CACxB,CACF,CACF,CACF,EACA,CAACZ,EAASS,EAASV,CAAM,CAC3B,EAEA,OAAAR,EAAU,IAAM,CACV,CAACc,GAASJ,GAGdS,EAAkB,CAAE,YAAaZ,GAAO,WAAY,CAAC,CACvD,EAAG,CAACY,EAAmBT,EAAkBI,CAAK,CAAC,EAExC,CACL,YAAAG,EACA,eAAAF,EACA,kBAAAI,CACF,CACF,CAEA,IAAOG,EAAQhB",
6
6
  "names": ["useCallback", "useEffect", "useState", "useAlpcMutation", "ALPC_COUNTRY_MAP", "useCreditsContext", "useHeadlessContext", "useRedeemableList", "props", "locale", "profile", "isLoadingProfile", "alpcBrand", "contextLocale", "headlessBrand", "brand", "redeemableList", "setRedeemableList", "listLoading", "trigger", "getRedeemableList", "responseData", "list", "useRedeemableList_default"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{useMemo as t}from"react";import{TaskSubType as n}from"../const";import c from"./useActivities";import{useCreditsContext as b}from"../provider";import{useHeadlessContext as p,useSubscriptions as a}from"@anker-in/lib";const C=()=>{const{profile:i}=b(),{brand:o}=p(),u=t(()=>({page:1,pageSize:50}),[]),{activities:r}=c(u),{data:s}=a({email:i?.email});return t(()=>s?.preference?s.preference.some(e=>e.brand===o&&e.subscribe)?!0:r?.some(e=>e.task_sub_type===n.Subscription):!1,[s?.preference,r])};export{C as useSubscribed};
1
+ import{useMemo as i}from"react";import{TaskSubType as c}from"../const";import b from"./useActivities";import{useCreditsContext as a}from"../provider";import{useHeadlessContext as p,useSubscriptions as m}from"@anker-in/lib";const C=()=>{const{profile:o}=a(),{brand:n}=p(),u=i(()=>({page:1,pageSize:50}),[]),{activities:r}=b(u),{data:t}=m({email:o?.email}),s=t?.data||t;return i(()=>s?.preference?s.preference.some(e=>e.brand===n&&e.subscribe)?!0:r?.some(e=>e.task_sub_type===c.Subscription):!1,[s?.preference,r])};export{C as useSubscribed};
2
2
  //# sourceMappingURL=useSubscribed.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/credits/context/hooks/useSubscribed.ts"],
4
- "sourcesContent": ["import { useMemo } from 'react'\n\nimport { TaskSubType } from '../const'\nimport useActivities from './useActivities'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext, useSubscriptions } from '@anker-in/lib'\n\nexport const useSubscribed = () => {\n const { profile } = useCreditsContext()\n const { brand } = useHeadlessContext()\n\n const activitiesOptions = useMemo(() => ({ page: 1, pageSize: 50 }), [])\n\n const { activities } = useActivities(activitiesOptions)\n const { data: subscription } = useSubscriptions({ email: profile?.email })\n\n const isSubscribed = useMemo(() => {\n if (!subscription?.preference) {\n return false\n }\n\n const subscribeResult = subscription.preference.some(item => {\n return item.brand === brand && item.subscribe\n })\n\n if (subscribeResult) {\n return true\n }\n\n return activities?.some(item => {\n return item.task_sub_type === TaskSubType.Subscription\n })\n }, [subscription?.preference, activities])\n\n return isSubscribed\n}\n"],
5
- "mappings": "AAAA,OAAS,WAAAA,MAAe,QAExB,OAAS,eAAAC,MAAmB,WAC5B,OAAOC,MAAmB,kBAC1B,OAAS,qBAAAC,MAAyB,cAClC,OAAS,sBAAAC,EAAoB,oBAAAC,MAAwB,gBAE9C,MAAMC,EAAgB,IAAM,CACjC,KAAM,CAAE,QAAAC,CAAQ,EAAIJ,EAAkB,EAChC,CAAE,MAAAK,CAAM,EAAIJ,EAAmB,EAE/BK,EAAoBT,EAAQ,KAAO,CAAE,KAAM,EAAG,SAAU,EAAG,GAAI,CAAC,CAAC,EAEjE,CAAE,WAAAU,CAAW,EAAIR,EAAcO,CAAiB,EAChD,CAAE,KAAME,CAAa,EAAIN,EAAiB,CAAE,MAAOE,GAAS,KAAM,CAAC,EAoBzE,OAlBqBP,EAAQ,IACtBW,GAAc,WAIKA,EAAa,WAAW,KAAKC,GAC5CA,EAAK,QAAUJ,GAASI,EAAK,SACrC,EAGQ,GAGFF,GAAY,KAAKE,GACfA,EAAK,gBAAkBX,EAAY,YAC3C,EAbQ,GAcR,CAACU,GAAc,WAAYD,CAAU,CAAC,CAG3C",
6
- "names": ["useMemo", "TaskSubType", "useActivities", "useCreditsContext", "useHeadlessContext", "useSubscriptions", "useSubscribed", "profile", "brand", "activitiesOptions", "activities", "subscription", "item"]
4
+ "sourcesContent": ["import { useMemo } from 'react'\n\nimport { TaskSubType } from '../const'\nimport useActivities from './useActivities'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext, useSubscriptions } from '@anker-in/lib'\n\nexport const useSubscribed = () => {\n const { profile } = useCreditsContext()\n const { brand } = useHeadlessContext()\n\n const activitiesOptions = useMemo(() => ({ page: 1, pageSize: 50 }), [])\n\n const { activities } = useActivities(activitiesOptions)\n const { data: subscription } = useSubscriptions({ email: profile?.email })\n const subscriptionData = subscription?.data || subscription\n\n const isSubscribed = useMemo(() => {\n if (!subscriptionData?.preference) {\n return false\n }\n\n const subscribeResult = subscriptionData.preference.some((item: any) => {\n return item.brand === brand && item.subscribe\n })\n\n if (subscribeResult) {\n return true\n }\n\n return activities?.some(item => {\n return item.task_sub_type === TaskSubType.Subscription\n })\n }, [subscriptionData?.preference, activities])\n\n return isSubscribed\n}\n"],
5
+ "mappings": "AAAA,OAAS,WAAAA,MAAe,QAExB,OAAS,eAAAC,MAAmB,WAC5B,OAAOC,MAAmB,kBAC1B,OAAS,qBAAAC,MAAyB,cAClC,OAAS,sBAAAC,EAAoB,oBAAAC,MAAwB,gBAE9C,MAAMC,EAAgB,IAAM,CACjC,KAAM,CAAE,QAAAC,CAAQ,EAAIJ,EAAkB,EAChC,CAAE,MAAAK,CAAM,EAAIJ,EAAmB,EAE/BK,EAAoBT,EAAQ,KAAO,CAAE,KAAM,EAAG,SAAU,EAAG,GAAI,CAAC,CAAC,EAEjE,CAAE,WAAAU,CAAW,EAAIR,EAAcO,CAAiB,EAChD,CAAE,KAAME,CAAa,EAAIN,EAAiB,CAAE,MAAOE,GAAS,KAAM,CAAC,EACnEK,EAAmBD,GAAc,MAAQA,EAoB/C,OAlBqBX,EAAQ,IACtBY,GAAkB,WAICA,EAAiB,WAAW,KAAMC,GACjDA,EAAK,QAAUL,GAASK,EAAK,SACrC,EAGQ,GAGFH,GAAY,KAAKG,GACfA,EAAK,gBAAkBZ,EAAY,YAC3C,EAbQ,GAcR,CAACW,GAAkB,WAAYF,CAAU,CAAC,CAG/C",
6
+ "names": ["useMemo", "TaskSubType", "useActivities", "useCreditsContext", "useHeadlessContext", "useSubscriptions", "useSubscribed", "profile", "brand", "activitiesOptions", "activities", "subscription", "subscriptionData", "item"]
7
7
  }
@@ -1,11 +1,3 @@
1
- export declare const uploadReceipt: (_: any, { arg: { orderName } }: {
2
- arg: {
3
- orderName: string;
4
- };
5
- }) => Promise<{
6
- ok: boolean;
7
- code: number;
8
- }>;
9
1
  export declare const useUploadReceipt: () => import("swr/mutation").SWRMutationResponse<{
10
2
  ok: boolean;
11
3
  code: number;
@@ -1,2 +1,2 @@
1
- import r from"swr/mutation";const a=async(d,{arg:{orderName:t}})=>{const o=await fetch("/api/multipass/mktsrv/v1/credit/upload_third_party_order",{credentials:"include",method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({order_name:t})}),{data:e}=await o.json();return{ok:e?.code===0,code:e?.code}},n=()=>r("/api/multipass/mktsrv/v1/credit/upload_third_party_order",a);export{a as uploadReceipt,n as useUploadReceipt};
1
+ import o from"swr/mutation";import{useHeadlessContext as d}from"@anker-in/lib";const n=t=>t&&(t.data&&typeof t.data=="object"&&!Array.isArray(t.data)?t.data:t),p=()=>{const{locale:t}=d();return o("/api/multipass/mktsrv/v1/credit/upload_third_party_order",async(c,{arg:{orderName:r}})=>{const a=await(await fetch("/api/multipass/mktsrv/v1/credit/upload_third_party_order",{credentials:"include",method:"POST",headers:{"Content-Type":"application/json","current-language":t},body:JSON.stringify({order_name:r})})).json(),e=n(a);return{ok:e?.data?.code===0,code:e?.data?.code??-1}})};export{p as useUploadReceipt};
2
2
  //# sourceMappingURL=useUploadReceipt.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/credits/context/hooks/useUploadReceipt.tsx"],
4
- "sourcesContent": ["import useSWRMutation from 'swr/mutation'\n\nexport const uploadReceipt = async (\n _: any,\n { arg: { orderName } }: { arg: { orderName: string } }\n): Promise<{\n ok: boolean\n code: number\n}> => {\n const response = await fetch(`/api/multipass/mktsrv/v1/credit/upload_third_party_order`, {\n credentials: 'include',\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n order_name: orderName,\n }),\n })\n const { data } = await response.json()\n return {\n ok: data?.code === 0,\n code: data?.code,\n }\n}\n\nexport const useUploadReceipt = () => {\n return useSWRMutation('/api/multipass/mktsrv/v1/credit/upload_third_party_order', uploadReceipt)\n}\n"],
5
- "mappings": "AAAA,OAAOA,MAAoB,eAEpB,MAAMC,EAAgB,MAC3BC,EACA,CAAE,IAAK,CAAE,UAAAC,CAAU,CAAE,IAIjB,CACJ,MAAMC,EAAW,MAAM,MAAM,2DAA4D,CACvF,YAAa,UACb,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,WAAYD,CACd,CAAC,CACH,CAAC,EACK,CAAE,KAAAE,CAAK,EAAI,MAAMD,EAAS,KAAK,EACrC,MAAO,CACL,GAAIC,GAAM,OAAS,EACnB,KAAMA,GAAM,IACd,CACF,EAEaC,EAAmB,IACvBN,EAAe,2DAA4DC,CAAa",
6
- "names": ["useSWRMutation", "uploadReceipt", "_", "orderName", "response", "data", "useUploadReceipt"]
4
+ "sourcesContent": ["import useSWRMutation from 'swr/mutation'\nimport { useHeadlessContext } from '@anker-in/lib'\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\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\nexport const useUploadReceipt = () => {\n const { locale } = useHeadlessContext()\n\n const uploadReceipt = async (\n _: any,\n { arg: { orderName } }: { arg: { orderName: string } }\n ): Promise<{\n ok: boolean\n code: number\n }> => {\n const response = await fetch(`/api/multipass/mktsrv/v1/credit/upload_third_party_order`, {\n credentials: 'include',\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'current-language': locale,\n },\n body: JSON.stringify({\n order_name: orderName,\n }),\n })\n const result = await response.json()\n const normalizedData = normalizeResponseData(result)\n return {\n ok: normalizedData?.data?.code === 0,\n code: normalizedData?.data?.code ?? -1,\n }\n }\n\n return useSWRMutation('/api/multipass/mktsrv/v1/credit/upload_third_party_order', uploadReceipt)\n}\n"],
5
+ "mappings": "AAAA,OAAOA,MAAoB,eAC3B,OAAS,sBAAAC,MAA0B,gBAMnC,MAAMC,EAAyBC,GACxBA,IAGDA,EAAa,MAAQ,OAAOA,EAAa,MAAS,UAAY,CAAC,MAAM,QAAQA,EAAa,IAAI,EACzFA,EAAa,KAIfA,GAGIC,EAAmB,IAAM,CACpC,KAAM,CAAE,OAAAC,CAAO,EAAIJ,EAAmB,EA4BtC,OAAOD,EAAe,2DA1BA,MACpBM,EACA,CAAE,IAAK,CAAE,UAAAC,CAAU,CAAE,IAIjB,CAYJ,MAAMC,EAAS,MAXE,MAAM,MAAM,2DAA4D,CACvF,YAAa,UACb,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,mBAAoBH,CACtB,EACA,KAAM,KAAK,UAAU,CACnB,WAAYE,CACd,CAAC,CACH,CAAC,GAC6B,KAAK,EAC7BE,EAAiBP,EAAsBM,CAAM,EACnD,MAAO,CACL,GAAIC,GAAgB,MAAM,OAAS,EACnC,KAAMA,GAAgB,MAAM,MAAQ,EACtC,CACF,CAE+F,CACjG",
6
+ "names": ["useSWRMutation", "useHeadlessContext", "normalizeResponseData", "responseData", "useUploadReceipt", "locale", "_", "orderName", "result", "normalizedData"]
7
7
  }
@@ -39,8 +39,9 @@ type Context = {
39
39
  setOpenMyRewardsModal: (open: boolean) => void;
40
40
  openActivitiesModal: boolean;
41
41
  setOpenActivitiesModal: (open: boolean) => void;
42
+ apiBaseUrl?: string;
42
43
  };
43
44
  export declare const CreditsContext: import("react").Context<Context>;
44
- export declare function CreditsProvider({ children, profile, removeProfile, isLoadingProfile, openSignInPopup, openSignUpPopup, taskIdToTypeMapping, creditInfo, customer, customerLoading, fetchCreditInfo, gtm, pageCommon, memberPriceDiscount, alpcBrand, cartConfig, }: PropsWithChildren<Omit<Context, 'openMyRewardsModal' | 'setOpenMyRewardsModal' | 'openActivitiesModal' | 'setOpenActivitiesModal'>>): import("react/jsx-runtime").JSX.Element;
45
+ export declare function CreditsProvider({ children, profile, removeProfile, isLoadingProfile, openSignInPopup, openSignUpPopup, taskIdToTypeMapping, creditInfo, customer, customerLoading, fetchCreditInfo, gtm, pageCommon, memberPriceDiscount, alpcBrand, cartConfig, apiBaseUrl, }: PropsWithChildren<Omit<Context, 'openMyRewardsModal' | 'setOpenMyRewardsModal' | 'openActivitiesModal' | 'setOpenActivitiesModal'>>): import("react/jsx-runtime").JSX.Element;
45
46
  export declare function useCreditsContext(): Context;
46
47
  export {};
@@ -1,2 +1,2 @@
1
- import{jsx as R}from"react/jsx-runtime";import{createContext as A,useContext as x,useState as o}from"react";const t=A({profile:null,isLoadingProfile:!1,taskIdToTypeMapping:{},removeProfile:()=>{},openSignInPopup:()=>{},openSignUpPopup:()=>{},creditInfo:void 0,customerLoading:!1,fetchCreditInfo:e=>{},gtm:{pageGroup:"",pageHandle:""},pageCommon:{},memberPriceDiscount:void 0,alpcBrand:void 0,cartConfig:void 0,openMyRewardsModal:!1,setOpenMyRewardsModal:()=>{},openActivitiesModal:!1,setOpenActivitiesModal:()=>{}});function _({children:e,profile:n,removeProfile:i,isLoadingProfile:r,openSignInPopup:s,openSignUpPopup:a,taskIdToTypeMapping:d,creditInfo:p,customer:l,customerLoading:c,fetchCreditInfo:f,gtm:u,pageCommon:g,memberPriceDiscount:m,alpcBrand:C,cartConfig:M}){const[v,P]=o(!1),[y,b]=o(!1);return R(t.Provider,{value:{profile:n,isLoadingProfile:r,removeProfile:i,openSignInPopup:s,openSignUpPopup:a,taskIdToTypeMapping:d,creditInfo:p,fetchCreditInfo:f,customer:l,customerLoading:c,gtm:u,pageCommon:g,memberPriceDiscount:m,alpcBrand:C,cartConfig:M,openMyRewardsModal:v,setOpenMyRewardsModal:P,openActivitiesModal:y,setOpenActivitiesModal:b},children:e})}function L(){const e=x(t);if(!e)throw new Error("useCreditsContext must be used within a CreditsProvider");return e}export{t as CreditsContext,_ as CreditsProvider,L as useCreditsContext};
1
+ import{jsx as w}from"react/jsx-runtime";import{createContext as x,useContext as R,useState as o}from"react";const t=x({profile:null,isLoadingProfile:!1,taskIdToTypeMapping:{},removeProfile:()=>{},openSignInPopup:()=>{},openSignUpPopup:()=>{},creditInfo:void 0,customerLoading:!1,fetchCreditInfo:e=>{},gtm:{pageGroup:"",pageHandle:""},pageCommon:{},memberPriceDiscount:void 0,alpcBrand:void 0,cartConfig:void 0,openMyRewardsModal:!1,setOpenMyRewardsModal:()=>{},openActivitiesModal:!1,setOpenActivitiesModal:()=>{},apiBaseUrl:void 0});function L({children:e,profile:n,removeProfile:i,isLoadingProfile:r,openSignInPopup:s,openSignUpPopup:a,taskIdToTypeMapping:d,creditInfo:p,customer:l,customerLoading:c,fetchCreditInfo:f,gtm:u,pageCommon:g,memberPriceDiscount:m,alpcBrand:C,cartConfig:M,apiBaseUrl:v}){const[P,y]=o(!1),[b,A]=o(!1);return w(t.Provider,{value:{profile:n,isLoadingProfile:r,removeProfile:i,openSignInPopup:s,openSignUpPopup:a,taskIdToTypeMapping:d,creditInfo:p,fetchCreditInfo:f,customer:l,customerLoading:c,gtm:u,pageCommon:g,memberPriceDiscount:m,alpcBrand:C,cartConfig:M,apiBaseUrl:v,openMyRewardsModal:P,setOpenMyRewardsModal:y,openActivitiesModal:b,setOpenActivitiesModal:A},children:e})}function B(){const e=R(t);if(!e)throw new Error("useCreditsContext must be used within a CreditsProvider");return e}export{t as CreditsContext,L as CreditsProvider,B as useCreditsContext};
2
2
  //# sourceMappingURL=provider.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/credits/context/provider.tsx"],
4
- "sourcesContent": ["import { createContext, PropsWithChildren, useContext, useState } from 'react'\nimport type { DTC_TASK_TYPE } from './const'\nimport type { CreditInfoResponse } from './response'\nimport { CreditsPageCommon } from '../type'\nimport { FunctionMemberPriceConfig } from './memberPriceTypes'\n\ntype Context = {\n profile: any\n isLoadingProfile: boolean\n removeProfile: () => void\n taskIdToTypeMapping: Record<string, DTC_TASK_TYPE>\n openSignInPopup: () => void\n openSignUpPopup: () => void\n creditInfo?: CreditInfoResponse\n customer?: any\n customerLoading: boolean\n fetchCreditInfo: (user_id: string) => void\n gtm: {\n pageGroup: string\n pageHandle?: string\n }\n pageCommon: CreditsPageCommon\n memberPriceDiscount?: FunctionMemberPriceConfig[]\n alpcBrand?: string\n cartConfig?: {\n addToCart: (params: {\n variantList: Array<{\n variant: any\n quantity: number\n attributes?: Array<{ key: string; value: string }>\n }>\n cartAttributes?: Record<string, string>\n discountCodes?: string[]\n }) => void | Promise<any>\n }\n openMyRewardsModal: boolean\n setOpenMyRewardsModal: (open: boolean) => void\n openActivitiesModal: boolean\n setOpenActivitiesModal: (open: boolean) => void\n}\n\nexport const CreditsContext = createContext<Context>({\n profile: null,\n isLoadingProfile: false,\n taskIdToTypeMapping: {},\n removeProfile: () => {},\n openSignInPopup: () => {},\n openSignUpPopup: () => {},\n creditInfo: undefined,\n customerLoading: false,\n fetchCreditInfo: (user_id: string) => {},\n gtm: {\n pageGroup: '',\n pageHandle: '',\n },\n pageCommon: {},\n memberPriceDiscount: undefined,\n alpcBrand: undefined,\n cartConfig: undefined,\n openMyRewardsModal: false,\n setOpenMyRewardsModal: () => {},\n openActivitiesModal: false,\n setOpenActivitiesModal: () => {},\n})\n\nexport function CreditsProvider({\n children,\n profile,\n removeProfile,\n isLoadingProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n customer,\n customerLoading,\n fetchCreditInfo,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n cartConfig,\n}: PropsWithChildren<Omit<Context, 'openMyRewardsModal' | 'setOpenMyRewardsModal' | 'openActivitiesModal' | 'setOpenActivitiesModal'>>) {\n const [openMyRewardsModal, setOpenMyRewardsModal] = useState(false)\n const [openActivitiesModal, setOpenActivitiesModal] = useState(false)\n\n return (\n <CreditsContext.Provider\n value={{\n profile,\n isLoadingProfile,\n removeProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n fetchCreditInfo,\n customer,\n customerLoading,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n cartConfig,\n openMyRewardsModal,\n setOpenMyRewardsModal,\n openActivitiesModal,\n setOpenActivitiesModal,\n }}\n >\n {children}\n </CreditsContext.Provider>\n )\n}\n\nexport function useCreditsContext() {\n const context = useContext(CreditsContext)\n if (!context) {\n throw new Error('useCreditsContext must be used within a CreditsProvider')\n }\n return context\n}\n"],
5
- "mappings": "AAuFI,cAAAA,MAAA,oBAvFJ,OAAS,iBAAAC,EAAkC,cAAAC,EAAY,YAAAC,MAAgB,QAyChE,MAAMC,EAAiBH,EAAuB,CACnD,QAAS,KACT,iBAAkB,GAClB,oBAAqB,CAAC,EACtB,cAAe,IAAM,CAAC,EACtB,gBAAiB,IAAM,CAAC,EACxB,gBAAiB,IAAM,CAAC,EACxB,WAAY,OACZ,gBAAiB,GACjB,gBAAkBI,GAAoB,CAAC,EACvC,IAAK,CACH,UAAW,GACX,WAAY,EACd,EACA,WAAY,CAAC,EACb,oBAAqB,OACrB,UAAW,OACX,WAAY,OACZ,mBAAoB,GACpB,sBAAuB,IAAM,CAAC,EAC9B,oBAAqB,GACrB,uBAAwB,IAAM,CAAC,CACjC,CAAC,EAEM,SAASC,EAAgB,CAC9B,SAAAC,EACA,QAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,oBAAAC,EACA,WAAAC,EACA,SAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,IAAAC,EACA,WAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,WAAAC,CACF,EAAwI,CACtI,KAAM,CAACC,EAAoBC,CAAqB,EAAIrB,EAAS,EAAK,EAC5D,CAACsB,EAAqBC,CAAsB,EAAIvB,EAAS,EAAK,EAEpE,OACEH,EAACI,EAAe,SAAf,CACC,MAAO,CACL,QAAAI,EACA,iBAAAE,EACA,cAAAD,EACA,gBAAAE,EACA,gBAAAC,EACA,oBAAAC,EACA,WAAAC,EACA,gBAAAG,EACA,SAAAF,EACA,gBAAAC,EACA,IAAAE,EACA,WAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,sBAAAC,EACA,oBAAAC,EACA,uBAAAC,CACF,EAEC,SAAAnB,EACH,CAEJ,CAEO,SAASoB,GAAoB,CAClC,MAAMC,EAAU1B,EAAWE,CAAc,EACzC,GAAI,CAACwB,EACH,MAAM,IAAI,MAAM,yDAAyD,EAE3E,OAAOA,CACT",
6
- "names": ["jsx", "createContext", "useContext", "useState", "CreditsContext", "user_id", "CreditsProvider", "children", "profile", "removeProfile", "isLoadingProfile", "openSignInPopup", "openSignUpPopup", "taskIdToTypeMapping", "creditInfo", "customer", "customerLoading", "fetchCreditInfo", "gtm", "pageCommon", "memberPriceDiscount", "alpcBrand", "cartConfig", "openMyRewardsModal", "setOpenMyRewardsModal", "openActivitiesModal", "setOpenActivitiesModal", "useCreditsContext", "context"]
4
+ "sourcesContent": ["import { createContext, PropsWithChildren, useContext, useState } from 'react'\nimport type { DTC_TASK_TYPE } from './const'\nimport type { CreditInfoResponse } from './response'\nimport { CreditsPageCommon } from '../type'\nimport { FunctionMemberPriceConfig } from './memberPriceTypes'\n\ntype Context = {\n profile: any\n isLoadingProfile: boolean\n removeProfile: () => void\n taskIdToTypeMapping: Record<string, DTC_TASK_TYPE>\n openSignInPopup: () => void\n openSignUpPopup: () => void\n creditInfo?: CreditInfoResponse\n customer?: any\n customerLoading: boolean\n fetchCreditInfo: (user_id: string) => void\n gtm: {\n pageGroup: string\n pageHandle?: string\n }\n pageCommon: CreditsPageCommon\n memberPriceDiscount?: FunctionMemberPriceConfig[]\n alpcBrand?: string\n cartConfig?: {\n addToCart: (params: {\n variantList: Array<{\n variant: any\n quantity: number\n attributes?: Array<{ key: string; value: string }>\n }>\n cartAttributes?: Record<string, string>\n discountCodes?: string[]\n }) => void | Promise<any>\n }\n openMyRewardsModal: boolean\n setOpenMyRewardsModal: (open: boolean) => void\n openActivitiesModal: boolean\n setOpenActivitiesModal: (open: boolean) => void\n apiBaseUrl?: string\n}\n\nexport const CreditsContext = createContext<Context>({\n profile: null,\n isLoadingProfile: false,\n taskIdToTypeMapping: {},\n removeProfile: () => {},\n openSignInPopup: () => {},\n openSignUpPopup: () => {},\n creditInfo: undefined,\n customerLoading: false,\n fetchCreditInfo: (user_id: string) => {},\n gtm: {\n pageGroup: '',\n pageHandle: '',\n },\n pageCommon: {},\n memberPriceDiscount: undefined,\n alpcBrand: undefined,\n cartConfig: undefined,\n openMyRewardsModal: false,\n setOpenMyRewardsModal: () => {},\n openActivitiesModal: false,\n setOpenActivitiesModal: () => {},\n apiBaseUrl: undefined,\n})\n\nexport function CreditsProvider({\n children,\n profile,\n removeProfile,\n isLoadingProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n customer,\n customerLoading,\n fetchCreditInfo,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n cartConfig,\n apiBaseUrl,\n}: PropsWithChildren<Omit<Context, 'openMyRewardsModal' | 'setOpenMyRewardsModal' | 'openActivitiesModal' | 'setOpenActivitiesModal'>>) {\n const [openMyRewardsModal, setOpenMyRewardsModal] = useState(false)\n const [openActivitiesModal, setOpenActivitiesModal] = useState(false)\n\n return (\n <CreditsContext.Provider\n value={{\n profile,\n isLoadingProfile,\n removeProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n fetchCreditInfo,\n customer,\n customerLoading,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n cartConfig,\n apiBaseUrl,\n openMyRewardsModal,\n setOpenMyRewardsModal,\n openActivitiesModal,\n setOpenActivitiesModal,\n }}\n >\n {children}\n </CreditsContext.Provider>\n )\n}\n\nexport function useCreditsContext() {\n const context = useContext(CreditsContext)\n if (!context) {\n throw new Error('useCreditsContext must be used within a CreditsProvider')\n }\n return context\n}\n"],
5
+ "mappings": "AA0FI,cAAAA,MAAA,oBA1FJ,OAAS,iBAAAC,EAAkC,cAAAC,EAAY,YAAAC,MAAgB,QA0ChE,MAAMC,EAAiBH,EAAuB,CACnD,QAAS,KACT,iBAAkB,GAClB,oBAAqB,CAAC,EACtB,cAAe,IAAM,CAAC,EACtB,gBAAiB,IAAM,CAAC,EACxB,gBAAiB,IAAM,CAAC,EACxB,WAAY,OACZ,gBAAiB,GACjB,gBAAkBI,GAAoB,CAAC,EACvC,IAAK,CACH,UAAW,GACX,WAAY,EACd,EACA,WAAY,CAAC,EACb,oBAAqB,OACrB,UAAW,OACX,WAAY,OACZ,mBAAoB,GACpB,sBAAuB,IAAM,CAAC,EAC9B,oBAAqB,GACrB,uBAAwB,IAAM,CAAC,EAC/B,WAAY,MACd,CAAC,EAEM,SAASC,EAAgB,CAC9B,SAAAC,EACA,QAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,oBAAAC,EACA,WAAAC,EACA,SAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,IAAAC,EACA,WAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,WAAAC,EACA,WAAAC,CACF,EAAwI,CACtI,KAAM,CAACC,EAAoBC,CAAqB,EAAItB,EAAS,EAAK,EAC5D,CAACuB,EAAqBC,CAAsB,EAAIxB,EAAS,EAAK,EAEpE,OACEH,EAACI,EAAe,SAAf,CACC,MAAO,CACL,QAAAI,EACA,iBAAAE,EACA,cAAAD,EACA,gBAAAE,EACA,gBAAAC,EACA,oBAAAC,EACA,WAAAC,EACA,gBAAAG,EACA,SAAAF,EACA,gBAAAC,EACA,IAAAE,EACA,WAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,WAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,sBAAAC,EACA,oBAAAC,EACA,uBAAAC,CACF,EAEC,SAAApB,EACH,CAEJ,CAEO,SAASqB,GAAoB,CAClC,MAAMC,EAAU3B,EAAWE,CAAc,EACzC,GAAI,CAACyB,EACH,MAAM,IAAI,MAAM,yDAAyD,EAE3E,OAAOA,CACT",
6
+ "names": ["jsx", "createContext", "useContext", "useState", "CreditsContext", "user_id", "CreditsProvider", "children", "profile", "removeProfile", "isLoadingProfile", "openSignInPopup", "openSignUpPopup", "taskIdToTypeMapping", "creditInfo", "customer", "customerLoading", "fetchCreditInfo", "gtm", "pageCommon", "memberPriceDiscount", "alpcBrand", "cartConfig", "apiBaseUrl", "openMyRewardsModal", "setOpenMyRewardsModal", "openActivitiesModal", "setOpenActivitiesModal", "useCreditsContext", "context"]
7
7
  }