@anker-in/lib 1.1.0 → 1.1.2-beta.1

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 (371) hide show
  1. package/.turbo/turbo-build.log +10 -6
  2. package/.turbo/turbo-test.log +1 -1
  3. package/dist/cart/context/index.d.ts +47 -0
  4. package/dist/cart/context/index.d.ts.map +1 -0
  5. package/dist/cart/hooks/basic/useAddToCart.d.ts +30 -0
  6. package/dist/cart/hooks/basic/useAddToCart.d.ts.map +1 -0
  7. package/dist/cart/hooks/basic/useApplyCartCodes.d.ts +11 -0
  8. package/dist/cart/hooks/basic/useApplyCartCodes.d.ts.map +1 -0
  9. package/dist/cart/hooks/basic/useCreateCart.d.ts +7 -0
  10. package/dist/cart/hooks/basic/useCreateCart.d.ts.map +1 -0
  11. package/dist/cart/hooks/basic/useRemoveCartCodes.d.ts +11 -0
  12. package/dist/cart/hooks/basic/useRemoveCartCodes.d.ts.map +1 -0
  13. package/dist/cart/hooks/basic/useRemoveCartLines.d.ts +11 -0
  14. package/dist/cart/hooks/basic/useRemoveCartLines.d.ts.map +1 -0
  15. package/dist/cart/hooks/basic/useUpdateCartAttributes.d.ts +8 -0
  16. package/dist/cart/hooks/basic/useUpdateCartAttributes.d.ts.map +1 -0
  17. package/dist/cart/hooks/basic/useUpdateCartBuyerIdentity.d.ts +8 -0
  18. package/dist/cart/hooks/basic/useUpdateCartBuyerIdentity.d.ts.map +1 -0
  19. package/dist/cart/hooks/basic/useUpdateCartLines.d.ts +8 -0
  20. package/dist/cart/hooks/basic/useUpdateCartLines.d.ts.map +1 -0
  21. package/dist/cart/hooks/feature/useCalcAutoFreeGift.d.ts +10 -0
  22. package/dist/cart/hooks/feature/useCalcAutoFreeGift.d.ts.map +1 -0
  23. package/dist/cart/hooks/feature/useCalcOrderDiscount.d.ts +21 -0
  24. package/dist/cart/hooks/feature/useCalcOrderDiscount.d.ts.map +1 -0
  25. package/dist/cart/hooks/feature/useCartAttributes.d.ts +10 -0
  26. package/dist/cart/hooks/feature/useCartAttributes.d.ts.map +1 -0
  27. package/dist/cart/hooks/feature/useCartItemQuantityLimit.d.ts +19 -0
  28. package/dist/cart/hooks/feature/useCartItemQuantityLimit.d.ts.map +1 -0
  29. package/dist/cart/hooks/feature/useScriptAutoFreeGift.d.ts +37 -0
  30. package/dist/cart/hooks/feature/useScriptAutoFreeGift.d.ts.map +1 -0
  31. package/dist/cart/hooks/feature/useUpdateLineCodeAmountAttributes.d.ts +9 -0
  32. package/dist/cart/hooks/feature/useUpdateLineCodeAmountAttributes.d.ts.map +1 -0
  33. package/dist/cart/track/gtm.d.ts +26 -0
  34. package/dist/cart/track/gtm.d.ts.map +1 -0
  35. package/dist/cart/types/autoFreeGift.d.ts +135 -0
  36. package/dist/cart/types/autoFreeGift.d.ts.map +1 -0
  37. package/dist/cart/types/orderDiscount.d.ts +35 -0
  38. package/dist/cart/types/orderDiscount.d.ts.map +1 -0
  39. package/dist/cart/types/priceDiscount.d.ts +20 -0
  40. package/dist/cart/types/priceDiscount.d.ts.map +1 -0
  41. package/dist/cart/utils/autoFreeGift.d.ts +21 -0
  42. package/dist/cart/utils/autoFreeGift.d.ts.map +1 -0
  43. package/dist/cjs/cart/context/index.d.ts +47 -0
  44. package/dist/cjs/cart/context/index.d.ts.map +1 -0
  45. package/dist/cjs/cart/context/index.js +2 -0
  46. package/dist/cjs/cart/context/index.js.map +7 -0
  47. package/dist/cjs/cart/hooks/basic/useAddToCart.d.ts +30 -0
  48. package/dist/cjs/cart/hooks/basic/useAddToCart.d.ts.map +1 -0
  49. package/dist/cjs/cart/hooks/basic/useAddToCart.js +2 -0
  50. package/dist/cjs/cart/hooks/basic/useAddToCart.js.map +7 -0
  51. package/dist/cjs/cart/hooks/basic/useApplyCartCodes.d.ts +11 -0
  52. package/dist/cjs/cart/hooks/basic/useApplyCartCodes.d.ts.map +1 -0
  53. package/dist/cjs/cart/hooks/basic/useApplyCartCodes.js +2 -0
  54. package/dist/cjs/cart/hooks/basic/useApplyCartCodes.js.map +7 -0
  55. package/dist/cjs/cart/hooks/basic/useBuyNow.d.ts +1 -1
  56. package/dist/cjs/cart/hooks/basic/useBuyNow.d.ts.map +1 -1
  57. package/dist/cjs/cart/hooks/basic/useBuyNow.js +1 -1
  58. package/dist/cjs/cart/hooks/basic/useBuyNow.js.map +3 -3
  59. package/dist/cjs/cart/hooks/basic/useCreateCart.d.ts +7 -0
  60. package/dist/cjs/cart/hooks/basic/useCreateCart.d.ts.map +1 -0
  61. package/dist/cjs/cart/hooks/basic/useCreateCart.js +2 -0
  62. package/dist/cjs/cart/hooks/basic/useCreateCart.js.map +7 -0
  63. package/dist/cjs/cart/hooks/basic/useRemoveCartCodes.d.ts +11 -0
  64. package/dist/cjs/cart/hooks/basic/useRemoveCartCodes.d.ts.map +1 -0
  65. package/dist/cjs/cart/hooks/basic/useRemoveCartCodes.js +2 -0
  66. package/dist/cjs/cart/hooks/basic/useRemoveCartCodes.js.map +7 -0
  67. package/dist/cjs/cart/hooks/basic/useRemoveCartLines.d.ts +11 -0
  68. package/dist/cjs/cart/hooks/basic/useRemoveCartLines.d.ts.map +1 -0
  69. package/dist/cjs/cart/hooks/basic/useRemoveCartLines.js +2 -0
  70. package/dist/cjs/cart/hooks/basic/useRemoveCartLines.js.map +7 -0
  71. package/dist/cjs/cart/hooks/basic/useUpdateCartAttributes.d.ts +8 -0
  72. package/dist/cjs/cart/hooks/basic/useUpdateCartAttributes.d.ts.map +1 -0
  73. package/dist/cjs/cart/hooks/basic/useUpdateCartAttributes.js +2 -0
  74. package/dist/cjs/cart/hooks/basic/useUpdateCartAttributes.js.map +7 -0
  75. package/dist/cjs/cart/hooks/basic/useUpdateCartBuyerIdentity.d.ts +8 -0
  76. package/dist/cjs/cart/hooks/basic/useUpdateCartBuyerIdentity.d.ts.map +1 -0
  77. package/dist/cjs/cart/hooks/basic/useUpdateCartBuyerIdentity.js +2 -0
  78. package/dist/cjs/cart/hooks/basic/useUpdateCartBuyerIdentity.js.map +7 -0
  79. package/dist/cjs/cart/hooks/basic/useUpdateCartLines.d.ts +8 -0
  80. package/dist/cjs/cart/hooks/basic/useUpdateCartLines.d.ts.map +1 -0
  81. package/dist/cjs/cart/hooks/basic/useUpdateCartLines.js +2 -0
  82. package/dist/cjs/cart/hooks/basic/useUpdateCartLines.js.map +7 -0
  83. package/dist/cjs/cart/hooks/feature/useCalcAutoFreeGift.d.ts +10 -0
  84. package/dist/cjs/cart/hooks/feature/useCalcAutoFreeGift.d.ts.map +1 -0
  85. package/dist/cjs/cart/hooks/feature/useCalcAutoFreeGift.js +2 -0
  86. package/dist/cjs/cart/hooks/feature/useCalcAutoFreeGift.js.map +7 -0
  87. package/dist/cjs/cart/hooks/feature/useCalcOrderDiscount.d.ts +21 -0
  88. package/dist/cjs/cart/hooks/feature/useCalcOrderDiscount.d.ts.map +1 -0
  89. package/dist/cjs/cart/hooks/feature/useCalcOrderDiscount.js +2 -0
  90. package/dist/cjs/cart/hooks/feature/useCalcOrderDiscount.js.map +7 -0
  91. package/dist/cjs/cart/hooks/feature/useCartAttributes.d.ts +10 -0
  92. package/dist/cjs/cart/hooks/feature/useCartAttributes.d.ts.map +1 -0
  93. package/dist/cjs/cart/hooks/feature/useCartAttributes.js +2 -0
  94. package/dist/cjs/cart/hooks/feature/useCartAttributes.js.map +7 -0
  95. package/dist/cjs/cart/hooks/feature/useCartItemQuantityLimit.d.ts +19 -0
  96. package/dist/cjs/cart/hooks/feature/useCartItemQuantityLimit.d.ts.map +1 -0
  97. package/dist/cjs/cart/hooks/feature/useCartItemQuantityLimit.js +2 -0
  98. package/dist/cjs/cart/hooks/feature/useCartItemQuantityLimit.js.map +7 -0
  99. package/dist/cjs/cart/hooks/feature/useScriptAutoFreeGift.d.ts +37 -0
  100. package/dist/cjs/cart/hooks/feature/useScriptAutoFreeGift.d.ts.map +1 -0
  101. package/dist/cjs/cart/hooks/feature/useScriptAutoFreeGift.js +2 -0
  102. package/dist/cjs/cart/hooks/feature/useScriptAutoFreeGift.js.map +7 -0
  103. package/dist/cjs/cart/hooks/feature/useUpdateLineCodeAmountAttributes.d.ts +9 -0
  104. package/dist/cjs/cart/hooks/feature/useUpdateLineCodeAmountAttributes.d.ts.map +1 -0
  105. package/dist/cjs/cart/hooks/feature/useUpdateLineCodeAmountAttributes.js +2 -0
  106. package/dist/cjs/cart/hooks/feature/useUpdateLineCodeAmountAttributes.js.map +7 -0
  107. package/dist/cjs/cart/track/fbq.d.ts +2 -9
  108. package/dist/cjs/cart/track/fbq.d.ts.map +1 -1
  109. package/dist/cjs/cart/track/fbq.js +1 -1
  110. package/dist/cjs/cart/track/fbq.js.map +3 -3
  111. package/dist/cjs/cart/track/gtm.d.ts +26 -0
  112. package/dist/cjs/cart/track/gtm.d.ts.map +1 -0
  113. package/dist/cjs/cart/track/gtm.js +2 -0
  114. package/dist/cjs/cart/track/gtm.js.map +7 -0
  115. package/dist/cjs/cart/types/autoFreeGift.d.ts +135 -0
  116. package/dist/cjs/cart/types/autoFreeGift.d.ts.map +1 -0
  117. package/dist/cjs/cart/types/autoFreeGift.js +2 -0
  118. package/dist/cjs/cart/types/autoFreeGift.js.map +7 -0
  119. package/dist/cjs/cart/types/index.d.ts +1 -0
  120. package/dist/cjs/cart/types/index.d.ts.map +1 -1
  121. package/dist/cjs/cart/types/index.js +1 -1
  122. package/dist/cjs/cart/types/index.js.map +1 -1
  123. package/dist/cjs/cart/types/orderDiscount.d.ts +35 -0
  124. package/dist/cjs/cart/types/orderDiscount.d.ts.map +1 -0
  125. package/dist/cjs/cart/types/orderDiscount.js +2 -0
  126. package/dist/cjs/cart/types/orderDiscount.js.map +7 -0
  127. package/dist/cjs/cart/types/priceDiscount.d.ts +20 -0
  128. package/dist/cjs/cart/types/priceDiscount.d.ts.map +1 -0
  129. package/dist/cjs/cart/types/priceDiscount.js +2 -0
  130. package/dist/cjs/cart/types/priceDiscount.js.map +7 -0
  131. package/dist/cjs/cart/utils/autoFreeGift.d.ts +21 -0
  132. package/dist/cjs/cart/utils/autoFreeGift.d.ts.map +1 -0
  133. package/dist/cjs/cart/utils/autoFreeGift.js +2 -0
  134. package/dist/cjs/cart/utils/autoFreeGift.js.map +7 -0
  135. package/dist/cjs/cart/utils/index.d.ts +1 -0
  136. package/dist/cjs/cart/utils/index.d.ts.map +1 -1
  137. package/dist/cjs/cart/utils/index.js +1 -1
  138. package/dist/cjs/cart/utils/index.js.map +3 -3
  139. package/dist/cjs/constants.d.ts +2 -0
  140. package/dist/cjs/constants.d.ts.map +1 -0
  141. package/dist/cjs/constants.js +2 -0
  142. package/dist/cjs/constants.js.map +7 -0
  143. package/dist/cjs/context/index.js.map +1 -1
  144. package/dist/cjs/index.d.ts +1 -0
  145. package/dist/cjs/index.d.ts.map +1 -1
  146. package/dist/cjs/index.js +1 -1
  147. package/dist/cjs/index.js.map +2 -2
  148. package/dist/cjs/registration/hooks/index.d.ts +1 -0
  149. package/dist/cjs/registration/hooks/index.d.ts.map +1 -1
  150. package/dist/cjs/registration/hooks/index.js +1 -1
  151. package/dist/cjs/registration/hooks/index.js.map +2 -2
  152. package/dist/cjs/registration/hooks/useEmailValidation.d.ts.map +1 -1
  153. package/dist/cjs/registration/hooks/useEmailValidation.js +1 -1
  154. package/dist/cjs/registration/hooks/useEmailValidation.js.map +3 -3
  155. package/dist/cjs/registration/hooks/useSendEmailValidation.d.ts.map +1 -1
  156. package/dist/cjs/registration/hooks/useSendEmailValidation.js +1 -1
  157. package/dist/cjs/registration/hooks/useSendEmailValidation.js.map +3 -3
  158. package/dist/cjs/registration/hooks/useSubscriptions.d.ts +15 -0
  159. package/dist/cjs/registration/hooks/useSubscriptions.d.ts.map +1 -0
  160. package/dist/cjs/registration/hooks/useSubscriptions.js +2 -0
  161. package/dist/cjs/registration/hooks/useSubscriptions.js.map +7 -0
  162. package/dist/cjs/registration/index.d.ts +0 -1
  163. package/dist/cjs/registration/index.d.ts.map +1 -1
  164. package/dist/cjs/registration/index.js +1 -1
  165. package/dist/cjs/registration/index.js.map +2 -2
  166. package/dist/cjs/shopify/fetchers/index.d.ts +2 -0
  167. package/dist/cjs/shopify/fetchers/index.d.ts.map +1 -1
  168. package/dist/cjs/shopify/fetchers/index.js +1 -1
  169. package/dist/cjs/shopify/fetchers/index.js.map +3 -3
  170. package/dist/esm/cart/context/index.d.ts +47 -0
  171. package/dist/esm/cart/context/index.d.ts.map +1 -0
  172. package/dist/esm/cart/context/index.js +2 -0
  173. package/dist/esm/cart/context/index.js.map +7 -0
  174. package/dist/esm/cart/hooks/basic/useAddToCart.d.ts +30 -0
  175. package/dist/esm/cart/hooks/basic/useAddToCart.d.ts.map +1 -0
  176. package/dist/esm/cart/hooks/basic/useAddToCart.js +2 -0
  177. package/dist/esm/cart/hooks/basic/useAddToCart.js.map +7 -0
  178. package/dist/esm/cart/hooks/basic/useApplyCartCodes.d.ts +11 -0
  179. package/dist/esm/cart/hooks/basic/useApplyCartCodes.d.ts.map +1 -0
  180. package/dist/esm/cart/hooks/basic/useApplyCartCodes.js +2 -0
  181. package/dist/esm/cart/hooks/basic/useApplyCartCodes.js.map +7 -0
  182. package/dist/esm/cart/hooks/basic/useBuyNow.d.ts +1 -1
  183. package/dist/esm/cart/hooks/basic/useBuyNow.d.ts.map +1 -1
  184. package/dist/esm/cart/hooks/basic/useBuyNow.js +1 -1
  185. package/dist/esm/cart/hooks/basic/useBuyNow.js.map +3 -3
  186. package/dist/esm/cart/hooks/basic/useCreateCart.d.ts +7 -0
  187. package/dist/esm/cart/hooks/basic/useCreateCart.d.ts.map +1 -0
  188. package/dist/esm/cart/hooks/basic/useCreateCart.js +2 -0
  189. package/dist/esm/cart/hooks/basic/useCreateCart.js.map +7 -0
  190. package/dist/esm/cart/hooks/basic/useRemoveCartCodes.d.ts +11 -0
  191. package/dist/esm/cart/hooks/basic/useRemoveCartCodes.d.ts.map +1 -0
  192. package/dist/esm/cart/hooks/basic/useRemoveCartCodes.js +2 -0
  193. package/dist/esm/cart/hooks/basic/useRemoveCartCodes.js.map +7 -0
  194. package/dist/esm/cart/hooks/basic/useRemoveCartLines.d.ts +11 -0
  195. package/dist/esm/cart/hooks/basic/useRemoveCartLines.d.ts.map +1 -0
  196. package/dist/esm/cart/hooks/basic/useRemoveCartLines.js +2 -0
  197. package/dist/esm/cart/hooks/basic/useRemoveCartLines.js.map +7 -0
  198. package/dist/esm/cart/hooks/basic/useUpdateCartAttributes.d.ts +8 -0
  199. package/dist/esm/cart/hooks/basic/useUpdateCartAttributes.d.ts.map +1 -0
  200. package/dist/esm/cart/hooks/basic/useUpdateCartAttributes.js +2 -0
  201. package/dist/esm/cart/hooks/basic/useUpdateCartAttributes.js.map +7 -0
  202. package/dist/esm/cart/hooks/basic/useUpdateCartBuyerIdentity.d.ts +8 -0
  203. package/dist/esm/cart/hooks/basic/useUpdateCartBuyerIdentity.d.ts.map +1 -0
  204. package/dist/esm/cart/hooks/basic/useUpdateCartBuyerIdentity.js +2 -0
  205. package/dist/esm/cart/hooks/basic/useUpdateCartBuyerIdentity.js.map +7 -0
  206. package/dist/esm/cart/hooks/basic/useUpdateCartLines.d.ts +8 -0
  207. package/dist/esm/cart/hooks/basic/useUpdateCartLines.d.ts.map +1 -0
  208. package/dist/esm/cart/hooks/basic/useUpdateCartLines.js +2 -0
  209. package/dist/esm/cart/hooks/basic/useUpdateCartLines.js.map +7 -0
  210. package/dist/esm/cart/hooks/feature/useCalcAutoFreeGift.d.ts +10 -0
  211. package/dist/esm/cart/hooks/feature/useCalcAutoFreeGift.d.ts.map +1 -0
  212. package/dist/esm/cart/hooks/feature/useCalcAutoFreeGift.js +2 -0
  213. package/dist/esm/cart/hooks/feature/useCalcAutoFreeGift.js.map +7 -0
  214. package/dist/esm/cart/hooks/feature/useCalcOrderDiscount.d.ts +21 -0
  215. package/dist/esm/cart/hooks/feature/useCalcOrderDiscount.d.ts.map +1 -0
  216. package/dist/esm/cart/hooks/feature/useCalcOrderDiscount.js +2 -0
  217. package/dist/esm/cart/hooks/feature/useCalcOrderDiscount.js.map +7 -0
  218. package/dist/esm/cart/hooks/feature/useCartAttributes.d.ts +10 -0
  219. package/dist/esm/cart/hooks/feature/useCartAttributes.d.ts.map +1 -0
  220. package/dist/esm/cart/hooks/feature/useCartAttributes.js +2 -0
  221. package/dist/esm/cart/hooks/feature/useCartAttributes.js.map +7 -0
  222. package/dist/esm/cart/hooks/feature/useCartItemQuantityLimit.d.ts +19 -0
  223. package/dist/esm/cart/hooks/feature/useCartItemQuantityLimit.d.ts.map +1 -0
  224. package/dist/esm/cart/hooks/feature/useCartItemQuantityLimit.js +2 -0
  225. package/dist/esm/cart/hooks/feature/useCartItemQuantityLimit.js.map +7 -0
  226. package/dist/esm/cart/hooks/feature/useScriptAutoFreeGift.d.ts +37 -0
  227. package/dist/esm/cart/hooks/feature/useScriptAutoFreeGift.d.ts.map +1 -0
  228. package/dist/esm/cart/hooks/feature/useScriptAutoFreeGift.js +2 -0
  229. package/dist/esm/cart/hooks/feature/useScriptAutoFreeGift.js.map +7 -0
  230. package/dist/esm/cart/hooks/feature/useUpdateLineCodeAmountAttributes.d.ts +9 -0
  231. package/dist/esm/cart/hooks/feature/useUpdateLineCodeAmountAttributes.d.ts.map +1 -0
  232. package/dist/esm/cart/hooks/feature/useUpdateLineCodeAmountAttributes.js +2 -0
  233. package/dist/esm/cart/hooks/feature/useUpdateLineCodeAmountAttributes.js.map +7 -0
  234. package/dist/esm/cart/track/fbq.d.ts +2 -9
  235. package/dist/esm/cart/track/fbq.d.ts.map +1 -1
  236. package/dist/esm/cart/track/fbq.js +1 -1
  237. package/dist/esm/cart/track/fbq.js.map +3 -3
  238. package/dist/esm/cart/track/gtm.d.ts +26 -0
  239. package/dist/esm/cart/track/gtm.d.ts.map +1 -0
  240. package/dist/esm/cart/track/gtm.js +2 -0
  241. package/dist/esm/cart/track/gtm.js.map +7 -0
  242. package/dist/esm/cart/types/autoFreeGift.d.ts +135 -0
  243. package/dist/esm/cart/types/autoFreeGift.d.ts.map +1 -0
  244. package/dist/esm/cart/types/autoFreeGift.js +2 -0
  245. package/dist/esm/cart/types/autoFreeGift.js.map +7 -0
  246. package/dist/esm/cart/types/index.d.ts +1 -0
  247. package/dist/esm/cart/types/index.d.ts.map +1 -1
  248. package/dist/esm/cart/types/orderDiscount.d.ts +35 -0
  249. package/dist/esm/cart/types/orderDiscount.d.ts.map +1 -0
  250. package/dist/esm/cart/types/orderDiscount.js +2 -0
  251. package/dist/esm/cart/types/orderDiscount.js.map +7 -0
  252. package/dist/esm/cart/types/priceDiscount.d.ts +20 -0
  253. package/dist/esm/cart/types/priceDiscount.d.ts.map +1 -0
  254. package/dist/esm/cart/types/priceDiscount.js +2 -0
  255. package/dist/esm/cart/types/priceDiscount.js.map +7 -0
  256. package/dist/esm/cart/utils/autoFreeGift.d.ts +21 -0
  257. package/dist/esm/cart/utils/autoFreeGift.d.ts.map +1 -0
  258. package/dist/esm/cart/utils/autoFreeGift.js +2 -0
  259. package/dist/esm/cart/utils/autoFreeGift.js.map +7 -0
  260. package/dist/esm/cart/utils/index.d.ts +1 -0
  261. package/dist/esm/cart/utils/index.d.ts.map +1 -1
  262. package/dist/esm/cart/utils/index.js +1 -1
  263. package/dist/esm/cart/utils/index.js.map +3 -3
  264. package/dist/esm/constants.d.ts +2 -0
  265. package/dist/esm/constants.d.ts.map +1 -0
  266. package/dist/esm/constants.js +2 -0
  267. package/dist/esm/constants.js.map +7 -0
  268. package/dist/esm/context/index.js.map +1 -1
  269. package/dist/esm/index.d.ts +1 -0
  270. package/dist/esm/index.d.ts.map +1 -1
  271. package/dist/esm/index.js +1 -1
  272. package/dist/esm/index.js.map +2 -2
  273. package/dist/esm/registration/hooks/index.d.ts +1 -0
  274. package/dist/esm/registration/hooks/index.d.ts.map +1 -1
  275. package/dist/esm/registration/hooks/index.js +1 -1
  276. package/dist/esm/registration/hooks/index.js.map +2 -2
  277. package/dist/esm/registration/hooks/useEmailValidation.d.ts.map +1 -1
  278. package/dist/esm/registration/hooks/useEmailValidation.js +1 -1
  279. package/dist/esm/registration/hooks/useEmailValidation.js.map +3 -3
  280. package/dist/esm/registration/hooks/useSendEmailValidation.d.ts.map +1 -1
  281. package/dist/esm/registration/hooks/useSendEmailValidation.js +1 -1
  282. package/dist/esm/registration/hooks/useSendEmailValidation.js.map +2 -2
  283. package/dist/esm/registration/hooks/useSubscriptions.d.ts +15 -0
  284. package/dist/esm/registration/hooks/useSubscriptions.d.ts.map +1 -0
  285. package/dist/esm/registration/hooks/useSubscriptions.js +2 -0
  286. package/dist/esm/registration/hooks/useSubscriptions.js.map +7 -0
  287. package/dist/esm/registration/index.d.ts +0 -1
  288. package/dist/esm/registration/index.d.ts.map +1 -1
  289. package/dist/esm/registration/index.js +1 -1
  290. package/dist/esm/registration/index.js.map +2 -2
  291. package/dist/esm/shopify/fetchers/index.d.ts +2 -0
  292. package/dist/esm/shopify/fetchers/index.d.ts.map +1 -1
  293. package/dist/esm/shopify/fetchers/index.js +1 -1
  294. package/dist/esm/shopify/fetchers/index.js.map +3 -3
  295. package/dist/registration/hooks/index.d.ts +4 -0
  296. package/dist/registration/hooks/index.d.ts.map +1 -0
  297. package/dist/registration/hooks/useEmailValidation.d.ts +17 -0
  298. package/dist/registration/hooks/useEmailValidation.d.ts.map +1 -0
  299. package/dist/registration/hooks/useSendEmailValidation.d.ts +9 -0
  300. package/dist/registration/hooks/useSendEmailValidation.d.ts.map +1 -0
  301. package/dist/registration/hooks/useSubscriptions.d.ts +15 -0
  302. package/dist/registration/hooks/useSubscriptions.d.ts.map +1 -0
  303. package/dist/registration/index.d.ts +2 -0
  304. package/dist/registration/index.d.ts.map +1 -0
  305. package/dist/utils/classnames.d.ts +3 -0
  306. package/dist/utils/classnames.d.ts.map +1 -0
  307. package/dist/utils/fetcher/fetchResponse.d.ts +14 -0
  308. package/dist/utils/fetcher/fetchResponse.d.ts.map +1 -0
  309. package/dist/utils/fetcher/fetcher.d.ts +2 -0
  310. package/dist/utils/fetcher/fetcher.d.ts.map +1 -0
  311. package/dist/utils/fetcher/index.d.ts +3 -0
  312. package/dist/utils/fetcher/index.d.ts.map +1 -0
  313. package/dist/utils/index.d.ts +5 -0
  314. package/dist/utils/index.d.ts.map +1 -0
  315. package/dist/utils/track.d.ts +16 -0
  316. package/dist/utils/track.d.ts.map +1 -0
  317. package/dist/utils/useCountDown.d.ts +6 -0
  318. package/dist/utils/useCountDown.d.ts.map +1 -0
  319. package/esbuild-esm.mjs +1 -0
  320. package/jest.config.ts +3 -0
  321. package/package.json +4 -5
  322. package/src/cart/context/index.tsx +310 -0
  323. package/src/cart/hooks/basic/useAddToCart.ts +161 -0
  324. package/src/cart/hooks/basic/useApplyCartCodes.ts +72 -0
  325. package/src/cart/hooks/basic/useBuyNow.ts +10 -7
  326. package/src/cart/hooks/basic/useCreateCart.ts +32 -0
  327. package/src/cart/hooks/basic/useRemoveCartCodes.ts +55 -0
  328. package/src/cart/hooks/basic/useRemoveCartLines.ts +51 -0
  329. package/src/cart/hooks/basic/useUpdateCartAttributes.ts +42 -0
  330. package/src/cart/hooks/basic/useUpdateCartBuyerIdentity.ts +34 -0
  331. package/src/cart/hooks/basic/useUpdateCartLines.ts +34 -0
  332. package/src/cart/hooks/feature/useCalcAutoFreeGift.tsx +178 -0
  333. package/src/cart/hooks/feature/useCalcOrderDiscount.tsx +127 -0
  334. package/src/cart/hooks/feature/useCartAttributes.tsx +133 -0
  335. package/src/cart/hooks/feature/useCartItemQuantityLimit.tsx +59 -0
  336. package/src/cart/hooks/feature/useScriptAutoFreeGift.tsx +256 -0
  337. package/src/cart/hooks/feature/useUpdateLineCodeAmountAttributes.tsx +184 -0
  338. package/src/cart/track/fbq.ts +4 -29
  339. package/src/cart/track/gtm.ts +159 -0
  340. package/src/cart/types/autoFreeGift.ts +169 -0
  341. package/src/cart/types/index.ts +1 -0
  342. package/src/cart/types/orderDiscount.ts +38 -0
  343. package/src/cart/types/priceDiscount.ts +21 -0
  344. package/src/cart/utils/autoFreeGift.ts +297 -0
  345. package/src/cart/utils/index.ts +13 -0
  346. package/src/constants.ts +1 -0
  347. package/src/context/index.ts +0 -1
  348. package/src/index.ts +6 -0
  349. package/src/registration/hooks/index.ts +3 -0
  350. package/src/registration/hooks/useEmailValidation.ts +28 -0
  351. package/src/registration/hooks/useSendEmailValidation.ts +21 -0
  352. package/src/registration/hooks/useSubscriptions.ts +36 -0
  353. package/src/registration/index.ts +2 -0
  354. package/src/shopify/fetchers/index.ts +2 -0
  355. package/src/utils/classnames.ts +6 -0
  356. package/src/utils/fetcher/fetchResponse.ts +33 -0
  357. package/src/utils/fetcher/fetcher.ts +38 -0
  358. package/src/utils/fetcher/index.ts +2 -0
  359. package/src/utils/index.ts +4 -0
  360. package/src/utils/track.ts +57 -0
  361. package/src/utils/useCountDown.tsx +41 -0
  362. package/tsconfig.json +4 -0
  363. package/tsup.config.ts +10 -8
  364. package/dist/cjs/registration/context/index.d.ts +0 -24
  365. package/dist/cjs/registration/context/index.d.ts.map +0 -1
  366. package/dist/cjs/registration/context/index.js +0 -2
  367. package/dist/cjs/registration/context/index.js.map +0 -7
  368. package/dist/esm/registration/context/index.d.ts +0 -24
  369. package/dist/esm/registration/context/index.d.ts.map +0 -1
  370. package/dist/esm/registration/context/index.js +0 -2
  371. package/dist/esm/registration/context/index.js.map +0 -7
