@0xsequence/marketplace-sdk 0.10.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 (530) hide show
  1. package/.storybook/ConnectionStatus.tsx +289 -0
  2. package/.storybook/main.ts +20 -1
  3. package/.storybook/preview.tsx +105 -0
  4. package/CHANGELOG.md +116 -9
  5. package/compile-tailwind.js +54 -0
  6. package/dist/BellIcon-IpHHEy8h.js +45 -0
  7. package/dist/BellIcon-IpHHEy8h.js.map +1 -0
  8. package/dist/{CalendarIcon-CqsuAuCm.js → CartIcon-C8zbor8H.js} +50 -42
  9. package/dist/CartIcon-C8zbor8H.js.map +1 -0
  10. package/dist/CollectibleCard-C2EWF0zo.d.ts +8 -0
  11. package/dist/{_internal-C75gOSNo.js → _internal-DkS2VUn5.js} +10 -2
  12. package/dist/_internal-DkS2VUn5.js.map +1 -0
  13. package/dist/{alien_swap-CYv6YlOF.js → alien_swap-BTJ7mSR-.js} +1 -1
  14. package/dist/{alien_swap-CYv6YlOF.js.map → alien_swap-BTJ7mSR-.js.map} +1 -1
  15. package/dist/{api-BiMGqWdz.js → api-DuLKn__v.js} +26 -4
  16. package/dist/api-DuLKn__v.js.map +1 -0
  17. package/dist/{aqua-xyz-Bzn5baeH.js → aqua-xyz-BYJ9WSP_.js} +1 -1
  18. package/dist/{aqua-xyz-Bzn5baeH.js.map → aqua-xyz-BYJ9WSP_.js.map} +1 -1
  19. package/dist/{aura-DzIWh8WT.js → aura-D7SUjgro.js} +1 -1
  20. package/dist/{aura-DzIWh8WT.js.map → aura-D7SUjgro.js.map} +1 -1
  21. package/dist/{blur-DSH-Cbpj.js → blur-BcnRFCaV.js} +1 -1
  22. package/dist/{blur-DSH-Cbpj.js.map → blur-BcnRFCaV.js.map} +1 -1
  23. package/dist/builder-api-BFuZNOaN.js.map +1 -1
  24. package/dist/builder.gen-B9wR2nvF.js.map +1 -1
  25. package/dist/{coinbase-Df8URNxq.js → coinbase-ChoX9Hw2.js} +1 -1
  26. package/dist/{coinbase-Df8URNxq.js.map → coinbase-ChoX9Hw2.js.map} +1 -1
  27. package/dist/components-CUv-wQr8.js +119 -0
  28. package/dist/components-CUv-wQr8.js.map +1 -0
  29. package/dist/contracts-D72LBOX3.js +96 -0
  30. package/dist/contracts-D72LBOX3.js.map +1 -0
  31. package/dist/{create-config-fQ-jbJD1.js → create-config-CIfejoCk.js} +6 -11
  32. package/dist/create-config-CIfejoCk.js.map +1 -0
  33. package/dist/{create-config-DKJ-F0jc.d.ts → create-config-DV_dtaLt.d.ts} +267 -247
  34. package/dist/{element-Cx6uJu5N.js → element-Dbcv5qya.js} +1 -1
  35. package/dist/{element-Cx6uJu5N.js.map → element-Dbcv5qya.js.map} +1 -1
  36. package/dist/filters-zkMJaPey.d.ts +31 -0
  37. package/dist/{foundation-D6U4aRLN.js → foundation-QPhUEUy8.js} +1 -1
  38. package/dist/{foundation-D6U4aRLN.js.map → foundation-QPhUEUy8.js.map} +1 -1
  39. package/dist/{index-C5aqo8xu.d.ts → index-B6aSbaw2.d.ts} +1 -1
  40. package/dist/index-B8vaT3_s.d.ts +18 -0
  41. package/dist/index-BaytncQc.d.ts +946 -0
  42. package/dist/{index-CUwMH7Ht.d.ts → index-BoNNplSx.d.ts} +2 -2
  43. package/dist/{index-136YrWDH.d.ts → index-Bv5XVLjH.d.ts} +1 -1
  44. package/dist/index-C768pAfu.d.ts +61 -0
  45. package/dist/index-CM0ZTePs.d.ts +2541 -0
  46. package/dist/index-CMPUveNz.d.ts +64 -0
  47. package/dist/index-CQecU53t.d.ts +311 -0
  48. package/dist/{index-BAhaEfqY.d.ts → index-CT8ZorFd.d.ts} +1 -1
  49. package/dist/index-CXscCUg7.d.ts +298 -0
  50. package/dist/{index-BhVFc2rX.d.ts → index-D-UXGo5d.d.ts} +4 -4
  51. package/dist/index-D6YMj82n.d.ts +813 -0
  52. package/dist/index-DJG0kiII.d.ts +346 -0
  53. package/dist/index-DLUjc7Bx.d.ts +316 -0
  54. package/dist/index-DMBMM16q.d.ts +447 -0
  55. package/dist/{index-CKrYP7ot.d.ts → index-DpeWm_vF.d.ts} +14 -22
  56. package/dist/index-Yobo6icm.d.ts +234 -0
  57. package/dist/index-jGgfEHfQ.d.ts +131 -0
  58. package/dist/index.d.ts +8 -8
  59. package/dist/index.js +13 -13
  60. package/dist/listCollectiblesPaginated-Bq0QSOjJ.d.ts +168 -0
  61. package/dist/listCollections-dTCq00l5.d.ts +669 -0
  62. package/dist/{looks-rare-ChBRBY-p.js → looks-rare-C7cQztTR.js} +1 -1
  63. package/dist/{looks-rare-ChBRBY-p.js.map → looks-rare-C7cQztTR.js.map} +1 -1
  64. package/dist/lowestListing-CB5Te-Q9.d.ts +168 -0
  65. package/dist/{magic-eden-D5U7N1xL.js → magic-eden-D3r7jiBG.js} +1 -1
  66. package/dist/{magic-eden-D5U7N1xL.js.map → magic-eden-D3r7jiBG.js.map} +1 -1
  67. package/dist/{manifold-CtLF52zU.js → manifold-DsX0CBP-.js} +1 -1
  68. package/dist/{manifold-CtLF52zU.js.map → manifold-DsX0CBP-.js.map} +1 -1
  69. package/dist/marketCurrencies-Bzj8X4TL.d.ts +122 -0
  70. package/dist/{marketplace-DmFiyBoS.js → marketplace-BYY8OloA.js} +1 -1
  71. package/dist/{marketplace-DmFiyBoS.js.map → marketplace-BYY8OloA.js.map} +1 -1
  72. package/dist/{marketplace-logos-Cd6W-qOq.js → marketplace-logos-Csv2MBwf.js} +21 -21
  73. package/dist/marketplace-logos-Csv2MBwf.js.map +1 -0
  74. package/dist/{marketplace.gen-HpnpL5xU.js → marketplace.gen-w2YvbEEo.js} +2 -2
  75. package/dist/marketplace.gen-w2YvbEEo.js.map +1 -0
  76. package/dist/{marketplaceConfig-GQTTmihy.js → marketplaceConfig-BTy75Mbf.js} +20 -10
  77. package/dist/marketplaceConfig-BTy75Mbf.js.map +1 -0
  78. package/dist/{mintify-Bi3Bce68.js → mintify-DiOoDmO1.js} +1 -1
  79. package/dist/{mintify-Bi3Bce68.js.map → mintify-DiOoDmO1.js.map} +1 -1
  80. package/dist/{network-CGD0oKtS.js → network-DtmiMhcg.js} +2 -2
  81. package/dist/network-DtmiMhcg.js.map +1 -0
  82. package/dist/networkconfigToWagmiChain-DbUf6HiO.js +15 -0
  83. package/dist/networkconfigToWagmiChain-DbUf6HiO.js.map +1 -0
  84. package/dist/{nftx-BDQZjtkX.js → nftx-CP82jNra.js} +1 -1
  85. package/dist/{nftx-BDQZjtkX.js.map → nftx-CP82jNra.js.map} +1 -1
  86. package/dist/{okx-D4meadLe.js → okx-p9-4xRjs.js} +1 -1
  87. package/dist/{okx-D4meadLe.js.map → okx-p9-4xRjs.js.map} +1 -1
  88. package/dist/{open-sea-DN0hgfVw.js → open-sea-D2GwAmKS.js} +1 -1
  89. package/dist/{open-sea-DN0hgfVw.js.map → open-sea-D2GwAmKS.js.map} +1 -1
  90. package/dist/primary-sale-DOmNDq2P.js +3048 -0
  91. package/dist/primary-sale-DOmNDq2P.js.map +1 -0
  92. package/dist/queries-EMA5CcwY.js +1399 -0
  93. package/dist/queries-EMA5CcwY.js.map +1 -0
  94. package/dist/query-BG-MA1MB.d.ts +31 -0
  95. package/dist/{rarible-B0xlD88A.js → rarible-DqiiW9ki.js} +1 -1
  96. package/dist/{rarible-B0xlD88A.js.map → rarible-DqiiW9ki.js.map} +1 -1
  97. package/dist/react/_internal/api/index.d.ts +1 -1
  98. package/dist/react/_internal/api/index.js +4 -6
  99. package/dist/react/_internal/databeat/index.d.ts +1 -1
  100. package/dist/react/_internal/databeat/index.js +27 -4
  101. package/dist/react/_internal/index.d.ts +1 -1
  102. package/dist/react/_internal/index.js +8 -10
  103. package/dist/react/_internal/wagmi/index.d.ts +1 -1
  104. package/dist/react/_internal/wagmi/index.js +4 -4
  105. package/dist/react/hooks/config/index.d.ts +9 -0
  106. package/dist/react/hooks/config/index.js +29 -0
  107. package/dist/react/hooks/contracts/index.d.ts +7 -0
  108. package/dist/react/hooks/contracts/index.js +17 -0
  109. package/dist/react/hooks/data/collectibles/index.d.ts +5 -0
  110. package/dist/react/hooks/data/collectibles/index.js +29 -0
  111. package/dist/react/hooks/data/collections/index.d.ts +11 -0
  112. package/dist/react/hooks/data/collections/index.js +29 -0
  113. package/dist/react/hooks/data/index.d.ts +29 -0
  114. package/dist/react/hooks/data/index.js +29 -0
  115. package/dist/react/hooks/data/inventory/index.d.ts +29 -0
  116. package/dist/react/hooks/data/inventory/index.js +29 -0
  117. package/dist/react/hooks/data/market/index.d.ts +6 -0
  118. package/dist/react/hooks/data/market/index.js +29 -0
  119. package/dist/react/hooks/data/orders/index.d.ts +5 -0
  120. package/dist/react/hooks/data/orders/index.js +29 -0
  121. package/dist/react/hooks/data/primary-sales/index.d.ts +29 -0
  122. package/dist/react/hooks/data/primary-sales/index.js +29 -0
  123. package/dist/react/hooks/data/tokens/index.d.ts +5 -0
  124. package/dist/react/hooks/data/tokens/index.js +29 -0
  125. package/dist/react/hooks/index.d.ts +29 -13
  126. package/dist/react/hooks/index.js +25 -23
  127. package/dist/react/hooks/transactions/index.d.ts +3 -0
  128. package/dist/react/hooks/transactions/index.js +29 -0
  129. package/dist/react/hooks/ui/index.d.ts +5 -0
  130. package/dist/react/hooks/ui/index.js +29 -0
  131. package/dist/react/hooks/utils/index.d.ts +29 -0
  132. package/dist/react/hooks/utils/index.js +29 -0
  133. package/dist/react/index.d.ts +29 -13
  134. package/dist/react/index.js +25 -28
  135. package/dist/react/queries/index.d.ts +16 -9
  136. package/dist/react/queries/index.js +18 -20
  137. package/dist/react/ssr/index.d.ts +7 -7
  138. package/dist/react/ssr/index.js +9 -11
  139. package/dist/react/ssr/index.js.map +1 -1
  140. package/dist/react/ui/components/marketplace-collectible-card/components/footer/components/index.d.ts +3 -0
  141. package/dist/react/ui/components/marketplace-collectible-card/components/footer/components/index.js +22 -0
  142. package/dist/react/ui/components/marketplace-collectible-card/components/footer/index.d.ts +54 -0
  143. package/dist/react/ui/components/marketplace-collectible-card/components/footer/index.js +29 -0
  144. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +5 -4
  145. package/dist/react/ui/components/marketplace-collectible-card/index.js +24 -27
  146. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -2
  147. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +9 -11
  148. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  149. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  150. package/dist/react/ui/icons/index.js +13 -13
  151. package/dist/react/ui/index.d.ts +5 -4
  152. package/dist/react/ui/index.js +24 -27
  153. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +3 -27
  154. package/dist/react/ui/modals/_internal/components/actionModal/index.js +25 -24
  155. package/dist/react/utils/index.d.ts +19 -0
  156. package/dist/react/utils/index.js +9 -0
  157. package/dist/react-BLJ4DkPx.js +12410 -0
  158. package/dist/react-BLJ4DkPx.js.map +1 -0
  159. package/dist/{react-DeDyTgo7.css → react-F03jPjPk.css} +1 -1
  160. package/dist/{react-DeDyTgo7.css.map → react-F03jPjPk.css.map} +1 -1
  161. package/dist/{sequence-BIrOVRXO.js → sequence-Bbb-TFKg.js} +1 -1
  162. package/dist/{sequence-BIrOVRXO.js.map → sequence-Bbb-TFKg.js.map} +1 -1
  163. package/dist/{index.css → styles/index.css} +314 -153
  164. package/dist/{sudo-swap-BPMon-M5.js → sudo-swap-CEPIM3Js.js} +1 -1
  165. package/dist/{sudo-swap-BPMon-M5.js.map → sudo-swap-CEPIM3Js.js.map} +1 -1
  166. package/dist/{super-rare-kPN6Ua8i.js → super-rare-CMEn9PoO.js} +1 -1
  167. package/dist/{super-rare-kPN6Ua8i.js.map → super-rare-CMEn9PoO.js.map} +1 -1
  168. package/dist/{token-CHSBPYVG.js → token-CcyLz8Z8.js} +1 -1
  169. package/dist/{token-CHSBPYVG.js.map → token-CcyLz8Z8.js.map} +1 -1
  170. package/dist/tokenSupplies-C470zTT0.d.ts +147 -0
  171. package/dist/{transaction-CnctdNzS.js → transaction-DZUW5RHu.js} +21 -24
  172. package/dist/transaction-DZUW5RHu.js.map +1 -0
  173. package/dist/types/index.d.ts +2 -2
  174. package/dist/types/index.js +2 -2
  175. package/dist/{types-Yw2ywj6j.js → types-B_-cnkcP.js} +1 -1
  176. package/dist/types-B_-cnkcP.js.map +1 -0
  177. package/dist/{CollectibleCard-Dd-CG6dE.d.ts → types-D6LkVrF0.d.ts} +18 -13
  178. package/dist/utils/abi/index.d.ts +5 -5
  179. package/dist/utils/abi/index.js +5 -5
  180. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  181. package/dist/utils/abi/marketplace/index.js +1 -1
  182. package/dist/utils/abi/primary-sale/index.d.ts +2 -2
  183. package/dist/utils/abi/primary-sale/index.js +2 -2
  184. package/dist/utils/abi/token/index.d.ts +1 -1
  185. package/dist/utils/abi/token/index.js +1 -1
  186. package/dist/utils/index.d.ts +7 -7
  187. package/dist/utils/index.js +12 -12
  188. package/dist/{utils-9RXDgcBl.js → utils-BZEkdqWK.js} +7 -24
  189. package/dist/utils-BZEkdqWK.js.map +1 -0
  190. package/dist/{utils-DjVJ9tov.js → utils-oVZxdK0o.js} +2 -2
  191. package/dist/utils-oVZxdK0o.js.map +1 -0
  192. package/dist/waitForTransactionReceipt-B08YZiDY.js +26 -0
  193. package/dist/waitForTransactionReceipt-B08YZiDY.js.map +1 -0
  194. package/dist/{x2y2-BLz-_Q2O.js → x2y2-DNe6JgtG.js} +1 -1
  195. package/dist/{x2y2-BLz-_Q2O.js.map → x2y2-DNe6JgtG.js.map} +1 -1
  196. package/dist/{zora-UGhKs-aL.js → zora-w0Zqxxs4.js} +1 -1
  197. package/dist/{zora-UGhKs-aL.js.map → zora-w0Zqxxs4.js.map} +1 -1
  198. package/package.json +50 -47
  199. package/postcss.config.mjs +72 -5
  200. package/public/mockServiceWorker.js +344 -0
  201. package/src/react/_internal/api/__mocks__/builder.msw.ts +6 -0
  202. package/src/react/_internal/api/__mocks__/metadata.msw.ts +12 -1
  203. package/src/react/_internal/api/builder.gen.ts +11 -7
  204. package/src/react/_internal/api/marketplace.gen.ts +1 -1
  205. package/src/react/_internal/api/query-keys.ts +2 -0
  206. package/src/react/_internal/databeat/index.ts +1 -1
  207. package/src/react/_internal/databeat/types.ts +1 -0
  208. package/src/react/_internal/query-meta.ts +3 -0
  209. package/src/react/_internal/utils.ts +2 -0
  210. package/src/react/_internal/wagmi/__tests__/create-config.test.ts +19 -8
  211. package/src/react/_internal/wagmi/create-config.ts +7 -18
  212. package/src/react/_internal/wagmi/get-connectors.ts +1 -1
  213. package/src/react/hooks/{__tests__ → config}/__snapshots__/useMarketplaceConfig.test.tsx.snap +10 -4
  214. package/src/react/hooks/config/index.ts +3 -0
  215. package/src/react/hooks/{useConfig.tsx → config/useConfig.tsx} +2 -2
  216. package/src/react/hooks/config/useConnectorMetadata.tsx +16 -0
  217. package/src/react/hooks/{__tests__ → config}/useMarketplaceConfig.test.tsx +1 -1
  218. package/src/react/hooks/{useMarketplaceConfig.tsx → config/useMarketplaceConfig.tsx} +2 -2
  219. package/src/react/hooks/contracts/index.ts +1 -0
  220. package/src/react/hooks/contracts/useSalesContractABI.ts +174 -0
  221. package/src/react/hooks/data/collectibles/index.ts +6 -0
  222. package/src/react/hooks/{__tests__ → data/collectibles}/useBalanceOfCollectible.laos.test.tsx +6 -6
  223. package/src/react/hooks/{__tests__ → data/collectibles}/useBalanceOfCollectible.test.tsx +2 -2
  224. package/src/react/hooks/{useBalanceOfCollectible.tsx → data/collectibles/useBalanceOfCollectible.tsx} +4 -4
  225. package/src/react/hooks/{__tests__ → data/collectibles}/useCollectible.test.tsx +3 -3
  226. package/src/react/hooks/{useCollectible.tsx → data/collectibles/useCollectible.tsx} +3 -3
  227. package/src/react/hooks/{__tests__ → data/collectibles}/useCountOfCollectables.test.tsx +4 -4
  228. package/src/react/hooks/{useCountOfCollectables.tsx → data/collectibles/useCountOfCollectables.tsx} +3 -3
  229. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibleActivities.test.tsx +3 -3
  230. package/src/react/hooks/{useListCollectibleActivities.tsx → data/collectibles/useListCollectibleActivities.tsx} +3 -3
  231. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibles.test.tsx +5 -6
  232. package/src/react/hooks/{useListCollectibles.tsx → data/collectibles/useListCollectibles.tsx} +3 -3
  233. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectiblesPaginated.test.tsx +4 -4
  234. package/src/react/hooks/{useListCollectiblesPaginated.tsx → data/collectibles/useListCollectiblesPaginated.tsx} +3 -3
  235. package/src/react/hooks/data/collectibles/useTokenBalances.test.tsx +151 -0
  236. package/src/react/hooks/data/collectibles/useTokenBalances.tsx +47 -0
  237. package/src/react/hooks/{__tests__ → data/collections}/__snapshots__/useListCollections.test.tsx.snap +16 -6
  238. package/src/react/hooks/data/collections/index.ts +6 -0
  239. package/src/react/hooks/{__tests__ → data/collections}/useCollection.test.tsx +2 -3
  240. package/src/react/hooks/{useCollection.tsx → data/collections/useCollection.tsx} +3 -3
  241. package/src/react/hooks/{__tests__ → data/collections}/useCollectionBalanceDetails.test.tsx +2 -2
  242. package/src/react/hooks/{useCollectionBalanceDetails.tsx → data/collections/useCollectionBalanceDetails.tsx} +3 -3
  243. package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetails.test.tsx +2 -2
  244. package/src/react/hooks/{useCollectionDetails.ts → data/collections/useCollectionDetails.ts} +3 -3
  245. package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetailsPolling.test.tsx +3 -3
  246. package/src/react/hooks/{useCollectionDetailsPolling.tsx → data/collections/useCollectionDetailsPolling.tsx} +4 -4
  247. package/src/react/hooks/{__tests__ → data/collections}/useListCollectionActivities.test.tsx +5 -5
  248. package/src/react/hooks/{useListCollectionActivities.tsx → data/collections/useListCollectionActivities.tsx} +3 -3
  249. package/src/react/hooks/{__tests__ → data/collections}/useListCollections.test.tsx +5 -4
  250. package/src/react/hooks/{useListCollections.tsx → data/collections/useListCollections.tsx} +4 -4
  251. package/src/react/hooks/data/index.ts +6 -0
  252. package/src/react/hooks/data/inventory/index.ts +1 -0
  253. package/src/react/hooks/{__tests__ → data/inventory}/useInventory.test.tsx +7 -102
  254. package/src/react/hooks/data/inventory/useInventory.tsx +21 -0
  255. package/src/react/hooks/data/market/index.ts +3 -0
  256. package/src/react/hooks/{__tests__ → data/market}/useCurrency.test.tsx +4 -4
  257. package/src/react/hooks/{useCurrency.tsx → data/market/useCurrency.tsx} +3 -3
  258. package/src/react/hooks/{__tests__ → data/market}/useListMarketCardData.test.tsx +10 -14
  259. package/src/react/hooks/{useListMarketCardData.tsx → data/market/useListMarketCardData.tsx} +7 -7
  260. package/src/react/hooks/{__tests__ → data/market}/useMarketCurrencies.test.tsx +5 -5
  261. package/src/react/hooks/{useMarketCurrencies.tsx → data/market/useMarketCurrencies.tsx} +3 -3
  262. package/src/react/hooks/data/orders/index.ts +7 -0
  263. package/src/react/hooks/{__tests__ → data/orders}/useCountListingsForCollectible.test.tsx +2 -2
  264. package/src/react/hooks/{useCountListingsForCollectible.tsx → data/orders/useCountListingsForCollectible.tsx} +3 -3
  265. package/src/react/hooks/{__tests__ → data/orders}/useCountOffersForCollectible.test.tsx +2 -2
  266. package/src/react/hooks/{useCountOffersForCollectible.tsx → data/orders/useCountOffersForCollectible.tsx} +3 -3
  267. package/src/react/hooks/{__tests__ → data/orders}/useFloorOrder.test.tsx +3 -3
  268. package/src/react/hooks/{useFloorOrder.tsx → data/orders/useFloorOrder.tsx} +3 -3
  269. package/src/react/hooks/{__tests__ → data/orders}/useHighestOffer.test.tsx +3 -3
  270. package/src/react/hooks/{useHighestOffer.tsx → data/orders/useHighestOffer.tsx} +3 -3
  271. package/src/react/hooks/{__tests__ → data/orders}/useListListingsForCollectible.test.tsx +6 -6
  272. package/src/react/hooks/{useListListingsForCollectible.tsx → data/orders/useListListingsForCollectible.tsx} +3 -3
  273. package/src/react/hooks/{__tests__ → data/orders}/useListOffersForCollectible.test.tsx +5 -5
  274. package/src/react/hooks/data/orders/useListOffersForCollectible.tsx +80 -0
  275. package/src/react/hooks/{__tests__ → data/orders}/useLowestListing.test.tsx +5 -5
  276. package/src/react/hooks/{useLowestListing.tsx → data/orders/useLowestListing.tsx} +3 -3
  277. package/src/react/hooks/data/primary-sales/index.ts +6 -0
  278. package/src/react/hooks/{useCountOfPrimarySaleItems.tsx → data/primary-sales/useCountOfPrimarySaleItems.tsx} +2 -2
  279. package/src/react/hooks/data/primary-sales/useErc721SalesData.tsx +184 -0
  280. package/src/react/hooks/{useGetCountOfPrimarySaleItems.tsx → data/primary-sales/useGetCountOfPrimarySaleItems.tsx} +4 -4
  281. package/src/react/hooks/{useList1155ShopCardData.tsx → data/primary-sales/useList1155ShopCardData.tsx} +30 -39
  282. package/src/react/hooks/data/primary-sales/useList721ShopCardData.tsx +194 -0
  283. package/src/react/hooks/{useListPrimarySaleItems.tsx → data/primary-sales/useListPrimarySaleItems.tsx} +3 -3
  284. package/src/react/hooks/data/tokens/index.ts +5 -0
  285. package/src/react/hooks/{__tests__ → data/tokens}/useCurrencyBalance.test.tsx +2 -2
  286. package/src/react/hooks/{__tests__ → data/tokens}/useGetTokenRanges.test.tsx +3 -3
  287. package/src/react/hooks/{useGetTokenRanges.tsx → data/tokens/useGetTokenRanges.tsx} +6 -4
  288. package/src/react/hooks/{__tests__ → data/tokens}/useListBalances.test.tsx +2 -2
  289. package/src/react/hooks/{useListBalances.tsx → data/tokens/useListBalances.tsx} +5 -5
  290. package/src/react/hooks/{__tests__ → data/tokens}/useListTokenMetadata.test.tsx +3 -3
  291. package/src/react/hooks/{useListTokenMetadata.tsx → data/tokens/useListTokenMetadata.tsx} +3 -3
  292. package/src/react/hooks/data/tokens/useSearchTokenMetadata.test.tsx +284 -0
  293. package/src/react/hooks/data/tokens/useSearchTokenMetadata.tsx +189 -0
  294. package/src/react/hooks/{useTokenSupplies.ts → data/tokens/useTokenSupplies.ts} +5 -5
  295. package/src/react/hooks/index.ts +18 -52
  296. package/src/react/hooks/transactions/index.ts +9 -0
  297. package/src/react/hooks/{__tests__ → transactions}/useCancelOrder.test.tsx +59 -88
  298. package/src/react/hooks/{useCancelOrder.tsx → transactions/useCancelOrder.tsx} +6 -5
  299. package/src/react/hooks/{__tests__/useCancelTransactionSteps.test.tsx → transactions/useCancelTransactionSteps.test.tsx.bak} +3 -52
  300. package/src/react/hooks/transactions/useCancelTransactionSteps.tsx +193 -0
  301. package/src/react/hooks/{__tests__ → transactions}/useGenerateCancelTransaction.test.tsx +2 -2
  302. package/src/react/hooks/{useGenerateCancelTransaction.tsx → transactions/useGenerateCancelTransaction.tsx} +5 -5
  303. package/src/react/hooks/{__tests__ → transactions}/useGenerateListingTransaction.test.tsx +2 -2
  304. package/src/react/hooks/{useGenerateListingTransaction.tsx → transactions/useGenerateListingTransaction.tsx} +5 -5
  305. package/src/react/hooks/{__tests__ → transactions}/useGenerateOfferTransaction.test.tsx +7 -45
  306. package/src/react/hooks/{useGenerateOfferTransaction.tsx → transactions/useGenerateOfferTransaction.tsx} +7 -7
  307. package/src/react/hooks/{__tests__ → transactions}/useGenerateSellTransaction.test.tsx +3 -7
  308. package/src/react/hooks/{useGenerateSellTransaction.tsx → transactions/useGenerateSellTransaction.tsx} +4 -4
  309. package/src/react/hooks/transactions/useOrderSteps.tsx +189 -0
  310. package/src/react/hooks/transactions/useProcessStep.test.tsx +272 -0
  311. package/src/react/hooks/transactions/useProcessStep.ts +95 -0
  312. package/src/react/hooks/{__tests__ → transactions}/useTransferTokens.test.tsx +2 -2
  313. package/src/react/hooks/{useTransferTokens.tsx → transactions/useTransferTokens.tsx} +3 -3
  314. package/src/react/hooks/ui/index.ts +3 -0
  315. package/src/react/hooks/{useFilterState.tsx → ui/useFilterState.tsx} +1 -1
  316. package/src/react/hooks/{__tests__ → ui}/useFilters.test.tsx +1 -2
  317. package/src/react/hooks/{useFilters.tsx → ui/useFilters.tsx} +3 -3
  318. package/src/react/hooks/{useOpenConnectModal.tsx → ui/useOpenConnectModal.tsx} +1 -1
  319. package/src/react/hooks/util/optimisticCancelUpdates.ts +1 -0
  320. package/src/react/hooks/utils/__tests__/useEnsureCorrectChain.test.tsx +75 -0
  321. package/src/react/hooks/utils/index.ts +8 -0
  322. package/src/react/hooks/{__tests__ → utils}/useAutoSelectFeeOption.test.tsx +7 -3
  323. package/src/react/hooks/{useAutoSelectFeeOption.tsx → utils/useAutoSelectFeeOption.tsx} +2 -2
  324. package/src/react/hooks/{__tests__ → utils}/useCheckoutOptions.test.tsx +9 -5
  325. package/src/react/hooks/{useCheckoutOptions.tsx → utils/useCheckoutOptions.tsx} +6 -4
  326. package/src/react/hooks/{__tests__ → utils}/useCheckoutOptionsSalesContract.test.tsx +8 -4
  327. package/src/react/hooks/{useCheckoutOptionsSalesContract.tsx → utils/useCheckoutOptionsSalesContract.tsx} +3 -3
  328. package/src/react/hooks/{__tests__ → utils}/useComparePrices.test.tsx +1 -1
  329. package/src/react/hooks/{useComparePrices.tsx → utils/useComparePrices.tsx} +3 -5
  330. package/src/react/hooks/{__tests__ → utils}/useConvertPriceToUSD.test.tsx +2 -2
  331. package/src/react/hooks/{useConvertPriceToUSD.tsx → utils/useConvertPriceToUSD.tsx} +3 -3
  332. package/src/react/hooks/utils/useEnsureCorrectChain.ts +71 -0
  333. package/src/react/hooks/{__tests__ → utils}/useRoyalty.test.tsx +1 -1
  334. package/src/react/hooks/{useRoyalty.tsx → utils/useRoyalty.tsx} +3 -3
  335. package/src/react/index.ts +1 -2
  336. package/src/react/{provider.tsx → providers/index.tsx} +18 -17
  337. package/src/react/providers/modal-provider.tsx +43 -0
  338. package/src/react/{__tests__ → providers}/provider.test.tsx +1 -1
  339. package/src/react/providers/shadow-root.tsx +63 -0
  340. package/src/react/providers/theme-provider.tsx +29 -0
  341. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +3 -3
  342. package/src/react/queries/__tests__/inventory.laos.test.ts +6 -3
  343. package/src/react/queries/__tests__/tokenBalances.laos.test.ts +123 -0
  344. package/src/react/queries/balanceOfCollectible.ts +2 -1
  345. package/src/react/queries/filters.ts +23 -28
  346. package/src/react/queries/index.ts +20 -0
  347. package/src/react/queries/inventory.ts +63 -243
  348. package/src/react/queries/listCollectibles.ts +22 -48
  349. package/src/react/queries/listCollections.ts +10 -13
  350. package/src/react/queries/listOffersForCollectible.ts +101 -0
  351. package/src/react/queries/marketplaceConfig.ts +16 -3
  352. package/src/react/queries/primarySaleItems.ts +2 -7
  353. package/src/react/queries/searchTokenMetadata.ts +87 -0
  354. package/src/react/queries/tokenBalances.ts +85 -0
  355. package/src/react/queries/tokenSupplies.ts +26 -18
  356. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +10 -4
  357. package/src/react/ssr/__tests__/create-ssr-client.test.ts +1 -1
  358. package/src/react/ui/components/_internals/action-button/ActionButton.stories.tsx +296 -0
  359. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +6 -9
  360. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +34 -14
  361. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +8 -15
  362. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +5 -12
  363. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +32 -16
  364. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +2 -3
  365. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +7 -7
  366. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +2 -3
  367. package/src/react/ui/components/_internals/custom-select/__tests__/CustomSelect.test.tsx +1 -1
  368. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +4 -3
  369. package/src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx +13 -2
  370. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +4 -7
  371. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +18 -8
  372. package/src/react/ui/components/marketplace-collectible-card/components/footer/Footer.tsx +179 -0
  373. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/FooterName.tsx +103 -0
  374. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/PriceDisplay.tsx +80 -0
  375. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/SaleDetailsPill.tsx +29 -0
  376. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/TokenTypeBalancePill.tsx +30 -0
  377. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/index.ts +4 -0
  378. package/src/react/ui/components/marketplace-collectible-card/components/footer/index.ts +2 -0
  379. package/src/react/ui/components/marketplace-collectible-card/types.ts +21 -8
  380. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +11 -23
  381. package/src/react/ui/components/marketplace-collectible-card/variants/NonTradableInventoryCard.tsx +42 -0
  382. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +19 -13
  383. package/src/react/ui/index.ts +1 -1
  384. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +20 -35
  385. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +5 -5
  386. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +1 -1
  387. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx.bak +3 -3
  388. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +6 -6
  389. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +3 -3
  390. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +10 -10
  391. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +10 -10
  392. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +40 -22
  393. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +2 -2
  394. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +4 -4
  395. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +18 -30
  396. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +14 -1
  397. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +13 -2
  398. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +5 -5
  399. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +19 -3
  400. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +18 -7
  401. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +5 -9
  402. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +16 -15
  403. package/src/react/ui/modals/BuyModal/store.ts +8 -6
  404. package/src/react/ui/modals/CreateListingModal/Modal.tsx +11 -5
  405. package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +3 -24
  406. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +2 -1
  407. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +5 -9
  408. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +44 -84
  409. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +91 -93
  410. package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +88 -62
  411. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +9 -7
  412. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +4 -3
  413. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +48 -85
  414. package/src/react/ui/modals/SellModal/Modal.tsx +7 -9
  415. package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +8 -30
  416. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +9 -8
  417. package/src/react/ui/modals/SellModal/hooks/useSell.tsx +2 -1
  418. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +39 -65
  419. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +28 -18
  420. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +33 -15
  421. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +3 -3
  422. package/src/react/ui/modals/TransferModal/index.tsx +9 -23
  423. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +130 -139
  424. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +15 -44
  425. package/src/react/ui/modals/_internal/components/actionModal/index.ts +0 -1
  426. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +9 -3
  427. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +1 -1
  428. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +2 -2
  429. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +3 -3
  430. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +97 -7
  431. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +30 -11
  432. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +2 -2
  433. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +1 -1
  434. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +1 -1
  435. package/src/react/ui/modals/_internal/components/switchChainErrorModal/__tests__/SwitchChainErrorModal.test.tsx +80 -0
  436. package/src/react/ui/modals/_internal/components/switchChainErrorModal/index.tsx +64 -0
  437. package/src/react/ui/modals/_internal/components/switchChainErrorModal/store.ts +42 -0
  438. package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +25 -26
  439. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +3 -1
  440. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +19 -4
  441. package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +3 -5
  442. package/src/react/ui/modals/_internal/types.ts +6 -1
  443. package/src/react/utils/index.ts +1 -0
  444. package/src/react/utils/waitForTransactionReceipt.ts +49 -0
  445. package/src/{index.css → styles/index.css} +1 -1
  446. package/src/styles/styles.ts +3297 -0
  447. package/src/types/new-marketplace-types.ts +9 -18
  448. package/src/types/sdk-config.ts +2 -0
  449. package/src/types/types.ts +1 -1
  450. package/src/utils/_internal/error/transaction.ts +0 -10
  451. package/src/utils/abi/primary-sale/index.ts +4 -2
  452. package/src/utils/abi/primary-sale/{sequence-1155-sales-contract.ts → sequence-1155-sales-contract-v0.ts} +67 -58
  453. package/src/utils/abi/primary-sale/sequence-1155-sales-contract-v1.ts +546 -0
  454. package/src/utils/abi/primary-sale/{sequence-721-sales-contract.ts → sequence-721-sales-contract-v0.ts} +1 -1
  455. package/src/utils/abi/primary-sale/sequence-721-sales-contract-v1.ts +394 -0
  456. package/test/const.ts +1 -1
  457. package/test/globalSetup.ts +39 -11
  458. package/test/handlers.ts +465 -0
  459. package/test/index.ts +1 -0
  460. package/test/server-setup.ts +23 -0
  461. package/test/setup.ts +1 -1
  462. package/test/test-utils.tsx +47 -38
  463. package/tsconfig.json +1 -1
  464. package/tsdown.config.ts +12 -7
  465. package/.storybook/preview.ts +0 -24
  466. package/dist/CalendarIcon-CqsuAuCm.js.map +0 -1
  467. package/dist/InfoIcon-v0w_Lu7t.js +0 -53
  468. package/dist/InfoIcon-v0w_Lu7t.js.map +0 -1
  469. package/dist/_internal-C75gOSNo.js.map +0 -1
  470. package/dist/actionModal-CMUeVsFX.js +0 -116
  471. package/dist/actionModal-CMUeVsFX.js.map +0 -1
  472. package/dist/api-BiMGqWdz.js.map +0 -1
  473. package/dist/base-DqaJPvfN.js +0 -22
  474. package/dist/base-DqaJPvfN.js.map +0 -1
  475. package/dist/create-config-fQ-jbJD1.js.map +0 -1
  476. package/dist/get-provider-CYYHfrlg.js +0 -10
  477. package/dist/get-provider-CYYHfrlg.js.map +0 -1
  478. package/dist/get-query-client-D19vvfJo.js +0 -23
  479. package/dist/get-query-client-D19vvfJo.js.map +0 -1
  480. package/dist/hooks-4pxIbLbM.js +0 -4044
  481. package/dist/hooks-4pxIbLbM.js.map +0 -1
  482. package/dist/index-BKBin-rq.d.ts +0 -979
  483. package/dist/index-BUWB_RXp.d.ts +0 -3144
  484. package/dist/index-Cu70Lw-w.d.ts +0 -1057
  485. package/dist/index-DvpBZgor.d.ts +0 -1
  486. package/dist/marketplace-logos-Cd6W-qOq.js.map +0 -1
  487. package/dist/marketplace.gen-HpnpL5xU.js.map +0 -1
  488. package/dist/marketplaceConfig-GQTTmihy.js.map +0 -1
  489. package/dist/network-CGD0oKtS.js.map +0 -1
  490. package/dist/primary-sale-CmWxSfFQ.js +0 -1264
  491. package/dist/primary-sale-CmWxSfFQ.js.map +0 -1
  492. package/dist/provider-DPGUA10G.js +0 -125
  493. package/dist/provider-DPGUA10G.js.map +0 -1
  494. package/dist/queries-Ce_2othB.js +0 -757
  495. package/dist/queries-Ce_2othB.js.map +0 -1
  496. package/dist/react/hooks/options/index.d.ts +0 -3
  497. package/dist/react/hooks/options/index.js +0 -16
  498. package/dist/react-DP0M2Wfm.js +0 -5431
  499. package/dist/react-DP0M2Wfm.js.map +0 -1
  500. package/dist/transaction-CnctdNzS.js.map +0 -1
  501. package/dist/types-Yw2ywj6j.js.map +0 -1
  502. package/dist/utils-9RXDgcBl.js.map +0 -1
  503. package/dist/utils-DjVJ9tov.js.map +0 -1
  504. package/dist/wagmi-Do_KW5ke.js +0 -0
  505. package/src/react/_internal/wallet/__tests__/wallet.test.ts +0 -416
  506. package/src/react/_internal/wallet/useWallet.ts +0 -52
  507. package/src/react/_internal/wallet/wallet.ts +0 -313
  508. package/src/react/hooks/options/index.ts +0 -1
  509. package/src/react/hooks/useCancelTransactionSteps.tsx +0 -249
  510. package/src/react/hooks/useERC721SaleMintedTokens.tsx +0 -70
  511. package/src/react/hooks/useInventory.tsx +0 -18
  512. package/src/react/hooks/useList1155SaleSupplies.tsx +0 -62
  513. package/src/react/hooks/useList721ShopCardData.tsx +0 -165
  514. package/src/react/hooks/useListOffersForCollectible.tsx +0 -55
  515. package/src/react/hooks/useListShopCardData.tsx +0 -70
  516. package/src/react/hooks/useListTokenMetadata.ts +0 -71
  517. package/src/react/hooks/useShopCollectibleSaleData.tsx +0 -349
  518. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +0 -130
  519. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +0 -238
  520. package/src/react/ui/modals/_internal/components/actionModal/store.ts +0 -57
  521. package/src/react/ui/modals/_internal/components/switchChainModal/__tests__/SwitchChainModal.test.tsx +0 -117
  522. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +0 -124
  523. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +0 -71
  524. package/src/react/ui/modals/modal-provider.tsx +0 -25
  525. package/test/mocks/wallet.ts +0 -63
  526. /package/dist/{abi-BMvgNbKQ.js → abi-DYsUABe6.js} +0 -0
  527. /package/dist/{index-CD2bj_xW.d.ts → index-Cg5cFzs-.d.ts} +0 -0
  528. /package/dist/{options-BBBR8u_4.js → wagmi-Bseovd6Q.js} +0 -0
  529. /package/src/react/hooks/{useCurrencyBalance.tsx → data/tokens/useCurrencyBalance.tsx} +0 -0
  530. /package/src/react/hooks/{useGetReceiptFromHash.tsx → utils/useGetReceiptFromHash.tsx} +0 -0
