@0xsequence/marketplace-sdk 1.0.0 → 1.1.0

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 (304) hide show
  1. package/.storybook/main.ts +1 -1
  2. package/.storybook/preview.tsx +0 -1
  3. package/CHANGELOG.md +62 -13
  4. package/dist/BellIcon-IpHHEy8h.js +45 -0
  5. package/dist/BellIcon-IpHHEy8h.js.map +1 -0
  6. package/dist/{BellIcon-Cb9YEUzJ.js → CartIcon-C8zbor8H.js} +10 -49
  7. package/dist/CartIcon-C8zbor8H.js.map +1 -0
  8. package/dist/CollectibleCard-C2EWF0zo.d.ts +8 -0
  9. package/dist/{_internal-DslqcNC1.js → _internal-DkS2VUn5.js} +1 -1
  10. package/dist/{_internal-DslqcNC1.js.map → _internal-DkS2VUn5.js.map} +1 -1
  11. package/dist/{alien_swap-DJ98gZQp.js → alien_swap-BTJ7mSR-.js} +1 -1
  12. package/dist/{alien_swap-DJ98gZQp.js.map → alien_swap-BTJ7mSR-.js.map} +1 -1
  13. package/dist/{api-BmEQfSQa.js → api-DuLKn__v.js} +5 -3
  14. package/dist/api-DuLKn__v.js.map +1 -0
  15. package/dist/{aqua-xyz-n1PcCCZ0.js → aqua-xyz-BYJ9WSP_.js} +1 -1
  16. package/dist/{aqua-xyz-n1PcCCZ0.js.map → aqua-xyz-BYJ9WSP_.js.map} +1 -1
  17. package/dist/{aura-Bevk_YkS.js → aura-D7SUjgro.js} +1 -1
  18. package/dist/{aura-Bevk_YkS.js.map → aura-D7SUjgro.js.map} +1 -1
  19. package/dist/{blur-B5sHErx5.js → blur-BcnRFCaV.js} +1 -1
  20. package/dist/{blur-B5sHErx5.js.map → blur-BcnRFCaV.js.map} +1 -1
  21. package/dist/builder-api-BFuZNOaN.js.map +1 -1
  22. package/dist/builder.gen-B9wR2nvF.js.map +1 -1
  23. package/dist/{coinbase-D30W-lxA.js → coinbase-ChoX9Hw2.js} +1 -1
  24. package/dist/{coinbase-D30W-lxA.js.map → coinbase-ChoX9Hw2.js.map} +1 -1
  25. package/dist/components-CUv-wQr8.js +119 -0
  26. package/dist/components-CUv-wQr8.js.map +1 -0
  27. package/dist/{contracts-DPHFT2TA.js → contracts-D72LBOX3.js} +4 -5
  28. package/dist/{contracts-DPHFT2TA.js.map → contracts-D72LBOX3.js.map} +1 -1
  29. package/dist/{create-config-6uynwTeb.js → create-config-CIfejoCk.js} +6 -11
  30. package/dist/create-config-CIfejoCk.js.map +1 -0
  31. package/dist/{create-config-lLSrnkbb.d.ts → create-config-DV_dtaLt.d.ts} +24 -31
  32. package/dist/{element-C2NJexro.js → element-Dbcv5qya.js} +1 -1
  33. package/dist/{element-C2NJexro.js.map → element-Dbcv5qya.js.map} +1 -1
  34. package/dist/{filters-B8XS4tFH.d.ts → filters-zkMJaPey.d.ts} +6 -6
  35. package/dist/{foundation-QgY1lvUj.js → foundation-QPhUEUy8.js} +1 -1
  36. package/dist/{foundation-QgY1lvUj.js.map → foundation-QPhUEUy8.js.map} +1 -1
  37. package/dist/{index-ChSKFOMx.d.ts → index-B6aSbaw2.d.ts} +1 -1
  38. package/dist/{index-PSPpUxCE.d.ts → index-B8vaT3_s.d.ts} +4 -4
  39. package/dist/{index-DonXiSg2.d.ts → index-BaytncQc.d.ts} +100 -56
  40. package/dist/{index-CY5UEX4h.d.ts → index-BoNNplSx.d.ts} +2 -2
  41. package/dist/{index-QxxS6f9r.d.ts → index-Bv5XVLjH.d.ts} +1 -1
  42. package/dist/{index-CIkpYltz.d.ts → index-C768pAfu.d.ts} +3 -3
  43. package/dist/{index-DX0Vm8HY.d.ts → index-CM0ZTePs.d.ts} +1 -1
  44. package/dist/index-CMPUveNz.d.ts +64 -0
  45. package/dist/{index-ThUIs-Sy.d.ts → index-CQecU53t.d.ts} +28 -23
  46. package/dist/{index-CtF7EE2z.d.ts → index-CT8ZorFd.d.ts} +1 -1
  47. package/dist/{index-Dpyp7fQz.d.ts → index-CXscCUg7.d.ts} +12 -12
  48. package/dist/{index-ByW08-Z7.d.ts → index-D-UXGo5d.d.ts} +2 -2
  49. package/dist/{index-D71J5Ghd.d.ts → index-D6YMj82n.d.ts} +79 -79
  50. package/dist/{index-CQnGIGb5.d.ts → index-DJG0kiII.d.ts} +33 -33
  51. package/dist/{index-D2HohSwO.d.ts → index-DLUjc7Bx.d.ts} +52 -29
  52. package/dist/{index-C7xKVIr4.d.ts → index-DMBMM16q.d.ts} +37 -37
  53. package/dist/{index-DNU9xoGK.d.ts → index-DpeWm_vF.d.ts} +5 -5
  54. package/dist/{index-BuY_NKSX.d.ts → index-Yobo6icm.d.ts} +40 -28
  55. package/dist/{index-BGJXqdg6.d.ts → index-jGgfEHfQ.d.ts} +8 -8
  56. package/dist/index.d.ts +8 -8
  57. package/dist/index.js +12 -11
  58. package/dist/{listCollectiblesPaginated--AgXjajA.d.ts → listCollectiblesPaginated-Bq0QSOjJ.d.ts} +28 -26
  59. package/dist/{listCollections-Bbzbz7qW.d.ts → listCollections-dTCq00l5.d.ts} +168 -123
  60. package/dist/{looks-rare-CMVPny4v.js → looks-rare-C7cQztTR.js} +1 -1
  61. package/dist/{looks-rare-CMVPny4v.js.map → looks-rare-C7cQztTR.js.map} +1 -1
  62. package/dist/{lowestListing-BQHfQpfg.d.ts → lowestListing-CB5Te-Q9.d.ts} +41 -17
  63. package/dist/{magic-eden-IrWp2ZXk.js → magic-eden-D3r7jiBG.js} +1 -1
  64. package/dist/{magic-eden-IrWp2ZXk.js.map → magic-eden-D3r7jiBG.js.map} +1 -1
  65. package/dist/{manifold-DeOE-p2G.js → manifold-DsX0CBP-.js} +1 -1
  66. package/dist/{manifold-DeOE-p2G.js.map → manifold-DsX0CBP-.js.map} +1 -1
  67. package/dist/{marketCurrencies-CmOMCCOr.d.ts → marketCurrencies-Bzj8X4TL.d.ts} +8 -8
  68. package/dist/{marketplace-B5Z8G03R.js → marketplace-BYY8OloA.js} +1 -1
  69. package/dist/{marketplace-B5Z8G03R.js.map → marketplace-BYY8OloA.js.map} +1 -1
  70. package/dist/{marketplace-logos-D8t86gsW.js → marketplace-logos-Csv2MBwf.js} +21 -21
  71. package/dist/marketplace-logos-Csv2MBwf.js.map +1 -0
  72. package/dist/{marketplace.gen-JzNYpM0U.js → marketplace.gen-w2YvbEEo.js} +2 -2
  73. package/dist/marketplace.gen-w2YvbEEo.js.map +1 -0
  74. package/dist/{marketplaceConfig-sNh-MA5M.js → marketplaceConfig-BTy75Mbf.js} +8 -9
  75. package/dist/marketplaceConfig-BTy75Mbf.js.map +1 -0
  76. package/dist/{mintify-DG3GrljJ.js → mintify-DiOoDmO1.js} +1 -1
  77. package/dist/{mintify-DG3GrljJ.js.map → mintify-DiOoDmO1.js.map} +1 -1
  78. package/dist/{network-DnBEe1Ur.js → network-DtmiMhcg.js} +2 -2
  79. package/dist/network-DtmiMhcg.js.map +1 -0
  80. package/dist/networkconfigToWagmiChain-DbUf6HiO.js +15 -0
  81. package/dist/networkconfigToWagmiChain-DbUf6HiO.js.map +1 -0
  82. package/dist/{nftx-B3LH-ZYM.js → nftx-CP82jNra.js} +1 -1
  83. package/dist/{nftx-B3LH-ZYM.js.map → nftx-CP82jNra.js.map} +1 -1
  84. package/dist/{okx-CRFLrT3Z.js → okx-p9-4xRjs.js} +1 -1
  85. package/dist/{okx-CRFLrT3Z.js.map → okx-p9-4xRjs.js.map} +1 -1
  86. package/dist/{open-sea-cOpfl366.js → open-sea-D2GwAmKS.js} +1 -1
  87. package/dist/{open-sea-cOpfl366.js.map → open-sea-D2GwAmKS.js.map} +1 -1
  88. package/dist/{primary-sale-CLjXRrDj.js → primary-sale-DOmNDq2P.js} +1 -1
  89. package/dist/{primary-sale-CLjXRrDj.js.map → primary-sale-DOmNDq2P.js.map} +1 -1
  90. package/dist/{queries-BYT4GJw3.js → queries-EMA5CcwY.js} +208 -287
  91. package/dist/queries-EMA5CcwY.js.map +1 -0
  92. package/dist/{query-BTe7Wkrs.d.ts → query-BG-MA1MB.d.ts} +1 -1
  93. package/dist/{rarible-guwUx4cn.js → rarible-DqiiW9ki.js} +1 -1
  94. package/dist/{rarible-guwUx4cn.js.map → rarible-DqiiW9ki.js.map} +1 -1
  95. package/dist/react/_internal/api/index.d.ts +1 -1
  96. package/dist/react/_internal/api/index.js +4 -4
  97. package/dist/react/_internal/databeat/index.d.ts +1 -1
  98. package/dist/react/_internal/databeat/index.js +24 -21
  99. package/dist/react/_internal/index.d.ts +1 -1
  100. package/dist/react/_internal/index.js +8 -7
  101. package/dist/react/_internal/wagmi/index.d.ts +1 -1
  102. package/dist/react/_internal/wagmi/index.js +4 -3
  103. package/dist/react/hooks/config/index.d.ts +8 -8
  104. package/dist/react/hooks/config/index.js +24 -21
  105. package/dist/react/hooks/contracts/index.d.ts +6 -6
  106. package/dist/react/hooks/contracts/index.js +13 -12
  107. package/dist/react/hooks/data/collectibles/index.d.ts +4 -4
  108. package/dist/react/hooks/data/collectibles/index.js +24 -21
  109. package/dist/react/hooks/data/collections/index.d.ts +10 -10
  110. package/dist/react/hooks/data/collections/index.js +24 -21
  111. package/dist/react/hooks/data/index.d.ts +29 -29
  112. package/dist/react/hooks/data/index.js +25 -22
  113. package/dist/react/hooks/data/inventory/index.d.ts +28 -28
  114. package/dist/react/hooks/data/inventory/index.js +24 -21
  115. package/dist/react/hooks/data/market/index.d.ts +5 -11
  116. package/dist/react/hooks/data/market/index.js +24 -21
  117. package/dist/react/hooks/data/orders/index.d.ts +5 -11
  118. package/dist/react/hooks/data/orders/index.js +25 -22
  119. package/dist/react/hooks/data/primary-sales/index.d.ts +28 -28
  120. package/dist/react/hooks/data/primary-sales/index.js +24 -21
  121. package/dist/react/hooks/data/tokens/index.d.ts +4 -4
  122. package/dist/react/hooks/data/tokens/index.js +24 -21
  123. package/dist/react/hooks/index.d.ts +29 -29
  124. package/dist/react/hooks/index.js +25 -22
  125. package/dist/react/hooks/transactions/index.d.ts +2 -2
  126. package/dist/react/hooks/transactions/index.js +24 -21
  127. package/dist/react/hooks/ui/index.d.ts +4 -4
  128. package/dist/react/hooks/ui/index.js +24 -21
  129. package/dist/react/hooks/utils/index.d.ts +29 -29
  130. package/dist/react/hooks/utils/index.js +25 -22
  131. package/dist/react/index.d.ts +29 -29
  132. package/dist/react/index.js +25 -22
  133. package/dist/react/queries/index.d.ts +16 -16
  134. package/dist/react/queries/index.js +18 -17
  135. package/dist/react/ssr/index.d.ts +7 -7
  136. package/dist/react/ssr/index.js +9 -8
  137. package/dist/react/ssr/index.js.map +1 -1
  138. package/dist/react/ui/components/marketplace-collectible-card/components/footer/components/index.d.ts +3 -0
  139. package/dist/react/ui/components/marketplace-collectible-card/components/footer/components/index.js +22 -0
  140. package/dist/react/ui/components/marketplace-collectible-card/components/footer/index.d.ts +54 -0
  141. package/dist/react/ui/components/marketplace-collectible-card/components/footer/index.js +29 -0
  142. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +5 -5
  143. package/dist/react/ui/components/marketplace-collectible-card/index.js +24 -21
  144. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -2
  145. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +9 -8
  146. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  147. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  148. package/dist/react/ui/icons/index.js +13 -11
  149. package/dist/react/ui/index.d.ts +5 -5
  150. package/dist/react/ui/index.js +24 -21
  151. package/dist/react/ui/modals/_internal/components/actionModal/index.js +24 -21
  152. package/dist/react/utils/index.d.ts +1 -1
  153. package/dist/react/utils/index.js +5 -5
  154. package/dist/{react-Ceq8mamy.js → react-BLJ4DkPx.js} +723 -807
  155. package/dist/react-BLJ4DkPx.js.map +1 -0
  156. package/dist/{react-CbqXKOpt.css → react-F03jPjPk.css} +1 -1
  157. package/dist/{react-CbqXKOpt.css.map → react-F03jPjPk.css.map} +1 -1
  158. package/dist/{sequence-Dt2Xo7Fa.js → sequence-Bbb-TFKg.js} +1 -1
  159. package/dist/{sequence-Dt2Xo7Fa.js.map → sequence-Bbb-TFKg.js.map} +1 -1
  160. package/dist/styles/index.css +46 -24
  161. package/dist/{sudo-swap-CGoARONs.js → sudo-swap-CEPIM3Js.js} +1 -1
  162. package/dist/{sudo-swap-CGoARONs.js.map → sudo-swap-CEPIM3Js.js.map} +1 -1
  163. package/dist/{super-rare-NeQtZjcn.js → super-rare-CMEn9PoO.js} +1 -1
  164. package/dist/{super-rare-NeQtZjcn.js.map → super-rare-CMEn9PoO.js.map} +1 -1
  165. package/dist/{token-D9gZVqbX.js → token-CcyLz8Z8.js} +1 -1
  166. package/dist/{token-D9gZVqbX.js.map → token-CcyLz8Z8.js.map} +1 -1
  167. package/dist/{tokenSupplies-DXtkRYNO.d.ts → tokenSupplies-C470zTT0.d.ts} +23 -23
  168. package/dist/{transaction-CC2KxNF6.js → transaction-DZUW5RHu.js} +2 -8
  169. package/dist/transaction-DZUW5RHu.js.map +1 -0
  170. package/dist/types/index.d.ts +2 -2
  171. package/dist/types/index.js +2 -2
  172. package/dist/{types-G2PWxiJR.js → types-B_-cnkcP.js} +1 -1
  173. package/dist/types-B_-cnkcP.js.map +1 -0
  174. package/dist/{types-BlCa0TVE.d.ts → types-D6LkVrF0.d.ts} +18 -10
  175. package/dist/utils/abi/index.d.ts +4 -4
  176. package/dist/utils/abi/index.js +4 -4
  177. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  178. package/dist/utils/abi/marketplace/index.js +1 -1
  179. package/dist/utils/abi/primary-sale/index.d.ts +1 -1
  180. package/dist/utils/abi/primary-sale/index.js +1 -1
  181. package/dist/utils/abi/token/index.d.ts +1 -1
  182. package/dist/utils/abi/token/index.js +1 -1
  183. package/dist/utils/index.d.ts +6 -6
  184. package/dist/utils/index.js +11 -10
  185. package/dist/{utils-CKJd-CRf.js → utils-BZEkdqWK.js} +7 -24
  186. package/dist/utils-BZEkdqWK.js.map +1 -0
  187. package/dist/{utils-wquIhK6T.js → utils-oVZxdK0o.js} +2 -2
  188. package/dist/utils-oVZxdK0o.js.map +1 -0
  189. package/dist/{waitForTransactionReceipt-DZxAuR9N.js → waitForTransactionReceipt-B08YZiDY.js} +3 -4
  190. package/dist/{waitForTransactionReceipt-DZxAuR9N.js.map → waitForTransactionReceipt-B08YZiDY.js.map} +1 -1
  191. package/dist/{x2y2-CQdg24VP.js → x2y2-DNe6JgtG.js} +1 -1
  192. package/dist/{x2y2-CQdg24VP.js.map → x2y2-DNe6JgtG.js.map} +1 -1
  193. package/dist/{zora-DdEydy4L.js → zora-w0Zqxxs4.js} +1 -1
  194. package/dist/{zora-DdEydy4L.js.map → zora-w0Zqxxs4.js.map} +1 -1
  195. package/package.json +35 -35
  196. package/src/react/_internal/api/marketplace.gen.ts +1 -1
  197. package/src/react/_internal/api/query-keys.ts +2 -0
  198. package/src/react/_internal/wagmi/__tests__/create-config.test.ts +19 -8
  199. package/src/react/_internal/wagmi/create-config.ts +6 -17
  200. package/src/react/hooks/config/__snapshots__/useMarketplaceConfig.test.tsx.snap +4 -4
  201. package/src/react/hooks/data/collectibles/useBalanceOfCollectible.laos.test.tsx +2 -2
  202. package/src/react/hooks/data/collectibles/useTokenBalances.test.tsx +151 -0
  203. package/src/react/hooks/data/collectibles/useTokenBalances.tsx +47 -0
  204. package/src/react/hooks/data/collections/__snapshots__/useListCollections.test.tsx.snap +6 -6
  205. package/src/react/hooks/data/inventory/useInventory.test.tsx +3 -98
  206. package/src/react/hooks/data/inventory/useInventory.tsx +2 -2
  207. package/src/react/hooks/data/market/useListMarketCardData.tsx +1 -1
  208. package/src/react/hooks/data/orders/useListOffersForCollectible.tsx +70 -45
  209. package/src/react/hooks/data/primary-sales/useList1155ShopCardData.tsx +21 -37
  210. package/src/react/hooks/data/primary-sales/useList721ShopCardData.tsx +14 -3
  211. package/src/react/hooks/data/tokens/useSearchTokenMetadata.tsx +4 -1
  212. package/src/react/hooks/transactions/useCancelOrder.test.tsx +7 -4
  213. package/src/react/hooks/transactions/useCancelOrder.tsx +2 -1
  214. package/src/react/hooks/transactions/useCancelTransactionSteps.tsx +2 -2
  215. package/src/react/hooks/transactions/useProcessStep.test.tsx +2 -2
  216. package/src/react/hooks/utils/__tests__/useEnsureCorrectChain.test.tsx +75 -0
  217. package/src/react/hooks/utils/index.ts +0 -1
  218. package/src/react/hooks/utils/useEnsureCorrectChain.ts +31 -34
  219. package/src/react/providers/index.tsx +12 -14
  220. package/src/react/providers/modal-provider.tsx +2 -2
  221. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +3 -3
  222. package/src/react/queries/__tests__/inventory.laos.test.ts +6 -3
  223. package/src/react/queries/__tests__/tokenBalances.laos.test.ts +123 -0
  224. package/src/react/queries/balanceOfCollectible.ts +2 -1
  225. package/src/react/queries/filters.ts +23 -28
  226. package/src/react/queries/index.ts +1 -0
  227. package/src/react/queries/inventory.ts +63 -243
  228. package/src/react/queries/listCollectibles.ts +22 -48
  229. package/src/react/queries/listCollections.ts +10 -13
  230. package/src/react/queries/listOffersForCollectible.ts +101 -0
  231. package/src/react/queries/marketplaceConfig.ts +6 -2
  232. package/src/react/queries/tokenBalances.ts +85 -0
  233. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +4 -4
  234. package/src/react/ui/components/_internals/action-button/ActionButton.stories.tsx +8 -8
  235. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +6 -9
  236. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +4 -4
  237. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +6 -6
  238. package/src/react/ui/components/_internals/custom-select/__tests__/CustomSelect.test.tsx +1 -1
  239. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +4 -3
  240. package/src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx +13 -2
  241. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +4 -7
  242. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +14 -5
  243. package/src/react/ui/components/marketplace-collectible-card/components/footer/Footer.tsx +179 -0
  244. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/FooterName.tsx +103 -0
  245. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/PriceDisplay.tsx +80 -0
  246. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/SaleDetailsPill.tsx +29 -0
  247. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/TokenTypeBalancePill.tsx +30 -0
  248. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/index.ts +4 -0
  249. package/src/react/ui/components/marketplace-collectible-card/components/footer/index.ts +2 -0
  250. package/src/react/ui/components/marketplace-collectible-card/types.ts +18 -6
  251. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +11 -23
  252. package/src/react/ui/components/marketplace-collectible-card/variants/NonTradableInventoryCard.tsx +42 -0
  253. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +15 -12
  254. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +10 -10
  255. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +3 -3
  256. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx.bak +3 -3
  257. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +6 -6
  258. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +3 -3
  259. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +5 -5
  260. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +2 -2
  261. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +8 -8
  262. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +2 -2
  263. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +13 -2
  264. package/src/react/ui/modals/BuyModal/store.ts +6 -6
  265. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +2 -1
  266. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +1 -1
  267. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +87 -89
  268. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +2 -1
  269. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +1 -1
  270. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +2 -1
  271. package/src/react/ui/modals/SellModal/hooks/useSell.tsx +2 -1
  272. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +20 -9
  273. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +2 -2
  274. package/src/react/ui/modals/_internal/components/switchChainErrorModal/__tests__/SwitchChainErrorModal.test.tsx +80 -0
  275. package/src/react/ui/modals/_internal/components/switchChainErrorModal/index.tsx +64 -0
  276. package/src/react/ui/modals/_internal/components/switchChainErrorModal/store.ts +42 -0
  277. package/src/react/ui/modals/_internal/types.ts +0 -1
  278. package/src/styles/styles.ts +46 -24
  279. package/src/types/new-marketplace-types.ts +9 -18
  280. package/src/types/types.ts +1 -1
  281. package/test/globalSetup.ts +1 -1
  282. package/test/test-utils.tsx +1 -0
  283. package/dist/BellIcon-Cb9YEUzJ.js.map +0 -1
  284. package/dist/CollectibleCard-CYyWzk6u.d.ts +0 -8
  285. package/dist/api-BmEQfSQa.js.map +0 -1
  286. package/dist/create-config-6uynwTeb.js.map +0 -1
  287. package/dist/marketplace-logos-D8t86gsW.js.map +0 -1
  288. package/dist/marketplace.gen-JzNYpM0U.js.map +0 -1
  289. package/dist/marketplaceConfig-sNh-MA5M.js.map +0 -1
  290. package/dist/network-DnBEe1Ur.js.map +0 -1
  291. package/dist/queries-BYT4GJw3.js.map +0 -1
  292. package/dist/react-Ceq8mamy.js.map +0 -1
  293. package/dist/transaction-CC2KxNF6.js.map +0 -1
  294. package/dist/types-G2PWxiJR.js.map +0 -1
  295. package/dist/utils-CKJd-CRf.js.map +0 -1
  296. package/dist/utils-wquIhK6T.js.map +0 -1
  297. package/src/react/hooks/utils/useSwitchChainWithModal.ts +0 -38
  298. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +0 -238
  299. package/src/react/ui/modals/_internal/components/switchChainModal/__tests__/SwitchChainModal.test.tsx +0 -117
  300. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +0 -124
  301. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +0 -71
  302. /package/dist/{abi-Wr_aTZFi.js → abi-DYsUABe6.js} +0 -0
  303. /package/dist/{index-q7f-WDBS.d.ts → index-Cg5cFzs-.d.ts} +0 -0
  304. /package/dist/{wagmi-BhP3mdhP.js → wagmi-Bseovd6Q.js} +0 -0
