@0xsequence/marketplace-sdk 0.8.12 → 0.9.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/CHANGELOG.md +91 -23
- package/dist/{CartIcon-Bll1rbxv.js → CalendarIcon-DbQ7Vxcw.js} +38 -38
- package/dist/CalendarIcon-DbQ7Vxcw.js.map +1 -0
- package/dist/{types-BIJOaL4j.d.ts → CollectibleCard-C8Ae64Ab.d.ts} +7 -4
- package/dist/{_internal-69NEWNUE.js → _internal-BgWcRIak.js} +2 -14
- package/dist/_internal-BgWcRIak.js.map +1 -0
- package/dist/{api-1KFxYh7o.js → api-DTIan01C.js} +73 -64
- package/dist/api-DTIan01C.js.map +1 -0
- 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-api-DoK3907S.d.ts → builder-api-C_zj5mr3.d.ts} +2 -2
- package/dist/{builder.gen-CxP9NT1p.js → builder.gen-B9wR2nvF.js} +1 -1
- package/dist/builder.gen-B9wR2nvF.js.map +1 -0
- package/dist/{index-Cl7PQOGu.d.ts → index-21LE7OhL.d.ts} +24 -24
- package/dist/{index-1bezgsFq.d.ts → index-BL9RUSEK.d.ts} +929 -255
- package/dist/index-BQsgAvtX.d.ts +2938 -0
- package/dist/{index-DafWjEb4.d.ts → index-BUVWziLP.d.ts} +9 -14
- package/dist/{index-BIMIpDiI.d.ts → index-ByznONYE.d.ts} +98 -99
- package/dist/{index-BjIwVzc4.d.ts → index-CLy8y5hm.d.ts} +238 -238
- package/dist/{index-CN8puQQJ.d.ts → index-COt10OgI.d.ts} +4 -4
- package/dist/index-DPNWNa7t.d.ts +414 -0
- package/dist/{index-BEYefG1G.d.ts → index-DaE5ZNHb.d.ts} +2 -2
- package/dist/{index-BfH21xmk.d.ts → index-DsfCs3-x.d.ts} +46 -41
- package/dist/{index-4-kfOFdx.d.ts → index-dUb6wb4Y.d.ts} +5 -5
- package/dist/index.css +14 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +7 -7
- package/dist/marketplace-logos-CSeGcPW4.js.map +1 -1
- package/dist/{marketplace.gen-Dqk8vRmD.js → marketplace.gen-BSDIX7NZ.js} +12 -3
- package/dist/marketplace.gen-BSDIX7NZ.js.map +1 -0
- package/dist/{marketplaceConfig-D2MYFqll.js → marketplaceConfig-C6X1SUik.js} +2 -2
- package/dist/marketplaceConfig-C6X1SUik.js.map +1 -0
- package/dist/{sdk-config-DJzxVPld.d.ts → new-marketplace-types-Bfis0U4J.d.ts} +65 -54
- package/dist/options-B4QN7Xou.js +0 -0
- package/dist/{primary-sale-Cw95phYC.js → primary-sale-C55ALnfQ.js} +279 -279
- package/dist/primary-sale-C55ALnfQ.js.map +1 -0
- package/dist/{queries-DPvwtnO7.js → queries-CUU65uYZ.js} +247 -134
- package/dist/queries-CUU65uYZ.js.map +1 -0
- package/dist/react/_internal/api/index.d.ts +4 -4
- package/dist/react/_internal/api/index.js +5 -5
- package/dist/react/_internal/databeat/index.d.ts +3 -3
- package/dist/react/_internal/databeat/index.js +15 -15
- package/dist/react/_internal/index.d.ts +7 -7
- package/dist/react/_internal/index.js +7 -7
- package/dist/react/_internal/wagmi/index.d.ts +3 -3
- package/dist/react/_internal/wagmi/index.js +2 -2
- package/dist/react/hooks/index.d.ts +15 -14
- package/dist/react/hooks/index.js +16 -16
- package/dist/react/hooks/options/index.d.ts +4 -5
- package/dist/react/hooks/options/index.js +9 -9
- package/dist/react/index.d.ts +15 -37
- package/dist/react/index.js +16 -16
- package/dist/react/queries/index.d.ts +8 -8
- package/dist/react/queries/index.js +12 -12
- package/dist/react/ssr/index.d.ts +6 -6
- package/dist/react/ssr/index.js +7 -7
- package/dist/react/ssr/index.js.map +1 -1
- package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +8 -9
- package/dist/react/ui/components/marketplace-collectible-card/index.js +15 -15
- package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +7 -7
- package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +7 -7
- package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
- package/dist/react/ui/icons/index.js +6 -6
- package/dist/react/ui/index.d.ts +8 -9
- package/dist/react/ui/index.js +15 -15
- package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +5 -5
- package/dist/react/ui/modals/_internal/components/actionModal/index.js +15 -15
- package/dist/{react-BG7o4PId.js → react-DAIicQPT.js} +7422 -6835
- package/dist/react-DAIicQPT.js.map +1 -0
- package/dist/{token-CO5llIla.js → token-Da4TdyUk.js} +1540 -761
- package/dist/token-Da4TdyUk.js.map +1 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +2 -2
- package/dist/types-DwWE6xOF.js.map +1 -1
- package/dist/utils/abi/index.d.ts +3 -3
- package/dist/utils/abi/index.js +3 -3
- 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 +6 -6
- package/dist/utils/index.js +6 -6
- package/dist/{utils-Cat9_pef.js → utils-BPYfgDSL.js} +2 -2
- package/dist/{utils-Cat9_pef.js.map → utils-BPYfgDSL.js.map} +1 -1
- package/dist/{utils-BFdxaToy.js → utils-CW2NA5KG.js} +87 -87
- package/dist/utils-CW2NA5KG.js.map +1 -0
- package/dist/{wagmi-DRctYEk6.js → wagmi-CDzEQbfk.js} +19 -12
- package/dist/wagmi-CDzEQbfk.js.map +1 -0
- package/eslint/use-client.js +0 -6
- package/package.json +30 -31
- package/src/index.ts +1 -1
- package/src/react/_internal/api/__mocks__/builder.msw.ts +5 -3
- package/src/react/_internal/api/__mocks__/indexer.msw.ts +8 -8
- package/src/react/_internal/api/__mocks__/marketplace.msw.ts +4 -6
- package/src/react/_internal/api/__mocks__/metadata.msw.ts +1 -1
- 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/marketplace.gen.ts +42 -4
- package/src/react/_internal/api/query-keys.ts +13 -6
- package/src/react/_internal/api/services.ts +28 -31
- package/src/react/_internal/index.ts +1 -1
- package/src/react/_internal/types.ts +10 -23
- package/src/react/_internal/utils.ts +1 -2
- package/src/react/_internal/wagmi/create-config.ts +20 -11
- 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 +18 -18
- 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.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__/useCollectible.test.tsx +14 -16
- package/src/react/hooks/__tests__/useCollection.test.tsx +4 -4
- package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +1 -27
- package/src/react/hooks/__tests__/useCollectionDetails.test.tsx +1 -1
- package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +1 -1
- package/src/react/hooks/__tests__/useComparePrices.test.tsx +7 -6
- package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +1 -1
- 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__/useFilters.test.tsx +1 -1
- 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__/useGetTokenSuppliesMap.test.tsx +104 -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 +111 -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/index.ts +27 -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/useCheckoutOptionsSalesContract.tsx +1 -1
- package/src/react/hooks/useCollectible.tsx +64 -49
- package/src/react/hooks/useCollection.tsx +60 -11
- package/src/react/hooks/useCollectionBalanceDetails.tsx +20 -27
- package/src/react/hooks/useCollectionDetails.ts +69 -0
- package/src/react/hooks/useCollectionDetailsPolling.tsx +10 -2
- package/src/react/hooks/useComparePrices.tsx +18 -21
- package/src/react/hooks/useConvertPriceToUSD.tsx +20 -37
- 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/useFilterState.tsx +1 -2
- 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/useGetReceiptFromHash.tsx +32 -3
- package/src/react/hooks/{useGetTokenSuppliesMap.ts → useGetTokenRanges.tsx} +15 -17
- package/src/react/hooks/useGetTokenSuppliesMap.tsx +73 -0
- package/src/react/hooks/useHighestOffer.tsx +68 -4
- package/src/react/hooks/useInventory.tsx +1 -1
- package/src/react/hooks/useList1155ShopCardData.tsx +55 -82
- package/src/react/hooks/useList721ShopCardData.tsx +93 -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 +72 -18
- package/src/react/hooks/useListListingsForCollectible.tsx +90 -50
- package/src/react/hooks/useListMarketCardData.tsx +1 -1
- package/src/react/hooks/useListOffersForCollectible.tsx +9 -14
- package/src/react/hooks/useListPrimarySaleItems.ts +72 -12
- package/src/react/hooks/useListShopCardData.tsx +70 -0
- 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/useRoyalty.tsx +57 -13
- package/src/react/hooks/useShopCollectibleSaleData.tsx +349 -0
- package/src/react/hooks/useTransferTokens.tsx +1 -1
- package/src/react/hooks/util/optimisticCancelUpdates.ts +5 -7
- package/src/react/index.ts +5 -3
- package/src/react/queries/balanceOfCollectible.ts +1 -1
- package/src/react/queries/collectible.ts +66 -0
- package/src/react/queries/collection.ts +55 -0
- package/src/react/queries/collectionDetails.ts +64 -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/floorOrder.ts +63 -0
- package/src/react/queries/getTokenSuppliesMap.ts +77 -0
- package/src/react/queries/highestOffer.ts +46 -40
- package/src/react/queries/index.ts +7 -4
- package/src/react/queries/inventory.ts +4 -4
- package/src/react/queries/listBalances.ts +1 -1
- 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 +47 -8
- 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 +3 -3
- 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/__tests__/useActionButtonLogic.test.tsx +14 -8
- package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +12 -15
- package/src/react/ui/components/_internals/action-button/store.ts +46 -18
- package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +1 -1
- package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +1 -1
- 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 +7 -4
- package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +3 -2
- package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +2 -5
- package/src/react/ui/components/marketplace-logos/marketplace-logos.tsx +1 -1
- package/src/react/ui/components/media/Media.tsx +5 -1
- package/src/react/ui/index.ts +8 -10
- package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +94 -87
- package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +4 -4
- package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +1 -1
- package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +3 -4
- package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +1 -1
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +1 -1
- package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +1 -1
- package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +1 -1
- package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +3 -3
- package/src/react/ui/modals/CreateListingModal/Modal.tsx +1 -1
- 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/MakeOfferModal/Modal.tsx +2 -2
- 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/SellModal/Modal.tsx +3 -3
- 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/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +1 -1
- package/src/react/ui/modals/TransferModal/_store.ts +1 -7
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +2 -3
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +2 -2
- 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/currencyOptionsSelect/__tests__/index.test.tsx +1 -1
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +0 -1
- package/src/react/ui/modals/_internal/components/floorPriceText/index.tsx +4 -4
- package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +166 -0
- package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +12 -141
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +1 -1
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/BalanceIndicator.tsx +1 -2
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +0 -1
- package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +1 -1
- package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +1 -1
- package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +0 -1
- package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +1 -1
- package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +1 -1
- 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 +2 -1
- 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/test/const.ts +3 -1
- package/test/mocks/wallet.ts +1 -1
- package/test/test-utils.tsx +3 -4
- 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.map +0 -1
- package/dist/api-1KFxYh7o.js.map +0 -1
- package/dist/builder.gen-CxP9NT1p.js.map +0 -1
- package/dist/index-BHiSG-Yi.d.ts +0 -312
- package/dist/index-BQW0PUkQ.d.ts +0 -3973
- 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.map +0 -1
- package/dist/react-BG7o4PId.js.map +0 -1
- package/dist/token-CO5llIla.js.map +0 -1
- package/dist/useCollection-C-mclKU0.d.ts +0 -66
- package/dist/utils-BFdxaToy.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/useCheckoutOptions.tsx +0 -66
- package/src/react/hooks/useCollectionDetails.tsx +0 -50
- package/src/react/hooks/useListTokenMetadata.ts +0 -19
- package/src/react/queries/getTokenSupplies.ts +0 -38
- package/tsconfig.tsbuildinfo +0 -1
- /package/dist/{index-ij9f8GAA.d.ts → index-DvpBZgor.d.ts} +0 -0
|
@@ -1,54 +1,69 @@
|
|
|
1
1
|
import { queryOptions } from '@tanstack/react-query';
|
|
2
|
-
import type { Address } from 'viem';
|
|
3
2
|
import type { SdkConfig } from '../../types';
|
|
4
3
|
import {
|
|
4
|
+
collectableKeys,
|
|
5
5
|
type GetCollectibleLowestListingArgs,
|
|
6
6
|
type GetCollectibleLowestListingReturn,
|
|
7
|
-
collectableKeys,
|
|
8
7
|
getMarketplaceClient,
|
|
8
|
+
type ValuesOptional,
|
|
9
9
|
} from '../_internal';
|
|
10
|
+
import type { StandardQueryOptions } from '../types/query';
|
|
10
11
|
|
|
11
|
-
export interface
|
|
12
|
+
export interface FetchLowestListingParams
|
|
12
13
|
extends Omit<GetCollectibleLowestListingArgs, 'contractAddress' | 'chainId'> {
|
|
13
|
-
collectionAddress:
|
|
14
|
+
collectionAddress: string;
|
|
14
15
|
chainId: number;
|
|
15
|
-
|
|
16
|
-
enabled?: boolean;
|
|
17
|
-
};
|
|
16
|
+
config: SdkConfig;
|
|
18
17
|
}
|
|
19
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Fetches the lowest listing for a collectible from the marketplace API
|
|
21
|
+
*/
|
|
20
22
|
export async function fetchLowestListing(
|
|
21
|
-
|
|
22
|
-
config: SdkConfig,
|
|
23
|
+
params: FetchLowestListingParams,
|
|
23
24
|
): Promise<GetCollectibleLowestListingReturn['order'] | null> {
|
|
25
|
+
const { collectionAddress, chainId, config, ...additionalApiParams } = params;
|
|
26
|
+
|
|
24
27
|
const marketplaceClient = getMarketplaceClient(config);
|
|
25
28
|
|
|
26
|
-
const
|
|
27
|
-
const data = await marketplaceClient.getCollectibleLowestListing({
|
|
28
|
-
chainId: String(chainId),
|
|
29
|
+
const apiArgs: GetCollectibleLowestListingArgs = {
|
|
29
30
|
contractAddress: collectionAddress,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// let order: Order | undefined;
|
|
34
|
-
// if (data.order) {
|
|
35
|
-
// order = {
|
|
36
|
-
// ...data.order,
|
|
37
|
-
// priceAmount: BigInt(data.order.priceAmount),
|
|
38
|
-
// priceAmountNet: BigInt(data.order.priceAmountNet),
|
|
39
|
-
// };
|
|
40
|
-
// }
|
|
31
|
+
chainId: String(chainId),
|
|
32
|
+
...additionalApiParams,
|
|
33
|
+
};
|
|
41
34
|
|
|
42
|
-
|
|
35
|
+
const result = await marketplaceClient.getCollectibleLowestListing(apiArgs);
|
|
36
|
+
return result.order || null;
|
|
43
37
|
}
|
|
44
38
|
|
|
45
|
-
export
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
export type LowestListingQueryOptions =
|
|
40
|
+
ValuesOptional<FetchLowestListingParams> & {
|
|
41
|
+
query?: StandardQueryOptions;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export function lowestListingQueryOptions(params: LowestListingQueryOptions) {
|
|
45
|
+
const enabled = Boolean(
|
|
46
|
+
params.collectionAddress &&
|
|
47
|
+
params.chainId &&
|
|
48
|
+
params.tokenId &&
|
|
49
|
+
params.config &&
|
|
50
|
+
(params.query?.enabled ?? true),
|
|
51
|
+
);
|
|
52
|
+
|
|
49
53
|
return queryOptions({
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
queryKey: [...collectableKeys.lowestListings, params],
|
|
55
|
+
queryFn: () =>
|
|
56
|
+
fetchLowestListing({
|
|
57
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
58
|
+
chainId: params.chainId!,
|
|
59
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
60
|
+
collectionAddress: params.collectionAddress!,
|
|
61
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
62
|
+
tokenId: params.tokenId!,
|
|
63
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
64
|
+
config: params.config!,
|
|
65
|
+
}),
|
|
66
|
+
...params.query,
|
|
67
|
+
enabled,
|
|
53
68
|
});
|
|
54
69
|
}
|
|
@@ -6,30 +6,31 @@ import {
|
|
|
6
6
|
currencyKeys,
|
|
7
7
|
getMarketplaceClient,
|
|
8
8
|
getQueryClient,
|
|
9
|
+
type ValuesOptional,
|
|
9
10
|
} from '../_internal';
|
|
11
|
+
import type { StandardQueryOptions } from '../types/query';
|
|
10
12
|
import { marketplaceConfigOptions } from './marketplaceConfig';
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
enabled?: boolean;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export interface UseMarketCurrenciesArgs {
|
|
14
|
+
export interface FetchMarketCurrenciesParams {
|
|
17
15
|
chainId: number;
|
|
18
16
|
includeNativeCurrency?: boolean;
|
|
19
17
|
collectionAddress?: Address;
|
|
20
|
-
|
|
18
|
+
config: SdkConfig;
|
|
21
19
|
}
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Fetches supported currencies for a marketplace
|
|
23
|
+
*/
|
|
24
|
+
export async function fetchMarketCurrencies(
|
|
25
|
+
params: FetchMarketCurrenciesParams,
|
|
26
|
+
) {
|
|
27
|
+
const { chainId, includeNativeCurrency, collectionAddress, config } = params;
|
|
28
|
+
const includeNativeCurrencyOption = includeNativeCurrency ?? true;
|
|
28
29
|
const marketplaceClient = getMarketplaceClient(config);
|
|
29
30
|
|
|
30
31
|
let currencies = await marketplaceClient
|
|
31
32
|
.listCurrencies({
|
|
32
|
-
chainId: String(
|
|
33
|
+
chainId: String(chainId),
|
|
33
34
|
})
|
|
34
35
|
.then((resp) =>
|
|
35
36
|
resp.currencies.map((currency) => ({
|
|
@@ -38,7 +39,7 @@ const fetchMarketCurrencies = async (
|
|
|
38
39
|
})),
|
|
39
40
|
);
|
|
40
41
|
|
|
41
|
-
if (
|
|
42
|
+
if (collectionAddress) {
|
|
42
43
|
const queryClient = getQueryClient();
|
|
43
44
|
const marketplaceConfig = await queryClient.fetchQuery(
|
|
44
45
|
marketplaceConfigOptions(config),
|
|
@@ -46,7 +47,7 @@ const fetchMarketCurrencies = async (
|
|
|
46
47
|
|
|
47
48
|
const currenciesOptions = marketplaceConfig.market.collections.find(
|
|
48
49
|
(collection) =>
|
|
49
|
-
compareAddress(collection.itemsAddress,
|
|
50
|
+
compareAddress(collection.itemsAddress, collectionAddress),
|
|
50
51
|
)?.currencyOptions;
|
|
51
52
|
|
|
52
53
|
// Filter currencies based on collection currency options
|
|
@@ -57,25 +58,37 @@ const fetchMarketCurrencies = async (
|
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
|
|
60
|
-
if (!
|
|
61
|
+
if (!includeNativeCurrencyOption) {
|
|
61
62
|
currencies = currencies.filter((currency) => !currency.nativeCurrency);
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
return currencies;
|
|
65
|
-
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export type MarketCurrenciesQueryOptions =
|
|
69
|
+
ValuesOptional<FetchMarketCurrenciesParams> & {
|
|
70
|
+
query?: StandardQueryOptions;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export function marketCurrenciesQueryOptions(
|
|
74
|
+
params: MarketCurrenciesQueryOptions,
|
|
75
|
+
) {
|
|
76
|
+
const enabled = Boolean(
|
|
77
|
+
params.chainId && params.config && (params.query?.enabled ?? true),
|
|
78
|
+
);
|
|
66
79
|
|
|
67
|
-
export const currenciesOptions = (
|
|
68
|
-
args: UseMarketCurrenciesArgs,
|
|
69
|
-
config: SdkConfig,
|
|
70
|
-
) => {
|
|
71
80
|
return queryOptions({
|
|
72
|
-
...
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
81
|
+
queryKey: [...currencyKeys.lists, params],
|
|
82
|
+
queryFn: () =>
|
|
83
|
+
fetchMarketCurrencies({
|
|
84
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
85
|
+
chainId: params.chainId!,
|
|
86
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
87
|
+
config: params.config!,
|
|
88
|
+
includeNativeCurrency: params.includeNativeCurrency,
|
|
89
|
+
collectionAddress: params.collectionAddress,
|
|
90
|
+
}),
|
|
91
|
+
...params.query,
|
|
92
|
+
enabled,
|
|
80
93
|
});
|
|
81
|
-
}
|
|
94
|
+
}
|
|
@@ -15,7 +15,7 @@ export const fetchMarketplaceConfig = async ({
|
|
|
15
15
|
prefetchedMarketplaceSettings,
|
|
16
16
|
}: {
|
|
17
17
|
config: SdkConfig;
|
|
18
|
-
prefetchedMarketplaceSettings?: LookupMarketplaceReturn;
|
|
18
|
+
prefetchedMarketplaceSettings?: LookupMarketplaceReturn;
|
|
19
19
|
}): Promise<MarketplaceConfig> => {
|
|
20
20
|
let builderMarketplaceConfig = prefetchedMarketplaceSettings;
|
|
21
21
|
|
|
@@ -72,14 +72,14 @@ export const fetchMarketplaceConfig = async ({
|
|
|
72
72
|
market: {
|
|
73
73
|
...marketplaceConfig.market,
|
|
74
74
|
...overrides.market,
|
|
75
|
-
//@ts-expect-error - TODO: Fix this partial type
|
|
75
|
+
//@ts-expect-error - TODO: Fix this partial type. We need to align new-marketplace-types with builder.gen.ts
|
|
76
76
|
collections:
|
|
77
77
|
overrides.market?.collections ?? marketplaceConfig.market.collections,
|
|
78
78
|
},
|
|
79
79
|
shop: {
|
|
80
80
|
...marketplaceConfig.shop,
|
|
81
81
|
...overrides.shop,
|
|
82
|
-
//@ts-expect-error - TODO: Fix this partial type
|
|
82
|
+
//@ts-expect-error - TODO: Fix this partial type. We need to align new-marketplace-types with builder.gen.ts
|
|
83
83
|
collections:
|
|
84
84
|
overrides.shop?.collections ?? marketplaceConfig.shop.collections,
|
|
85
85
|
},
|
|
@@ -72,7 +72,7 @@ exports[`createSSRClient > should fetch marketplace config successfully 1`] = `
|
|
|
72
72
|
],
|
|
73
73
|
"enabled": true,
|
|
74
74
|
"ogImage": "https://example.com/og-image.png",
|
|
75
|
-
"
|
|
75
|
+
"private": false,
|
|
76
76
|
},
|
|
77
77
|
"projectId": NaN,
|
|
78
78
|
"settings": {
|
|
@@ -112,6 +112,11 @@ exports[`createSSRClient > should fetch marketplace config successfully 1`] = `
|
|
|
112
112
|
"projectId": 1,
|
|
113
113
|
"saleAddress": "0x0000000000000000000000000000000000000000",
|
|
114
114
|
"saleBannerUrl": "https://example.com/shop-sale-banner.png",
|
|
115
|
+
"tokenIds": [
|
|
116
|
+
"1",
|
|
117
|
+
"2",
|
|
118
|
+
"3",
|
|
119
|
+
],
|
|
115
120
|
"updatedAt": "2025-03-16T13:04:16.098Z",
|
|
116
121
|
},
|
|
117
122
|
{
|
|
@@ -125,12 +130,17 @@ exports[`createSSRClient > should fetch marketplace config successfully 1`] = `
|
|
|
125
130
|
"projectId": 1,
|
|
126
131
|
"saleAddress": "0x1234567890123456789012345678901234567890",
|
|
127
132
|
"saleBannerUrl": "https://example.com/polygon-shop-sale-banner.png",
|
|
133
|
+
"tokenIds": [
|
|
134
|
+
"4",
|
|
135
|
+
"5",
|
|
136
|
+
"6",
|
|
137
|
+
],
|
|
128
138
|
"updatedAt": "2025-03-16T13:04:16.098Z",
|
|
129
139
|
},
|
|
130
140
|
],
|
|
131
141
|
"enabled": true,
|
|
132
142
|
"ogImage": "https://example.com/shop-og-image.png",
|
|
133
|
-
"
|
|
143
|
+
"private": false,
|
|
134
144
|
},
|
|
135
145
|
}
|
|
136
146
|
`;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type State
|
|
1
|
+
import { cookieToInitialState, type State } from 'wagmi';
|
|
2
2
|
import type { SdkConfig } from '../../types/sdk-config';
|
|
3
3
|
import { getQueryClient } from '../_internal/api/get-query-client';
|
|
4
4
|
import { createWagmiConfig } from '../_internal/wagmi/create-config';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard query options that can be used across all marketplace SDK hooks
|
|
3
|
+
*
|
|
4
|
+
* Based on TanStack Query v5 UseQueryOptions, but simplified, the type from TanStack is hard to modify
|
|
5
|
+
*/
|
|
6
|
+
export interface StandardQueryOptions<TError = Error> {
|
|
7
|
+
/** Whether the query should be enabled/disabled */
|
|
8
|
+
enabled?: boolean;
|
|
9
|
+
/** Time in milliseconds that data is considered fresh */
|
|
10
|
+
staleTime?: number;
|
|
11
|
+
gcTime?: number;
|
|
12
|
+
// biome-ignore lint/suspicious/noExplicitAny: TanStack Query requires any type for query parameter
|
|
13
|
+
refetchInterval?: number | false | ((query: any) => number | false);
|
|
14
|
+
refetchOnWindowFocus?: boolean;
|
|
15
|
+
refetchOnMount?: boolean;
|
|
16
|
+
refetchOnReconnect?: boolean;
|
|
17
|
+
retry?: boolean | number | ((failureCount: number, error: TError) => boolean);
|
|
18
|
+
retryDelay?: number | ((retryAttempt: number, error: TError) => number);
|
|
19
|
+
// select is not supported for now
|
|
20
|
+
// select?: <TSelected = TData>(data: TData) => TSelected;
|
|
21
|
+
suspense?: boolean;
|
|
22
|
+
/** Placeholder data is not supported for now */
|
|
23
|
+
// placeholderData?: TData | (() => TData);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Standard infinite query options that can be used across all marketplace SDK hooks
|
|
28
|
+
* that support infinite pagination
|
|
29
|
+
*/
|
|
30
|
+
export interface StandardInfiniteQueryOptions<TError = Error>
|
|
31
|
+
extends StandardQueryOptions<TError> {
|
|
32
|
+
/** Maximum number of pages to fetch */
|
|
33
|
+
maxPages?: number;
|
|
34
|
+
}
|
package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx
CHANGED
|
@@ -6,7 +6,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
6
6
|
import { CollectibleCardAction } from '../../../../../../types';
|
|
7
7
|
import * as walletModule from '../../../../../_internal/wallet/useWallet';
|
|
8
8
|
import { useActionButtonLogic } from '../hooks/useActionButtonLogic';
|
|
9
|
-
import { actionButtonStore
|
|
9
|
+
import { actionButtonStore } from '../store';
|
|
10
10
|
|
|
11
11
|
describe('useActionButtonLogic', () => {
|
|
12
12
|
const onCannotPerformActionMock = vi.fn();
|
|
@@ -23,7 +23,7 @@ describe('useActionButtonLogic', () => {
|
|
|
23
23
|
vi.clearAllMocks();
|
|
24
24
|
vi.clearAllMocks();
|
|
25
25
|
vi.restoreAllMocks();
|
|
26
|
-
actionButtonStore.
|
|
26
|
+
actionButtonStore.send({ type: 'clearPendingAction' });
|
|
27
27
|
|
|
28
28
|
vi.spyOn(walletModule, 'useWallet').mockReturnValue({
|
|
29
29
|
wallet: createMockWallet(),
|
|
@@ -33,7 +33,12 @@ describe('useActionButtonLogic', () => {
|
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
it('restricts owners from performing buy/offer actions', async () => {
|
|
36
|
-
|
|
36
|
+
actionButtonStore.send({
|
|
37
|
+
type: 'setPendingAction',
|
|
38
|
+
action: defaultProps.action,
|
|
39
|
+
onPendingActionExecuted: vi.fn(),
|
|
40
|
+
tokenId: '123',
|
|
41
|
+
});
|
|
37
42
|
|
|
38
43
|
const { result } = renderHook(() =>
|
|
39
44
|
useActionButtonLogic({
|
|
@@ -52,11 +57,12 @@ describe('useActionButtonLogic', () => {
|
|
|
52
57
|
it('executes pending action when user becomes connected', async () => {
|
|
53
58
|
const executePendingActionMock = vi.fn();
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
actionButtonStore.send({
|
|
61
|
+
type: 'setPendingAction',
|
|
62
|
+
action: CollectibleCardAction.BUY,
|
|
63
|
+
onPendingActionExecuted: executePendingActionMock,
|
|
64
|
+
tokenId: defaultProps.tokenId,
|
|
65
|
+
});
|
|
60
66
|
|
|
61
67
|
renderHook(() =>
|
|
62
68
|
useActionButtonLogic({
|
|
@@ -4,9 +4,9 @@ import { useEffect } from 'react';
|
|
|
4
4
|
import { CollectibleCardAction } from '../../../../../../types';
|
|
5
5
|
import { useWallet } from '../../../../../_internal/wallet/useWallet';
|
|
6
6
|
import {
|
|
7
|
-
actionButtonStore,
|
|
8
7
|
clearPendingAction,
|
|
9
|
-
|
|
8
|
+
executePendingAction,
|
|
9
|
+
usePendingAction,
|
|
10
10
|
} from '../store';
|
|
11
11
|
|
|
12
12
|
type UseActionButtonLogicProps = {
|
|
@@ -30,17 +30,17 @@ export const useActionButtonLogic = ({
|
|
|
30
30
|
CollectibleCardAction.BUY,
|
|
31
31
|
CollectibleCardAction.OFFER,
|
|
32
32
|
];
|
|
33
|
-
const
|
|
33
|
+
const pendingAction = usePendingAction();
|
|
34
|
+
const pendingActionType = pendingAction?.type;
|
|
34
35
|
|
|
35
36
|
// Handle owner restrictions
|
|
36
|
-
// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
|
|
37
37
|
useEffect(() => {
|
|
38
38
|
if (
|
|
39
39
|
owned &&
|
|
40
|
-
|
|
40
|
+
pendingAction &&
|
|
41
41
|
address &&
|
|
42
42
|
actionsThatOwnersCannotPerform.includes(action) &&
|
|
43
|
-
|
|
43
|
+
pendingAction?.collectibleId === tokenId
|
|
44
44
|
) {
|
|
45
45
|
onCannotPerformAction?.(
|
|
46
46
|
pendingActionType as
|
|
@@ -51,7 +51,7 @@ export const useActionButtonLogic = ({
|
|
|
51
51
|
}
|
|
52
52
|
}, [
|
|
53
53
|
owned,
|
|
54
|
-
|
|
54
|
+
pendingAction,
|
|
55
55
|
address,
|
|
56
56
|
action,
|
|
57
57
|
tokenId,
|
|
@@ -64,16 +64,13 @@ export const useActionButtonLogic = ({
|
|
|
64
64
|
if (
|
|
65
65
|
address &&
|
|
66
66
|
!owned &&
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
pendingAction &&
|
|
68
|
+
pendingAction?.collectibleId === tokenId
|
|
69
69
|
) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
executePendingActionIfExists();
|
|
73
|
-
clearPendingAction();
|
|
74
|
-
}, 1000);
|
|
70
|
+
executePendingAction(pendingAction);
|
|
71
|
+
clearPendingAction();
|
|
75
72
|
}
|
|
76
|
-
}, [address, owned, tokenId]);
|
|
73
|
+
}, [address, owned, tokenId, pendingAction]);
|
|
77
74
|
|
|
78
75
|
const shouldShowAction = !address
|
|
79
76
|
? [CollectibleCardAction.BUY, CollectibleCardAction.OFFER].includes(action)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { createStore } from '@xstate/store';
|
|
2
|
+
import { useSelector } from '@xstate/store/react';
|
|
3
|
+
import type { CollectibleCardAction } from '../../../../../types';
|
|
3
4
|
|
|
4
5
|
type PendingAction = {
|
|
5
6
|
type: CollectibleCardAction.BUY | CollectibleCardAction.OFFER;
|
|
@@ -8,32 +9,59 @@ type PendingAction = {
|
|
|
8
9
|
timestamp: number;
|
|
9
10
|
};
|
|
10
11
|
|
|
11
|
-
export const actionButtonStore =
|
|
12
|
-
|
|
12
|
+
export const actionButtonStore = createStore({
|
|
13
|
+
context: {
|
|
14
|
+
pendingAction: null as PendingAction | null,
|
|
15
|
+
},
|
|
16
|
+
on: {
|
|
17
|
+
setPendingAction: (
|
|
18
|
+
context,
|
|
19
|
+
event: {
|
|
20
|
+
action: CollectibleCardAction.BUY | CollectibleCardAction.OFFER;
|
|
21
|
+
onPendingActionExecuted: () => void;
|
|
22
|
+
tokenId: string;
|
|
23
|
+
},
|
|
24
|
+
) => ({
|
|
25
|
+
...context,
|
|
26
|
+
pendingAction: {
|
|
27
|
+
type: event.action,
|
|
28
|
+
callback: event.onPendingActionExecuted,
|
|
29
|
+
timestamp: Date.now(),
|
|
30
|
+
collectibleId: event.tokenId,
|
|
31
|
+
},
|
|
32
|
+
}),
|
|
33
|
+
clearPendingAction: (context) => ({
|
|
34
|
+
...context,
|
|
35
|
+
pendingAction: null,
|
|
36
|
+
}),
|
|
37
|
+
},
|
|
13
38
|
});
|
|
14
39
|
|
|
15
40
|
export const setPendingAction = (
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
41
|
+
action: CollectibleCardAction.BUY | CollectibleCardAction.OFFER,
|
|
42
|
+
onPendingActionExecuted: () => void,
|
|
43
|
+
tokenId: string,
|
|
19
44
|
) => {
|
|
20
|
-
actionButtonStore.
|
|
21
|
-
type,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
45
|
+
actionButtonStore.send({
|
|
46
|
+
type: 'setPendingAction',
|
|
47
|
+
action,
|
|
48
|
+
onPendingActionExecuted,
|
|
49
|
+
tokenId,
|
|
25
50
|
});
|
|
26
51
|
};
|
|
27
52
|
|
|
53
|
+
// Selector hooks
|
|
54
|
+
export const usePendingAction = () =>
|
|
55
|
+
useSelector(actionButtonStore, (state) => state.context.pendingAction);
|
|
56
|
+
|
|
28
57
|
export const clearPendingAction = () => {
|
|
29
|
-
actionButtonStore.
|
|
58
|
+
actionButtonStore.send({ type: 'clearPendingAction' });
|
|
30
59
|
};
|
|
31
60
|
|
|
32
|
-
export const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
| undefined;
|
|
61
|
+
export const executePendingAction = (pendingAction: PendingAction | null) => {
|
|
62
|
+
if (!pendingAction) return;
|
|
63
|
+
|
|
64
|
+
const { timestamp, callback } = pendingAction;
|
|
37
65
|
|
|
38
66
|
if (timestamp && callback) {
|
|
39
67
|
// Only execute if the pending action is less than 5 minutes old
|
|
@@ -9,7 +9,7 @@ export function CollectibleCard(props: CollectibleCardProps) {
|
|
|
9
9
|
switch (props.marketplaceType) {
|
|
10
10
|
case 'shop':
|
|
11
11
|
return <ShopCard {...props} />;
|
|
12
|
-
// biome-ignore lint/complexity/noUselessSwitchCase:
|
|
12
|
+
// biome-ignore lint/complexity/noUselessSwitchCase: explicit case makes code clearer and future-proof
|
|
13
13
|
case 'market':
|
|
14
14
|
default:
|
|
15
15
|
return <MarketCard {...props} />;
|
|
@@ -33,11 +33,14 @@ export function BaseCard({
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
return (
|
|
36
|
+
// biome-ignore lint/a11y/noStaticElementInteractions: div used as interactive card with proper role and keyboard support
|
|
36
37
|
<div
|
|
37
38
|
data-testid="collectible-card"
|
|
38
39
|
className="w-card-width min-w-card-min-width overflow-hidden rounded-xl border border-border-base bg-background-primary focus-visible:border-border-focus focus-visible:shadow-focus-ring focus-visible:outline-focus active:border-border-focus active:shadow-active-ring"
|
|
39
40
|
onClick={onClick}
|
|
40
41
|
onKeyDown={onKeyDown}
|
|
42
|
+
role={onClick ? 'button' : undefined}
|
|
43
|
+
tabIndex={onClick ? 0 : undefined}
|
|
41
44
|
>
|
|
42
45
|
<div className="group relative z-10 flex h-full w-full cursor-pointer flex-col items-start overflow-hidden rounded-xl border-none bg-none p-0 focus:outline-none [&:focus]:rounded-[10px] [&:focus]:outline-[3px] [&:focus]:outline-black [&:focus]:outline-offset-[-3px]">
|
|
43
46
|
<article className="w-full rounded-xl">
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { Address, Hex } from 'viem';
|
|
2
2
|
import type { CollectibleCardAction, MarketplaceType } from '../../../../types';
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import type {
|
|
4
|
+
CollectibleOrder,
|
|
5
|
+
ContractType,
|
|
6
|
+
Order,
|
|
7
|
+
OrderbookKind,
|
|
8
|
+
TokenMetadata,
|
|
9
|
+
} from '../../../_internal';
|
|
7
10
|
|
|
8
11
|
// Base properties shared by all collectible card types
|
|
9
12
|
type MarketplaceCardBaseProps = {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import type { Address } from 'viem';
|
|
3
4
|
import { CollectibleCardAction } from '../../../../../types';
|
|
4
5
|
import { useCurrency } from '../../../../hooks';
|
|
5
|
-
import { Footer } from '../Footer';
|
|
6
6
|
import { ActionButtonWrapper } from '../components/ActionButtonWrapper';
|
|
7
7
|
import { BaseCard } from '../components/BaseCard';
|
|
8
|
+
import { Footer } from '../Footer';
|
|
8
9
|
import type { MarketCollectibleCardProps } from '../types';
|
|
9
10
|
|
|
10
11
|
export function MarketCard({
|
|
@@ -31,7 +32,7 @@ export function MarketCard({
|
|
|
31
32
|
isLoading: lowestListingCurrencyLoading,
|
|
32
33
|
} = useCurrency({
|
|
33
34
|
chainId,
|
|
34
|
-
currencyAddress: collectible?.listing?.priceCurrencyAddress,
|
|
35
|
+
currencyAddress: collectible?.listing?.priceCurrencyAddress as Address,
|
|
35
36
|
query: {
|
|
36
37
|
enabled: !!collectible?.listing?.priceCurrencyAddress,
|
|
37
38
|
},
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import { CollectibleCardAction } from '../../../../../types';
|
|
4
4
|
import { ContractType } from '../../../../_internal';
|
|
5
5
|
import { useCurrency } from '../../../../hooks';
|
|
6
|
-
import { Footer } from '../Footer';
|
|
7
6
|
import { ActionButtonWrapper } from '../components/ActionButtonWrapper';
|
|
8
7
|
import { BaseCard } from '../components/BaseCard';
|
|
8
|
+
import { Footer } from '../Footer';
|
|
9
9
|
import type { ShopCollectibleCardProps } from '../types';
|
|
10
10
|
|
|
11
11
|
export function ShopCard({
|
|
@@ -51,10 +51,7 @@ export function ShopCard({
|
|
|
51
51
|
|
|
52
52
|
const action = CollectibleCardAction.BUY;
|
|
53
53
|
|
|
54
|
-
const mediaClassName =
|
|
55
|
-
collectionType === ContractType.ERC721 && !quantityRemaining
|
|
56
|
-
? 'opacity-50'
|
|
57
|
-
: 'opacity-100';
|
|
54
|
+
const mediaClassName = !quantityRemaining ? 'opacity-50' : 'opacity-100';
|
|
58
55
|
|
|
59
56
|
return (
|
|
60
57
|
<BaseCard
|
|
@@ -34,6 +34,7 @@ export function Media({
|
|
|
34
34
|
const [assetLoadFailed, setAssetLoadFailed] = useState(false);
|
|
35
35
|
const [assetLoading, setAssetLoading] = useState(true);
|
|
36
36
|
const [currentAssetIndex, setCurrentAssetIndex] = useState(0);
|
|
37
|
+
const [isSafari, setIsSafari] = useState(false);
|
|
37
38
|
const [contentType, setContentType] = useState<ContentTypeState>({
|
|
38
39
|
type: null,
|
|
39
40
|
loading: true,
|
|
@@ -41,7 +42,10 @@ export function Media({
|
|
|
41
42
|
});
|
|
42
43
|
|
|
43
44
|
const videoRef = useRef<HTMLVideoElement>(null);
|
|
44
|
-
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
setIsSafari(/^((?!chrome|android).)*safari/i.test(navigator.userAgent));
|
|
48
|
+
}, []);
|
|
45
49
|
|
|
46
50
|
const validAssets = assets.filter((asset): asset is string => !!asset);
|
|
47
51
|
const assetUrl = validAssets[currentAssetIndex];
|