@0xsequence/marketplace-sdk 0.8.10 → 0.8.12

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 (436) hide show
  1. package/.changeset/fluffy-jokes-lay.md +5 -0
  2. package/.changeset/wise-bugs-boil.md +8 -0
  3. package/CHANGELOG.md +182 -3
  4. package/dist/CartIcon-Bll1rbxv.js +141 -0
  5. package/dist/CartIcon-Bll1rbxv.js.map +1 -0
  6. package/dist/CollectibleCard-CLQTl0_6.d.ts +8 -0
  7. package/dist/_internal-69NEWNUE.js +34 -0
  8. package/dist/_internal-69NEWNUE.js.map +1 -0
  9. package/dist/abi-BKyRjVcZ.js +0 -0
  10. package/dist/{alien_swap-2B65TDGT.js → alien_swap-B_76IMma.js} +5 -5
  11. package/dist/alien_swap-B_76IMma.js.map +1 -0
  12. package/dist/api-1KFxYh7o.js +232 -0
  13. package/dist/api-1KFxYh7o.js.map +1 -0
  14. package/dist/{aqua-xyz-WMYQLAIS.js → aqua-xyz-CMN_TFY5.js} +5 -5
  15. package/dist/aqua-xyz-CMN_TFY5.js.map +1 -0
  16. package/dist/{aura-V22RV5OG.js → aura-Cye_TuHj.js} +5 -5
  17. package/dist/aura-Cye_TuHj.js.map +1 -0
  18. package/dist/{blur-GE5QOMCM.js → blur-DWDMyMpK.js} +5 -5
  19. package/dist/blur-DWDMyMpK.js.map +1 -0
  20. package/dist/builder-api-BQvzykoU.js +28 -0
  21. package/dist/builder-api-BQvzykoU.js.map +1 -0
  22. package/dist/builder-api-DoK3907S.d.ts +12 -0
  23. package/dist/builder.gen-CxP9NT1p.js +303 -0
  24. package/dist/builder.gen-CxP9NT1p.js.map +1 -0
  25. package/dist/{coinbase-NLHJMGAP.js → coinbase-ByA_XRB0.js} +5 -5
  26. package/dist/coinbase-ByA_XRB0.js.map +1 -0
  27. package/dist/{element-2LGTYYSP.js → element-b77CyXIZ.js} +5 -5
  28. package/dist/element-b77CyXIZ.js.map +1 -0
  29. package/dist/{foundation-BPN66ZTN.js → foundation-DbOrKP9Y.js} +5 -5
  30. package/dist/foundation-DbOrKP9Y.js.map +1 -0
  31. package/dist/index-1bezgsFq.d.ts +1129 -0
  32. package/dist/index-4-kfOFdx.d.ts +22 -0
  33. package/dist/index-BEYefG1G.d.ts +24 -0
  34. package/dist/index-BHiSG-Yi.d.ts +312 -0
  35. package/dist/index-BIMIpDiI.d.ts +188 -0
  36. package/dist/index-BQW0PUkQ.d.ts +3973 -0
  37. package/dist/index-BfH21xmk.d.ts +117 -0
  38. package/dist/index-BjIwVzc4.d.ts +1057 -0
  39. package/dist/index-C39K_8SG.d.ts +1 -0
  40. package/dist/index-CN8puQQJ.d.ts +24 -0
  41. package/dist/index-Cl7PQOGu.d.ts +102 -0
  42. package/dist/index-D5v5iluA.d.ts +809 -0
  43. package/dist/index-DXMfTZ1F.d.ts +7 -0
  44. package/dist/index-DafWjEb4.d.ts +65 -0
  45. package/dist/index-ij9f8GAA.d.ts +1 -0
  46. package/dist/index.css +384 -371
  47. package/dist/index.d.ts +10 -28
  48. package/dist/index.js +13 -105
  49. package/dist/{looks-rare-MZRSOPT4.js → looks-rare-C1VqNcSM.js} +5 -5
  50. package/dist/looks-rare-C1VqNcSM.js.map +1 -0
  51. package/dist/{magic-eden-PUBL6KWW.js → magic-eden-ea_AGCZr.js} +5 -5
  52. package/dist/magic-eden-ea_AGCZr.js.map +1 -0
  53. package/dist/{manifold-GA445YJ6.js → manifold-8y8J2sjT.js} +5 -5
  54. package/dist/manifold-8y8J2sjT.js.map +1 -0
  55. package/dist/marketplace-logos-CSeGcPW4.js +50 -0
  56. package/dist/marketplace-logos-CSeGcPW4.js.map +1 -0
  57. package/dist/marketplace-nwnZv9Cb.js +1913 -0
  58. package/dist/marketplace-nwnZv9Cb.js.map +1 -0
  59. package/dist/marketplace.gen-Dqk8vRmD.js +1068 -0
  60. package/dist/marketplace.gen-Dqk8vRmD.js.map +1 -0
  61. package/dist/marketplaceConfig-D2MYFqll.js +71 -0
  62. package/dist/marketplaceConfig-D2MYFqll.js.map +1 -0
  63. package/dist/{mintify-UMC5PTKC.js → mintify-LA68TzWg.js} +5 -5
  64. package/dist/mintify-LA68TzWg.js.map +1 -0
  65. package/dist/{nftx-AX3CY3IE.js → nftx-D3Tc8nzd.js} +5 -5
  66. package/dist/nftx-D3Tc8nzd.js.map +1 -0
  67. package/dist/{okx-GNVLAE2R.js → okx-hbqg6oIJ.js} +5 -5
  68. package/dist/okx-hbqg6oIJ.js.map +1 -0
  69. package/dist/{open-sea-KI43GVEB.js → open-sea-BccuK8-t.js} +5 -5
  70. package/dist/open-sea-BccuK8-t.js.map +1 -0
  71. package/dist/options-DCi6_23w.js +34 -0
  72. package/dist/options-DCi6_23w.js.map +1 -0
  73. package/dist/primary-sale-Cw95phYC.js +1264 -0
  74. package/dist/primary-sale-Cw95phYC.js.map +1 -0
  75. package/dist/queries-DPvwtnO7.js +486 -0
  76. package/dist/queries-DPvwtnO7.js.map +1 -0
  77. package/dist/{rarible-2J3MMZJ7.js → rarible-BgTwwj9g.js} +5 -5
  78. package/dist/rarible-BgTwwj9g.js.map +1 -0
  79. package/dist/react/_internal/api/index.d.ts +4 -86
  80. package/dist/react/_internal/api/index.js +7 -150
  81. package/dist/react/_internal/databeat/index.d.ts +45 -41
  82. package/dist/react/_internal/databeat/index.js +23 -27
  83. package/dist/react/_internal/index.d.ts +7 -24
  84. package/dist/react/_internal/index.js +9 -176
  85. package/dist/react/_internal/wagmi/index.d.ts +4 -18
  86. package/dist/react/_internal/wagmi/index.js +5 -14
  87. package/dist/react/hooks/index.d.ts +17 -3803
  88. package/dist/react/hooks/index.js +23 -157
  89. package/dist/react/hooks/options/index.d.ts +5 -7
  90. package/dist/react/hooks/options/index.js +11 -19
  91. package/dist/react/index.d.ts +37 -33
  92. package/dist/react/index.js +23 -199
  93. package/dist/react/queries/index.d.ts +8 -26
  94. package/dist/react/queries/index.js +18 -40
  95. package/dist/react/ssr/index.d.ts +19 -13
  96. package/dist/react/ssr/index.js +29 -27
  97. package/dist/react/ssr/index.js.map +1 -1
  98. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +10 -0
  99. package/dist/react/ui/components/marketplace-collectible-card/index.js +23 -0
  100. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +8 -0
  101. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +10 -0
  102. package/dist/react/ui/components/marketplace-logos/index.d.ts +26 -24
  103. package/dist/react/ui/components/marketplace-logos/index.js +3 -45
  104. package/dist/react/ui/icons/index.d.ts +1 -2
  105. package/dist/react/ui/icons/index.js +10 -14
  106. package/dist/react/ui/index.d.ts +10 -116
  107. package/dist/react/ui/index.js +23 -46
  108. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +59 -33
  109. package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -31
  110. package/dist/react-BG7o4PId.js +8351 -0
  111. package/dist/react-BG7o4PId.js.map +1 -0
  112. package/dist/react-BbHBl6gg.css +80 -0
  113. package/dist/react-BbHBl6gg.css.map +1 -0
  114. package/dist/sdk-config-DJzxVPld.d.ts +1535 -0
  115. package/dist/{sequence-TGLUFEPQ.js → sequence-Do3kzb4J.js} +5 -5
  116. package/dist/sequence-Do3kzb4J.js.map +1 -0
  117. package/dist/src-Dz2CfBL0.js +8 -0
  118. package/dist/src-Dz2CfBL0.js.map +1 -0
  119. package/dist/{sudo-swap-M2O6E3TE.js → sudo-swap-B6vPKxBz.js} +5 -5
  120. package/dist/sudo-swap-B6vPKxBz.js.map +1 -0
  121. package/dist/{super-rare-UU2U4LIN.js → super-rare-eCm1SE6O.js} +5 -5
  122. package/dist/super-rare-eCm1SE6O.js.map +1 -0
  123. package/dist/token-CO5llIla.js +1312 -0
  124. package/dist/token-CO5llIla.js.map +1 -0
  125. package/dist/transaction-CcVViHEL.js +97 -0
  126. package/dist/transaction-CcVViHEL.js.map +1 -0
  127. package/dist/types/index.d.ts +3 -12
  128. package/dist/types/index.js +5 -44
  129. package/dist/types-BIJOaL4j.d.ts +68 -0
  130. package/dist/types-DwWE6xOF.js +13 -0
  131. package/dist/types-DwWE6xOF.js.map +1 -0
  132. package/dist/useCollection-C-mclKU0.d.ts +66 -0
  133. package/dist/utils/abi/index.d.ts +5 -3
  134. package/dist/utils/abi/index.js +6 -26
  135. package/dist/utils/abi/marketplace/index.d.ts +2 -805
  136. package/dist/utils/abi/marketplace/index.js +3 -11
  137. package/dist/utils/abi/primary-sale/index.d.ts +2 -1054
  138. package/dist/utils/abi/primary-sale/index.js +3 -9
  139. package/dist/utils/abi/token/index.d.ts +2 -1125
  140. package/dist/utils/abi/token/index.js +3 -11
  141. package/dist/utils/index.d.ts +8 -91
  142. package/dist/utils/index.js +11 -56
  143. package/dist/utils-BFdxaToy.js +216 -0
  144. package/dist/utils-BFdxaToy.js.map +1 -0
  145. package/dist/utils-Cat9_pef.js +44 -0
  146. package/dist/utils-Cat9_pef.js.map +1 -0
  147. package/dist/wagmi-DRctYEk6.js +159 -0
  148. package/dist/wagmi-DRctYEk6.js.map +1 -0
  149. package/dist/{x2y2-3W5BBMZC.js → x2y2-DD17tT91.js} +5 -5
  150. package/dist/x2y2-DD17tT91.js.map +1 -0
  151. package/dist/{zora-6EY6FUH6.js → zora-BpSG9UzS.js} +5 -5
  152. package/dist/zora-BpSG9UzS.js.map +1 -0
  153. package/package.json +21 -19
  154. package/src/index.ts +0 -1
  155. package/src/react/_internal/api/__mocks__/builder.msw.ts +157 -80
  156. package/src/react/_internal/api/__mocks__/indexer.msw.ts +1 -0
  157. package/src/react/_internal/api/builder-api.ts +2 -2
  158. package/src/react/_internal/api/builder.gen.ts +666 -112
  159. package/src/react/_internal/api/marketplace.gen.ts +2421 -1315
  160. package/src/react/_internal/api/services.ts +42 -49
  161. package/src/react/_internal/types.ts +1 -13
  162. package/src/react/_internal/wagmi/__tests__/create-config.test.ts +102 -87
  163. package/src/react/_internal/wagmi/create-config.ts +15 -6
  164. package/src/react/_internal/wagmi/get-connectors.ts +29 -21
  165. package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +273 -0
  166. package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +122 -82
  167. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +7 -4
  168. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +225 -0
  169. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +3 -3
  170. package/src/react/hooks/__tests__/useFilters.test.tsx +0 -16
  171. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +2 -3
  172. package/src/react/hooks/__tests__/useHighestOffer.test.tsx +0 -16
  173. package/src/react/hooks/__tests__/useInventory.test.tsx +6 -42
  174. package/src/react/hooks/__tests__/useListCollections.test.tsx +24 -57
  175. package/src/react/hooks/__tests__/{useCurrencies.test.tsx → useMarketCurrencies.test.tsx} +21 -15
  176. package/src/react/hooks/__tests__/useMarketplaceConfig.test.tsx +2 -59
  177. package/src/react/hooks/index.ts +9 -1
  178. package/src/react/hooks/useBalanceOfCollectible.tsx +14 -8
  179. package/src/react/hooks/useCancelTransactionSteps.tsx +5 -1
  180. package/src/react/hooks/useCheckoutOptions.tsx +2 -1
  181. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +67 -0
  182. package/src/react/hooks/useCollectionDetails.tsx +22 -7
  183. package/src/react/hooks/useConvertPriceToUSD.tsx +1 -1
  184. package/src/react/hooks/useCountListingsForCollectible.tsx +5 -4
  185. package/src/react/hooks/useCountOfCollectables.tsx +10 -7
  186. package/src/react/hooks/useCountOffersForCollectible.tsx +5 -4
  187. package/src/react/hooks/useCurrency.tsx +2 -2
  188. package/src/react/hooks/useERC721SaleMintedTokens.tsx +67 -0
  189. package/src/react/hooks/useFilters.tsx +14 -22
  190. package/src/react/hooks/useFloorOrder.tsx +5 -2
  191. package/src/react/hooks/useGenerateCancelTransaction.tsx +13 -6
  192. package/src/react/hooks/useGenerateListingTransaction.tsx +15 -5
  193. package/src/react/hooks/useGenerateOfferTransaction.tsx +15 -6
  194. package/src/react/hooks/useGenerateSellTransaction.tsx +15 -6
  195. package/src/react/hooks/useGetTokenSuppliesMap.ts +33 -0
  196. package/src/react/hooks/useInventory.tsx +7 -4
  197. package/src/react/hooks/useList1155ShopCardData.tsx +130 -0
  198. package/src/react/hooks/useList721ShopCardData.tsx +130 -0
  199. package/src/react/hooks/useListBalances.tsx +7 -8
  200. package/src/react/hooks/useListCollectibleActivities.tsx +2 -1
  201. package/src/react/hooks/useListCollectibles.tsx +1 -12
  202. package/src/react/hooks/useListCollectiblesPaginated.tsx +8 -5
  203. package/src/react/hooks/useListCollectionActivities.tsx +2 -1
  204. package/src/react/hooks/useListCollections.tsx +14 -76
  205. package/src/react/hooks/useListListingsForCollectible.tsx +2 -1
  206. package/src/react/hooks/useListMarketCardData.tsx +157 -0
  207. package/src/react/hooks/useListOffersForCollectible.tsx +2 -1
  208. package/src/react/hooks/useListPrimarySaleItems.ts +42 -0
  209. package/src/react/hooks/useMarketCurrencies.tsx +8 -0
  210. package/src/react/hooks/useMarketplaceConfig.tsx +0 -2
  211. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +134 -0
  212. package/src/react/queries/highestOffer.ts +6 -4
  213. package/src/react/queries/index.ts +1 -0
  214. package/src/react/queries/inventory.ts +36 -2
  215. package/src/react/queries/listBalances.ts +14 -30
  216. package/src/react/queries/listCollectibles.ts +60 -7
  217. package/src/react/queries/listCollections.ts +124 -0
  218. package/src/react/queries/listTokenMetadata.ts +6 -1
  219. package/src/react/queries/lowestListing.ts +6 -4
  220. package/src/react/queries/marketCurrencies.ts +81 -0
  221. package/src/react/queries/marketplaceConfig.ts +82 -79
  222. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +122 -82
  223. package/src/react/ssr/__tests__/create-ssr-client.test.ts +0 -3
  224. package/src/react/ssr/create-ssr-client.ts +5 -10
  225. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +47 -13
  226. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +1 -1
  227. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +28 -15
  228. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +1 -1
  229. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +1 -1
  230. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +1 -1
  231. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +78 -15
  232. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +1 -1
  233. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +1 -1
  234. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +17 -0
  235. package/src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx +24 -0
  236. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +231 -0
  237. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +76 -0
  238. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +55 -0
  239. package/src/react/ui/components/marketplace-collectible-card/index.ts +3 -0
  240. package/src/react/ui/components/marketplace-collectible-card/types.ts +95 -0
  241. package/src/react/ui/components/marketplace-collectible-card/utils/formatPrice.ts +45 -0
  242. package/src/react/ui/components/marketplace-collectible-card/utils/index.ts +2 -0
  243. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +39 -0
  244. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +124 -0
  245. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +105 -0
  246. package/src/react/ui/components/{collectible-card/media → media}/Media.tsx +52 -30
  247. package/src/react/ui/components/{collectible-card/media → media}/MediaSkeleton.tsx +1 -1
  248. package/src/react/ui/components/{collectible-card/media → media}/types.ts +4 -1
  249. package/src/react/ui/index.ts +5 -2
  250. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +554 -0
  251. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +385 -0
  252. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +272 -0
  253. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx.bak +112 -0
  254. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +117 -13
  255. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +10 -7
  256. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +157 -0
  257. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +136 -0
  258. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +184 -0
  259. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +121 -0
  260. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +85 -0
  261. package/src/react/ui/modals/BuyModal/components/ERC721ShopModal.tsx +86 -0
  262. package/src/react/ui/modals/BuyModal/components/Modal.tsx +14 -0
  263. package/src/react/ui/modals/BuyModal/components/types.ts +8 -0
  264. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +4 -4
  265. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +379 -0
  266. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +253 -0
  267. package/src/react/ui/modals/BuyModal/hooks/__tests__/{useFees.test.tsx → useMarketPlatformFee.test.tsx} +37 -28
  268. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +62 -44
  269. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +73 -0
  270. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +196 -0
  271. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +74 -18
  272. package/src/react/ui/modals/BuyModal/hooks/useMarketPlatformFee.ts +53 -0
  273. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +27 -12
  274. package/src/react/ui/modals/BuyModal/store.ts +147 -13
  275. package/src/react/ui/modals/CreateListingModal/Modal.tsx +3 -5
  276. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +5 -3
  277. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -1
  278. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +7 -5
  279. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +2 -3
  280. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +2 -1
  281. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +4 -3
  282. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +5 -3
  283. package/src/react/ui/modals/SellModal/Modal.tsx +0 -1
  284. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +4 -3
  285. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +8 -5
  286. package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +11 -7
  287. package/src/react/ui/modals/SuccessfulPurchaseModal/index.tsx +34 -28
  288. package/src/react/ui/modals/SuccessfulPurchaseModal/store.ts +71 -0
  289. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +0 -1
  290. package/src/react/ui/modals/TransferModal/index.tsx +0 -1
  291. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +0 -1
  292. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +105 -108
  293. package/src/react/ui/modals/_internal/components/actionModal/store.ts +45 -12
  294. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +2 -2
  295. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +7 -6
  296. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +13 -7
  297. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +3 -5
  298. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +5 -3
  299. package/src/react/ui/modals/_internal/components/switchChainModal/__tests__/SwitchChainModal.test.tsx +12 -8
  300. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +35 -33
  301. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +61 -32
  302. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  303. package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +2 -12
  304. package/src/react/ui/modals/modal-provider.tsx +1 -1
  305. package/src/types/buyModalErrors.ts +438 -0
  306. package/src/types/index.ts +1 -3
  307. package/src/types/new-marketplace-types.ts +104 -0
  308. package/src/types/sdk-config.ts +22 -12
  309. package/src/types/types.ts +17 -0
  310. package/src/utils/_internal/error/transaction.ts +36 -1
  311. package/tsconfig.json +1 -1
  312. package/tsconfig.tsbuildinfo +1 -1
  313. package/tsdown.config.ts +25 -0
  314. package/.ctirc +0 -32
  315. package/dist/alien_swap-2B65TDGT.js.map +0 -1
  316. package/dist/aqua-xyz-WMYQLAIS.js.map +0 -1
  317. package/dist/aura-V22RV5OG.js.map +0 -1
  318. package/dist/blur-GE5QOMCM.js.map +0 -1
  319. package/dist/chunk-2PSNAIAT.js +0 -1
  320. package/dist/chunk-2PSNAIAT.js.map +0 -1
  321. package/dist/chunk-5C6ZZ6WX.js +0 -130
  322. package/dist/chunk-5C6ZZ6WX.js.map +0 -1
  323. package/dist/chunk-5O44EPXZ.js +0 -207
  324. package/dist/chunk-5O44EPXZ.js.map +0 -1
  325. package/dist/chunk-6CTFVBKU.js +0 -1
  326. package/dist/chunk-6CTFVBKU.js.map +0 -1
  327. package/dist/chunk-7F27CJZW.js +0 -1544
  328. package/dist/chunk-7F27CJZW.js.map +0 -1
  329. package/dist/chunk-A7BVFBWB.js +0 -81
  330. package/dist/chunk-A7BVFBWB.js.map +0 -1
  331. package/dist/chunk-D7RVSZAQ.js +0 -332
  332. package/dist/chunk-D7RVSZAQ.js.map +0 -1
  333. package/dist/chunk-DWTLVJAW.js +0 -42
  334. package/dist/chunk-DWTLVJAW.js.map +0 -1
  335. package/dist/chunk-FGM57QUU.js +0 -128
  336. package/dist/chunk-FGM57QUU.js.map +0 -1
  337. package/dist/chunk-FUM4OGOQ.js +0 -1027
  338. package/dist/chunk-FUM4OGOQ.js.map +0 -1
  339. package/dist/chunk-JKCF7HEA.js +0 -1
  340. package/dist/chunk-JKCF7HEA.js.map +0 -1
  341. package/dist/chunk-KTST7ORH.js +0 -53
  342. package/dist/chunk-KTST7ORH.js.map +0 -1
  343. package/dist/chunk-M6NJ73Y5.js +0 -154
  344. package/dist/chunk-M6NJ73Y5.js.map +0 -1
  345. package/dist/chunk-N7BPFK46.js +0 -1
  346. package/dist/chunk-N7BPFK46.js.map +0 -1
  347. package/dist/chunk-NX52D7NX.js +0 -135
  348. package/dist/chunk-NX52D7NX.js.map +0 -1
  349. package/dist/chunk-O34GCB47.js +0 -32
  350. package/dist/chunk-O34GCB47.js.map +0 -1
  351. package/dist/chunk-Q3ECVC4F.js +0 -811
  352. package/dist/chunk-Q3ECVC4F.js.map +0 -1
  353. package/dist/chunk-RVIUUJTP.js +0 -76
  354. package/dist/chunk-RVIUUJTP.js.map +0 -1
  355. package/dist/chunk-SXVUTSMT.js +0 -2895
  356. package/dist/chunk-SXVUTSMT.js.map +0 -1
  357. package/dist/chunk-UJSF7PSC.js +0 -5728
  358. package/dist/chunk-UJSF7PSC.js.map +0 -1
  359. package/dist/chunk-WH5BZC7W.js +0 -38
  360. package/dist/chunk-WH5BZC7W.js.map +0 -1
  361. package/dist/chunk-XX4EVWBF.js +0 -1292
  362. package/dist/chunk-XX4EVWBF.js.map +0 -1
  363. package/dist/chunk-Y2HJO2VY.js +0 -432
  364. package/dist/chunk-Y2HJO2VY.js.map +0 -1
  365. package/dist/chunk-Y63BOO6M.js +0 -11
  366. package/dist/chunk-Y63BOO6M.js.map +0 -1
  367. package/dist/coinbase-NLHJMGAP.js.map +0 -1
  368. package/dist/create-config-CAQcvjl6.d.ts +0 -8
  369. package/dist/element-2LGTYYSP.js.map +0 -1
  370. package/dist/foundation-BPN66ZTN.js.map +0 -1
  371. package/dist/get-query-client-D46hbjk6.d.ts +0 -5
  372. package/dist/index-MlUK9AQE.d.ts +0 -62
  373. package/dist/index.css.map +0 -1
  374. package/dist/index.js.map +0 -1
  375. package/dist/listTokenMetadata-DO4ChDjn.d.ts +0 -203
  376. package/dist/looks-rare-MZRSOPT4.js.map +0 -1
  377. package/dist/magic-eden-PUBL6KWW.js.map +0 -1
  378. package/dist/manifold-GA445YJ6.js.map +0 -1
  379. package/dist/marketplace.gen-DQzWciwC.d.ts +0 -1072
  380. package/dist/marketplaceConfig-D0MXemEl.d.ts +0 -17
  381. package/dist/mintify-UMC5PTKC.js.map +0 -1
  382. package/dist/nftx-AX3CY3IE.js.map +0 -1
  383. package/dist/okx-GNVLAE2R.js.map +0 -1
  384. package/dist/open-sea-KI43GVEB.js.map +0 -1
  385. package/dist/rarible-2J3MMZJ7.js.map +0 -1
  386. package/dist/react/_internal/api/index.js.map +0 -1
  387. package/dist/react/_internal/databeat/index.js.map +0 -1
  388. package/dist/react/_internal/index.js.map +0 -1
  389. package/dist/react/_internal/wagmi/index.js.map +0 -1
  390. package/dist/react/hooks/index.js.map +0 -1
  391. package/dist/react/hooks/options/index.js.map +0 -1
  392. package/dist/react/index.css +0 -2764
  393. package/dist/react/index.css.map +0 -1
  394. package/dist/react/index.js.map +0 -1
  395. package/dist/react/queries/index.js.map +0 -1
  396. package/dist/react/ui/components/collectible-card/index.css +0 -2764
  397. package/dist/react/ui/components/collectible-card/index.css.map +0 -1
  398. package/dist/react/ui/components/collectible-card/index.d.ts +0 -70
  399. package/dist/react/ui/components/collectible-card/index.js +0 -32
  400. package/dist/react/ui/components/collectible-card/index.js.map +0 -1
  401. package/dist/react/ui/components/marketplace-logos/index.js.map +0 -1
  402. package/dist/react/ui/icons/index.js.map +0 -1
  403. package/dist/react/ui/index.css +0 -2764
  404. package/dist/react/ui/index.css.map +0 -1
  405. package/dist/react/ui/index.js.map +0 -1
  406. package/dist/react/ui/modals/_internal/components/actionModal/index.js.map +0 -1
  407. package/dist/sdk-config-onSPBxJj.d.ts +0 -134
  408. package/dist/sequence-TGLUFEPQ.js.map +0 -1
  409. package/dist/services-CMSb9ipU.d.ts +0 -23
  410. package/dist/sudo-swap-M2O6E3TE.js.map +0 -1
  411. package/dist/super-rare-UU2U4LIN.js.map +0 -1
  412. package/dist/types/index.js.map +0 -1
  413. package/dist/types-B8xzPEKX.d.ts +0 -68
  414. package/dist/utils/abi/index.js.map +0 -1
  415. package/dist/utils/abi/marketplace/index.js.map +0 -1
  416. package/dist/utils/abi/primary-sale/index.js.map +0 -1
  417. package/dist/utils/abi/token/index.js.map +0 -1
  418. package/dist/utils/index.js.map +0 -1
  419. package/dist/x2y2-3W5BBMZC.js.map +0 -1
  420. package/dist/zora-6EY6FUH6.js.map +0 -1
  421. package/postcss.config.mjs +0 -5
  422. package/src/react/hooks/__tests__/__snapshots__/useRoyaltyPercentage.test.tsx.snap +0 -8
  423. package/src/react/hooks/useCurrencies.tsx +0 -77
  424. package/src/react/ui/components/collectible-card/CollectibleCard.tsx +0 -170
  425. package/src/react/ui/components/collectible-card/Footer.tsx +0 -157
  426. package/src/react/ui/components/collectible-card/__tests__/CollectibleCard.test.tsx +0 -94
  427. package/src/react/ui/components/collectible-card/__tests__/Footer.test.tsx +0 -136
  428. package/src/react/ui/components/collectible-card/__tests__/Media.test.tsx +0 -224
  429. package/src/react/ui/components/collectible-card/index.ts +0 -2
  430. package/src/react/ui/modals/BuyModal/ERC1155QuantityModal.tsx +0 -124
  431. package/src/react/ui/modals/BuyModal/Modal.tsx +0 -124
  432. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx +0 -104
  433. package/src/react/ui/modals/BuyModal/hooks/useFees.ts +0 -38
  434. package/src/react/ui/modals/SuccessfulPurchaseModal/_store.ts +0 -72
  435. package/tsup.config.ts +0 -23
  436. /package/src/react/ui/components/{collectible-card/media → media}/utils.ts +0 -0