@@ -40,9 +40,9 @@ describe('useInventory', () => {
40
40
  expect(result.current.isLoading).toBe(false);
41
41
  });
42
42
 
43
- // Verify the data is defined and has pages
43
+ // Verify the data is defined and has collectibles
44
44
  expect(result.current.data).toBeDefined();
45
- expect(result.current.data?.pages).toBeDefined();
45
+ expect(result.current.data?.collectibles).toBeDefined();
46
46
  expect(result.current.error).toBeNull();
47
47
  });
48
48
 
@@ -156,102 +156,7 @@ describe('useInventory', () => {
156
156
  });
157
157
 
158
158
  expect(result.current.data).toBeDefined();
159
- expect(result.current.data?.pages[0].collectibles).toBeDefined();
159
+ expect(result.current.data?.collectibles).toBeDefined();
160
160
  expect(result.current.isSuccess).toBe(true);
161
161
  });
162
-
163
- it('should support pagination with fetchNextPage', async () => {
164
- // Simplified test for pagination
165
- // Set up mock data for first and second pages
166
- const page1Data = {
167
- collectibles: [
168
- {
169
- ...mockCollectibleOrder,
170
- metadata: {
171
- ...mockCollectibleOrder.metadata,
172
- tokenId: '1',
173
- name: 'Token 1',
174
- },
175
- },
176
- ],
177
- page: {
178
- page: 1,
179
- pageSize: 10,
180
- more: true, // indicate there's a next page
181
- },
182
- };
183
-
184
- // Mock API to return data for the first page
185
- server.use(
186
- http.post(
187
- mockMarketplaceEndpoint('ListCollectibles'),
188
- async ({ request }) => {
189
- const body = (await request.json()) as { page?: number };
190
- const pageNumber = body?.page || 1;
191
-
192
- // Return first page data
193
- if (pageNumber === 1) {
194
- return HttpResponse.json(page1Data);
195
- }
196
-
197
- // For second page, return empty collectibles but with more=false
198
- return HttpResponse.json({
199
- collectibles: [],
200
- page: {
201
- page: 2,
202
- pageSize: 10,
203
- more: false,
204
- },
205
- });
206
- },
207
- ),
208
- );
209
-
210
- // Use unique test args to avoid caching issues
211
- const testArgs = {
212
- ...defaultArgs,
213
- accountAddress: '0xabcdef1234567890abcdef1234567890abcdef12' as Address,
214
- collectionAddress:
215
- '0xabcdef1234567890abcdef1234567890abcdef12' as Address,
216
- };
217
-
218
- const { result } = renderHook(() => useInventory(testArgs));
219
-
220
- // Wait for the first page to load
221
- await waitFor(
222
- () => {
223
- expect(result.current.isLoading).toBe(false);
224
- expect(result.current.data?.pages).toBeDefined();
225
- },
226
- { timeout: 5000 },
227
- );
228
-
229
- // Verify first page data loaded correctly
230
- expect(result.current.data?.pages[0].collectibles).toBeDefined();
231
- expect(result.current.data?.pages[0].collectibles.length).toBeGreaterThan(
232
- 0,
233
- );
234
- // Check that at least one item has the expected tokenId
235
- expect(
236
- result.current.data?.pages[0].collectibles.some(
237
- (c) => c.metadata.tokenId === '1',
238
- ),
239
- ).toBe(true);
240
- expect(result.current.hasNextPage).toBe(true);
241
-
242
- // Fetch the next page
243
- await result.current.fetchNextPage();
244
-
245
- // Wait for second page to load
246
- await waitFor(
247
- () => {
248
- expect(result.current.data?.pages.length).toBe(2);
249
- },
250
- { timeout: 5000 },
251
- );
252
-
253
- // For an empty second page we just verify it exists
254
- expect(result.current.data?.pages[1]).toBeDefined();
255
- expect(result.current.hasNextPage).toBe(false); // No more pages
256
- });
257
162
  });
