@0xsequence/marketplace-sdk 0.8.12 → 0.10.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.
- package/.storybook/main.ts +63 -0
- package/.storybook/preview.ts +24 -0
- package/.storybook/vitest.setup.ts +6 -0
- package/CHANGELOG.md +158 -21
- package/dist/{CartIcon-Bll1rbxv.js → CalendarIcon-CqsuAuCm.js} +30 -77
- package/dist/CalendarIcon-CqsuAuCm.js.map +1 -0
- package/dist/{types-BIJOaL4j.d.ts → CollectibleCard-Dd-CG6dE.d.ts} +11 -7
- package/dist/InfoIcon-v0w_Lu7t.js +53 -0
- package/dist/InfoIcon-v0w_Lu7t.js.map +1 -0
- package/dist/_internal-C75gOSNo.js +14 -0
- package/dist/_internal-C75gOSNo.js.map +1 -0
- package/dist/actionModal-CMUeVsFX.js +116 -0
- package/dist/actionModal-CMUeVsFX.js.map +1 -0
- package/dist/{alien_swap-B_76IMma.js → alien_swap-CYv6YlOF.js} +1 -1
- package/dist/{alien_swap-B_76IMma.js.map → alien_swap-CYv6YlOF.js.map} +1 -1
- package/dist/{api-1KFxYh7o.js → api-BiMGqWdz.js} +79 -87
- package/dist/api-BiMGqWdz.js.map +1 -0
- package/dist/{aqua-xyz-CMN_TFY5.js → aqua-xyz-Bzn5baeH.js} +1 -1
- package/dist/{aqua-xyz-CMN_TFY5.js.map → aqua-xyz-Bzn5baeH.js.map} +1 -1
- package/dist/{aura-Cye_TuHj.js → aura-DzIWh8WT.js} +1 -1
- package/dist/{aura-Cye_TuHj.js.map → aura-DzIWh8WT.js.map} +1 -1
- package/dist/base-DqaJPvfN.js +22 -0
- package/dist/base-DqaJPvfN.js.map +1 -0
- package/dist/{blur-DWDMyMpK.js → blur-DSH-Cbpj.js} +1 -1
- package/dist/{blur-DWDMyMpK.js.map → blur-DSH-Cbpj.js.map} +1 -1
- package/dist/{builder-api-BQvzykoU.js → builder-api-BFuZNOaN.js} +2 -2
- package/dist/{builder-api-BQvzykoU.js.map → builder-api-BFuZNOaN.js.map} +1 -1
- package/dist/{builder.gen-CxP9NT1p.js → builder.gen-B9wR2nvF.js} +1 -1
- package/dist/builder.gen-B9wR2nvF.js.map +1 -0
- package/dist/{coinbase-ByA_XRB0.js → coinbase-Df8URNxq.js} +1 -1
- package/dist/{coinbase-ByA_XRB0.js.map → coinbase-Df8URNxq.js.map} +1 -1
- package/dist/{sdk-config-DJzxVPld.d.ts → create-config-DKJ-F0jc.d.ts} +458 -86
- package/dist/{wagmi-DRctYEk6.js → create-config-fQ-jbJD1.js} +33 -16
- package/dist/create-config-fQ-jbJD1.js.map +1 -0
- package/dist/{element-b77CyXIZ.js → element-Cx6uJu5N.js} +1 -1
- package/dist/{element-b77CyXIZ.js.map → element-Cx6uJu5N.js.map} +1 -1
- package/dist/{foundation-DbOrKP9Y.js → foundation-D6U4aRLN.js} +1 -1
- package/dist/{foundation-DbOrKP9Y.js.map → foundation-D6U4aRLN.js.map} +1 -1
- package/dist/get-provider-CYYHfrlg.js +10 -0
- package/dist/get-provider-CYYHfrlg.js.map +1 -0
- package/dist/get-query-client-D19vvfJo.js +23 -0
- package/dist/get-query-client-D19vvfJo.js.map +1 -0
- package/dist/hooks-4pxIbLbM.js +4044 -0
- package/dist/hooks-4pxIbLbM.js.map +1 -0
- package/dist/{index-1bezgsFq.d.ts → index-136YrWDH.d.ts} +929 -255
- package/dist/{index-D5v5iluA.d.ts → index-BAhaEfqY.d.ts} +1 -1
- package/dist/index-BKBin-rq.d.ts +979 -0
- package/dist/index-BUWB_RXp.d.ts +3144 -0
- package/dist/{index-Cl7PQOGu.d.ts → index-BhVFc2rX.d.ts} +28 -25
- package/dist/{index-DXMfTZ1F.d.ts → index-C5aqo8xu.d.ts} +1 -1
- package/dist/{index-BIMIpDiI.d.ts → index-CKrYP7ot.d.ts} +74 -103
- package/dist/{index-BEYefG1G.d.ts → index-CUwMH7Ht.d.ts} +5 -5
- package/dist/{index-BjIwVzc4.d.ts → index-Cu70Lw-w.d.ts} +238 -238
- package/dist/index.css +427 -1
- package/dist/index.d.ts +8 -10
- package/dist/index.js +15 -11
- package/dist/{looks-rare-C1VqNcSM.js → looks-rare-ChBRBY-p.js} +1 -1
- package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-ChBRBY-p.js.map} +1 -1
- package/dist/{magic-eden-ea_AGCZr.js → magic-eden-D5U7N1xL.js} +1 -1
- package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-D5U7N1xL.js.map} +1 -1
- package/dist/{manifold-8y8J2sjT.js → manifold-CtLF52zU.js} +1 -1
- package/dist/{manifold-8y8J2sjT.js.map → manifold-CtLF52zU.js.map} +1 -1
- package/dist/{marketplace-nwnZv9Cb.js → marketplace-DmFiyBoS.js} +1 -1
- package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-DmFiyBoS.js.map} +1 -1
- package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-Cd6W-qOq.js} +21 -21
- package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-Cd6W-qOq.js.map} +1 -1
- package/dist/{marketplace.gen-Dqk8vRmD.js → marketplace.gen-HpnpL5xU.js} +12 -3
- package/dist/marketplace.gen-HpnpL5xU.js.map +1 -0
- package/dist/{marketplaceConfig-D2MYFqll.js → marketplaceConfig-GQTTmihy.js} +3 -3
- package/dist/marketplaceConfig-GQTTmihy.js.map +1 -0
- package/dist/{mintify-LA68TzWg.js → mintify-Bi3Bce68.js} +1 -1
- package/dist/{mintify-LA68TzWg.js.map → mintify-Bi3Bce68.js.map} +1 -1
- package/dist/network-CGD0oKtS.js +15 -0
- package/dist/network-CGD0oKtS.js.map +1 -0
- package/dist/{nftx-D3Tc8nzd.js → nftx-BDQZjtkX.js} +1 -1
- package/dist/{nftx-D3Tc8nzd.js.map → nftx-BDQZjtkX.js.map} +1 -1
- package/dist/{okx-hbqg6oIJ.js → okx-D4meadLe.js} +1 -1
- package/dist/{okx-hbqg6oIJ.js.map → okx-D4meadLe.js.map} +1 -1
- package/dist/{open-sea-BccuK8-t.js → open-sea-DN0hgfVw.js} +1 -1
- package/dist/{open-sea-BccuK8-t.js.map → open-sea-DN0hgfVw.js.map} +1 -1
- package/dist/options-BBBR8u_4.js +0 -0
- package/dist/{primary-sale-Cw95phYC.js → primary-sale-CmWxSfFQ.js} +279 -279
- package/dist/primary-sale-CmWxSfFQ.js.map +1 -0
- package/dist/provider-DPGUA10G.js +125 -0
- package/dist/provider-DPGUA10G.js.map +1 -0
- package/dist/queries-Ce_2othB.js +757 -0
- package/dist/queries-Ce_2othB.js.map +1 -0
- package/dist/{rarible-BgTwwj9g.js → rarible-B0xlD88A.js} +1 -1
- package/dist/{rarible-BgTwwj9g.js.map → rarible-B0xlD88A.js.map} +1 -1
- package/dist/react/_internal/api/index.d.ts +2 -4
- package/dist/react/_internal/api/index.js +9 -6
- package/dist/react/_internal/databeat/index.d.ts +2 -73
- package/dist/react/_internal/databeat/index.js +4 -21
- package/dist/react/_internal/index.d.ts +2 -7
- package/dist/react/_internal/index.js +13 -8
- package/dist/react/_internal/wagmi/index.d.ts +2 -4
- package/dist/react/_internal/wagmi/index.js +6 -4
- package/dist/react/hooks/index.d.ts +13 -17
- package/dist/react/hooks/index.js +25 -21
- package/dist/react/hooks/options/index.d.ts +3 -5
- package/dist/react/hooks/options/index.js +15 -10
- package/dist/react/index.d.ts +13 -40
- package/dist/react/index.js +30 -21
- package/dist/react/queries/index.d.ts +9 -8
- package/dist/react/queries/index.js +22 -17
- package/dist/react/ssr/index.d.ts +7 -9
- package/dist/react/ssr/index.js +13 -8
- package/dist/react/ssr/index.js.map +1 -1
- package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +3 -9
- package/dist/react/ui/components/marketplace-collectible-card/index.js +29 -20
- package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
- package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +13 -8
- package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
- package/dist/react/ui/components/marketplace-logos/index.js +1 -1
- package/dist/react/ui/icons/index.js +14 -10
- package/dist/react/ui/index.d.ts +3 -9
- package/dist/react/ui/index.js +29 -20
- package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +5 -5
- package/dist/react/ui/modals/_internal/components/actionModal/index.js +25 -20
- package/dist/{react-BG7o4PId.js → react-DP0M2Wfm.js} +4919 -7839
- package/dist/react-DP0M2Wfm.js.map +1 -0
- package/dist/{react-BbHBl6gg.css → react-DeDyTgo7.css} +1 -1
- package/dist/{react-BbHBl6gg.css.map → react-DeDyTgo7.css.map} +1 -1
- package/dist/{sequence-Do3kzb4J.js → sequence-BIrOVRXO.js} +1 -1
- package/dist/{sequence-Do3kzb4J.js.map → sequence-BIrOVRXO.js.map} +1 -1
- package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-BPMon-M5.js} +1 -1
- package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-BPMon-M5.js.map} +1 -1
- package/dist/{super-rare-eCm1SE6O.js → super-rare-kPN6Ua8i.js} +1 -1
- package/dist/{super-rare-eCm1SE6O.js.map → super-rare-kPN6Ua8i.js.map} +1 -1
- package/dist/{token-CO5llIla.js → token-CHSBPYVG.js} +1540 -761
- package/dist/token-CHSBPYVG.js.map +1 -0
- package/dist/{transaction-CcVViHEL.js → transaction-CnctdNzS.js} +3 -21
- package/dist/transaction-CnctdNzS.js.map +1 -0
- package/dist/types/index.d.ts +2 -3
- package/dist/types/index.js +3 -3
- package/dist/{types-DwWE6xOF.js → types-Yw2ywj6j.js} +1 -1
- package/dist/types-Yw2ywj6j.js.map +1 -0
- package/dist/utils/abi/index.d.ts +5 -5
- package/dist/utils/abi/index.js +5 -5
- package/dist/utils/abi/marketplace/index.d.ts +1 -1
- package/dist/utils/abi/marketplace/index.js +1 -1
- package/dist/utils/abi/primary-sale/index.d.ts +1 -1
- package/dist/utils/abi/primary-sale/index.js +1 -1
- package/dist/utils/abi/token/index.d.ts +2 -2
- package/dist/utils/abi/token/index.js +2 -2
- package/dist/utils/index.d.ts +7 -8
- package/dist/utils/index.js +13 -10
- package/dist/{utils-BFdxaToy.js → utils-9RXDgcBl.js} +86 -93
- package/dist/utils-9RXDgcBl.js.map +1 -0
- package/dist/{utils-Cat9_pef.js → utils-DjVJ9tov.js} +5 -6
- package/dist/utils-DjVJ9tov.js.map +1 -0
- package/dist/wagmi-Do_KW5ke.js +0 -0
- package/dist/{x2y2-DD17tT91.js → x2y2-BLz-_Q2O.js} +1 -1
- package/dist/{x2y2-DD17tT91.js.map → x2y2-BLz-_Q2O.js.map} +1 -1
- package/dist/{zora-BpSG9UzS.js → zora-UGhKs-aL.js} +1 -1
- package/dist/{zora-BpSG9UzS.js.map → zora-UGhKs-aL.js.map} +1 -1
- package/eslint/use-client.js +0 -6
- package/eslint.config.mjs +4 -0
- package/package.json +47 -35
- package/postcss.config.mjs +6 -0
- package/src/index.css +5 -4
- package/src/index.ts +2 -1
- package/src/react/__tests__/provider.test.tsx +4 -3
- package/src/react/_internal/api/__mocks__/builder.msw.ts +5 -3
- package/src/react/_internal/api/__mocks__/indexer.msw.ts +24 -8
- package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
- package/src/react/_internal/api/__mocks__/marketplace.msw.ts +6 -6
- package/src/react/_internal/api/__mocks__/metadata.msw.ts +1 -1
- package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
- package/src/react/_internal/api/builder.gen.ts +6 -6
- package/src/react/_internal/api/get-query-client.ts +2 -2
- package/src/react/_internal/api/index.ts +2 -2
- package/src/react/_internal/api/laos-api.ts +3 -0
- package/src/react/_internal/api/marketplace.gen.ts +43 -3
- package/src/react/_internal/api/query-keys.ts +21 -6
- package/src/react/_internal/api/services.ts +30 -45
- package/src/react/_internal/databeat/index.ts +15 -14
- package/src/react/_internal/databeat/types.ts +22 -0
- package/src/react/_internal/databeat/utils.ts +26 -0
- package/src/react/_internal/index.ts +1 -1
- package/src/react/_internal/types.ts +10 -23
- package/src/react/_internal/utils.ts +4 -5
- package/src/react/_internal/wagmi/create-config.ts +43 -19
- package/src/react/_internal/wagmi/get-connectors.ts +9 -7
- package/src/react/_internal/wallet/__tests__/wallet.test.ts +1 -1
- package/src/react/_internal/wallet/wallet.ts +22 -22
- package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +20 -0
- package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +12 -2
- package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +1 -1
- package/src/react/hooks/__tests__/useBalanceOfCollectible.laos.test.tsx +367 -0
- package/src/react/hooks/__tests__/useBalanceOfCollectible.test.tsx +1 -1
- package/src/react/hooks/__tests__/useCancelOrder.test.tsx +4 -4
- package/src/react/hooks/__tests__/useCancelTransactionSteps.test.tsx +1 -1
- package/src/react/hooks/__tests__/useCheckoutOptions.test.tsx +158 -0
- package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +42 -65
- package/src/react/hooks/__tests__/useCollectible.test.tsx +14 -16
- package/src/react/hooks/__tests__/useCollection.test.tsx +4 -4
- package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +16 -25
- package/src/react/hooks/__tests__/useCollectionDetails.test.tsx +1 -1
- package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +12 -4
- package/src/react/hooks/__tests__/useComparePrices.test.tsx +7 -6
- package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +4 -4
- package/src/react/hooks/__tests__/useCountListingsForCollectible.test.tsx +2 -2
- package/src/react/hooks/__tests__/useCountOfCollectables.test.tsx +5 -5
- package/src/react/hooks/__tests__/useCountOffersForCollectible.test.tsx +2 -2
- package/src/react/hooks/__tests__/useCurrency.test.tsx +5 -3
- package/src/react/hooks/__tests__/useCurrencyBalance.test.tsx +7 -3
- package/src/react/hooks/__tests__/useFilters.test.tsx +3 -3
- package/src/react/hooks/__tests__/useFloorOrder.test.tsx +4 -4
- package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +3 -3
- package/src/react/hooks/__tests__/useGenerateListingTransaction.test.tsx +1 -1
- package/src/react/hooks/__tests__/useGenerateOfferTransaction.test.tsx +1 -1
- package/src/react/hooks/__tests__/useGenerateSellTransaction.test.tsx +1 -1
- package/src/react/hooks/__tests__/useGetTokenRanges.test.tsx +111 -0
- package/src/react/hooks/__tests__/useHighestOffer.test.tsx +4 -4
- package/src/react/hooks/__tests__/useInventory.test.tsx +1 -1
- package/src/react/hooks/__tests__/useListCollectibleActivities.test.tsx +11 -13
- package/src/react/hooks/__tests__/useListCollectibles.test.tsx +5 -5
- package/src/react/hooks/__tests__/useListCollectiblesPaginated.test.tsx +10 -15
- package/src/react/hooks/__tests__/useListCollectionActivities.test.tsx +13 -15
- package/src/react/hooks/__tests__/useListCollections.test.tsx +3 -3
- package/src/react/hooks/__tests__/useListListingsForCollectible.test.tsx +3 -2
- package/src/react/hooks/__tests__/useListMarketCardData.test.tsx +301 -0
- package/src/react/hooks/__tests__/useListOffersForCollectible.test.tsx +1 -1
- package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +137 -0
- package/src/react/hooks/__tests__/useLowestListing.test.tsx +1 -1
- package/src/react/hooks/__tests__/useMarketCurrencies.test.tsx +1 -1
- package/src/react/hooks/__tests__/useRoyalty.test.tsx +0 -23
- package/src/react/hooks/__tests__/useTransferTokens.test.tsx +469 -0
- package/src/react/hooks/index.ts +29 -24
- package/src/react/hooks/options/index.ts +0 -1
- package/src/react/hooks/useAutoSelectFeeOption.tsx +1 -1
- package/src/react/hooks/useBalanceOfCollectible.tsx +1 -1
- package/src/react/hooks/useCancelTransactionSteps.tsx +2 -2
- package/src/react/hooks/useCheckoutOptions.tsx +84 -54
- package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +98 -57
- package/src/react/hooks/useCollectible.tsx +64 -49
- package/src/react/hooks/useCollection.tsx +60 -11
- package/src/react/hooks/useCollectionBalanceDetails.tsx +93 -73
- package/src/react/hooks/useCollectionDetails.ts +69 -0
- package/src/react/hooks/useCollectionDetailsPolling.tsx +7 -3
- package/src/react/hooks/useComparePrices.tsx +91 -86
- package/src/react/hooks/useConvertPriceToUSD.tsx +83 -86
- package/src/react/hooks/useCountListingsForCollectible.tsx +64 -53
- package/src/react/hooks/useCountOfCollectables.tsx +60 -69
- package/src/react/hooks/useCountOfPrimarySaleItems.tsx +13 -0
- package/src/react/hooks/useCountOffersForCollectible.tsx +64 -53
- package/src/react/hooks/useCurrency.tsx +56 -64
- package/src/react/hooks/useCurrencyBalance.tsx +132 -46
- package/src/react/hooks/useERC721SaleMintedTokens.tsx +8 -5
- package/src/react/hooks/useFilterState.tsx +1 -2
- package/src/react/hooks/useFilters.tsx +154 -111
- package/src/react/hooks/useFloorOrder.tsx +65 -40
- package/src/react/hooks/useGenerateCancelTransaction.tsx +5 -10
- package/src/react/hooks/useGenerateListingTransaction.tsx +1 -1
- package/src/react/hooks/useGenerateOfferTransaction.tsx +1 -1
- package/src/react/hooks/useGenerateSellTransaction.tsx +5 -10
- package/src/react/hooks/useGetCountOfPrimarySaleItems.tsx +48 -0
- package/src/react/hooks/useGetReceiptFromHash.tsx +32 -3
- package/src/react/hooks/useGetTokenRanges.tsx +92 -0
- package/src/react/hooks/useHighestOffer.tsx +68 -4
- package/src/react/hooks/useInventory.tsx +1 -1
- package/src/react/hooks/useList1155ShopCardData.tsx +57 -82
- package/src/react/hooks/useList721ShopCardData.tsx +98 -63
- package/src/react/hooks/useListBalances.tsx +1 -1
- package/src/react/hooks/useListCollectibleActivities.tsx +89 -50
- package/src/react/hooks/useListCollectibles.tsx +81 -16
- package/src/react/hooks/useListCollectiblesPaginated.tsx +96 -66
- package/src/react/hooks/useListCollectionActivities.tsx +84 -50
- package/src/react/hooks/useListCollections.tsx +71 -17
- package/src/react/hooks/useListListingsForCollectible.tsx +90 -50
- package/src/react/hooks/useListMarketCardData.tsx +3 -2
- package/src/react/hooks/useListOffersForCollectible.tsx +9 -14
- package/src/react/hooks/useListPrimarySaleItems.tsx +66 -0
- package/src/react/hooks/useListShopCardData.tsx +70 -0
- package/src/react/hooks/useListTokenMetadata.ts +64 -12
- package/src/react/hooks/useListTokenMetadata.tsx +73 -0
- package/src/react/hooks/useLowestListing.tsx +68 -4
- package/src/react/hooks/useMarketCurrencies.tsx +62 -5
- package/src/react/hooks/useOpenConnectModal.tsx +9 -0
- package/src/react/hooks/useRoyalty.tsx +57 -13
- package/src/react/hooks/useShopCollectibleSaleData.tsx +349 -0
- package/src/react/hooks/useTokenSaleDetailsBatch.tsx +3 -7
- package/src/react/hooks/useTokenSupplies.ts +81 -0
- package/src/react/hooks/useTransferTokens.tsx +2 -2
- package/src/react/hooks/util/optimisticCancelUpdates.ts +5 -7
- package/src/react/index.ts +5 -3
- package/src/react/provider.tsx +73 -9
- package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
- package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
- package/src/react/queries/balanceOfCollectible.ts +8 -5
- package/src/react/queries/checkoutOptions.ts +85 -0
- package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
- package/src/react/queries/collectible.ts +66 -0
- package/src/react/queries/collection.ts +55 -0
- package/src/react/queries/collectionBalanceDetails.ts +92 -0
- package/src/react/queries/collectionDetails.ts +64 -0
- package/src/react/queries/comparePrices.ts +108 -0
- package/src/react/queries/convertPriceToUSD.ts +92 -0
- package/src/react/queries/countListingsForCollectible.ts +73 -0
- package/src/react/queries/countOfCollectables.ts +83 -0
- package/src/react/queries/countOfPrimarySaleItems.ts +48 -0
- package/src/react/queries/countOffersForCollectible.ts +73 -0
- package/src/react/queries/currency.ts +83 -0
- package/src/react/queries/filters.ts +138 -0
- package/src/react/queries/floorOrder.ts +63 -0
- package/src/react/queries/getTokenRanges.ts +62 -0
- package/src/react/queries/highestOffer.ts +46 -40
- package/src/react/queries/index.ts +10 -4
- package/src/react/queries/inventory.ts +10 -4
- package/src/react/queries/listBalances.ts +5 -4
- package/src/react/queries/listCollectibleActivities.ts +97 -0
- package/src/react/queries/listCollectibles.ts +67 -50
- package/src/react/queries/listCollectiblesPaginated.ts +87 -0
- package/src/react/queries/listCollectionActivities.ts +95 -0
- package/src/react/queries/listCollections.ts +53 -10
- package/src/react/queries/listListingsForCollectible.ts +82 -0
- package/src/react/queries/listTokenMetadata.ts +47 -23
- package/src/react/queries/lowestListing.ts +46 -31
- package/src/react/queries/marketCurrencies.ts +42 -29
- package/src/react/queries/marketplaceConfig.ts +4 -4
- package/src/react/queries/primarySaleItems.ts +85 -0
- package/src/react/queries/primarySaleItemsCount.ts +64 -0
- package/src/react/queries/tokenSupplies.ts +93 -0
- package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +12 -2
- package/src/react/ssr/create-ssr-client.ts +1 -1
- package/src/react/types/query.ts +34 -0
- package/src/react/ui/components/ModelViewer.tsx +1 -1
- package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
- package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +22 -4
- package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +14 -8
- package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +5 -4
- package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +3 -0
- package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
- package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +20 -18
- package/src/react/ui/components/_internals/action-button/store.ts +72 -34
- package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
- package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
- package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +1 -1
- package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +12 -5
- package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
- package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +3 -0
- package/src/react/ui/components/marketplace-collectible-card/index.ts +1 -1
- package/src/react/ui/components/marketplace-collectible-card/types.ts +11 -7
- package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
- package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +3 -2
- package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +7 -6
- package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
- package/src/react/ui/components/marketplace-logos/marketplace-logos.tsx +1 -1
- package/src/react/ui/components/media/Media.stories.tsx +642 -0
- package/src/react/ui/components/media/Media.tsx +29 -20
- package/src/react/ui/components/media/types.ts +6 -0
- package/src/react/ui/index.ts +8 -10
- package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +15 -0
- package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +100 -87
- package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +11 -5
- package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +10 -2
- package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +17 -11
- package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +4 -1
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +1 -1
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +30 -27
- package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +3 -3
- package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +11 -2
- package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +2 -2
- package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +10 -3
- package/src/react/ui/modals/BuyModal/index.tsx +9 -1
- package/src/react/ui/modals/BuyModal/store.ts +26 -0
- package/src/react/ui/modals/CreateListingModal/Modal.tsx +28 -11
- package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +2 -2
- package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +0 -1
- package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -2
- package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +7 -6
- package/src/react/ui/modals/CreateListingModal/index.tsx +1 -1
- package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
- package/src/react/ui/modals/MakeOfferModal/Modal.tsx +31 -14
- package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +1 -1
- package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +1 -1
- package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +0 -1
- package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +7 -7
- package/src/react/ui/modals/MakeOfferModal/index.tsx +1 -1
- package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
- package/src/react/ui/modals/SellModal/Modal.tsx +14 -11
- package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +6 -4
- package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +1 -1
- package/src/react/ui/modals/SellModal/hooks/useSell.tsx +0 -1
- package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +6 -6
- package/src/react/ui/modals/SellModal/store.ts +3 -3
- package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +1 -1
- package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
- package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +402 -0
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +52 -50
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +39 -47
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +33 -37
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +19 -10
- package/src/react/ui/modals/TransferModal/index.tsx +28 -31
- package/src/react/ui/modals/TransferModal/messages.ts +1 -1
- package/src/react/ui/modals/TransferModal/store.ts +122 -0
- package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +1 -1
- package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +2 -4
- package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
- package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +6 -3
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +23 -18
- package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
- package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +6 -6
- package/src/react/ui/modals/_internal/components/floorPriceText/index.tsx +4 -4
- package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
- package/src/react/ui/modals/_internal/components/priceInput/index.tsx +41 -26
- package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +68 -59
- package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +23 -17
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +340 -41
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/BalanceIndicator.tsx +1 -2
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +29 -14
- package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
- package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
- package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
- package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +37 -11
- package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +0 -1
- package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +32 -20
- package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +92 -63
- package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +44 -45
- package/src/react/ui/modals/_internal/types.ts +2 -2
- package/src/react/ui/modals/modal-provider.tsx +2 -3
- package/src/types/api-types.ts +36 -36
- package/src/types/buyModalErrors.ts +1 -1
- package/src/types/index.ts +5 -5
- package/src/types/new-marketplace-types.ts +1 -1
- package/src/types/sdk-config.ts +8 -2
- package/src/types/types.ts +1 -0
- package/src/types/waas-types.ts +1 -1
- package/src/utils/abi/index.ts +1 -1
- package/src/utils/abi/primary-sale/index.ts +1 -1
- package/src/utils/abi/token/index.ts +2 -1
- package/src/utils/decode/erc20.ts +1 -1
- package/src/utils/index.ts +3 -3
- package/src/utils/network.ts +15 -0
- package/test/const.ts +3 -1
- package/test/mocks/wallet.ts +1 -1
- package/test/test-utils.tsx +5 -4
- package/vitest.shims.d.ts +2 -0
- package/vitest.storybook.config.js +33 -0
- package/.changeset/fluffy-jokes-lay.md +0 -5
- package/.changeset/wise-bugs-boil.md +0 -8
- package/dist/CartIcon-Bll1rbxv.js.map +0 -1
- package/dist/CollectibleCard-CLQTl0_6.d.ts +0 -8
- package/dist/_internal-69NEWNUE.js +0 -34
- package/dist/_internal-69NEWNUE.js.map +0 -1
- package/dist/api-1KFxYh7o.js.map +0 -1
- package/dist/builder-api-DoK3907S.d.ts +0 -12
- package/dist/builder.gen-CxP9NT1p.js.map +0 -1
- package/dist/index-4-kfOFdx.d.ts +0 -22
- package/dist/index-BHiSG-Yi.d.ts +0 -312
- package/dist/index-BQW0PUkQ.d.ts +0 -3973
- package/dist/index-BfH21xmk.d.ts +0 -117
- package/dist/index-CN8puQQJ.d.ts +0 -24
- package/dist/index-DafWjEb4.d.ts +0 -65
- package/dist/marketplace.gen-Dqk8vRmD.js.map +0 -1
- package/dist/marketplaceConfig-D2MYFqll.js.map +0 -1
- package/dist/options-DCi6_23w.js +0 -34
- package/dist/options-DCi6_23w.js.map +0 -1
- package/dist/primary-sale-Cw95phYC.js.map +0 -1
- package/dist/queries-DPvwtnO7.js +0 -486
- package/dist/queries-DPvwtnO7.js.map +0 -1
- package/dist/react-BG7o4PId.js.map +0 -1
- package/dist/token-CO5llIla.js.map +0 -1
- package/dist/transaction-CcVViHEL.js.map +0 -1
- package/dist/types-DwWE6xOF.js.map +0 -1
- package/dist/useCollection-C-mclKU0.d.ts +0 -66
- package/dist/utils-BFdxaToy.js.map +0 -1
- package/dist/utils-Cat9_pef.js.map +0 -1
- package/dist/wagmi-DRctYEk6.js.map +0 -1
- package/src/react/_internal/api/zod-schema.ts +0 -678
- package/src/react/hooks/options/collectionOptions.ts +0 -41
- package/src/react/hooks/useCollectionDetails.tsx +0 -50
- package/src/react/hooks/useGetTokenSuppliesMap.ts +0 -33
- package/src/react/hooks/useListPrimarySaleItems.ts +0 -42
- package/src/react/queries/getTokenSupplies.ts +0 -38
- package/src/react/ui/modals/TransferModal/_store.ts +0 -72
- package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
- package/tsconfig.tsbuildinfo +0 -1
- /package/dist/{abi-BKyRjVcZ.js → abi-BMvgNbKQ.js} +0 -0
- /package/dist/{index-C39K_8SG.d.ts → index-CD2bj_xW.d.ts} +0 -0
- /package/dist/{index-ij9f8GAA.d.ts → index-DvpBZgor.d.ts} +0 -0
|
@@ -27,13 +27,17 @@ export function Media({
|
|
|
27
27
|
name,
|
|
28
28
|
assets,
|
|
29
29
|
assetSrcPrefixUrl,
|
|
30
|
-
className,
|
|
30
|
+
className = '',
|
|
31
|
+
containerClassName = '',
|
|
32
|
+
mediaClassname = '',
|
|
31
33
|
isLoading,
|
|
32
34
|
fallbackContent,
|
|
35
|
+
shouldListenForLoad = true,
|
|
33
36
|
}: MediaProps) {
|
|
34
37
|
const [assetLoadFailed, setAssetLoadFailed] = useState(false);
|
|
35
|
-
const [assetLoading, setAssetLoading] = useState(
|
|
38
|
+
const [assetLoading, setAssetLoading] = useState(shouldListenForLoad);
|
|
36
39
|
const [currentAssetIndex, setCurrentAssetIndex] = useState(0);
|
|
40
|
+
const [isSafari, setIsSafari] = useState(false);
|
|
37
41
|
const [contentType, setContentType] = useState<ContentTypeState>({
|
|
38
42
|
type: null,
|
|
39
43
|
loading: true,
|
|
@@ -41,7 +45,10 @@ export function Media({
|
|
|
41
45
|
});
|
|
42
46
|
|
|
43
47
|
const videoRef = useRef<HTMLVideoElement>(null);
|
|
44
|
-
|
|
48
|
+
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
setIsSafari(/^((?!chrome|android).)*safari/i.test(navigator.userAgent));
|
|
51
|
+
}, []);
|
|
45
52
|
|
|
46
53
|
const validAssets = assets.filter((asset): asset is string => !!asset);
|
|
47
54
|
const assetUrl = validAssets[currentAssetIndex];
|
|
@@ -51,9 +58,9 @@ export function Media({
|
|
|
51
58
|
: assetUrl
|
|
52
59
|
: '';
|
|
53
60
|
|
|
54
|
-
const
|
|
61
|
+
const containerClassNames = cn(
|
|
55
62
|
'relative aspect-square overflow-hidden bg-background-secondary',
|
|
56
|
-
className,
|
|
63
|
+
containerClassName || className,
|
|
57
64
|
);
|
|
58
65
|
|
|
59
66
|
useEffect(() => {
|
|
@@ -101,7 +108,7 @@ export function Media({
|
|
|
101
108
|
<div
|
|
102
109
|
className={cn(
|
|
103
110
|
'flex h-full w-full items-center justify-center',
|
|
104
|
-
|
|
111
|
+
containerClassNames,
|
|
105
112
|
)}
|
|
106
113
|
>
|
|
107
114
|
{fallbackContent}
|
|
@@ -110,7 +117,7 @@ export function Media({
|
|
|
110
117
|
}
|
|
111
118
|
|
|
112
119
|
return (
|
|
113
|
-
<div className={cn('h-full w-full',
|
|
120
|
+
<div className={cn('h-full w-full', containerClassNames)}>
|
|
114
121
|
<img
|
|
115
122
|
src={ChessTileImage}
|
|
116
123
|
alt={name || 'Collectible'}
|
|
@@ -135,7 +142,7 @@ export function Media({
|
|
|
135
142
|
<div
|
|
136
143
|
className={cn(
|
|
137
144
|
'flex w-full items-center justify-center rounded-lg',
|
|
138
|
-
|
|
145
|
+
containerClassNames,
|
|
139
146
|
)}
|
|
140
147
|
>
|
|
141
148
|
{(assetLoading || contentType.loading || isLoading) && (
|
|
@@ -144,13 +151,13 @@ export function Media({
|
|
|
144
151
|
|
|
145
152
|
<iframe
|
|
146
153
|
title={name || 'Collectible'}
|
|
147
|
-
className=
|
|
154
|
+
className={cn('aspect-square w-full', mediaClassname)}
|
|
148
155
|
src={proxiedAssetUrl}
|
|
149
156
|
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
|
|
150
157
|
sandbox="allow-scripts"
|
|
151
158
|
style={{ border: '0px' }}
|
|
152
|
-
onError={handleAssetError}
|
|
153
|
-
onLoad={handleAssetLoad}
|
|
159
|
+
onError={shouldListenForLoad ? handleAssetError : undefined}
|
|
160
|
+
onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
|
|
154
161
|
/>
|
|
155
162
|
</div>
|
|
156
163
|
);
|
|
@@ -158,12 +165,12 @@ export function Media({
|
|
|
158
165
|
|
|
159
166
|
if (contentType.type === '3d-model' && !assetLoadFailed) {
|
|
160
167
|
return (
|
|
161
|
-
<div className={cn('h-full w-full',
|
|
168
|
+
<div className={cn('h-full w-full', containerClassNames)}>
|
|
162
169
|
<ModelViewer
|
|
163
170
|
src={proxiedAssetUrl}
|
|
164
171
|
posterSrc={ChessTileImage}
|
|
165
|
-
onLoad={handleAssetLoad}
|
|
166
|
-
onError={handleAssetError}
|
|
172
|
+
onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
|
|
173
|
+
onError={shouldListenForLoad ? handleAssetError : undefined}
|
|
167
174
|
/>
|
|
168
175
|
</div>
|
|
169
176
|
);
|
|
@@ -176,10 +183,11 @@ export function Media({
|
|
|
176
183
|
// we can't hide the video controls in safari, when user hovers over the video they show up.
|
|
177
184
|
// `pointer-events-none` is the only way to hide them on hover
|
|
178
185
|
isSafari && 'pointer-events-none',
|
|
186
|
+
mediaClassname,
|
|
179
187
|
);
|
|
180
188
|
|
|
181
189
|
return (
|
|
182
|
-
<div className={
|
|
190
|
+
<div className={containerClassNames}>
|
|
183
191
|
{(assetLoading || contentType.loading || isLoading) && (
|
|
184
192
|
<MediaSkeleton />
|
|
185
193
|
)}
|
|
@@ -193,8 +201,8 @@ export function Media({
|
|
|
193
201
|
playsInline
|
|
194
202
|
muted
|
|
195
203
|
controlsList="nodownload noremoteplayback nofullscreen"
|
|
196
|
-
onError={handleAssetError}
|
|
197
|
-
onLoadedMetadata={handleAssetLoad}
|
|
204
|
+
onError={shouldListenForLoad ? handleAssetError : undefined}
|
|
205
|
+
onLoadedMetadata={shouldListenForLoad ? handleAssetLoad : undefined}
|
|
198
206
|
data-testid="collectible-asset-video"
|
|
199
207
|
>
|
|
200
208
|
<source src={proxiedAssetUrl} />
|
|
@@ -210,18 +218,19 @@ export function Media({
|
|
|
210
218
|
const imgClassNames = cn(
|
|
211
219
|
'absolute inset-0 h-full w-full object-cover transition-transform duration-200 ease-in-out group-hover:scale-hover',
|
|
212
220
|
assetLoading || contentType.loading || isLoading ? 'invisible' : 'visible',
|
|
221
|
+
mediaClassname,
|
|
213
222
|
);
|
|
214
223
|
|
|
215
224
|
return (
|
|
216
|
-
<div className={
|
|
225
|
+
<div className={containerClassNames}>
|
|
217
226
|
{(assetLoading || contentType.loading || isLoading) && <MediaSkeleton />}
|
|
218
227
|
|
|
219
228
|
<img
|
|
220
229
|
src={imgSrc}
|
|
221
230
|
alt={name || 'Collectible'}
|
|
222
231
|
className={imgClassNames}
|
|
223
|
-
onError={handleAssetError}
|
|
224
|
-
onLoad={handleAssetLoad}
|
|
232
|
+
onError={shouldListenForLoad ? handleAssetError : undefined}
|
|
233
|
+
onLoad={shouldListenForLoad ? handleAssetLoad : undefined}
|
|
225
234
|
/>
|
|
226
235
|
</div>
|
|
227
236
|
);
|
|
@@ -12,9 +12,15 @@ type MediaProps = {
|
|
|
12
12
|
name?: string;
|
|
13
13
|
assets: (string | undefined)[];
|
|
14
14
|
assetSrcPrefixUrl?: string;
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated Use containerClassName instead
|
|
17
|
+
*/
|
|
15
18
|
className?: string;
|
|
19
|
+
containerClassName?: string;
|
|
20
|
+
mediaClassname?: string;
|
|
16
21
|
isLoading?: boolean;
|
|
17
22
|
fallbackContent?: ReactNode;
|
|
23
|
+
shouldListenForLoad?: boolean;
|
|
18
24
|
};
|
|
19
25
|
|
|
20
26
|
export type { ContentType, ContentTypeState, MediaProps };
|
package/src/react/ui/index.ts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { CollectibleCard } from './components/marketplace-collectible-card/CollectibleCard';
|
|
2
|
+
// types
|
|
3
|
+
export * from './components/marketplace-collectible-card/types';
|
|
4
|
+
// components
|
|
5
|
+
export { Media } from './components/media/Media';
|
|
6
|
+
export { useBuyModal } from './modals/BuyModal';
|
|
2
7
|
export { useCreateListingModal } from './modals/CreateListingModal';
|
|
3
8
|
export { useMakeOfferModal } from './modals/MakeOfferModal';
|
|
9
|
+
export * from './modals/modal-provider';
|
|
10
|
+
export { useSellModal } from './modals/SellModal';
|
|
4
11
|
export { useSuccessfulPurchaseModal } from './modals/SuccessfulPurchaseModal';
|
|
5
12
|
export { useTransferModal } from './modals/TransferModal';
|
|
6
|
-
export { useSellModal } from './modals/SellModal';
|
|
7
|
-
export { useBuyModal } from './modals/BuyModal';
|
|
8
|
-
|
|
9
|
-
// components
|
|
10
|
-
export { Media } from './components/media/Media';
|
|
11
|
-
export { CollectibleCard } from './components/marketplace-collectible-card/CollectibleCard';
|
|
12
|
-
|
|
13
|
-
// types
|
|
14
|
-
export * from './components/marketplace-collectible-card/types';
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
OrderSide,
|
|
8
8
|
OrderStatus,
|
|
9
9
|
} from '../../../../_internal';
|
|
10
|
+
import type { DatabeatAnalytics } from '../../../../_internal/databeat';
|
|
10
11
|
import { BuyModalRouter } from '../components/BuyModalRouter';
|
|
11
12
|
import * as useLoadDataModule from '../hooks/useLoadData';
|
|
12
13
|
import { buyModalStore } from '../store';
|
|
@@ -189,6 +190,10 @@ const mockShopData = {
|
|
|
189
190
|
checkoutOptions: undefined,
|
|
190
191
|
};
|
|
191
192
|
|
|
193
|
+
const mockAnalyticsFn = {
|
|
194
|
+
trackBuyModalOpened: vi.fn(),
|
|
195
|
+
} as unknown as DatabeatAnalytics;
|
|
196
|
+
|
|
192
197
|
describe('BuyModalRouter', () => {
|
|
193
198
|
beforeEach(() => {
|
|
194
199
|
vi.clearAllMocks();
|
|
@@ -211,6 +216,7 @@ describe('BuyModalRouter', () => {
|
|
|
211
216
|
orderId: '1',
|
|
212
217
|
marketplaceType: 'market',
|
|
213
218
|
},
|
|
219
|
+
analyticsFn: mockAnalyticsFn,
|
|
214
220
|
});
|
|
215
221
|
|
|
216
222
|
// Mock useLoadData to return complete data for ERC721 market flow
|
|
@@ -246,6 +252,7 @@ describe('BuyModalRouter', () => {
|
|
|
246
252
|
orderId: '1',
|
|
247
253
|
marketplaceType: 'market',
|
|
248
254
|
},
|
|
255
|
+
analyticsFn: mockAnalyticsFn,
|
|
249
256
|
});
|
|
250
257
|
|
|
251
258
|
// Mock useLoadData to return complete data for ERC1155 market flow
|
|
@@ -279,6 +286,7 @@ describe('BuyModalRouter', () => {
|
|
|
279
286
|
marketplace: MarketplaceKind.sequence_marketplace_v2,
|
|
280
287
|
orderId: '1',
|
|
281
288
|
},
|
|
289
|
+
analyticsFn: mockAnalyticsFn,
|
|
282
290
|
});
|
|
283
291
|
|
|
284
292
|
// Mock incomplete data
|
|
@@ -318,6 +326,7 @@ describe('BuyModalRouter', () => {
|
|
|
318
326
|
},
|
|
319
327
|
marketplaceType: 'shop',
|
|
320
328
|
},
|
|
329
|
+
analyticsFn: mockAnalyticsFn,
|
|
321
330
|
});
|
|
322
331
|
|
|
323
332
|
// Mock useLoadData to return complete data for ERC721 shop flow
|
|
@@ -358,6 +367,7 @@ describe('BuyModalRouter', () => {
|
|
|
358
367
|
},
|
|
359
368
|
marketplaceType: 'shop',
|
|
360
369
|
},
|
|
370
|
+
analyticsFn: mockAnalyticsFn,
|
|
361
371
|
});
|
|
362
372
|
|
|
363
373
|
// Mock useLoadData to return complete data for ERC1155 shop flow
|
|
@@ -397,6 +407,7 @@ describe('BuyModalRouter', () => {
|
|
|
397
407
|
},
|
|
398
408
|
marketplaceType: 'shop',
|
|
399
409
|
},
|
|
410
|
+
analyticsFn: mockAnalyticsFn,
|
|
400
411
|
});
|
|
401
412
|
|
|
402
413
|
// Mock incomplete shop data
|
|
@@ -429,6 +440,7 @@ describe('BuyModalRouter', () => {
|
|
|
429
440
|
marketplace: MarketplaceKind.sequence_marketplace_v2,
|
|
430
441
|
orderId: '1',
|
|
431
442
|
},
|
|
443
|
+
analyticsFn: mockAnalyticsFn,
|
|
432
444
|
});
|
|
433
445
|
|
|
434
446
|
// Mock error state
|
|
@@ -459,6 +471,7 @@ describe('BuyModalRouter', () => {
|
|
|
459
471
|
marketplace: MarketplaceKind.sequence_marketplace_v2,
|
|
460
472
|
orderId: '1',
|
|
461
473
|
},
|
|
474
|
+
analyticsFn: mockAnalyticsFn,
|
|
462
475
|
});
|
|
463
476
|
|
|
464
477
|
// Mock loading state
|
|
@@ -495,6 +508,7 @@ describe('BuyModalRouter', () => {
|
|
|
495
508
|
},
|
|
496
509
|
marketplaceType: 'shop',
|
|
497
510
|
},
|
|
511
|
+
analyticsFn: mockAnalyticsFn,
|
|
498
512
|
});
|
|
499
513
|
|
|
500
514
|
// Mock unsupported collection type
|
|
@@ -531,6 +545,7 @@ describe('BuyModalRouter', () => {
|
|
|
531
545
|
orderId: '1',
|
|
532
546
|
// marketplaceType not specified - should default to MARKET
|
|
533
547
|
},
|
|
548
|
+
analyticsFn: mockAnalyticsFn,
|
|
534
549
|
});
|
|
535
550
|
|
|
536
551
|
// Mock useLoadData to return complete data for ERC721 market flow
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { ResourceStatus } from '@0xsequence/metadata';
|
|
2
2
|
import { render, screen, waitFor } from '@test';
|
|
3
3
|
import type { Address } from 'viem';
|
|
4
|
+
import type { Mock, MockInstance } from 'vitest';
|
|
4
5
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
5
6
|
import { TransactionCrypto } from '../../../../_internal';
|
|
7
|
+
import type { DatabeatAnalytics } from '../../../../_internal/databeat';
|
|
6
8
|
import { ERC1155ShopModal } from '../components/ERC1155ShopModal';
|
|
7
9
|
import * as useERC1155CheckoutModule from '../hooks/useERC1155Checkout';
|
|
8
10
|
import { buyModalStore } from '../store';
|
|
@@ -10,6 +12,10 @@ import { buyModalStore } from '../store';
|
|
|
10
12
|
// Mock the checkout hook
|
|
11
13
|
vi.mock('../hooks/useERC1155Checkout');
|
|
12
14
|
|
|
15
|
+
const mockAnalyticsFn = {
|
|
16
|
+
trackBuyModalOpened: vi.fn(),
|
|
17
|
+
} as unknown as DatabeatAnalytics;
|
|
18
|
+
|
|
13
19
|
const mockCollection = {
|
|
14
20
|
address: '0x123' as Address,
|
|
15
21
|
chainId: 1,
|
|
@@ -45,9 +51,8 @@ const mockShopData = {
|
|
|
45
51
|
};
|
|
46
52
|
|
|
47
53
|
describe('ERC1155ShopModal', () => {
|
|
48
|
-
let mockOpenCheckoutModal:
|
|
49
|
-
|
|
50
|
-
let mockUseERC1155Checkout: any;
|
|
54
|
+
let mockOpenCheckoutModal: Mock;
|
|
55
|
+
let mockUseERC1155Checkout: MockInstance;
|
|
51
56
|
|
|
52
57
|
beforeEach(() => {
|
|
53
58
|
vi.clearAllMocks();
|
|
@@ -60,15 +65,61 @@ describe('ERC1155ShopModal', () => {
|
|
|
60
65
|
useERC1155CheckoutModule,
|
|
61
66
|
'useERC1155Checkout',
|
|
62
67
|
);
|
|
68
|
+
|
|
69
|
+
// Initialize BuyModal props
|
|
70
|
+
buyModalStore.send({
|
|
71
|
+
type: 'open',
|
|
72
|
+
props: {
|
|
73
|
+
chainId: 1,
|
|
74
|
+
collectionAddress: mockCollection.address,
|
|
75
|
+
salesContractAddress: mockShopData.salesContractAddress as Address,
|
|
76
|
+
items: mockShopData.items,
|
|
77
|
+
quantityDecimals: 0,
|
|
78
|
+
quantityRemaining: 10,
|
|
79
|
+
salePrice: {
|
|
80
|
+
amount: mockShopData.salePrice.amount,
|
|
81
|
+
currencyAddress: mockShopData.salePrice.currencyAddress as Address,
|
|
82
|
+
},
|
|
83
|
+
marketplaceType: 'shop',
|
|
84
|
+
},
|
|
85
|
+
analyticsFn: mockAnalyticsFn,
|
|
86
|
+
});
|
|
63
87
|
});
|
|
64
88
|
|
|
65
89
|
afterEach(() => {
|
|
66
90
|
vi.restoreAllMocks();
|
|
67
91
|
});
|
|
68
92
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
93
|
+
it('should show quantity modal initially', async () => {
|
|
94
|
+
mockUseERC1155Checkout.mockReturnValue({
|
|
95
|
+
openCheckoutModal: mockOpenCheckoutModal,
|
|
96
|
+
isLoading: false,
|
|
97
|
+
isError: false,
|
|
98
|
+
isEnabled: true,
|
|
99
|
+
checkoutParams: {} as never,
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
render(
|
|
103
|
+
<ERC1155ShopModal
|
|
104
|
+
collection={mockCollection}
|
|
105
|
+
shopData={mockShopData}
|
|
106
|
+
chainId={1}
|
|
107
|
+
/>,
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
expect(screen.getByText('Select Quantity')).toBeInTheDocument();
|
|
111
|
+
|
|
112
|
+
// Wait for loading state to finish
|
|
113
|
+
await waitFor(() => {
|
|
114
|
+
expect(
|
|
115
|
+
screen.getByRole('button', { name: 'Buy now' }),
|
|
116
|
+
).toBeInTheDocument();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
expect(mockOpenCheckoutModal).not.toHaveBeenCalled();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('should open checkout modal after quantity is selected', async () => {
|
|
72
123
|
mockUseERC1155Checkout.mockReturnValue({
|
|
73
124
|
openCheckoutModal: mockOpenCheckoutModal,
|
|
74
125
|
isLoading: false,
|
|
@@ -85,6 +136,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
85
136
|
/>,
|
|
86
137
|
);
|
|
87
138
|
|
|
139
|
+
// Set quantity in store
|
|
140
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
141
|
+
|
|
88
142
|
// Wait for checkout modal to be opened
|
|
89
143
|
await waitFor(() => {
|
|
90
144
|
expect(mockOpenCheckoutModal).toHaveBeenCalled();
|
|
@@ -94,8 +148,7 @@ describe('ERC1155ShopModal', () => {
|
|
|
94
148
|
expect(buyModalStore.getSnapshot().context.checkoutModalState).toBe('open');
|
|
95
149
|
});
|
|
96
150
|
|
|
97
|
-
it
|
|
98
|
-
// Mock loading state
|
|
151
|
+
it('should show loading modal when checkout is loading', async () => {
|
|
99
152
|
mockUseERC1155Checkout.mockReturnValue({
|
|
100
153
|
openCheckoutModal: mockOpenCheckoutModal,
|
|
101
154
|
isLoading: true,
|
|
@@ -104,6 +157,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
104
157
|
checkoutParams: {} as never,
|
|
105
158
|
});
|
|
106
159
|
|
|
160
|
+
// Set quantity in store before rendering
|
|
161
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
162
|
+
|
|
107
163
|
render(
|
|
108
164
|
<ERC1155ShopModal
|
|
109
165
|
collection={mockCollection}
|
|
@@ -116,8 +172,7 @@ describe('ERC1155ShopModal', () => {
|
|
|
116
172
|
expect(mockOpenCheckoutModal).not.toHaveBeenCalled();
|
|
117
173
|
});
|
|
118
174
|
|
|
119
|
-
it
|
|
120
|
-
// Mock error state
|
|
175
|
+
it('should render nothing when checkout is in error state', () => {
|
|
121
176
|
mockUseERC1155Checkout.mockReturnValue({
|
|
122
177
|
openCheckoutModal: mockOpenCheckoutModal,
|
|
123
178
|
isLoading: false,
|
|
@@ -126,6 +181,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
126
181
|
checkoutParams: {} as never,
|
|
127
182
|
});
|
|
128
183
|
|
|
184
|
+
// Set quantity in store before rendering
|
|
185
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
186
|
+
|
|
129
187
|
const { container } = render(
|
|
130
188
|
<ERC1155ShopModal
|
|
131
189
|
collection={mockCollection}
|
|
@@ -138,8 +196,7 @@ describe('ERC1155ShopModal', () => {
|
|
|
138
196
|
expect(mockOpenCheckoutModal).not.toHaveBeenCalled();
|
|
139
197
|
});
|
|
140
198
|
|
|
141
|
-
it
|
|
142
|
-
// Mock disabled state
|
|
199
|
+
it('should not open checkout modal when not enabled', () => {
|
|
143
200
|
mockUseERC1155Checkout.mockReturnValue({
|
|
144
201
|
openCheckoutModal: mockOpenCheckoutModal,
|
|
145
202
|
isLoading: false,
|
|
@@ -148,6 +205,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
148
205
|
checkoutParams: {} as never,
|
|
149
206
|
});
|
|
150
207
|
|
|
208
|
+
// Set quantity in store before rendering
|
|
209
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
210
|
+
|
|
151
211
|
const { container } = render(
|
|
152
212
|
<ERC1155ShopModal
|
|
153
213
|
collection={mockCollection}
|
|
@@ -160,7 +220,7 @@ describe('ERC1155ShopModal', () => {
|
|
|
160
220
|
expect(mockOpenCheckoutModal).not.toHaveBeenCalled();
|
|
161
221
|
});
|
|
162
222
|
|
|
163
|
-
it
|
|
223
|
+
it('should pass correct props to useERC1155Checkout hook', () => {
|
|
164
224
|
mockUseERC1155Checkout.mockReturnValue({
|
|
165
225
|
openCheckoutModal: mockOpenCheckoutModal,
|
|
166
226
|
isLoading: false,
|
|
@@ -169,6 +229,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
169
229
|
checkoutParams: {} as never,
|
|
170
230
|
});
|
|
171
231
|
|
|
232
|
+
// Set quantity in store before rendering
|
|
233
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
234
|
+
|
|
172
235
|
render(
|
|
173
236
|
<ERC1155ShopModal
|
|
174
237
|
collection={mockCollection}
|
|
@@ -181,17 +244,17 @@ describe('ERC1155ShopModal', () => {
|
|
|
181
244
|
chainId: 1,
|
|
182
245
|
salesContractAddress: '0x456',
|
|
183
246
|
collectionAddress: '0x123',
|
|
184
|
-
items:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
247
|
+
items: mockShopData.items.map((item) => ({
|
|
248
|
+
...item,
|
|
249
|
+
quantity: '2', // This comes from the store's quantity
|
|
250
|
+
})),
|
|
188
251
|
checkoutOptions: mockShopData.checkoutOptions,
|
|
189
252
|
customProviderCallback: undefined,
|
|
190
253
|
enabled: true,
|
|
191
254
|
});
|
|
192
255
|
});
|
|
193
256
|
|
|
194
|
-
it
|
|
257
|
+
it('should handle missing tokenId and quantity gracefully', () => {
|
|
195
258
|
const shopDataWithMissingProps = {
|
|
196
259
|
...mockShopData,
|
|
197
260
|
items: [
|
|
@@ -208,6 +271,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
208
271
|
checkoutParams: {} as never,
|
|
209
272
|
});
|
|
210
273
|
|
|
274
|
+
// Set quantity in store before rendering
|
|
275
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
276
|
+
|
|
211
277
|
render(
|
|
212
278
|
<ERC1155ShopModal
|
|
213
279
|
collection={mockCollection}
|
|
@@ -216,82 +282,21 @@ describe('ERC1155ShopModal', () => {
|
|
|
216
282
|
/>,
|
|
217
283
|
);
|
|
218
284
|
|
|
219
|
-
// Check that defaults were applied
|
|
220
285
|
expect(mockUseERC1155Checkout).toHaveBeenCalledWith({
|
|
221
286
|
chainId: 1,
|
|
222
287
|
salesContractAddress: '0x456',
|
|
223
288
|
collectionAddress: '0x123',
|
|
224
|
-
items:
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
289
|
+
items: shopDataWithMissingProps.items.map((item) => ({
|
|
290
|
+
tokenId: item.tokenId ?? '0',
|
|
291
|
+
quantity: '2', // This comes from the store's quantity
|
|
292
|
+
})),
|
|
228
293
|
checkoutOptions: mockShopData.checkoutOptions,
|
|
229
294
|
customProviderCallback: undefined,
|
|
230
295
|
enabled: true,
|
|
231
296
|
});
|
|
232
297
|
});
|
|
233
298
|
|
|
234
|
-
it
|
|
235
|
-
const shopDataWithoutContract = {
|
|
236
|
-
...mockShopData,
|
|
237
|
-
salesContractAddress: '',
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
mockUseERC1155Checkout.mockReturnValue({
|
|
241
|
-
openCheckoutModal: mockOpenCheckoutModal,
|
|
242
|
-
isLoading: false,
|
|
243
|
-
isError: false,
|
|
244
|
-
isEnabled: false,
|
|
245
|
-
checkoutParams: {} as never,
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
render(
|
|
249
|
-
<ERC1155ShopModal
|
|
250
|
-
collection={mockCollection}
|
|
251
|
-
shopData={shopDataWithoutContract}
|
|
252
|
-
chainId={1}
|
|
253
|
-
/>,
|
|
254
|
-
);
|
|
255
|
-
|
|
256
|
-
expect(mockUseERC1155Checkout).toHaveBeenCalledWith(
|
|
257
|
-
expect.objectContaining({
|
|
258
|
-
salesContractAddress: '',
|
|
259
|
-
enabled: false,
|
|
260
|
-
}),
|
|
261
|
-
);
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
it.skip('should pass empty items array to useERC1155Checkout when items array is empty', () => {
|
|
265
|
-
const shopDataWithoutItems = {
|
|
266
|
-
...mockShopData,
|
|
267
|
-
items: [],
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
mockUseERC1155Checkout.mockReturnValue({
|
|
271
|
-
openCheckoutModal: mockOpenCheckoutModal,
|
|
272
|
-
isLoading: false,
|
|
273
|
-
isError: false,
|
|
274
|
-
isEnabled: false,
|
|
275
|
-
checkoutParams: {} as never,
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
render(
|
|
279
|
-
<ERC1155ShopModal
|
|
280
|
-
collection={mockCollection}
|
|
281
|
-
shopData={shopDataWithoutItems}
|
|
282
|
-
chainId={1}
|
|
283
|
-
/>,
|
|
284
|
-
);
|
|
285
|
-
|
|
286
|
-
expect(mockUseERC1155Checkout).toHaveBeenCalledWith(
|
|
287
|
-
expect.objectContaining({
|
|
288
|
-
items: [],
|
|
289
|
-
enabled: true, // Component still passes true, but useERC1155Checkout can decide based on empty items
|
|
290
|
-
}),
|
|
291
|
-
);
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
it.skip('should only open checkout modal once when state is idle', async () => {
|
|
299
|
+
it('should only open checkout modal once when state is idle', async () => {
|
|
295
300
|
mockUseERC1155Checkout.mockReturnValue({
|
|
296
301
|
openCheckoutModal: mockOpenCheckoutModal,
|
|
297
302
|
isLoading: false,
|
|
@@ -300,6 +305,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
300
305
|
checkoutParams: {} as never,
|
|
301
306
|
});
|
|
302
307
|
|
|
308
|
+
// Set quantity in store before rendering
|
|
309
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
310
|
+
|
|
303
311
|
const { rerender } = render(
|
|
304
312
|
<ERC1155ShopModal
|
|
305
313
|
collection={mockCollection}
|
|
@@ -328,7 +336,7 @@ describe('ERC1155ShopModal', () => {
|
|
|
328
336
|
});
|
|
329
337
|
});
|
|
330
338
|
|
|
331
|
-
it
|
|
339
|
+
it('should handle checkout options being undefined', () => {
|
|
332
340
|
const shopDataWithoutCheckoutOptions = {
|
|
333
341
|
...mockShopData,
|
|
334
342
|
checkoutOptions: undefined,
|
|
@@ -342,6 +350,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
342
350
|
checkoutParams: {} as never,
|
|
343
351
|
});
|
|
344
352
|
|
|
353
|
+
// Set quantity in store before rendering
|
|
354
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
355
|
+
|
|
345
356
|
render(
|
|
346
357
|
<ERC1155ShopModal
|
|
347
358
|
collection={mockCollection}
|
|
@@ -357,7 +368,7 @@ describe('ERC1155ShopModal', () => {
|
|
|
357
368
|
);
|
|
358
369
|
});
|
|
359
370
|
|
|
360
|
-
it
|
|
371
|
+
it('should show loading modal with correct chain ID', () => {
|
|
361
372
|
mockUseERC1155Checkout.mockReturnValue({
|
|
362
373
|
openCheckoutModal: mockOpenCheckoutModal,
|
|
363
374
|
isLoading: true,
|
|
@@ -366,6 +377,9 @@ describe('ERC1155ShopModal', () => {
|
|
|
366
377
|
checkoutParams: {} as never,
|
|
367
378
|
});
|
|
368
379
|
|
|
380
|
+
// Set quantity in store before rendering
|
|
381
|
+
buyModalStore.send({ type: 'setQuantity', quantity: 2 });
|
|
382
|
+
|
|
369
383
|
render(
|
|
370
384
|
<ERC1155ShopModal
|
|
371
385
|
collection={mockCollection}
|
|
@@ -374,7 +388,6 @@ describe('ERC1155ShopModal', () => {
|
|
|
374
388
|
/>,
|
|
375
389
|
);
|
|
376
390
|
|
|
377
|
-
// Check that LoadingModal received the correct chainId prop
|
|
378
391
|
expect(screen.getByText('Loading Sequence Pay')).toBeInTheDocument();
|
|
379
392
|
expect(mockUseERC1155Checkout).toHaveBeenCalledWith(
|
|
380
393
|
expect.objectContaining({
|