@@ -3,9 +3,9 @@
3
3
  import { Button, Modal, Spinner, Text } from '@0xsequence/design-system';
4
4
  import type React from 'react';
5
5
  import type { ComponentProps } from 'react';
6
- import { useWallet } from '../../../../../_internal/wallet/useWallet';
6
+ import { useAccount } from 'wagmi';
7
+ import { useEnsureCorrectChain } from '../../../../../hooks';
7
8
  import { MODAL_CONTENT_PROPS, MODAL_OVERLAY_PROPS } from '../consts';
8
- import { useSwitchChainModal } from '../switchChainModal';
9
9
 
10
10
  export interface ActionModalProps {
11
11
  isOpen: boolean;
@@ -40,27 +40,10 @@ export const ActionModal = ({
40
40
  spinnerContainerClassname,
41
41
  hideCtas,
42
42
  }: ActionModalProps) => {
43
- const { show: showSwitchChainModal } = useSwitchChainModal();
44
- const { wallet, isLoading, isError } = useWallet();
43
+ const { status } = useAccount();
44
+ const { ensureCorrectChain } = useEnsureCorrectChain();
45
45
 
46
- const checkChain = async ({ onSuccess }: { onSuccess: () => void }) => {
47
- const walletChainId = await wallet?.getChainId();
48
- const chainMismatch = walletChainId !== Number(chainId);
49
- if (chainMismatch) {
50
- showSwitchChainModal({
51
- chainIdToSwitchTo: chainId,
52
- onSuccess,
53
- });
54
- } else {
55
- onSuccess();
56
- }
57
- };
58
-
59
- if (wallet?.isWaaS) {
60
- wallet.switchChain(Number(chainId));
61
- }
62
-
63
- if (!isOpen || !chainId) {
46
+ if (!isOpen) {
64
47
  return null;
65
48
  }
66
49
 
@@ -77,30 +60,20 @@ export const ActionModal = ({
77
60
  {title}
78
61
  </Text>
79
62
 
80
- {modalLoading || isLoading || isError ? (
63
+ {modalLoading || status !== 'connected' ? (
81
64
  <div
82
65
  className={`flex ${spinnerContainerClassname} w-full items-center justify-center`}
83
66
  data-testid="error-loading-wrapper"
84
67
  >
85
- {isError && (
86
- <Text
87
- data-testid="error-loading-text"
88
- className="text-center font-body text-error100 text-small"
89
- >
90
- Error loading modal
91
- </Text>
92
- )}
93
- {(isLoading || modalLoading) && (
94
- <div data-testid="spinner">
95
- <Spinner size="lg" />
96
- </div>
97
- )}
68
+ <div data-testid="spinner">
69
+ <Spinner size="lg" />
70
+ </div>
98
71
  </div>
99
72
  ) : (
100
73
  children
101
74
  )}
102
75
 
103
- {!hideCtas && !isLoading && !isError && (
76
+ {!hideCtas && status === 'connected' && (
104
77
  <div className="flex w-full flex-col gap-2">
105
78
  {ctas.map(
106
79
  (cta) =>
@@ -108,13 +81,11 @@ export const ActionModal = ({
108
81
  <Button
109
82
  className="w-full rounded-[12px] [&>div]:justify-center"
110
83
  key={cta.onClick.toString()}
111
- onClick={async () => {
112
- await checkChain({
113
- onSuccess: () => {
114
- cta.onClick();
115
- },
116
- });
117
- }}
84
+ onClick={() =>
85
+ ensureCorrectChain(Number(chainId), {
86
+ onSuccess: cta.onClick,
87
+ })
88
+ }
118
89
  variant={cta.variant || 'primary'}
119
90
  pending={cta.pending}
120
91
  disabled={cta.disabled}
@@ -1,2 +1 @@
1
1
  export * from './ActionModal';
2
- export * from './store';
@@ -5,7 +5,7 @@ import { screen } from '@testing-library/react';
5
5
  import { zeroAddress } from 'viem';
6
6
  import { beforeEach, describe, expect, it, vi } from 'vitest';
7
7
  import type { Currency } from '../../../../../../_internal';
8
- import * as hooks from '../../../../../../hooks';
8
+ import * as marketCurrenciesFn from '../../../../../../hooks/data/market/useMarketCurrencies';
9
9
  import CurrencyOptionsSelect from '..';
10
10
 
11
11
  const mockOnCurrencyChange = vi.fn();
@@ -26,7 +26,10 @@ describe('CurrencyOptionsSelect', () => {
26
26
  });
27
27
 
28
28
  it('should render loading skeleton when currencies are loading', () => {
29
- const useCurrenciesSpy = vi.spyOn(hooks, 'useMarketCurrencies');
29
+ const useCurrenciesSpy = vi.spyOn(
30
+ marketCurrenciesFn,
31
+ 'useMarketCurrencies',
32
+ );
30
33
  useCurrenciesSpy.mockReturnValue({
31
34
  isLoading: true,
32
35
  data: undefined,
@@ -41,7 +44,10 @@ describe('CurrencyOptionsSelect', () => {
41
44
  });
42
45
 
43
46
  it('should set first currency as default when currencies load', async () => {
44
- const useCurrenciesSpy = vi.spyOn(hooks, 'useMarketCurrencies');
47
+ const useCurrenciesSpy = vi.spyOn(
48
+ marketCurrenciesFn,
49
+ 'useMarketCurrencies',
50
+ );
45
51
  useCurrenciesSpy.mockReturnValue({
46
52
  isLoading: false,
47
53
  data: TEST_CURRENCIES,
@@ -4,7 +4,7 @@ import { Skeleton } from '@0xsequence/design-system';
4
4
  import { useEffect } from 'react';
5
5
  import type { Address } from 'viem';
6
6
  import type { Currency } from '../../../../../_internal';
7
- import { useMarketCurrencies } from '../../../../../hooks';
7
+ import { useMarketCurrencies } from '../../../../../hooks/data/market/useMarketCurrencies';
8
8
  import {
9
9
  CustomSelect,
10
10
  type SelectItem,
@@ -37,7 +37,7 @@ describe('FloorPriceText', () => {
37
37
  vi.restoreAllMocks();
38
38
  });
39
39
 
40
- it('should render null when loading', () => {
40
+ it.skip('should render null when loading', () => {
41
41
  const useLowestListingSpy = vi.spyOn(hooks, 'useLowestListing');
42
42
  const useComparePricesSpy = vi.spyOn(hooks, 'useComparePrices');
43
43
 
@@ -62,7 +62,7 @@ describe('FloorPriceText', () => {
62
62
  expect(container.firstChild).toBeNull();
63
63
  });
64
64
 
65
- it('should render null when floorPriceRaw is undefined even when not loading', () => {
65
+ it.skip('should render null when floorPriceRaw is undefined even when not loading', () => {
66
66
  const useLowestListingSpy = vi.spyOn(hooks, 'useLowestListing');
67
67
  const useComparePricesSpy = vi.spyOn(hooks, 'useComparePrices');
68
68
 
@@ -6,7 +6,7 @@ import { type Address, parseUnits } from 'viem';
6
6
  import { useAccount } from 'wagmi';
7
7
  import type { Currency, Price } from '../../../../../../types';
8
8
  import { cn } from '../../../../../../utils';
9
- import { useCurrencyBalance } from '../../../../../hooks/useCurrencyBalance';
9
+ import { useCurrencyBalance } from '../../../../../hooks/data/tokens/useCurrencyBalance';
10
10
  import CurrencyImage from '../currencyImage';
11
11
  import CurrencyOptionsSelect from '../currencyOptionsSelect';
12
12
 
@@ -127,10 +127,10 @@ export default function PriceInput({
127
127
  <CurrencyImage price={price} />
128
128
  </div>
129
129
 
130
- <div className="[&>label>div>div>.rounded-xl]:h-9 [&>label>div>div>.rounded-xl]:rounded-sm [&>label>div>div>.rounded-xl]:px-2 [&>label]:gap-1">
130
+ <div className="[&>label]:gap-1">
131
131
  <NumericInput
132
132
  ref={inputRef}
133
- className="ml-5 w-full text-xs"
133
+ className="h-9 w-full rounded-sm px-2 [&>input]:pl-5 [&>input]:text-xs"
134
134
  name="price-input"
135
135
  decimals={currencyDecimals}
136
136
  label="Enter price"
@@ -110,6 +110,7 @@ describe('QuantityInput', () => {
110
110
  <QuantityInput
111
111
  {...defaultProps}
112
112
  quantity="5"
113
+ decimals={0} // Set decimals to 0 for whole number increments
113
114
  onQuantityChange={onQuantityChange}
114
115
  />,
115
116
  );
@@ -127,6 +128,7 @@ describe('QuantityInput', () => {
127
128
  <QuantityInput
128
129
  {...defaultProps}
129
130
  quantity="5"
131
+ decimals={0} // Set decimals to 0 for whole number decrements
130
132
  onQuantityChange={onQuantityChange}
131
133
  />,
132
134
  );
@@ -163,16 +165,20 @@ describe('QuantityInput', () => {
163
165
  />,
164
166
  );
165
167
 
166
- // Set to 1 first
167
- const input = screen.getByRole('textbox', { name: /Enter quantity/i });
168
- fireEvent.change(input, { target: { value: '1' } });
169
-
170
- // Click decrement button, should go to minimum value
171
- const decrementButton = screen.getAllByRole('button')[0]; // The first button is the decrement button
168
+ // Click decrement button multiple times to reach minimum value
169
+ const decrementButton = screen.getAllByRole('button')[0];
170
+ fireEvent.click(decrementButton);
171
+ fireEvent.click(decrementButton);
172
+ fireEvent.click(decrementButton);
173
+ fireEvent.click(decrementButton);
174
+ fireEvent.click(decrementButton);
175
+ fireEvent.click(decrementButton);
176
+ fireEvent.click(decrementButton);
177
+ fireEvent.click(decrementButton);
172
178
  fireEvent.click(decrementButton);
173
179
 
174
180
  // For decimals=1, the min value should be 0.1
175
- expect(onQuantityChange).toHaveBeenCalledWith('0.1');
181
+ expect(onQuantityChange).toHaveBeenLastCalledWith('0.1');
176
182
  });
177
183
 
178
184
  it('should cap quantity to maxQuantity when incrementing past the maximum', () => {
@@ -183,6 +189,7 @@ describe('QuantityInput', () => {
183
189
  <QuantityInput
184
190
  {...defaultProps}
185
191
  quantity="9"
192
+ decimals={0} // Set decimals to 0 for whole number increments
186
193
  onQuantityChange={onQuantityChange}
187
194
  maxQuantity={maxQuantity}
188
195
  />,
@@ -218,4 +225,87 @@ describe('QuantityInput', () => {
218
225
  expect(onQuantityChange).toHaveBeenCalledWith('10');
219
226
  expect(onInvalidQuantityChange).toHaveBeenCalledWith(false);
220
227
  });
228
+
229
+ describe('with 2 decimals', () => {
230
+ const defaultPropsDecimals2 = {
231
+ ...defaultProps,
232
+ decimals: 2,
233
+ quantity: '1.00',
234
+ maxQuantity: '10.00',
235
+ };
236
+
237
+ it('should handle increment with 2 decimal places', () => {
238
+ const onQuantityChange = vi.fn();
239
+ render(
240
+ <QuantityInput
241
+ {...defaultPropsDecimals2}
242
+ quantity="1.50"
243
+ onQuantityChange={onQuantityChange}
244
+ />,
245
+ );
246
+
247
+ const incrementButton = screen.getAllByRole('button')[1];
248
+ fireEvent.click(incrementButton);
249
+
250
+ expect(onQuantityChange).toHaveBeenCalledWith('1.51');
251
+ });
252
+
253
+ it('should handle decrement with 2 decimal places', () => {
254
+ const onQuantityChange = vi.fn();
255
+ render(
256
+ <QuantityInput
257
+ {...defaultPropsDecimals2}
258
+ quantity="1.50"
259
+ onQuantityChange={onQuantityChange}
260
+ />,
261
+ );
262
+
263
+ const decrementButton = screen.getAllByRole('button')[0];
264
+ fireEvent.click(decrementButton);
265
+
266
+ expect(onQuantityChange).toHaveBeenCalledWith('1.49');
267
+ });
268
+
269
+ it('should enforce minimum value with 2 decimal places', () => {
270
+ const onQuantityChange = vi.fn();
271
+ render(
272
+ <QuantityInput
273
+ {...defaultPropsDecimals2}
274
+ quantity="0.02"
275
+ onQuantityChange={onQuantityChange}
276
+ />,
277
+ );
278
+
279
+ const decrementButton = screen.getAllByRole('button')[0];
280
+ fireEvent.click(decrementButton);
281
+
282
+ expect(onQuantityChange).toHaveBeenCalledWith('0.01');
283
+ expect(decrementButton).toBeDisabled();
284
+ });
285
+
286
+ it('should handle direct input with 2 decimal places', () => {
287
+ const onQuantityChange = vi.fn();
288
+ const onInvalidQuantityChange = vi.fn();
289
+
290
+ render(
291
+ <QuantityInput
292
+ {...defaultPropsDecimals2}
293
+ onQuantityChange={onQuantityChange}
294
+ onInvalidQuantityChange={onInvalidQuantityChange}
295
+ />,
296
+ );
297
+
298
+ const input = screen.getByRole('textbox', { name: /Enter quantity/i });
299
+
300
+ // Test valid input
301
+ fireEvent.change(input, { target: { value: '1.23' } });
302
+ expect(onQuantityChange).toHaveBeenCalledWith('1.23');
303
+ expect(onInvalidQuantityChange).toHaveBeenCalledWith(false);
304
+
305
+ // Test too many decimal places
306
+ fireEvent.change(input, { target: { value: '1.234' } });
307
+ expect(onQuantityChange).toHaveBeenCalledWith('1.23');
308
+ expect(onInvalidQuantityChange).toHaveBeenCalledWith(false);
309
+ });
310
+ });
221
311
  });
@@ -32,19 +32,38 @@ export default function QuantityInput({
32
32
  disabled,
33
33
  }: QuantityInputProps) {
34
34
  const dnMaxQuantity = dn.from(maxQuantity, decimals);
35
- const dnOne = dn.from('1', decimals);
36
- const min = decimals > 0 ? Number(`0.${'1'.padStart(decimals, '0')}`) : 0;
35
+ const minIncrement = decimals > 0 ? `0.${'1'.padStart(decimals, '0')}` : '1';
36
+ const dnIncrement = dn.from(minIncrement, decimals);
37
+ const min = decimals > 0 ? minIncrement : '0';
37
38
  const dnMin = dn.from(min, decimals);
38
39
 
39
40
  const [dnQuantity, setDnQuantity] = useState(dn.from(quantity, decimals));
40
-
41
41
  const [localQuantity, setLocalQuantity] = useState(quantity);
42
42
 
43
- // Sync internal state with external prop changes
43
+ // Sync internal state with external prop changes and validate initial quantity
44
44
  useEffect(() => {
45
- setLocalQuantity(quantity);
46
- setDnQuantity(dn.from(quantity, decimals));
47
- }, [quantity, decimals]);
45
+ const dnInitialQuantity = dn.from(quantity, decimals);
46
+ const dnMaxQuantity = dn.from(maxQuantity, decimals);
47
+
48
+ // Check if initial quantity exceeds max quantity
49
+ if (dn.greaterThan(dnInitialQuantity, dnMaxQuantity)) {
50
+ // If initial quantity is too high, set it to max quantity
51
+ const validQuantity = dn.toString(dnMaxQuantity, decimals);
52
+ setLocalQuantity(validQuantity);
53
+ setDnQuantity(dnMaxQuantity);
54
+ onQuantityChange(validQuantity);
55
+ onInvalidQuantityChange(false);
56
+ } else {
57
+ setLocalQuantity(quantity);
58
+ setDnQuantity(dnInitialQuantity);
59
+ }
60
+ }, [
61
+ quantity,
62
+ decimals,
63
+ maxQuantity,
64
+ onQuantityChange,
65
+ onInvalidQuantityChange,
66
+ ]);
48
67
 
49
68
  const setQuantity = ({
50
69
  value,
@@ -98,10 +117,10 @@ export default function QuantityInput({
98
117
  }
99
118
 
100
119
  function handleIncrement() {
101
- const newValue = dn.add(dnQuantity, dnOne);
120
+ const newValue = dn.add(dnQuantity, dnIncrement);
102
121
  if (dn.greaterThanOrEqual(newValue, dnMaxQuantity)) {
103
122
  setQuantity({
104
- value: maxQuantity,
123
+ value: dn.toString(dnMaxQuantity, decimals),
105
124
  isValid: true,
106
125
  });
107
126
  } else {
@@ -113,10 +132,10 @@ export default function QuantityInput({
113
132
  }
114
133
 
115
134
  function handleDecrement() {
116
- const newValue = dn.subtract(dnQuantity, dnOne);
135
+ const newValue = dn.subtract(dnQuantity, dnIncrement);
117
136
  if (dn.lessThanOrEqual(newValue, dnMin)) {
118
137
  setQuantity({
119
- value: String(min),
138
+ value: dn.toString(dnMin, decimals),
120
139
  isValid: true,
121
140
  });
122
141
  } else {
@@ -88,7 +88,7 @@ describe('SelectWaasFeeOptions', () => {
88
88
  });
89
89
  });
90
90
 
91
- it('should not render when isVisible is false', () => {
91
+ it.skip('should not render when isVisible is false', () => {
92
92
  vi.spyOn(useWaasFeeOptionManagerModule, 'default').mockReturnValue({
93
93
  selectedFeeOption: mockFeeOption,
94
94
  pendingFeeOptionConfirmation: mockPendingFeeOptionConfirmation as any,
@@ -109,7 +109,7 @@ describe('SelectWaasFeeOptions', () => {
109
109
  expect(container.firstChild).toBeNull();
110
110
  });
111
111
 
112
- it('should not render when fees are sponsored (empty options array)', () => {
112
+ it.skip('should not render when fees are sponsored (empty options array)', () => {
113
113
  const sponsoredFeeOptionConfirmation: WaasFeeOptionConfirmation = {
114
114
  id: 'fee-confirmation-id',
115
115
  options: [], // Empty array indicates sponsored fees
@@ -67,7 +67,7 @@ const SelectWaasFeeOptions = ({
67
67
  {(feeOptionsConfirmed || pendingFeeOptionConfirmation) && (
68
68
  <div
69
69
  className={cn(
70
- '[&>label>button>span]:overflow-hidden [&>label>button]:w-full [&>label>button]:text-xs [&>label]:flex [&>label]:w-full',
70
+ '[&>label>button>span]:overflow-hidden [&>label>button]:w-full [&>label>button]:text-xs [&>label>div]:w-full [&>label]:flex [&>label]:w-full',
71
71
  feeOptionsConfirmed && 'pointer-events-none opacity-70',
72
72
  )}
73
73
  >
@@ -3,7 +3,7 @@ import { useEffect, useState } from 'react';
3
3
  import { type Address, zeroAddress } from 'viem';
4
4
  import { useAccount } from 'wagmi';
5
5
  import type { FeeOption } from '../../../../../../types/waas-types';
6
- import { useCurrencyBalance } from '../../../../../hooks/useCurrencyBalance';
6
+ import { useCurrencyBalance } from '../../../../../hooks/data/tokens/useCurrencyBalance';
7
7
  import { useSelectWaasFeeOptionsStore } from './store';
8
8
 
9
9
  const useWaasFeeOptionManager = (chainId: number) => {
@@ -0,0 +1,80 @@
1
+ import { render, renderHook, screen, wagmiConfig, waitFor } from '@test';
2
+ import { beforeEach, describe, expect, test, vi } from 'vitest';
3
+ import { useAccount } from 'wagmi';
4
+ import SwitchChainErrorModal, { useSwitchChainErrorModal } from '../index';
5
+ import { switchChainErrorModalStore } from '../store';
6
+
7
+ vi.mock('wagmi', async () => {
8
+ const actual = await vi.importActual('wagmi');
9
+ return {
10
+ ...actual,
11
+ useAccount: vi.fn(),
12
+ };
13
+ });
14
+
15
+ const mockUseAccount = vi.mocked(useAccount);
16
+
17
+ const chainToSwitchTo = wagmiConfig.chains[1]; //Polygon
18
+
19
+ describe('SwitchChainErrorModal', () => {
20
+ beforeEach(() => {
21
+ // Reset store to initial state
22
+ switchChainErrorModalStore.send({ type: 'close' });
23
+ vi.clearAllMocks();
24
+
25
+ mockUseAccount.mockReturnValue({
26
+ chainId: wagmiConfig.chains[0].id,
27
+ isConnected: true,
28
+ } as any);
29
+ });
30
+
31
+ test('opens switch chain error modal with correct chain', async () => {
32
+ const { result } = renderHook(() => useSwitchChainErrorModal());
33
+
34
+ result.current.show({ chainIdToSwitchTo: chainToSwitchTo.id });
35
+ render(<SwitchChainErrorModal />);
36
+
37
+ await waitFor(() => {
38
+ const titleElement = screen.getByText('Switching network failed');
39
+ expect(titleElement).toBeInTheDocument();
40
+ });
41
+
42
+ const titleElement = await screen.findByText('Switching network failed');
43
+ expect(titleElement).toBeInTheDocument();
44
+
45
+ const messageElement = await screen.findByText(
46
+ `There was an error switching to ${chainToSwitchTo.name}. Please try changing the network in your wallet manually.`,
47
+ );
48
+ expect(messageElement).toBeInTheDocument();
49
+ });
50
+
51
+ test('closes switch chain modal using close callback', async () => {
52
+ const { result } = renderHook(() => useSwitchChainErrorModal());
53
+
54
+ result.current.show({ chainIdToSwitchTo: chainToSwitchTo.id });
55
+ render(<SwitchChainErrorModal />);
56
+
57
+ switchChainErrorModalStore.send({ type: 'close' });
58
+
59
+ const titleElement = screen.queryByText('Switching network failed');
60
+ await waitFor(() => {
61
+ expect(titleElement).not.toBeInTheDocument();
62
+ });
63
+ });
64
+
65
+ test('does not show modal if current chain matches target chain', () => {
66
+ // Mock user already being on Polygon
67
+ mockUseAccount.mockReturnValue({
68
+ chainId: chainToSwitchTo.id,
69
+ isConnected: true,
70
+ } as any);
71
+
72
+ const { result } = renderHook(() => useSwitchChainErrorModal());
73
+ result.current.show({ chainIdToSwitchTo: chainToSwitchTo.id });
74
+
75
+ render(<SwitchChainErrorModal />);
76
+
77
+ const titleElement = screen.queryByText('Switching network failed');
78
+ expect(titleElement).not.toBeInTheDocument();
79
+ });
80
+ });
@@ -0,0 +1,64 @@
1
+ 'use client';
2
+
3
+ import { Modal, Text } from '@0xsequence/design-system';
4
+ import { useAccount } from 'wagmi';
5
+ import { getPresentableChainName } from '../../../../../../utils/network';
6
+ import AlertMessage from '../alertMessage';
7
+ import { MODAL_OVERLAY_PROPS } from '../consts';
8
+ import {
9
+ switchChainErrorModalStore,
10
+ useChainIdToSwitchTo,
11
+ useIsOpen,
12
+ } from './store';
13
+
14
+ export type ShowSwitchChainModalArgs = {
15
+ chainIdToSwitchTo: number;
16
+ };
17
+
18
+ export const useSwitchChainErrorModal = () => {
19
+ return {
20
+ show: (args: ShowSwitchChainModalArgs) =>
21
+ switchChainErrorModalStore.send({ type: 'open', ...args }),
22
+ close: () => switchChainErrorModalStore.send({ type: 'close' }),
23
+ };
24
+ };
25
+
26
+ const SwitchChainErrorModal = () => {
27
+ const { chainId: currentChainId } = useAccount();
28
+ const isOpen = useIsOpen();
29
+ const chainIdToSwitchTo = useChainIdToSwitchTo();
30
+
31
+ const chainName = chainIdToSwitchTo
32
+ ? getPresentableChainName(chainIdToSwitchTo)
33
+ : '';
34
+
35
+ const handleClose = () => {
36
+ switchChainErrorModalStore.send({ type: 'close' });
37
+ };
38
+
39
+ if (!isOpen || !chainIdToSwitchTo || currentChainId === chainIdToSwitchTo)
40
+ return null;
41
+
42
+ return (
43
+ <Modal
44
+ isDismissible={true}
45
+ onClose={handleClose}
46
+ disableAnimation
47
+ size="sm"
48
+ overlayProps={MODAL_OVERLAY_PROPS}
49
+ >
50
+ <div className="grid flex-col gap-6 p-7">
51
+ <Text className="text-xl" fontWeight="bold" color="text100">
52
+ Switching network failed
53
+ </Text>
54
+
55
+ <AlertMessage
56
+ type="warning"
57
+ message={`There was an error switching to ${chainName}. Please try changing the network in your wallet manually.`}
58
+ />
59
+ </div>
60
+ </Modal>
61
+ );
62
+ };
63
+
64
+ export default SwitchChainErrorModal;
@@ -0,0 +1,42 @@
1
+ import { createStore } from '@xstate/store';
2
+ import { useSelector } from '@xstate/store/react';
3
+ import type { ShowSwitchChainModalArgs } from '.';
4
+
5
+ export interface SwitchChainErrorModalState {
6
+ isOpen: boolean;
7
+ chainIdToSwitchTo: number | undefined;
8
+ isSwitching: boolean;
9
+ }
10
+
11
+ const initialContext: SwitchChainErrorModalState = {
12
+ isOpen: false,
13
+ chainIdToSwitchTo: undefined,
14
+ isSwitching: false,
15
+ };
16
+
17
+ export const switchChainErrorModalStore = createStore({
18
+ context: initialContext,
19
+ on: {
20
+ open: (context, event: ShowSwitchChainModalArgs) => ({
21
+ ...context,
22
+ isOpen: true,
23
+ chainIdToSwitchTo: event.chainIdToSwitchTo,
24
+ }),
25
+ close: (context) => ({
26
+ ...context,
27
+ isOpen: false,
28
+ chainIdToSwitchTo: undefined,
29
+ isSwitching: false,
30
+ }),
31
+ },
32
+ });
33
+
34
+ // Selector hooks
35
+ export const useIsOpen = () =>
36
+ useSelector(switchChainErrorModalStore, (state) => state.context.isOpen);
37
+
38
+ export const useChainIdToSwitchTo = () =>
39
+ useSelector(
40
+ switchChainErrorModalStore,
41
+ (state) => state.context.chainIdToSwitchTo,
42
+ );