@@ -1,224 +0,0 @@
1
- import { render, screen, waitFor } from '@test/test-utils';
2
- import { describe, expect, it, vi } from 'vitest';
3
- import * as fetchContentTypeModule from '../../../../../utils/fetchContentType';
4
- import type { TokenMetadata } from '../../../../_internal';
5
- import { Media } from '../media/Media';
6
- import * as contentTypeUtils from '../media/utils';
7
-
8
- describe('Media', () => {
9
- it('renders image content correctly with proper loading states and fallback', async () => {
10
- const originalImage = window.Image;
11
-
12
- // We need to use a proper constructor function to match the Image interface
13
- const MockImage = function (this: HTMLImageElement) {
14
- this.src = '';
15
- this.alt = '';
16
- this.className = '';
17
- this.onload = null;
18
- this.onerror = null;
19
- return this;
20
- } as unknown as typeof Image;
21
-
22
- window.Image = MockImage;
23
-
24
- const mockMetadata: Partial<TokenMetadata> = {
25
- tokenId: '1',
26
- name: 'Test Collectible',
27
- image: 'https://example.com/test-image.png',
28
- attributes: [],
29
- };
30
-
31
- // Initial render should show the loading skeleton
32
- const { rerender } = render(
33
- <Media name="Test Collectible" assets={[mockMetadata.image]} />,
34
- );
35
-
36
- // check if skeleton is rendered during loading
37
- const skeleton = screen.getByTestId('collectible-asset-skeleton');
38
- expect(skeleton).toBeInTheDocument();
39
-
40
- // trigger the image load event to simulate successful loading
41
- const imgElement = document.querySelector('img');
42
- expect(imgElement).not.toBeNull();
43
-
44
- if (imgElement) {
45
- expect(imgElement.getAttribute('src')).toBe(
46
- 'https://example.com/test-image.png',
47
- );
48
- expect(imgElement.getAttribute('alt')).toBe('Test Collectible');
49
-
50
- // initial state should be invisible due to loading
51
- expect(imgElement.className).toContain('invisible');
52
-
53
- // successful image load
54
- imgElement.dispatchEvent(new Event('load'));
55
-
56
- // after loading, the image should be visible
57
- expect(imgElement.className).toContain('visible');
58
- }
59
-
60
- // failing image that should use fallback
61
- const mockMetadataWithBadImage: Partial<TokenMetadata> = {
62
- tokenId: '1',
63
- name: 'Test Collectible',
64
- image: 'https://example.com/bad-image.png',
65
- attributes: [],
66
- };
67
-
68
- rerender(
69
- <Media
70
- name="Test Collectible"
71
- assets={[mockMetadataWithBadImage.image]}
72
- />,
73
- );
74
-
75
- const updatedImgElement = document.querySelector('img');
76
- if (updatedImgElement) {
77
- // simulate image load error
78
- updatedImgElement.dispatchEvent(new Event('error'));
79
-
80
- // after error, the src should be changed to the placeholder
81
- expect(updatedImgElement.className).toContain('visible');
82
- }
83
-
84
- // restore the original Image implementation
85
- window.Image = originalImage;
86
- });
87
-
88
- it('handles video content with appropriate controls and loading states', async () => {
89
- const getContentTypeSpy = vi.spyOn(contentTypeUtils, 'getContentType');
90
- getContentTypeSpy.mockResolvedValue('video');
91
-
92
- const fetchContentTypeSpy = vi.spyOn(
93
- fetchContentTypeModule,
94
- 'fetchContentType',
95
- );
96
- fetchContentTypeSpy.mockResolvedValue('video');
97
-
98
- // Create a mock for the HTMLVideoElement addEventListener
99
- const originalAddEventListener =
100
- HTMLVideoElement.prototype.addEventListener;
101
- HTMLVideoElement.prototype.addEventListener = vi.fn(
102
- (event: string, handler: EventListenerOrEventListenerObject) => {
103
- // Immediately call the loadedmetadata handler to simulate video loaded
104
- if (event === 'loadedmetadata' && typeof handler === 'function') {
105
- handler(new Event('loadedmetadata'));
106
- }
107
- },
108
- );
109
-
110
- // Mock browser detection for Safari
111
- const originalUserAgent = navigator.userAgent;
112
- Object.defineProperty(navigator, 'userAgent', {
113
- value:
114
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15',
115
- configurable: true,
116
- });
117
-
118
- // Mock video metadata
119
- const mockVideoMetadata: Partial<TokenMetadata> = {
120
- tokenId: '1',
121
- name: 'Video Collectible',
122
- video: 'https://example.com/video.mp4',
123
- attributes: [],
124
- };
125
-
126
- render(
127
- <Media name="Video Collectible" assets={[mockVideoMetadata.video]} />,
128
- );
129
-
130
- await waitFor(() => {
131
- expect(screen.getByTestId('collectible-asset-video')).toBeInTheDocument();
132
- });
133
-
134
- const videoElement = screen.getByTestId(
135
- 'collectible-asset-video',
136
- ) as HTMLVideoElement;
137
-
138
- expect(videoElement).not.toBeNull();
139
-
140
- // Video source should be set correctly
141
- const sourceElement = videoElement.querySelector('source');
142
- expect(sourceElement).not.toBeNull();
143
- expect(sourceElement?.getAttribute('src')).toBe(
144
- 'https://example.com/video.mp4',
145
- );
146
-
147
- // Video should have correct attributes for NFT display
148
- expect(videoElement.autoplay).toBe(true);
149
- expect(videoElement.loop).toBe(true);
150
- expect(videoElement.controls).toBe(true);
151
- expect(videoElement.playsInline).toBe(true);
152
- expect(videoElement.muted).toBe(true);
153
-
154
- // In Safari, pointer-events-none should be applied
155
- expect(videoElement.className).toContain('pointer-events-none');
156
-
157
- // After metadata loaded, video should be visible
158
- expect(videoElement.className).toContain('visible');
159
-
160
- // Clean up mocks
161
- getContentTypeSpy.mockRestore();
162
- fetchContentTypeSpy.mockRestore();
163
- HTMLVideoElement.prototype.addEventListener = originalAddEventListener;
164
- Object.defineProperty(navigator, 'userAgent', {
165
- value: originalUserAgent,
166
- configurable: true,
167
- });
168
- });
169
-
170
- it('handles HTML content in iframes with proper sandboxing', async () => {
171
- const getContentTypeSpy = vi.spyOn(contentTypeUtils, 'getContentType');
172
- getContentTypeSpy.mockResolvedValue('html');
173
-
174
- const fetchContentTypeSpy = vi.spyOn(
175
- fetchContentTypeModule,
176
- 'fetchContentType',
177
- );
178
- fetchContentTypeSpy.mockResolvedValue('html');
179
-
180
- // Mock HTML content metadata
181
- const mockHtmlMetadata: Partial<TokenMetadata> = {
182
- tokenId: '1',
183
- name: 'HTML Collectible',
184
- animation_url: 'https://example.com/interactive.html',
185
- attributes: [],
186
- };
187
-
188
- render(
189
- <Media
190
- name="HTML Collectible"
191
- assets={[mockHtmlMetadata.animation_url]}
192
- />,
193
- );
194
-
195
- await waitFor(() => {
196
- expect(document.querySelector('iframe')).toBeInTheDocument();
197
- });
198
-
199
- // Check that iframe element is present with correct attributes
200
- const iframeElement = document.querySelector('iframe') as HTMLIFrameElement;
201
- expect(iframeElement).toBeInTheDocument();
202
-
203
- // iframe source should be set correctly
204
- expect(iframeElement.getAttribute('src')).toBe(
205
- 'https://example.com/interactive.html',
206
- );
207
-
208
- // iframe should have appropriate attributes for security
209
- expect(iframeElement.getAttribute('sandbox')).toBe('allow-scripts');
210
-
211
- // iframe should have title for accessibility
212
- expect(iframeElement.getAttribute('title')).toBe('HTML Collectible');
213
-
214
- // iframe should have proper styling
215
- expect(iframeElement.className).toContain('aspect-square');
216
- expect(iframeElement.className).toContain('w-full');
217
-
218
- // Verify border styling
219
- expect(iframeElement.style.border).toBe('0px');
220
-
221
- getContentTypeSpy.mockRestore();
222
- fetchContentTypeSpy.mockRestore();
223
- });
224
- });
@@ -1,2 +0,0 @@
1
- export * from './CollectibleCard';
2
- export * from './media/Media';
@@ -1,124 +0,0 @@
1
- 'use client';
2
-
3
- import { use$, useObservable } from '@legendapp/state/react';
4
-
5
- import { Text, TokenImage } from '@0xsequence/design-system';
6
- import { DEFAULT_MARKETPLACE_FEE_PERCENTAGE } from '../../../../consts';
7
- import { compareAddress } from '../../../../utils/address';
8
- import { formatPriceWithFee } from '../../../../utils/price';
9
- import type { Order } from '../../../_internal';
10
- import { useCurrency, useMarketplaceConfig } from '../../../hooks';
11
- import { ActionModal } from '../_internal/components/actionModal';
12
- import QuantityInput from '../_internal/components/quantityInput';
13
- import { buyModalStore, useBuyModalProps, useIsOpen } from './store';
14
-
15
- export const ERC1155QuantityModal = ({ order }: { order: Order }) => {
16
- const { chainId } = useBuyModalProps();
17
- const isOpen = useIsOpen();
18
-
19
- const localQuantity$ = useObservable('1');
20
- const localQuantity = use$(localQuantity$);
21
- const invalidQuantity$ = useObservable(false);
22
- const invalidQuantity = use$(invalidQuantity$);
23
-
24
- return (
25
- <ActionModal
26
- isOpen={isOpen}
27
- chainId={chainId}
28
- onClose={() => buyModalStore.send({ type: 'close' })}
29
- title="Select Quantity"
30
- disableAnimation={true}
31
- ctas={[
32
- {
33
- label: 'Buy now',
34
- onClick: () => {
35
- buyModalStore.send({
36
- type: 'setQuantity',
37
- quantity: Number(localQuantity),
38
- });
39
- },
40
- disabled: invalidQuantity,
41
- },
42
- ]}
43
- >
44
- <div className="flex w-full flex-col gap-4">
45
- <QuantityInput
46
- $quantity={localQuantity$}
47
- $invalidQuantity={invalidQuantity$}
48
- decimals={order.quantityDecimals}
49
- maxQuantity={order.quantityRemaining}
50
- />
51
-
52
- <TotalPrice order={order} quantityStr={localQuantity} />
53
- </div>
54
- </ActionModal>
55
- );
56
- };
57
-
58
- const TotalPrice = ({
59
- order,
60
- quantityStr,
61
- }: { order: Order; quantityStr: string }) => {
62
- const { data: marketplaceConfig } = useMarketplaceConfig();
63
- const { data: currency, isLoading: isCurrencyLoading } = useCurrency({
64
- chainId: order.chainId,
65
- currencyAddress: order.priceCurrencyAddress,
66
- });
67
-
68
- let error: null | string = null;
69
- let formattedPrice = '0';
70
-
71
- if (currency) {
72
- try {
73
- const marketplaceFeePercentage =
74
- marketplaceConfig?.collections.find((collection) =>
75
- compareAddress(collection.address, order.collectionContractAddress),
76
- )?.feePercentage || DEFAULT_MARKETPLACE_FEE_PERCENTAGE;
77
- const quantity = BigInt(quantityStr);
78
- const totalPriceRaw = BigInt(order.priceAmount) * quantity;
79
-
80
- formattedPrice = formatPriceWithFee(
81
- totalPriceRaw,
82
- currency.decimals,
83
- marketplaceFeePercentage,
84
- );
85
- } catch (e) {
86
- console.error('Error formatting price', e);
87
- error = 'Unable to calculate total price';
88
- }
89
- }
90
-
91
- return error ? (
92
- <Text className="font-body font-medium text-xs" color="text50">
93
- {error}
94
- </Text>
95
- ) : (
96
- <div className="flex justify-between">
97
- <Text className="font-body font-medium text-xs" color="text50">
98
- Total Price
99
- </Text>
100
-
101
- <div className="flex items-center gap-0.5">
102
- {isCurrencyLoading || !currency ? (
103
- <div className="flex items-center gap-2">
104
- <Text className="font-body text-text-50 text-xs">Loading...</Text>
105
- </div>
106
- ) : (
107
- <>
108
- {currency.imageUrl && (
109
- <TokenImage src={currency.imageUrl} size="xs" />
110
- )}
111
-
112
- <Text className="font-body font-bold text-text-100 text-xs">
113
- {formattedPrice}
114
- </Text>
115
-
116
- <Text className="font-body font-bold text-text-80 text-xs">
117
- {currency?.symbol}
118
- </Text>
119
- </>
120
- )}
121
- </div>
122
- </div>
123
- );
124
- };
@@ -1,124 +0,0 @@
1
- 'use client';
2
-
3
- import {
4
- type SelectPaymentSettings,
5
- useSelectPaymentModal,
6
- } from '@0xsequence/checkout';
7
- import { useEffect, useRef } from 'react';
8
- import { ContractType } from '../../../_internal';
9
- import { ErrorModal } from '../_internal/components/actionModal/ErrorModal';
10
- import { LoadingModal } from '../_internal/components/actionModal/LoadingModal';
11
- import { ERC1155QuantityModal } from './ERC1155QuantityModal';
12
- import { useLoadData } from './hooks/useLoadData';
13
- import { usePaymentModalParams } from './hooks/usePaymentModalParams';
14
- import {
15
- buyModalStore,
16
- useBuyModalProps,
17
- useIsOpen,
18
- useOnError,
19
- useQuantity,
20
- } from './store';
21
-
22
- export const BuyModal = () => {
23
- const isOpen = useIsOpen();
24
-
25
- if (!isOpen) {
26
- return null;
27
- }
28
-
29
- return <BuyModalContent />;
30
- };
31
-
32
- const BuyModalContent = () => {
33
- const { chainId } = useBuyModalProps();
34
-
35
- const onError = useOnError();
36
-
37
- const quantity = useQuantity();
38
-
39
- const {
40
- collection,
41
- collectable,
42
- wallet,
43
- isLoading,
44
- isError,
45
- order,
46
- checkoutOptions,
47
- } = useLoadData();
48
-
49
- const {
50
- data: paymentModalParams,
51
- isLoading: isPaymentModalParamsLoading,
52
- isError: isPaymentModalParamsError,
53
- } = usePaymentModalParams({
54
- wallet,
55
- quantity,
56
- marketplace: order?.marketplace,
57
- collectable: collectable,
58
- checkoutOptions: checkoutOptions,
59
- priceCurrencyAddress: order?.priceCurrencyAddress,
60
- });
61
-
62
- // biome-ignore lint/correctness/useExhaustiveDependencies: we want to set this on collection change
63
- useEffect(() => {
64
- if (collection?.type === ContractType.ERC721 && !quantity) {
65
- buyModalStore.send({ type: 'setQuantity', quantity: 1 });
66
- }
67
- }, [collection]);
68
-
69
- if (isError || isPaymentModalParamsError) {
70
- onError(new Error('Error loading data'));
71
- return (
72
- <ErrorModal
73
- isOpen={true}
74
- chainId={chainId}
75
- onClose={() => buyModalStore.send({ type: 'close' })}
76
- title="Error"
77
- />
78
- );
79
- }
80
-
81
- if (
82
- isLoading ||
83
- isPaymentModalParamsLoading ||
84
- !collection ||
85
- !collectable ||
86
- !order
87
- ) {
88
- return (
89
- <LoadingModal
90
- isOpen={true}
91
- chainId={chainId}
92
- onClose={() => buyModalStore.send({ type: 'close' })}
93
- title="Loading Sequence Pay"
94
- />
95
- );
96
- }
97
-
98
- if (collection.type === ContractType.ERC1155 && !quantity) {
99
- return <ERC1155QuantityModal order={order} />;
100
- }
101
-
102
- if (paymentModalParams) {
103
- return <PaymentModalOpener paymentModalParams={paymentModalParams} />;
104
- }
105
- };
106
-
107
- const PaymentModalOpener = ({
108
- paymentModalParams,
109
- }: {
110
- paymentModalParams: SelectPaymentSettings;
111
- }) => {
112
- const { openSelectPaymentModal } = useSelectPaymentModal();
113
- const hasOpenedRef = useRef(false);
114
-
115
- // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
116
- useEffect(() => {
117
- if (!hasOpenedRef.current) {
118
- hasOpenedRef.current = true;
119
- openSelectPaymentModal(paymentModalParams);
120
- }
121
- }, []);
122
-
123
- return null;
124
- };
@@ -1,104 +0,0 @@
1
- import { cleanup, render, screen } from '@test';
2
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
3
-
4
- import { server } from '@test';
5
- import type { Address } from 'viem';
6
- import { mockOrder } from '../../../../_internal/api/__mocks__/marketplace.msw';
7
- import { BuyModal } from '../Modal';
8
- import { buyModalStore } from '../store';
9
-
10
- describe('BuyModal', () => {
11
- beforeEach(() => {
12
- buyModalStore.send({ type: 'close' });
13
- });
14
-
15
- afterEach(() => {
16
- cleanup();
17
- // Reset server handlers
18
- server.resetHandlers();
19
- });
20
-
21
- // Currently this is the only test we can run without the provider
22
- it('should not render when isOpen is false', () => {
23
- render(<BuyModal />);
24
-
25
- expect(screen.queryByText('Loading Sequence Pay')).not.toBeInTheDocument();
26
- expect(screen.queryByText('Checkout')).not.toBeInTheDocument();
27
- expect(screen.queryByText('Select Quantity')).not.toBeInTheDocument();
28
- });
29
-
30
- it.skip('should render error modal when there is an error', async () => {
31
- // server.use(
32
- // http.post(mockMetadataEndpoint("GetContractInfo"), () => {
33
- // return new HttpResponse(null, {
34
- // status: 404,
35
- // })
36
- // }),
37
- // );
38
- // buyModalStore.send({
39
- // type: 'open',
40
- // props: {
41
- // orderId: mockOrder.orderId,
42
- // chainId: mockOrder.chainId,
43
- // collectionAddress: mockOrder.collectionContractAddress as Address,
44
- // collectibleId: "1",
45
- // marketplace: mockOrder.marketplace,
46
- // },
47
- // });
48
- // render(
49
- // <BuyModal />
50
- // );
51
- // // Should show error modal
52
- // await waitFor(() => {
53
- // expect(screen.getByText("Error")).toBeInTheDocument();
54
- // }, { timeout: 1000 });
55
- });
56
-
57
- it.skip('should render ERC1155QuantityModal when contract type is ERC1155', async () => {
58
- // // Create an ERC1155 mock collection
59
- // const erc1155Collection = {
60
- // ...mockCollection,
61
- // contractType: ContractType.ERC1155,
62
- // };
63
- // const erc1155Order = {
64
- // ...testOrder,
65
- // quantityRemaining: "10",
66
- // quantityRemainingFormatted: "10",
67
- // };
68
- // buyModalStore.send({
69
- // type: 'open',
70
- // props: {
71
- // orderId: erc1155Order.orderId,
72
- // chainId: erc1155Order.chainId,
73
- // collectionAddress: erc1155Order.collectionContractAddress,
74
- // collectibleId: erc1155Order.tokenId,
75
- // marketplace: erc1155Order.marketplace,
76
- // },
77
- // });
78
- // render(<BuyModal />);
79
- // // First should show loading
80
- // expect(screen.getByText("Loading Sequence Pay")).toBeInTheDocument();
81
- // // Then should show quantity modal for ERC1155
82
- // await waitFor(() => {
83
- // expect(screen.getByText("Select Quantity")).toBeInTheDocument();
84
- // }, { timeout: 5000 });
85
- });
86
-
87
- it('should show loading modal', async () => {
88
- buyModalStore.send({
89
- type: 'open',
90
- props: {
91
- orderId: mockOrder.orderId,
92
- chainId: mockOrder.chainId,
93
- collectionAddress: mockOrder.collectionContractAddress as Address,
94
- collectibleId: '1',
95
- marketplace: mockOrder.marketplace,
96
- },
97
- });
98
-
99
- render(<BuyModal />);
100
-
101
- // Should show loading modal
102
- expect(screen.getByText('Loading Sequence Pay')).toBeInTheDocument();
103
- });
104
- });
@@ -1,38 +0,0 @@
1
- import { avalanche, optimism } from 'viem/chains';
2
- import type { AdditionalFee } from '../../../../_internal';
3
- import { useMarketplaceConfig } from '../../../../hooks';
4
-
5
- export const useFees = ({
6
- chainId,
7
- collectionAddress,
8
- }: {
9
- chainId: number;
10
- collectionAddress: string;
11
- }) => {
12
- const defaultFee = 2.5;
13
- const defaultPlatformFeeRecipient =
14
- '0x858dB1cbF6D09D447C96A11603189b49B2D1C219';
15
- const avalancheAndOptimismPlatformFeeRecipient =
16
- '0x400cdab4676c17aec07e8ec748a5fc3b674bca41';
17
- const { data: marketplaceConfig } = useMarketplaceConfig();
18
-
19
- const collection = marketplaceConfig?.collections.find(
20
- (collection) =>
21
- collection.address.toLowerCase() === collectionAddress.toLowerCase() &&
22
- chainId === Number(collection.chainId),
23
- );
24
-
25
- const avalancheOrOptimism =
26
- chainId === avalanche.id || chainId === optimism.id;
27
- const receiver = avalancheOrOptimism
28
- ? avalancheAndOptimismPlatformFeeRecipient
29
- : defaultPlatformFeeRecipient;
30
-
31
- const percentageToBPS = (percentage: string | number) =>
32
- (Number(percentage) * 10000) / 100;
33
-
34
- return {
35
- amount: percentageToBPS(collection?.feePercentage || defaultFee).toString(),
36
- receiver,
37
- } satisfies AdditionalFee;
38
- };
@@ -1,72 +0,0 @@
1
- import type { IconProps } from '@0xsequence/design-system';
2
- import { observable } from '@legendapp/state';
3
- import type { ComponentType } from 'react';
4
- import type { TokenMetadata } from '../../../_internal';
5
- import type { ModalCallbacks } from '../_internal/types';
6
-
7
- export interface SuccessfulPurchaseModalState {
8
- isOpen: boolean;
9
- open: (
10
- args: SuccessfulPurchaseModalState['state'] & {
11
- callbacks?: ModalCallbacks;
12
- defaultCallbacks?: ModalCallbacks;
13
- },
14
- ) => void;
15
- close: () => void;
16
- state: {
17
- collectibles: TokenMetadata[];
18
- totalPrice: string;
19
- explorerName: string;
20
- explorerUrl: string;
21
- ctaOptions?: {
22
- ctaLabel: string;
23
- ctaOnClick: () => void;
24
- ctaIcon?: ComponentType<IconProps>;
25
- };
26
- };
27
- callbacks?: ModalCallbacks;
28
- }
29
-
30
- const initialState: SuccessfulPurchaseModalState = {
31
- isOpen: false,
32
- open: ({
33
- collectibles,
34
- totalPrice,
35
- explorerName,
36
- explorerUrl,
37
- ctaOptions,
38
- callbacks,
39
- defaultCallbacks,
40
- }: SuccessfulPurchaseModalState['state'] & {
41
- callbacks?: ModalCallbacks;
42
- defaultCallbacks?: ModalCallbacks;
43
- }) => {
44
- successfulPurchaseModal$.state.set({
45
- ...successfulPurchaseModal$.state.get(),
46
- collectibles,
47
- totalPrice,
48
- explorerName,
49
- explorerUrl: explorerUrl,
50
- ctaOptions,
51
- });
52
- successfulPurchaseModal$.callbacks.set(callbacks || defaultCallbacks);
53
- successfulPurchaseModal$.isOpen.set(true);
54
- },
55
- close: () => {
56
- successfulPurchaseModal$.isOpen.set(false);
57
- successfulPurchaseModal$.callbacks.set(undefined);
58
- successfulPurchaseModal$.state.set({
59
- ...initialState.state,
60
- });
61
- },
62
- state: {
63
- collectibles: [],
64
- totalPrice: '0',
65
- explorerName: '',
66
- explorerUrl: '',
67
- ctaOptions: undefined,
68
- },
69
- callbacks: undefined,
70
- };
71
-
72
- export const successfulPurchaseModal$ = observable(initialState);