@@ -1,4 +1,4 @@
1
- import { useInfiniteQuery } from '@tanstack/react-query';
1
+ import { useQuery } from '@tanstack/react-query';
2
2
  import { ContractType } from '../../../_internal';
3
3
  import {
4
4
  inventoryOptions,
@@ -17,5 +17,5 @@ export function useInventory(args: UseInventoryArgs) {
17
17
  c.itemsAddress === args.collectionAddress && c.chainId === args.chainId,
18
18
  )?.contractType === ContractType.LAOS_ERC_721;
19
19
 
20
- return useInfiniteQuery(inventoryOptions({ ...args, isLaos721 }, config));
20
+ return useQuery(inventoryOptions({ ...args, isLaos721 }, config));
21
21
  }
@@ -102,7 +102,7 @@ export function useListMarketCardData({
102
102
  collectionAddress,
103
103
  collectionType,
104
104
  cardLoading: collectiblesListIsLoading || balanceLoading,
105
- marketplaceType: 'market',
105
+ cardType: 'market',
106
106
  orderbookKind,
107
107
  collectible,
108
108
  onCollectibleClick,
@@ -1,55 +1,80 @@
1
- import { queryOptions, useQuery } from '@tanstack/react-query';
2
- import type { SdkConfig } from '../../../../types';
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Optional } from '../../../_internal';
3
5
  import {
4
- collectableKeys,
5
- getMarketplaceClient,
6
- type ListOffersForCollectibleArgs,
7
- } from '../../../_internal';
8
- import type { OrderFilter, Page } from '../../../_internal/api/marketplace.gen';
6
+ type FetchListOffersForCollectibleParams,
7
+ type ListOffersForCollectibleQueryOptions,
8
+ listOffersForCollectibleQueryOptions,
9
+ } from '../../../queries/listOffersForCollectible';
9
10
  import { useConfig } from '../../config/useConfig';
