@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
@@ -0,0 +1,112 @@
1
+ // import { cleanup, render, screen, waitFor } 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 { MarketplaceType } from "../../../../../types";
7
+ // import {
8
+ // mockCollection,
9
+ // mockOrder,
10
+ // } from "../../../../_internal/api/__mocks__/marketplace.msw";
11
+ // import { BuyModal } from "../Modal";
12
+ // import { buyModalStore } from "../store";
13
+
14
+ // describe("BuyModal", () => {
15
+ // beforeEach(() => {
16
+ // buyModalStore.send({ type: "close" });
17
+ // });
18
+
19
+ // afterEach(() => {
20
+ // cleanup();
21
+ // // Reset server handlers
22
+ // server.resetHandlers();
23
+ // });
24
+
25
+ // it("should not render when isOpen is false", () => {
26
+ // render(<BuyModal />);
27
+
28
+ // expect(screen.queryByText("Loading Sequence Pay")).not.toBeInTheDocument();
29
+ // expect(screen.queryByText("Checkout")).not.toBeInTheDocument();
30
+ // expect(screen.queryByText("Select Quantity")).not.toBeInTheDocument();
31
+ // });
32
+
33
+ // it.skip("should render error modal when there is an error", async () => {
34
+ // server.use(
35
+ // http.post(mockMetadataEndpoint("GetContractInfo"), () => {
36
+ // return new HttpResponse(null, {
37
+ // status: 404,
38
+ // });
39
+ // })
40
+ // );
41
+ // buyModalStore.send({
42
+ // type: "open",
43
+ // props: {
44
+ // orderId: mockOrder.orderId,
45
+ // chainId: mockOrder.chainId,
46
+ // collectionAddress: mockOrder.collectionContractAddress as Address,
47
+ // collectibleId: "1",
48
+ // marketplace: mockOrder.marketplace,
49
+ // },
50
+ // });
51
+ // render(<BuyModal />);
52
+ // // Should show error modal
53
+ // await waitFor(
54
+ // () => {
55
+ // expect(screen.getByText("Error")).toBeInTheDocument();
56
+ // },
57
+ // { timeout: 1000 }
58
+ // );
59
+ // });
60
+
61
+ // it.skip("should render ERC1155QuantityModal when contract type is ERC1155", async () => {
62
+ // // Create an ERC1155 mock collection
63
+ // const erc1155Collection = {
64
+ // ...mockCollection,
65
+ // contractType: ContractType.ERC1155,
66
+ // };
67
+ // const erc1155Order = {
68
+ // ...mockOrder,
69
+ // quantityRemaining: "10",
70
+ // quantityRemainingFormatted: "10",
71
+ // };
72
+ // buyModalStore.send({
73
+ // type: "open",
74
+ // props: {
75
+ // orderId: erc1155Order.orderId,
76
+ // chainId: erc1155Order.chainId,
77
+ // collectionAddress: erc1155Order.collectionContractAddress,
78
+ // collectibleId: erc1155Order.tokenId,
79
+ // marketplace: erc1155Order.marketplace,
80
+ // },
81
+ // });
82
+ // render(<BuyModal />);
83
+ // // First should show loading
84
+ // expect(screen.getByText("Loading Sequence Pay")).toBeInTheDocument();
85
+ // // Then should show quantity modal for ERC1155
86
+ // await waitFor(
87
+ // () => {
88
+ // expect(screen.getByText("Select Quantity")).toBeInTheDocument();
89
+ // },
90
+ // { timeout: 5000 }
91
+ // );
92
+ // });
93
+
94
+ // it("should show loading modal", async () => {
95
+ // buyModalStore.send({
96
+ // type: "open",
97
+ // props: {
98
+ // orderId: mockOrder.orderId,
99
+ // chainId: mockOrder.chainId,
100
+ // collectionAddress: mockOrder.collectionContractAddress as Address,
101
+ // collectibleId: "1",
102
+ // marketplace: mockOrder.marketplace,
103
+ // marketplaceType: MarketplaceType.MARKET,
104
+ // },
105
+ // });
106
+
107
+ // render(<BuyModal />);
108
+
109
+ // // Should show loading modal
110
+ // expect(screen.getByText("Loading Sequence Pay")).toBeInTheDocument();
111
+ // });
112
+ // });
@@ -1,8 +1,14 @@
1
- import { act, fireEvent, render, screen } from '@test';
1
+ import {
2
+ act,
3
+ fireEvent,
4
+ render,
5
+ screen,
6
+ waitForElementToBeRemoved,
7
+ } from '@test';
2
8
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
3
9
  import type { Order } from '../../../../_internal';