@@ -7,6 +7,8 @@ import { GtmParams, BuyNowLineItems } from '../../types'
7
7
  import { createCart as createCartFetcher } from '../../../shopify'
8
8
  import { useHeadlessContext } from '../../../context'
9
9
  import { defaultSWRMutationConfiguration } from '../../const'
10
+ import { buyNowGa } from '../../track/gtm'
11
+ import { buyNowFbq } from '../../track/fbq'
10
12
 
11
13
  type UseBuyNowProps = {
12
14
  withTrack?: boolean // 是否需要默认埋点
@@ -16,7 +18,7 @@ type UseBuyNowProps = {
16
18
  export type BuyNowArgs = {
17
19
  lineItems: BuyNowLineItems
18
20
  discountCodes?: string[]
19
- customAttributes?: Attributes[]
21
+ customAttributes?: Attributes
20
22
  buyerIdentity?: CartBuyerIdentity
21
23
  gtmParams?: GtmParams
22
24
  fbqTrackConfig?: FbqBuyNowTrackConfig
@@ -28,11 +30,11 @@ export const useBuyNow = (
28
30
  throwOnError?: boolean
29
31
  } = defaultSWRMutationConfiguration
30
32
  ) => {
31
- const { storefrontToken, storeDomain } = useHeadlessContext()
33
+ const { storefrontToken, storeDomain, brand } = useHeadlessContext()
32
34
 
33
35
  const trigger = useCallback(
34
36
  async (_: any, { arg }: { arg: BuyNowArgs }) => {
35
- const { lineItems, discountCodes, gtmParams = {}, buyerIdentity, fbqTrackConfig } = arg
37
+ const { lineItems, discountCodes, gtmParams = {}, buyerIdentity, fbqTrackConfig,customAttributes } = arg
36
38
 
37
39
  if (!lineItems) {
38
40
  return
@@ -66,6 +68,7 @@ export const useBuyNow = (
66
68
  // })
67
69
  // 创建购物车
68
70
  const createCartOptions = {
71
+ attributes: customAttributes,
69
72
  lines: linesToBuyNow,
70
73
  buyerIdentity,
71
74
  discountCodes,
@@ -84,10 +87,10 @@ export const useBuyNow = (
84
87
 
85
88
  // 埋点
86
89
  if (withTrack) {
87
- // buyNowGa({ lineItems, router, gtmParams })
88
- // if (fbqTrackConfig) {
89
- // buyNowFbq({ router, trackConfig: fbqTrackConfig })
90
- // }
90
+ buyNowGa({ lineItems, gtmParams: { ...gtmParams, brand } })
91
+ if (fbqTrackConfig) {
92
+ buyNowFbq({ trackConfig: fbqTrackConfig })
93
+ }
91
94
  }
92
95
 
93
96
  // buyNowSpan.end()
@@ -0,0 +1,32 @@
1
+ import { Cart, CartInput } from '../../../shopify'
2
+ import { useCallback } from 'react'
3
+ import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'
4
+ import { createCart as createCartFetcher } from '../../../shopify'
5
+ import { useHeadlessContext } from '../../../context'
6
+ import { defaultSWRMutationConfiguration } from '../../const'
7
+
8
+ export type CreateCartArgs = CartInput
9
+
10
+ export const useCreateCart = (
11
+ swrOptions: SWRMutationConfiguration<Cart | undefined, Error, string, CreateCartArgs> & {
12
+ throwOnError?: boolean
13
+ } = defaultSWRMutationConfiguration
14
+ ) => {
15
+ const { storefrontToken, storeDomain } = useHeadlessContext()
16
+
17
+ const trigger = useCallback(
18
+ async (_: any, { arg }: { arg: CreateCartArgs }) => {
19
+ const updatedCart = await createCartFetcher({
20
+ options: arg,
21
+ config: {
22
+ storefrontToken,
23
+ storeDomain,
24
+ },
25
+ })
26
+ return updatedCart
27
+ },
28
+ [storefrontToken, storeDomain]
29
+ )
30
+
31
+ return useSWRMutation('create-cart', trigger, swrOptions)
32
+ }
@@ -0,0 +1,55 @@
1
+ import { Cart } from '../../../shopify'
2
+ import { MutationCartDiscountCodesUpdateArgs } from '../../../shopify/gql'
3
+ import { useCallback } from 'react'
4
+ import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'
5
+ import { updateCartCodes as updateCartCodesFetcher } from '../../../shopify'
6
+ import { useHeadlessContext } from '../../../context'
7
+ import { defaultSWRMutationConfiguration } from '../../const'
8
+
9
+ export type RemoveCartCodesArgs = {
10
+ cartId: string
11
+ discountCodes: string[]
12
+ currentCart?: Cart // 当前购物车状态,用于过滤已有的折扣码
13
+ }
14
+
15
+ export const useRemoveCartCodes = (
16
+ swrOptions: SWRMutationConfiguration<Cart | undefined, Error, string, RemoveCartCodesArgs> & {
17
+ throwOnError?: boolean
18
+ } = defaultSWRMutationConfiguration
19
+ ) => {
20
+ const { storefrontToken, storeDomain } = useHeadlessContext()
21
+
22
+ const trigger = useCallback(
23
+ async (_: any, { arg }: { arg: RemoveCartCodesArgs }) => {
24
+ const { cartId, discountCodes, currentCart } = arg
25
+
26
+ if (!cartId) {
27
+ throw new Error('cartId is required')
28
+ }
29
+
30
+ // 获取当前可用的折扣码
31
+ let codes = currentCart?.discountCodes?.filter((code) => !!code.applicable) || []
32
+
33
+ // 过滤掉要删除的折扣码
34
+ const leftCodes = codes
35
+ .filter((code) => (discountCodes?.length ? !discountCodes.includes(code.code) : code.code))
36
+ .map((code) => code.code)
37
+
38
+ const updatedCart = await updateCartCodesFetcher({
39
+ options: {
40
+ cartId,
41
+ discountCodes: leftCodes,
42
+ },
43
+ config: {
44
+ storefrontToken,
45
+ storeDomain,
46
+ },
47
+ })
48
+
49
+ return updatedCart
50
+ },
51
+ [storefrontToken, storeDomain]
52
+ )
53
+
54
+ return useSWRMutation('remove-cart-codes', trigger, swrOptions)
55
+ }
@@ -0,0 +1,51 @@
1
+ import { Cart } from '../../../shopify'
2
+ import { MutationCartLinesRemoveArgs } from '../../../shopify/gql'
3
+ import { useCallback } from 'react'
4
+ import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'
5
+ import { removeCartLines as removeCartLinesFetcher } from '../../../shopify'
6
+ import { useHeadlessContext } from '../../../context'
7
+ import { defaultSWRMutationConfiguration } from '../../const'
8
+
9
+ export type RemoveCartLinesArgs = MutationCartLinesRemoveArgs & {
10
+ autoRemoveInvalidCodes?: boolean // 是否自动移除不可用的折扣码
11
+ onCodesRemoved?: (updatedCart: Cart, removedCodes: string[]) => Promise<Cart | undefined> // 移除折扣码的回调
12
+ }
13
+
14
+ export const useRemoveCartLines = (
15
+ swrOptions: SWRMutationConfiguration<Cart | undefined, Error, string, RemoveCartLinesArgs> & {
16
+ throwOnError?: boolean
17
+ } = defaultSWRMutationConfiguration
18
+ ) => {
19
+ const { storefrontToken, storeDomain } = useHeadlessContext()
20
+
21
+ const trigger = useCallback(
22
+ async (_: any, { arg }: { arg: RemoveCartLinesArgs }) => {
23
+ const { autoRemoveInvalidCodes = true, onCodesRemoved, ...removeArgs } = arg
24
+
25
+ let updatedCart = await removeCartLinesFetcher({
26
+ options: removeArgs,
27
+ config: {
28
+ storefrontToken,
29
+ storeDomain,
30
+ },
31
+ })
32
+
33
+ // 自动移除不可用的折扣码
34
+ if (updatedCart && autoRemoveInvalidCodes) {
35
+ const unApplicableCodes = updatedCart.discountCodes
36
+ ?.filter((item) => !item.applicable)
37
+ .map((item) => item.code)
38
+
39
+ if (unApplicableCodes?.length && onCodesRemoved) {
40
+ // 如果提供了回调函数,使用回调处理
41
+ updatedCart = (await onCodesRemoved(updatedCart, unApplicableCodes)) || updatedCart
42
+ }
43
+ }
44
+
45
+ return updatedCart
46
+ },
47
+ [storefrontToken, storeDomain]
48
+ )
49
+
50
+ return useSWRMutation('remove-cart-lines', trigger, swrOptions)
51
+ }
@@ -0,0 +1,42 @@
1
+ import { Cart } from '../../../shopify'
2
+ import { MutationCartAttributesUpdateArgs } from '../../../shopify/gql'
3
+ import { useCallback } from 'react'
4
+ import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'
5
+ import { updateCartAttributes as updateCartAttributesFetcher } from '../../../shopify'
6
+ import { useHeadlessContext } from '../../../context'
7
+ // import { startInactiveSpan } from '@sentry/nextjs'
8
+ import { defaultSWRMutationConfiguration } from '../../const'
9
+
10
+ export type UpdateCartAttributesArgs = MutationCartAttributesUpdateArgs
11
+
12
+ export const useUpdateCartAttributes = (
13
+ swrOptions: SWRMutationConfiguration<Cart | undefined, Error, string, UpdateCartAttributesArgs> & {
14
+ throwOnError?: boolean
15
+ } = defaultSWRMutationConfiguration
16
+ ) => {
17
+ const { storefrontToken, storeDomain } = useHeadlessContext()
18
+
19
+ const trigger = useCallback(
20
+ async (_: any, { arg }: { arg: UpdateCartAttributesArgs }) => {
21
+ // const updateCartAttributesApiSpan = startInactiveSpan({
22
+ // name: 'updateCartAttributesAPI',
23
+ // op: 'business',
24
+ // })
25
+
26
+ const updatedCart = await updateCartAttributesFetcher({
27
+ options: arg,
28
+ config: {
29
+ storefrontToken,
30
+ storeDomain,
31
+ },
32
+ })
33
+
34
+ // updateCartAttributesApiSpan.end()
35
+
36
+ return updatedCart
37
+ },
38
+ [storefrontToken, storeDomain]
39
+ )
40
+
41
+ return useSWRMutation('update-cart-attributes', trigger, swrOptions)
42
+ }
@@ -0,0 +1,34 @@
1
+ import { Cart } from '../../../shopify'
2
+ import { MutationCartBuyerIdentityUpdateArgs } from '../../../shopify/gql'
3
+ import { useCallback } from 'react'
4
+ import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'
5
+ import { updateCartBuyerIdentity as updateCartBuyerIdentityFetcher } from '../../../shopify'
6
+ import { useHeadlessContext } from '../../../context'
7
+ import { defaultSWRMutationConfiguration } from '../../const'
8
+
9
+ export type UpdateCartBuyerIdentityArgs = MutationCartBuyerIdentityUpdateArgs
10
+
11
+ export const useUpdateCartBuyerIdentity = (
12
+ swrOptions: SWRMutationConfiguration<Cart | undefined, Error, string, UpdateCartBuyerIdentityArgs> & {
13
+ throwOnError?: boolean
14
+ } = defaultSWRMutationConfiguration
15
+ ) => {
16
+ const { storefrontToken, storeDomain } = useHeadlessContext()
17
+
18
+ const trigger = useCallback(
19
+ async (_: any, { arg }: { arg: UpdateCartBuyerIdentityArgs }) => {
20
+ const updatedCart = await updateCartBuyerIdentityFetcher({
21
+ options: arg,
22
+ config: {
23
+ storefrontToken,
24
+ storeDomain,
25
+ },
26
+ })
27
+
28
+ return updatedCart
29
+ },
30
+ [storefrontToken, storeDomain]
31
+ )
32
+
33
+ return useSWRMutation('update-cart-buyer-identity', trigger, swrOptions)
34
+ }
@@ -0,0 +1,34 @@
1
+ import { Cart } from '../../../shopify'
2
+ import { MutationCartLinesUpdateArgs } from '../../../shopify/gql'
3
+ import { useCallback } from 'react'
4
+ import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'
5
+ import { updateCartLines as updateCartLinesFetcher } from '../../../shopify'
6
+ import { useHeadlessContext } from '../../../context'
7
+ import { defaultSWRMutationConfiguration } from '../../const'
8
+
9
+ export type UpdateCartLinesArgs = MutationCartLinesUpdateArgs
10
+
11
+ export const useUpdateCartLines = (
12
+ swrOptions: SWRMutationConfiguration<Cart | undefined, Error, string, UpdateCartLinesArgs> & {
13
+ throwOnError?: boolean
14
+ } = defaultSWRMutationConfiguration
15
+ ) => {
16
+ const { storefrontToken, storeDomain } = useHeadlessContext()
17
+
18
+ const trigger = useCallback(
19
+ async (_: any, { arg }: { arg: UpdateCartLinesArgs }) => {
20
+ const updatedCart = await updateCartLinesFetcher({
21
+ options: arg,
22
+ config: {
23
+ storefrontToken,
24
+ storeDomain,
25
+ },
26
+ })
27
+
28
+ return updatedCart
29
+ },
30
+ [storefrontToken, storeDomain]
31
+ )
32
+
33
+ return useSWRMutation('update-cart-lines', trigger, swrOptions)
34
+ }
@@ -0,0 +1,178 @@
1
+ import { useMemo, useRef } from 'react'
2
+ import { FunctionGiftResult, FormattedGift, CartLineInput, AutoFreeGiftConfig } from '../../types/autoFreeGift'
3
+ import { preCheck } from '../../utils/autoFreeGift'
4
+ import { getMatchedMainProductSubTotal } from '../../utils/autoFreeGift'
5
+ import { CUSTOMER_ATTRIBUTE_KEY } from '../../../shopify/utils/const'
6
+ import { btoaID } from '../../../shopify/utils/helper'
7
+ import { getProductsByHandles } from '../../../shopify/fetchers'
8
+ import useSWR from 'swr'
9
+ import { useHeadlessContext } from '../../../context'
10
+
11
+ /**
12
+ * [计算型 Hook]
13
+ * 根据购物车、活动配置和用户信息,计算出应得的赠品和下一个目标。
14
+ * 此 Hook 不产生任何副作用。
15
+ * 使用示例:
16
+ * const { qualifyingGift, nextTierGoal, activeCampaign, isLoading } = useCalcAutoFreeGift(cart, autoFreeGiftConfig);
17
+ */
18
+ export const useCalcAutoFreeGift = (
19
+ cart: any,
20
+ autoFreeGiftConfig: AutoFreeGiftConfig,
21
+ customer: any
22
+ ): FunctionGiftResult => {
23
+ const tags = useMemo(() => customer?.tags || [], [customer?.tags])
24
+ const isCustomerLoading = useMemo(() => (!customer ? true : false), [customer])
25
+ const dealsType: string = '' // 可从URL或Context获取
26
+ const { storefrontToken, storeDomain } = useHeadlessContext()
27
+
28
+ // 使用 useRef 缓存 giftProductsResult,确保只执行一次
29
+ const giftProductsCache = useRef<{
30
+ data: any[] | null
31
+ giftHandles: string[]
32
+ } | null>(null)
33
+
34
+ // 1. 找到当前生效的活动和用于计算的子总价
35
+ const { activeCampaign, subtotal } = useMemo(() => {
36
+ // 遍历所有活动配置
37
+ for (const campaign of autoFreeGiftConfig) {
38
+ const { rule_conditions = [], rule_result } = campaign
39
+ const { spend_get_reward } = rule_result || {}
40
+
41
+ // 前置检查,判断用户和环境是否满足活动条件
42
+ const isPreCheckPassed = preCheck(rule_conditions, tags, dealsType ? [dealsType] : [])
43
+
44
+ if (isPreCheckPassed && spend_get_reward) {
45
+ // 计算参与活动的主商品的总价
46
+ const matchedSubtotal = getMatchedMainProductSubTotal(
47
+ cart,
48
+ spend_get_reward.main_product?.variant_list?.map((v: any) => v.variant_id) || [],
49
+ {
50
+ spend_money_type: spend_get_reward.main_product?.spend_money_type || 1,
51
+ variant_id_list: spend_get_reward.main_product?.variant_list?.map((v: any) => v.variant_id) || [],
52
+ all_store_variant: spend_get_reward.main_product?.all_store_variant || false,
53
+ }
54
+ )
55
+
56
+ // 如果有主商品在购物车中,则此活动为当前生效的活动
57
+ if (matchedSubtotal > 0) {
58
+ return { activeCampaign: campaign, subtotal: matchedSubtotal }
59
+ }
60
+ }
61
+ }
62
+ // 没有找到生效的活动
63
+ return { activeCampaign: null, subtotal: 0 }
64
+ }, [autoFreeGiftConfig, cart, tags, dealsType])
65
+
66
+ // 2. 根据子总价,计算应得赠品和下一个目标
67
+ const { qualifyingGift, nextTierGoal } = useMemo(() => {
68
+ if (!activeCampaign || !activeCampaign.rule_result?.spend_get_reward?.gift_product) {
69
+ return { qualifyingGift: null, nextTierGoal: null }
70
+ }
71
+
72
+ const giftTiers = activeCampaign.rule_result.spend_get_reward.gift_product
73
+
74
+ // a. 找到当前满足条件的最高阶梯 (findLast)
75
+ const qualifyingTier = giftTiers.findLast(tier => subtotal >= Number(tier.spend_sum_money))
76
+
77
+ // b. 找到下一个目标阶梯 (第一个门槛比当前subtotal高的)
78
+ const nextGoal = giftTiers.find(tier => subtotal < Number(tier.spend_sum_money))
79
+
80
+ if (!qualifyingTier) {
81
+ return { qualifyingGift: null, nextTierGoal: nextGoal || null }
82
+ }
83
+
84
+ // c. 将应得的赠品阶梯格式化为待添加购物车的结构
85
+ const formattedGift: FormattedGift = {
86
+ tier: qualifyingTier,
87
+ itemsToAdd: qualifyingTier.reward_list
88
+ ?.map(reward => {
89
+ const giftProduct = reward?.variant_list?.[0]
90
+ if (!giftProduct) return null
91
+ return {
92
+ variant: {
93
+ id: btoaID(giftProduct.variant_id),
94
+ handle: giftProduct.handle,
95
+ sku: giftProduct.sku,
96
+ },
97
+ quantity: reward?.get_unit || 1,
98
+ attributes: [
99
+ {
100
+ key: CUSTOMER_ATTRIBUTE_KEY,
101
+ value: JSON.stringify({
102
+ is_gift: true,
103
+ rule_id: activeCampaign.rule_id,
104
+ spend_sum_money: qualifyingTier.spend_sum_money,
105
+ }),
106
+ },
107
+ ],
108
+ }
109
+ })
110
+ .filter((item): item is CartLineInput => item !== null),
111
+ }
112
+
113
+ return { qualifyingGift: formattedGift, nextTierGoal: nextGoal || null }
114
+ }, [activeCampaign, subtotal])
115
+
116
+ const giftHandles = useMemo(() => {
117
+ const giftVariant = autoFreeGiftConfig
118
+ .map(item =>
119
+ item.rule_result?.spend_get_reward?.gift_product
120
+ ?.map(v => v.reward_list.map(reward => reward.variant_list.map(variant => variant.handle)))
121
+ .flat()
122
+ )
123
+ .flat()
124
+ return giftVariant.flat(2)
125
+ }, [autoFreeGiftConfig])
126
+
127
+ // 检查是否需要重新获取数据
128
+ const shouldFetch = useMemo(() => {
129
+ if (!giftHandles.length) return false
130
+
131
+ // 如果缓存存在且 handles 相同,直接使用缓存
132
+ if (
133
+ giftProductsCache.current &&
134
+ JSON.stringify(giftProductsCache.current.giftHandles) === JSON.stringify(giftHandles)
135
+ ) {
136
+ return false
137
+ }
138
+
139
+ return true
140
+ }, [giftHandles])
141
+
142
+ const { data: giftProductsResult } = useSWR(shouldFetch ? giftHandles : null, async () => {
143
+ const res = await getProductsByHandles({
144
+ options: {
145
+ handles: giftHandles,
146
+ },
147
+ config: {
148
+ storefrontToken: storefrontToken,
149
+ storeDomain: storeDomain,
150
+ },
151
+ })
152
+ const result = Array.isArray(res) ? res : []
153
+
154
+ // 缓存结果
155
+ giftProductsCache.current = {
156
+ data: result,
157
+ giftHandles: [...giftHandles],
158
+ }
159
+
160
+ return result
161
+ })
162
+
163
+ // 使用缓存的数据或新获取的数据
164
+ const finalGiftProductsResult = useMemo(() => {
165
+ if (giftProductsCache.current && !shouldFetch) {
166
+ return giftProductsCache.current.data || undefined
167
+ }
168
+ return giftProductsResult
169
+ }, [giftProductsResult, shouldFetch])
170
+
171
+ return {
172
+ qualifyingGift,
173
+ nextTierGoal,
174
+ activeCampaign,
175
+ isLoading: isCustomerLoading,
176
+ giftProductsResult: finalGiftProductsResult,
177
+ }
178
+ }
@@ -0,0 +1,127 @@
1
+ import { useMemo } from 'react'
2
+ import { preCheck } from '../../utils/autoFreeGift'
3
+ import { getMatchedMainProductSubTotal } from '../../utils/autoFreeGift'
4
+ import { OrderDiscountConfig, DiscountType, BasePriceType, TieredDiscount } from '../../types/orderDiscount'
5
+
6
+ // 返回结果类型
7
+ export interface OrderDiscountResult {
8
+ qualifyingDiscount: TieredDiscount | null // 当前应得的折扣
9
+ nextTierGoal: TieredDiscount | null // 下一个目标阶梯
10
+ activeCampaign: OrderDiscountConfig | null // 当前生效的活动配置
11
+ discountAmount: number // 折扣金额
12
+ cartTotalForDiscount: number // 用于计算折扣的购物车总额
13
+ isLoading: boolean // 依赖数据是否加载中
14
+ }
15
+
16
+ /**
17
+ * [计算型 Hook]
18
+ * 根据购物车、活动配置和用户信息,计算出应得的订单折扣和下一个目标。
19
+ * 此 Hook 不产生任何副作用。
20
+ * 使用示例:
21
+ * const { qualifyingDiscount, nextTierGoal, activeCampaign, discountAmount, isLoading } = useCalcOrderDiscount(cart, orderDiscountConfig);
22
+ * @param cart - 购物车
23
+ * @param orderDiscountConfig - 订单折扣配置
24
+ * @returns { OrderDiscountResult }
25
+ */
26
+ export const useCalcOrderDiscount = (
27
+ cart: any,
28
+ orderDiscountConfig: OrderDiscountConfig[],
29
+ customer: any
30
+ ): OrderDiscountResult => {
31
+ const tags = useMemo(() => customer?.tags || [], [customer?.tags])
32
+ const isCustomerLoading = useMemo(() => (!customer ? true : false), [customer])
33
+ const dealsType: string = '' // 可从URL或Context获取
34
+
35
+ // 1. 找到当前生效的活动和用于计算的子总价
36
+ const { activeCampaign, subtotal } = useMemo(() => {
37
+ // 遍历所有活动配置
38
+ for (const campaign of orderDiscountConfig) {
39
+ const { rule_conditions = [], result_detail } = campaign
40
+ const { main_product, order_discount_conf } = result_detail || {}
41
+
42
+ // 前置检查,判断用户和环境是否满足活动条件
43
+ const isPreCheckPassed = preCheck(rule_conditions, tags, dealsType ? [dealsType] : [])
44
+
45
+ if (isPreCheckPassed && main_product && order_discount_conf) {
46
+ // 计算参与活动的主商品的总价
47
+ const matchedSubtotal = getMatchedMainProductSubTotal(
48
+ cart,
49
+ main_product?.variant_list?.map(v => v.variant_id) || [],
50
+ {
51
+ spend_money_type: order_discount_conf.base_price === BasePriceType.MIN_DISCOUNTED_PRICE ? 2 : 1, // 根据基础价格类型设置
52
+ variant_id_list: main_product?.variant_list?.map(v => v.variant_id) || [],
53
+ all_store_variant: main_product?.all_store_variant || false,
54
+ }
55
+ )
56
+
57
+ // 如果有主商品在购物车中,则此活动为当前生效的活动
58
+ if (matchedSubtotal > 0) {
59
+ return { activeCampaign: campaign, subtotal: matchedSubtotal }
60
+ }
61
+ }
62
+ }
63
+ // 没有找到生效的活动
64
+ return { activeCampaign: null, subtotal: 0 }
65
+ }, [orderDiscountConfig, cart, tags, dealsType])
66
+
67
+ // 2. 根据子总价,计算应得折扣和下一个目标
68
+ const { qualifyingDiscount, nextTierGoal, discountAmount } = useMemo(() => {
69
+ if (!activeCampaign || !activeCampaign.result_detail?.order_discount_conf?.tiered_discounts) {
70
+ return {
71
+ qualifyingDiscount: null,
72
+ nextTierGoal: null,
73
+ discountAmount: 0,
74
+ }
75
+ }
76
+
77
+ const tieredDiscounts = activeCampaign.result_detail.order_discount_conf.tiered_discounts
78
+
79
+ // a. 找到当前满足条件的最高阶梯 (findLast)
80
+ const qualifyingTier = tieredDiscounts.findLast(tier => subtotal >= Number(tier.amount))
81
+
82
+ // b. 找到下一个目标阶梯 (第一个门槛比当前subtotal高的)
83
+ const nextGoal = tieredDiscounts.find(tier => subtotal < Number(tier.amount))
84
+
85
+ if (!qualifyingTier) {
86
+ return {
87
+ qualifyingDiscount: null,
88
+ nextTierGoal: nextGoal || null,
89
+ discountAmount: 0,
90
+ }
91
+ }
92
+
93
+ // c. 计算折扣金额
94
+ let calculatedDiscount = 0
95
+ switch (qualifyingTier.discount_type) {
96
+ case DiscountType.PERCENTAGE:
97
+ // 百分比折扣
98
+ calculatedDiscount = (subtotal * qualifyingTier.discount) / 100
99
+ break
100
+ case DiscountType.FIXED_AMOUNT:
101
+ // 固定金额折扣
102
+ calculatedDiscount = qualifyingTier.discount
103
+ break
104
+ case DiscountType.REDUCE_PRICE:
105
+ // 降低指定价格
106
+ calculatedDiscount = Math.min(subtotal, qualifyingTier.discount)
107
+ break
108
+ default:
109
+ calculatedDiscount = 0
110
+ }
111
+
112
+ return {
113
+ qualifyingDiscount: qualifyingTier,
114
+ nextTierGoal: nextGoal || null,
115
+ discountAmount: calculatedDiscount,
116
+ }
117
+ }, [activeCampaign, subtotal])
118
+
119
+ return {
120
+ qualifyingDiscount,
121
+ nextTierGoal,
122
+ activeCampaign,
123
+ discountAmount,
124
+ cartTotalForDiscount: subtotal,
125
+ isLoading: isCustomerLoading,
126
+ }
127
+ }