10
11
 
11
- interface UseListOffersForCollectibleArgs {
12
- chainId: number;
13
- collectionAddress: string;
14
- collectibleId: string;
15
- filter?: OrderFilter;
16
- page?: Page;
17
- }
18
-
19
- export type UseListOffersForCollectibleReturn = Awaited<
20
- ReturnType<typeof fetchListOffersForCollectible>
12
+ export type UseListOffersForCollectibleParams = Optional<
13
+ ListOffersForCollectibleQueryOptions,
14
+ 'config'
21
15
  >;
22
16
 
23
- const fetchListOffersForCollectible = async (
24
- config: SdkConfig,
25
- args: UseListOffersForCollectibleArgs,
26
- ) => {
27
- const arg = {
28
- chainId: String(args.chainId),
29
- contractAddress: args.collectionAddress,
30
- tokenId: args.collectibleId,
31
- filter: args.filter,
32
- page: args.page,
33
- } satisfies ListOffersForCollectibleArgs;
34
-
35
- const marketplaceClient = getMarketplaceClient(config);
36
- return marketplaceClient.listCollectibleOffers(arg);
37
- };
17
+ /**
18
+ * Hook to fetch offers for a specific collectible
19
+ *
20
+ * Fetches offers for a specific collectible from the marketplace.
21
+ *
22
+ * @param params - Configuration parameters
23
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
24
+ * @param params.collectionAddress - The collection contract address
25
+ * @param params.collectibleId - The specific collectible ID to fetch offers for
26
+ * @param params.filter - Optional filtering parameters
27
+ * @param params.page - Optional pagination parameters
28
+ * @param params.query - Optional React Query configuration
29
+ *
30
+ * @returns Query result containing offers data
31
+ *
32
+ * @example
33
+ * Basic usage:
34
+ * ```typescript
35
+ * const { data, isLoading } = useListOffersForCollectible({
36
+ * chainId: 137,
37
+ * collectionAddress: '0x...',
38
+ * collectibleId: '1'
39
+ * })
40
+ * ```
41
+ *
42
+ * @example
43
+ * With filtering:
44
+ * ```typescript
45
+ * const { data } = useListOffersForCollectible({
46
+ * chainId: 1,
47
+ * collectionAddress: '0x...',
48
+ * collectibleId: '1',
49
+ * filter: {
50
+ * marketplace: [MarketplaceKind.sequence_marketplace_v2]
51
+ * }
52
+ * })
53
+ * ```
54
+ */
55
+ export function useListOffersForCollectible(
56
+ params: UseListOffersForCollectibleParams,
57
+ ) {
58
+ const defaultConfig = useConfig();
59
+
60
+ const { config = defaultConfig, ...rest } = params;
38
61
 
39
- export const listOffersForCollectibleOptions = (
40
- args: UseListOffersForCollectibleArgs,
41
- config: SdkConfig,
42
- ) => {
43
- return queryOptions({
44
- queryKey: [...collectableKeys.offers, args, config],
45
- queryFn: () => fetchListOffersForCollectible(config, args),
62
+ const queryOptions = listOffersForCollectibleQueryOptions({
63
+ config,
64
+ ...rest,
46
65
  });
47
- };
48
66
 
49
- export const useListOffersForCollectible = (
50
- args: UseListOffersForCollectibleArgs,
51
- ) => {
52
- const config = useConfig();
67
+ return useQuery({
68
+ ...queryOptions,
69
+ });
70
+ }
53
71
 
54
- return useQuery(listOffersForCollectibleOptions(args, config));
72
+ export { listOffersForCollectibleQueryOptions };
73
+
74
+ export type {
75
+ FetchListOffersForCollectibleParams,
76
+ ListOffersForCollectibleQueryOptions,
55
77
  };
78
+
79
+ // Legacy export for backward compatibility during migration
80
+ export type UseListOffersForCollectibleArgs = UseListOffersForCollectibleParams;
@@ -1,14 +1,19 @@
1
1
  import type { Address } from 'viem';
2
2
  import { useReadContract } from 'wagmi';
3
- import { ContractType, type TokenMetadata } from '../../../_internal';
3
+ import {
4
+ ContractType,
5
+ type PrimarySaleItem,
6
+ type TokenMetadata,
7
+ } from '../../../_internal';
4
8
  import type { ShopCollectibleCardProps } from '../../../ui/components/marketplace-collectible-card/types';
5
9
  import { useSalesContractABI } from '../../contracts/useSalesContractABI';
6
- import { useFilterState } from '../../ui/useFilterState';
7
10
  import { useCollection } from '../collections/useCollection';
8
- import { useListPrimarySaleItems } from '../primary-sales/useListPrimarySaleItems';
9
11
 
10
12
  interface UseList1155ShopCardDataProps {
11
- tokenIds: string[];
13
+ primarySaleItemsWithMetadata: Array<{
14
+ metadata: TokenMetadata;
15
+ primarySaleItem: PrimarySaleItem;
16
+ }>;
12
17
  chainId: number;
13
18
  contractAddress: Address;
14
19
  salesContractAddress: Address;
@@ -16,13 +21,12 @@ interface UseList1155ShopCardDataProps {
16
21
  }
17
22
 
18
23
  export function useList1155ShopCardData({
19
- tokenIds,
24
+ primarySaleItemsWithMetadata,
20
25
  chainId,
21
26
  contractAddress,
22
27
  salesContractAddress,
23
28
  enabled = true,
24
29
  }: UseList1155ShopCardDataProps) {
25
- const { showListedOnly } = useFilterState();
26
30
  const { abi, isLoading: versionLoading } = useSalesContractABI({
27
31
  contractAddress: salesContractAddress,
28
32
  contractType: ContractType.ERC1155,
@@ -30,21 +34,12 @@ export function useList1155ShopCardData({
30
34
  enabled,
31
35
  });
32
36
 
33
- const {
34
- data: primarySaleItems,
35
- isLoading: primarySaleItemsLoading,
36
- error: primarySaleItemsError,
37
- } = useListPrimarySaleItems({
38
- chainId,
39
- primarySaleContractAddress: salesContractAddress,
40
- filter: {
41
- includeEmpty: !showListedOnly,
42
- },
43
- });
44
-
45
37
  const { data: collection, isLoading: collectionLoading } = useCollection({
46
38
  chainId,
47
39
  collectionAddress: contractAddress,
40
+ query: {
41
+ enabled,
42
+ },
48
43
  });
49
44
 
50
45
  const { data: paymentToken, isLoading: paymentTokenLoading } =
@@ -58,21 +53,10 @@ export function useList1155ShopCardData({
58
53
  },
59
54
  });
60
55
 
61
- const isLoading =
62
- primarySaleItemsLoading || collectionLoading || paymentTokenLoading;
63
-
64
- // Flatten all collectibles from all pages
65
- const allPrimarySaleItems =
66
- primarySaleItems?.pages.flatMap((page) => page.primarySaleItems) ?? [];
67
-
68
- const collectibleCards = tokenIds.map((tokenId) => {
69
- const matchingPrimarySaleItem = allPrimarySaleItems.find(
70
- (item) => item.primarySaleItem.tokenId?.toString() === tokenId,
71
- );
56
+ const isLoading = versionLoading || collectionLoading || paymentTokenLoading;
72
57
 
73
- const saleData = matchingPrimarySaleItem?.primarySaleItem;
74
- const tokenMetadata =
75
- matchingPrimarySaleItem?.metadata || ({} as TokenMetadata);
58
+ const collectibleCards = primarySaleItemsWithMetadata.map((item) => {
59
+ const { metadata, primarySaleItem: saleData } = item;
76
60
 
77
61
  const salePrice = {
78
62
  amount: saleData?.priceAmount?.toString() || '',
@@ -85,11 +69,11 @@ export function useList1155ShopCardData({
85
69
  const unlimitedSupply = saleData?.unlimitedSupply;
86
70
 
87
71
  return {
88
- collectibleId: tokenId,
72
+ collectibleId: metadata.tokenId,
89
73
  chainId,
90
74
  collectionAddress: contractAddress,
91
75
  collectionType: ContractType.ERC1155,
92
- tokenMetadata: tokenMetadata,
76
+ tokenMetadata: metadata,
93
77
  cardLoading: isLoading,
94
78
  salesContractAddress: salesContractAddress,
95
79
  salePrice,
@@ -99,14 +83,14 @@ export function useList1155ShopCardData({
99
83
  unlimitedSupply,
100
84
  saleStartsAt: saleData?.startDate?.toString(),
101
85
  saleEndsAt: saleData?.endDate?.toString(),
102
- marketplaceType: 'shop',
86
+ cardType: 'shop',
103
87
  } satisfies ShopCollectibleCardProps;
104
88
  });
105
89
 
106
90
  return {
107
91
  collectibleCards,
108
- tokenMetadataError: primarySaleItemsError,
92
+ tokenMetadataError: null,
109
93
  tokenSaleDetailsError: null,
110
- isLoading,
94
+ isLoading: enabled && isLoading,
111
95
  };
112
96
  }
@@ -37,12 +37,19 @@ export function useList721ShopCardData({
37
37
  });
38
38
  const config = useConfig();
39
39
 
40
+ const tokenSuppliesEnabled = Boolean(
41
+ chainId && contractAddress && config && (enabled ?? true),
42
+ );
43
+ // TODO: Find a way to remove this and use enabled in tokenSuppliesQueryOptions
40
44
  const tokenSuppliesQuery = useInfiniteQuery({
41
45
  ...tokenSuppliesQueryOptions({
42
46
  chainId,
43
47
  collectionAddress: contractAddress,
44
48
  includeMetadata: true,
45
49
  config,
50
+ query: {
51
+ enabled: tokenSuppliesEnabled,
52
+ },
46
53
  }),
47
54
  });
48
55
 
@@ -56,6 +63,8 @@ export function useList721ShopCardData({
56
63
 
57
64
  useEffect(() => {
58
65
  async function fetchAllPages() {
66
+ if (!tokenSuppliesEnabled) return;
67
+
59
68
  if (!hasNextSuppliesPage && tokenSuppliesData) {
60
69
  setAllTokenSuppliesFetched(true);
61
70
  return;
@@ -72,6 +81,7 @@ export function useList721ShopCardData({
72
81
  isFetchingNextSuppliesPage,
73
82
  tokenSuppliesLoading,
74
83
  fetchNextTokenSuppliesPage,
84
+ tokenSuppliesEnabled,
75
85
  ]);
76
86
 
77
87
  const allTokenSupplies = tokenSuppliesData?.pages.flatMap(
@@ -137,7 +147,7 @@ export function useList721ShopCardData({
137
147
  quantityDecimals: 0,
138
148
  saleStartsAt,
139
149
  saleEndsAt,
140
- marketplaceType: 'shop',
150
+ cardType: 'shop',
141
151
  } satisfies ShopCollectibleCardProps;
142
152
  },
143
153
  );
@@ -160,7 +170,7 @@ export function useList721ShopCardData({
160
170
  quantityDecimals: 0,
161
171
  saleStartsAt: undefined,
162
172
  saleEndsAt: undefined,
163
- marketplaceType: 'shop',
173
+ cardType: 'shop',
164
174
  } satisfies ShopCollectibleCardProps;
165
175
  });
166
176
 
@@ -177,7 +187,8 @@ export function useList721ShopCardData({
177
187
  saleDetailsError,
178
188
  saleDetails,
179
189
  isLoading:
180
- saleDetailsLoading || tokenSuppliesLoading || !allTokenSuppliesFetched,
190
+ enabled &&
191
+ (saleDetailsLoading || tokenSuppliesLoading || !allTokenSuppliesFetched),
181
192
  tokenSuppliesData,
182
193
  };
183
194
  }
@@ -104,7 +104,10 @@ export function useSearchTokenMetadata(params: UseSearchTokenMetadataParams) {
104
104
  collectionAddress: params.collectionAddress,
105
105
  includeMetadata: true,
106
106
  query: {
107
- enabled: onlyMinted && (params.query?.enabled ?? true),
107
+ enabled:
108
+ onlyMinted &&
109
+ !!params.collectionAddress &&
110
+ (params.query?.enabled ?? true),
108
111
  },
109
112
  });
110
113
 
@@ -1,12 +1,11 @@
1
1
  import { renderHook, server, waitFor } from '@test';
2
2
  import { HttpResponse, http } from 'msw';
3
+ import type { Address } from 'viem';
3
4
  import { beforeEach, describe, expect, it, vi } from 'vitest';
4
-
5
5
  import * as types from '../../../types';
6
6
  import { StepType } from '../../../types';
7
7
  import { WalletKind } from '../../_internal/api';
8
8
  import { mockMarketplaceEndpoint } from '../../_internal/api/__mocks__/marketplace.msw';
9
-
10
9
  import { useConnectorMetadata } from '../config/useConnectorMetadata';
11
10
  import { useCancelOrder } from './useCancelOrder';
12
11
  import { useProcessStep } from './useProcessStep';
@@ -24,7 +23,7 @@ vi.mock('../../utils/waitForTransactionReceipt', () => ({
24
23
 
25
24
  describe('useCancelOrder', () => {
26
25
  const defaultProps = {
27
- collectionAddress: '0x1234567890123456789012345678901234567890',
26
+ collectionAddress: '0x1234567890123456789012345678901234567890' as Address,
28
27
  chainId: 1,
29
28
  };
30
29
 
@@ -99,7 +98,11 @@ describe('useCancelOrder', () => {
99
98
  });
100
99
 
101
100
  it('should update state during cancellation process', async () => {
102
- const { result } = renderHook(() => useCancelOrder(defaultProps));
101
+ const { result } = renderHook(() =>
102
+ useCancelOrder({
103
+ ...defaultProps,
104
+ }),
105
+ );
103
106
 
104
107
  // Mock a delayed response
105
108
  server.use(
@@ -1,12 +1,13 @@
1
1
  'use client';
2
2
  import { useWaasFeeOptions } from '@0xsequence/connect';
3
3
  import { useEffect, useState } from 'react';
4
+ import type { Address } from 'viem';
4
5
  import type * as types from '../../_internal';
5
6
  import { useAutoSelectFeeOption } from '../utils/useAutoSelectFeeOption';
6
7
  import { useCancelTransactionSteps } from './useCancelTransactionSteps';
7
8
 
8
9
  interface UseCancelOrderArgs {
9
- collectionAddress: string;
10
+ collectionAddress: Address;
10
11
  chainId: number;
11
12
  onSuccess?: ({ hash, orderId }: { hash?: string; orderId?: string }) => void;
12
13
  onError?: (error: Error) => void;
@@ -1,4 +1,4 @@
1
- import type { Hex } from 'viem';
1
+ import type { Address, Hex } from 'viem';
2
2
  import { useAccount } from 'wagmi';
3
3
  import { NoWalletConnectedError } from '../../../utils/_internal/error/transaction';
4
4
  import {
@@ -19,7 +19,7 @@ import { useGenerateCancelTransaction } from './useGenerateCancelTransaction';
19
19
  import { useProcessStep } from './useProcessStep';
20
20
 
21
21
  interface UseCancelTransactionStepsArgs {
22
- collectionAddress: string;
22
+ collectionAddress: Address;
23
23
  chainId: number;
24
24
  callbacks?: ModalCallbacks;
25
25
  setSteps: React.Dispatch<React.SetStateAction<TransactionStep>>;
@@ -7,7 +7,7 @@ import { useProcessStep } from './useProcessStep';
7
7
  vi.mock('wagmi', async (importOriginal) => {
8
8
  const actual = await importOriginal();
9
9
  return {
10
- // @ts-ignore - ignore spread type error
10
+ // @ts-expect-error - ignore spread type error
11
11
  ...actual,
12
12
  useSendTransaction: vi.fn(),
13
13
  useSignMessage: vi.fn(),
@@ -18,7 +18,7 @@ vi.mock('wagmi', async (importOriginal) => {
18
18
  vi.mock('../../_internal/api', async (importOriginal) => {
19
19
  const actual = await importOriginal();
20
20
  return {
21
- // @ts-ignore - ignore spread type error
21
+ // @ts-expect-error - ignore spread type error
22
22
  ...actual,
23
23
  getMarketplaceClient: vi.fn(() => ({
24
24
  execute: vi.fn(),
@@ -0,0 +1,75 @@
1
+ import { renderHook, wagmiConfig, waitFor } from '@test';
2
+ import { beforeEach, describe, expect, test, vi } from 'vitest';
3
+ import { switchChainErrorModalStore } from '../../../ui/modals/_internal/components/switchChainErrorModal/store';
4
+ import { useEnsureCorrectChain } from '../useEnsureCorrectChain';
5
+
6
+ const currentChain = wagmiConfig.chains[0]; // mainnet
7
+ const chainToSwitchTo = wagmiConfig.chains[1]; // polygon
8
+
9
+ describe('useEnsureCorrectChain', () => {
10
+ beforeEach(() => {
11
+ switchChainErrorModalStore.send({ type: 'close' });
12
+ });
13
+
14
+ test('returns current chain id', async () => {
15
+ const { result } = renderHook(() => useEnsureCorrectChain());
16
+ // Wait for the account to be connected and chainId to be available
17
+ await waitFor(() => {
18
+ expect(result.current.currentChainId).toBeDefined();
19
+ });
20
+ expect(result.current.currentChainId).toBe(currentChain.id);
21
+ });
22
+
23
+ test('does nothing if already on correct chain', () => {
24
+ const { result } = renderHook(() => useEnsureCorrectChain());
25
+ const onSuccess = vi.fn();
26
+
27
+ result.current.ensureCorrectChain(currentChain.id, { onSuccess });
28
+
29
+ expect(onSuccess).toHaveBeenCalled();
30
+ });
31
+
32
+ test('attempts to switch chain and shows error modal when switch fails', async () => {
33
+ const { result } = renderHook(() => useEnsureCorrectChain());
34
+
35
+ result.current.ensureCorrectChain(chainToSwitchTo.id);
36
+
37
+ await waitFor(() => {
38
+ expect(
39
+ switchChainErrorModalStore.getSnapshot().context.chainIdToSwitchTo,
40
+ ).toBe(chainToSwitchTo.id);
41
+ });
42
+ });
43
+
44
+ test('async version handles chain switch error correctly', async () => {
45
+ const { result } = renderHook(() => useEnsureCorrectChain());
46
+
47
+ await result.current.ensureCorrectChainAsync(chainToSwitchTo.id);
48
+
49
+ expect(
50
+ switchChainErrorModalStore.getSnapshot().context.chainIdToSwitchTo,
51
+ ).toBe(chainToSwitchTo.id);
52
+ });
53
+
54
+ test('closes error modal when successfully switched to target chain', async () => {
55
+ const { result } = renderHook(() => useEnsureCorrectChain());
56
+
57
+ await waitFor(() => {
58
+ expect(result.current.currentChainId).toBeDefined();
59
+ });
60
+
61
+ // Now open the modal for the same chain the user is already on
62
+ // This should trigger the effect to close it immediately
63
+ switchChainErrorModalStore.send({
64
+ type: 'open',
65
+ chainIdToSwitchTo: result.current.currentChainId!,
66
+ });
67
+
68
+ // The effect should close the modal since we're already on the target chain
69
+ await waitFor(() => {
70
+ expect(
71
+ switchChainErrorModalStore.getSnapshot().context.chainIdToSwitchTo,
72
+ ).toBeUndefined();
73
+ });
74
+ });
75
+ });
@@ -6,4 +6,3 @@ export * from './useConvertPriceToUSD';
6
6
  export * from './useEnsureCorrectChain';
7
7
  export * from './useGetReceiptFromHash';
8
8
  export * from './useRoyalty';
9
- export * from './useSwitchChainWithModal';