4
10
  import { MarketplaceKind, OrderSide, OrderStatus } from '../../../../_internal';
5
- import { ERC1155QuantityModal } from '../ERC1155QuantityModal';
11
+ import { ERC1155QuantityModal } from '../components/ERC1155QuantityModal';
6
12
  import { buyModalStore } from '../store';
7
13
 
8
14
  const testOrder: Order = {
@@ -49,6 +55,7 @@ describe('ERC1155QuantityModal', () => {
49
55
  collectionAddress: '0x123' as `0x${string}`,
50
56
  collectibleId: '1',
51
57
  marketplace: MarketplaceKind.sequence_marketplace_v2,
58
+ marketplaceType: 'market',
52
59
  },
53
60
  });
54
61
  });
@@ -59,17 +66,38 @@ describe('ERC1155QuantityModal', () => {
59
66
  });
60
67
 
61
68
  it('should render quantity modal with order details', async () => {
62
- render(<ERC1155QuantityModal order={testOrder} />);
69
+ render(
70
+ <ERC1155QuantityModal
71
+ order={testOrder}
72
+ marketplaceType={'market'}
73
+ chainId={1}
74
+ quantityDecimals={0}
75
+ quantityRemaining="10"
76
+ />,
77
+ );
63
78
 
64
79
  // Check if the modal renders with the correct title
65
80
  expect(screen.getByText('Select Quantity')).toBeInTheDocument();
66
81
 
82
+ // Wait for spinner to disappear if it exists
83
+ try {
84
+ await waitForElementToBeRemoved(() => screen.queryByTestId('spinner'));
85
+ } catch (error) {
86
+ // If no spinner or already gone, continue
87
+ }
88
+
67
89
  // Check if the Buy now button exists
68
90
  const buyButton = await screen.findByRole('button', { name: /buy now/i });
69
91
  expect(buyButton).toBeInTheDocument();
92
+
70
93
  // Capture the initial store state
71
94
  const initialState = buyModalStore.getSnapshot();
72
- expect(initialState.context.quantity).toBeUndefined();
95
+ expect(initialState.context.quantity).toBeNull();
96
+
97
+ // Check for Total Price section
98
+ await act(async () => {
99
+ expect(await screen.findByText('Total Price')).toBeInTheDocument();
100
+ });
73
101
 
74
102
  // Click the Buy now button with default quantity "1"
75
103
  await act(async () => {
@@ -82,14 +110,31 @@ describe('ERC1155QuantityModal', () => {
82
110
  });
83
111
 
84
112
  it('should update quantity when user changes the input value', async () => {
85
- render(<ERC1155QuantityModal order={testOrder} />);
86
-
87
- // Find the quantity input using label text
88
- const quantityInput = await screen.findByLabelText('Enter quantity');
113
+ render(
114
+ <ERC1155QuantityModal
115
+ order={testOrder}
116
+ marketplaceType={'market'}
117
+ chainId={1}
118
+ quantityDecimals={0}
119
+ quantityRemaining="10"
120
+ />,
121
+ );
122
+
123
+ // Wait for spinner to disappear if it exists
124
+ try {
125
+ await waitForElementToBeRemoved(() => screen.queryByTestId('spinner'));
126
+ } catch (error) {
127
+ // If no spinner or already gone, continue
128
+ }
129
+
130
+ // Find the quantity input using role and name
131
+ const quantityInput = await screen.findByRole('textbox', {
132
+ name: /enter quantity/i,
133
+ });
89
134
 
90
135
  // Capture initial store state
91
136
  const initialState = buyModalStore.getSnapshot();
92
- expect(initialState.context.quantity).toBeUndefined();
137
+ expect(initialState.context.quantity).toBeNull();
93
138
 
94
139
  // Change quantity to 5
95
140
  await act(async () => {
@@ -97,7 +142,7 @@ describe('ERC1155QuantityModal', () => {
97
142
  });
98
143
 
99
144
  // Click Buy now button
100
- const buyButton = screen.getByRole('button', { name: /buy now/i });
145
+ const buyButton = await screen.findByRole('button', { name: /buy now/i });
101
146
  await act(async () => {
102
147
  fireEvent.click(buyButton);
103
148
  });
@@ -108,9 +153,27 @@ describe('ERC1155QuantityModal', () => {
108
153
  });
109
154
 
110
155
  it('should validate input quantity against available quantity', async () => {
111
- render(<ERC1155QuantityModal order={testOrder} />);
112
-
113
- const quantityInput = await screen.findByLabelText('Enter quantity');
156
+ render(
157
+ <ERC1155QuantityModal
158
+ order={testOrder}
159
+ marketplaceType={'market'}
160
+ chainId={1}
161
+ quantityDecimals={0}
162
+ quantityRemaining="10"
163
+ />,
164
+ );
165
+
166
+ // Wait for spinner to disappear if it exists
167
+ try {
168
+ await waitForElementToBeRemoved(() => screen.queryByTestId('spinner'));
169
+ } catch (error) {
170
+ // If no spinner or already gone, continue
171
+ }
172
+
173
+ // Find the quantity input using role and name
174
+ const quantityInput = await screen.findByRole('textbox', {
175
+ name: /enter quantity/i,
176
+ });
114
177
 
115
178
  const invalidQuantity = '';
116
179
  await act(async () => {
@@ -137,4 +200,45 @@ describe('ERC1155QuantityModal', () => {
137
200
  const updatedState = buyModalStore.getSnapshot();
138
201
  expect(updatedState.context.quantity).toBe(10);
139
202
  });
203
+ it('should display total price based on selected quantity', async () => {
204
+ render(
205
+ <ERC1155QuantityModal
206
+ order={testOrder}
207
+ marketplaceType={'market'}
208
+ chainId={1}
209
+ quantityDecimals={0}
210
+ quantityRemaining="10"
211
+ />,
212
+ );
213
+
214
+ // Wait for spinner to disappear if it exists
215
+ try {
216
+ await waitForElementToBeRemoved(() => screen.queryByTestId('spinner'));
217
+ } catch (error) {
218
+ // If no spinner or already gone, continue
219
+ }
220
+
221
+ // Check that Total Price section is displayed (using findByText for async)
222
+ await act(async () => {
223
+ expect(await screen.findByText('Total Price')).toBeInTheDocument();
224
+ });
225
+
226
+ // Initially, when no currency data is loaded, it should show loading
227
+ await act(async () => {
228
+ expect(await screen.findByText('Loading...')).toBeInTheDocument();
229
+ });
230
+ });
231
+
232
+ // it("should show error modal when required props are missing", async () => {
233
+ // render(
234
+ // <ERC1155QuantityModal
235
+ // order={testOrder}
236
+ // marketplaceType={'market'}
237
+ // chainId={1}
238
+ // />
239
+ // );
240
+
241
+ // // Should show error modal
242
+ // expect(screen.getByText("Error")).toBeInTheDocument();
243
+ // });
140
244
  });
@@ -1,6 +1,6 @@
1
1
  import { beforeEach, describe, expect, it } from 'vitest';
2
2
  import { MarketplaceKind } from '../../../../_internal';
3
- import { buyModalStore } from '../store';
3
+ import { type MarketplaceBuyModalProps, buyModalStore } from '../store';
4
4
 
5
5
  describe('BuyModal Store', () => {
6
6
  beforeEach(() => {
@@ -11,16 +11,17 @@ describe('BuyModal Store', () => {
11
11
  const state = buyModalStore.getSnapshot();
12
12
  expect(state.context.isOpen).toBe(false);
13
13
  expect(state.context.props).toBeDefined();
14
- expect(state.context.quantity).toBeUndefined();
14
+ expect(state.context.quantity).toBeNull();
15
15
  });
16
16
 
17
17
  it('should handle open action correctly', () => {
18
- const mockProps = {
18
+ const mockProps: MarketplaceBuyModalProps = {
19
19
  orderId: '1',
20
20
  chainId: 1,
21
21
  collectionAddress: '0x123' as `0x${string}`,
22
22
  collectibleId: '1',
23
23
  marketplace: MarketplaceKind.sequence_marketplace_v2,
24
+ marketplaceType: 'market',
24
25
  };
25
26
 
26
27
  buyModalStore.send({
@@ -36,12 +37,13 @@ describe('BuyModal Store', () => {
36
37
  });
37
38
 
38
39
  it('should handle close action correctly', () => {
39
- const mockProps = {
40
+ const mockProps: MarketplaceBuyModalProps = {
40
41
  orderId: '1',
41
42
  chainId: 1,
42
43
  collectionAddress: '0x123' as `0x${string}`,
43
44
  collectibleId: '1',
44
45
  marketplace: MarketplaceKind.sequence_marketplace_v2,
46
+ marketplaceType: 'market',
45
47
  };
46
48
 
47
49
  buyModalStore.send({
@@ -61,12 +63,13 @@ describe('BuyModal Store', () => {
61
63
  });
62
64
 
63
65
  it('should update loading states correctly', () => {
64
- const mockProps = {
66
+ const mockProps: MarketplaceBuyModalProps = {
65
67
  orderId: '1',
66
68
  chainId: 1,
67
69
  collectionAddress: '0x123' as `0x${string}`,
68
70
  collectibleId: '1',
69
71
  marketplace: MarketplaceKind.sequence_marketplace_v2,
72
+ marketplaceType: 'market',
70
73
  };
71
74
 
72
75
  buyModalStore.send({
@@ -75,7 +78,7 @@ describe('BuyModal Store', () => {
75
78
  });
76
79
 
77
80
  const state1 = buyModalStore.getSnapshot();
78
- expect(state1.context.quantity).toBeUndefined();
81
+ expect(state1.context.quantity).toBeNull();
79
82
 
80
83
  buyModalStore.send({
81
84
  type: 'setQuantity',
@@ -89,6 +92,6 @@ describe('BuyModal Store', () => {
89
92
  buyModalStore.send({ type: 'close' });
90
93
 
91
94
  const state3 = buyModalStore.getSnapshot();
92
- expect(state3.context.quantity).toBeUndefined();
95
+ expect(state3.context.quantity).toBeNull();
93
96
  });
94
97
  });
@@ -0,0 +1,157 @@
1
+ 'use client';
2
+
3
+ import { ErrorModal } from '../../_internal/components/actionModal/ErrorModal';
4
+ import { LoadingModal } from '../../_internal/components/actionModal/LoadingModal';
5
+ import { useLoadData } from '../hooks/useLoadData';
6
+ import {
7
+ buyModalStore,
8
+ isShopProps,
9
+ useBuyModalProps,
10
+ useOnError,
11
+ } from '../store';
12
+ import { ERC721BuyModal } from './ERC721BuyModal';
13
+ import { ERC721ShopModal } from './ERC721ShopModal';
14
+ import { ERC1155BuyModal } from './ERC1155BuyModal';
15
+ import { ERC1155ShopModal } from './ERC1155ShopModal';
16
+
17
+ export const BuyModalRouter = () => {
18
+ const modalProps = useBuyModalProps();
19
+ const chainId = modalProps.chainId;
20
+ const isShop = isShopProps(modalProps);
21
+ const onError = useOnError();
22
+ const {
23
+ collection,
24
+ collectable,
25
+ wallet,
26
+ isLoading,
27
+ order,
28
+ checkoutOptions,
29
+ currency,
30
+ shopData,
31
+ isError,
32
+ } = useLoadData();
33
+
34
+ if (isError) {
35
+ return (
36
+ <ErrorModal
37
+ isOpen={true}
38
+ chainId={chainId}
39
+ onClose={() => buyModalStore.send({ type: 'close' })}
40
+ title="Loading Error"
41
+ />
42
+ );
43
+ }
44
+
45
+ if (isLoading || !collection) {
46
+ return (
47
+ <LoadingModal
48
+ isOpen={true}
49
+ chainId={chainId}
50
+ onClose={() => buyModalStore.send({ type: 'close' })}
51
+ title="Loading Sequence Pay"
52
+ />
53
+ );
54
+ }
55
+
56
+ if (isShop) {
57
+ if (collection.type === 'ERC721') {
58
+ if (!shopData || !currency) {
59
+ return (
60
+ <LoadingModal
61
+ isOpen={true}
62
+ chainId={chainId}
63
+ onClose={() => buyModalStore.send({ type: 'close' })}
64
+ title="Loading Sequence Pay"
65
+ />
66
+ );
67
+ }
68
+ return (
69
+ <ERC721ShopModal
70
+ collection={collection}
71
+ shopData={shopData}
72
+ chainId={chainId}
73
+ />
74
+ );
75
+ }
76
+ if (collection.type === 'ERC1155') {
77
+ if (!shopData || !currency) {
78
+ return (
79
+ <LoadingModal
80
+ isOpen={true}
81
+ chainId={chainId}
82
+ onClose={() => buyModalStore.send({ type: 'close' })}
83
+ title="Loading Sequence Pay"
84
+ />
85
+ );
86
+ }
87
+ return (
88
+ <ERC1155ShopModal
89
+ collection={collection}
90
+ shopData={shopData}
91
+ chainId={chainId}
92
+ />
93
+ );
94
+ }
95
+ } else {
96
+ if (collection.type === 'ERC721') {
97
+ if (!collectable || !order || !wallet || !checkoutOptions) {
98
+ return (
99
+ <LoadingModal
100
+ isOpen={true}
101
+ chainId={chainId}
102
+ onClose={() => buyModalStore.send({ type: 'close' })}
103
+ title="Loading Sequence Pay"
104
+ />
105
+ );
106
+ }
107
+ return (
108
+ <ERC721BuyModal
109
+ collection={collection}
110
+ collectable={collectable}
111
+ order={order}
112
+ wallet={wallet}
113
+ checkoutOptions={checkoutOptions}
114
+ chainId={chainId}
115
+ />
116
+ );
117
+ }
118
+ if (collection.type === 'ERC1155') {
119
+ if (!collectable || !order || !wallet || !checkoutOptions) {
120
+ return (
121
+ <LoadingModal
122
+ isOpen={true}
123
+ chainId={chainId}
124
+ onClose={() => buyModalStore.send({ type: 'close' })}
125
+ title="Loading Sequence Pay"
126
+ />
127
+ );
128
+ }
129
+ return (
130
+ <ERC1155BuyModal
131
+ collection={collection}
132
+ collectable={collectable}
133
+ order={order}
134
+ wallet={wallet}
135
+ checkoutOptions={checkoutOptions}
136
+ chainId={chainId}
137
+ />
138
+ );
139
+ }
140
+ }
141
+
142
+ onError(
143
+ new Error(
144
+ `Unsupported configuration: ${collection.type} in ${
145
+ isShop ? 'shop' : 'market'
146
+ } mode`,
147
+ ),
148
+ );
149
+ return (
150
+ <ErrorModal
151
+ isOpen={true}
152
+ chainId={chainId}
153
+ onClose={() => buyModalStore.send({ type: 'close' })}
154
+ title="Unsupported Configuration"
155
+ />
156
+ );
157
+ };
@@ -0,0 +1,136 @@
1
+ 'use client';
2
+
3
+ import {
4
+ type SelectPaymentSettings,
5
+ useSelectPaymentModal,
6
+ } from '@0xsequence/checkout';
7
+ import type { ContractInfo, TokenMetadata } from '@0xsequence/metadata';
8
+ import { useEffect } from 'react';
9
+ import type { CheckoutOptions, Order } from '../../../../_internal';
10
+ import type { WalletInstance } from '../../../../_internal/wallet/wallet';
11
+ import { usePaymentModalParams } from '../hooks/usePaymentModalParams';
12
+ import {
13
+ buyModalStore,
14
+ isShopProps,
15
+ useBuyModalProps,
16
+ usePaymentModalState,
17
+ useQuantity,
18
+ } from '../store';
19
+ import { ERC1155QuantityModal } from './ERC1155QuantityModal';
20
+
21
+ interface ERC1155BuyModalProps {
22
+ collection: ContractInfo;
23
+ collectable: TokenMetadata;
24
+ order: Order;
25
+ wallet: WalletInstance | null | undefined;
26
+ checkoutOptions: CheckoutOptions | undefined;
27
+ chainId: number;
28
+ }
29
+
30
+ export const ERC1155BuyModal = ({
31
+ collectable,
32
+ order,
33
+ wallet,
34
+ checkoutOptions,
35
+ chainId,
36
+ }: ERC1155BuyModalProps) => {
37
+ const quantity = useQuantity();
38
+ const modalProps = useBuyModalProps();
39
+ const marketplaceType = modalProps.marketplaceType || 'market';
40
+ const isShop = isShopProps(modalProps);
41
+ const quantityDecimals = isShop
42
+ ? modalProps.quantityDecimals
43
+ : order?.quantityDecimals;
44
+ const quantityRemaining = isShop
45
+ ? modalProps.quantityRemaining?.toString()
46
+ : order?.quantityRemaining;
47
+
48
+ if (!quantity) {
49
+ return (
50
+ <ERC1155QuantityModal
51
+ order={order}
52
+ marketplaceType={marketplaceType}
53
+ quantityDecimals={quantityDecimals}
54
+ quantityRemaining={quantityRemaining}
55
+ chainId={chainId}
56
+ />
57
+ );
58
+ }
59
+
60
+ if (!checkoutOptions) {
61
+ return null;
62
+ }
63
+
64
+ return (
65
+ <Modal
66
+ wallet={wallet}
67
+ quantity={quantity}
68
+ order={order}
69
+ collectable={collectable}
70
+ checkoutOptions={checkoutOptions}
71
+ />
72
+ );
73
+ };
74
+
75
+ interface ModalProps {
76
+ wallet: WalletInstance | null | undefined;
77
+ quantity: number;
78
+ order: Order;
79
+ collectable: TokenMetadata;
80
+ checkoutOptions: CheckoutOptions;
81
+ }
82
+
83
+ const Modal = ({
84
+ wallet,
85
+ quantity,
86
+ order,
87
+ collectable,
88
+ checkoutOptions,
89
+ }: ModalProps) => {
90
+ const {
91
+ data: paymentModalParams,
92
+ isLoading: isPaymentModalParamsLoading,
93
+ isError: isPaymentModalParamsError,
94
+ } = usePaymentModalParams({
95
+ wallet,
96
+ quantity,
97
+ marketplace: order?.marketplace,
98
+ collectable,
99
+ checkoutOptions,
100
+ priceCurrencyAddress: order?.priceCurrencyAddress,
101
+ enabled: true,
102
+ });
103
+
104
+ if (isPaymentModalParamsLoading || !paymentModalParams) {
105
+ return null;
106
+ }
107
+
108
+ if (isPaymentModalParamsError) {
109
+ throw new Error(
110
+ 'Failed to load payment parameters for ERC1155 marketplace purchase',
111
+ );
112
+ }
113
+
114
+ return <PaymentModalOpener paymentModalParams={paymentModalParams} />;
115
+ };
116
+
117
+ interface PaymentModalOpenerProps {
118
+ paymentModalParams: SelectPaymentSettings;
119
+ }
120
+
121
+ const PaymentModalOpener = ({
122
+ paymentModalParams,
123
+ }: PaymentModalOpenerProps) => {
124
+ const { openSelectPaymentModal } = useSelectPaymentModal();
125
+ const paymentModalState = usePaymentModalState();
126
+
127
+ useEffect(() => {
128
+ if (paymentModalState === 'idle') {
129
+ buyModalStore.send({ type: 'openPaymentModal' });
130
+ openSelectPaymentModal(paymentModalParams);
131
+ buyModalStore.send({ type: 'paymentModalOpened' });
132
+ }
133
+ }, [paymentModalState, paymentModalParams, openSelectPaymentModal]);
134
+
135
+ return null;
136
+ };