@0xsequence/marketplace-sdk 0.9.0 → 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 +77 -8
- package/dist/{CalendarIcon-DbQ7Vxcw.js → CalendarIcon-CqsuAuCm.js} +4 -51
- package/dist/CalendarIcon-CqsuAuCm.js.map +1 -0
- package/dist/{CollectibleCard-C8Ae64Ab.d.ts → CollectibleCard-Dd-CG6dE.d.ts} +8 -7
- package/dist/InfoIcon-v0w_Lu7t.js +53 -0
- package/dist/InfoIcon-v0w_Lu7t.js.map +1 -0
- package/dist/{_internal-BgWcRIak.js → _internal-C75gOSNo.js} +2 -10
- 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-DTIan01C.js → api-BiMGqWdz.js} +17 -34
- 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/{coinbase-ByA_XRB0.js → coinbase-Df8URNxq.js} +1 -1
- package/dist/{coinbase-ByA_XRB0.js.map → coinbase-Df8URNxq.js.map} +1 -1
- package/dist/{new-marketplace-types-Bfis0U4J.d.ts → create-config-DKJ-F0jc.d.ts} +402 -41
- package/dist/{wagmi-CDzEQbfk.js → create-config-fQ-jbJD1.js} +20 -10
- 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-BL9RUSEK.d.ts → index-136YrWDH.d.ts} +1 -1
- package/dist/{index-D5v5iluA.d.ts → index-BAhaEfqY.d.ts} +1 -1
- package/dist/index-BKBin-rq.d.ts +979 -0
- package/dist/{index-BQsgAvtX.d.ts → index-BUWB_RXp.d.ts} +776 -570
- package/dist/{index-21LE7OhL.d.ts → index-BhVFc2rX.d.ts} +6 -3
- package/dist/{index-DXMfTZ1F.d.ts → index-C5aqo8xu.d.ts} +1 -1
- package/dist/{index-ByznONYE.d.ts → index-CKrYP7ot.d.ts} +20 -48
- package/dist/{index-DaE5ZNHb.d.ts → index-CUwMH7Ht.d.ts} +5 -5
- package/dist/{index-CLy8y5hm.d.ts → index-Cu70Lw-w.d.ts} +1 -1
- package/dist/index.css +414 -1
- package/dist/index.d.ts +8 -10
- package/dist/index.js +13 -9
- 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-BSDIX7NZ.js → marketplace.gen-HpnpL5xU.js} +3 -3
- package/dist/marketplace.gen-HpnpL5xU.js.map +1 -0
- package/dist/{marketplaceConfig-C6X1SUik.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/{primary-sale-C55ALnfQ.js → primary-sale-CmWxSfFQ.js} +1 -1
- package/dist/{primary-sale-C55ALnfQ.js.map → primary-sale-CmWxSfFQ.js.map} +1 -1
- package/dist/provider-DPGUA10G.js +125 -0
- package/dist/provider-DPGUA10G.js.map +1 -0
- package/dist/{queries-CUU65uYZ.js → queries-Ce_2othB.js} +165 -7
- 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 +7 -4
- 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 +11 -6
- package/dist/react/_internal/wagmi/index.d.ts +2 -4
- package/dist/react/_internal/wagmi/index.js +5 -3
- package/dist/react/hooks/index.d.ts +12 -17
- package/dist/react/hooks/index.js +23 -19
- package/dist/react/hooks/options/index.d.ts +2 -3
- package/dist/react/hooks/options/index.js +12 -7
- package/dist/react/index.d.ts +12 -17
- package/dist/react/index.js +28 -19
- package/dist/react/queries/index.d.ts +9 -8
- package/dist/react/queries/index.js +20 -15
- package/dist/react/ssr/index.d.ts +7 -9
- package/dist/react/ssr/index.js +11 -6
- package/dist/react/ssr/index.js.map +1 -1
- package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +3 -8
- package/dist/react/ui/components/marketplace-collectible-card/index.js +27 -18
- 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 +11 -6
- 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 +13 -9
- package/dist/react/ui/index.d.ts +3 -8
- package/dist/react/ui/index.js +27 -18
- package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +2 -2
- package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -18
- package/dist/{react-DAIicQPT.js → react-DP0M2Wfm.js} +799 -4306
- 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-Da4TdyUk.js → token-CHSBPYVG.js} +1 -1
- package/dist/{token-Da4TdyUk.js.map → token-CHSBPYVG.js.map} +1 -1
- 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 +2 -2
- package/dist/{types-DwWE6xOF.js → types-Yw2ywj6j.js} +1 -1
- package/dist/{types-DwWE6xOF.js.map → types-Yw2ywj6j.js.map} +1 -1
- package/dist/utils/abi/index.d.ts +4 -4
- package/dist/utils/abi/index.js +4 -4
- 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 +1 -1
- package/dist/utils/abi/token/index.js +1 -1
- package/dist/utils/index.d.ts +7 -8
- package/dist/utils/index.js +12 -9
- package/dist/{utils-CW2NA5KG.js → utils-9RXDgcBl.js} +4 -11
- package/dist/utils-9RXDgcBl.js.map +1 -0
- package/dist/{utils-BPYfgDSL.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.config.mjs +4 -0
- package/package.json +27 -14
- package/postcss.config.mjs +6 -0
- package/src/index.css +5 -4
- package/src/index.ts +1 -0
- package/src/react/__tests__/provider.test.tsx +4 -3
- package/src/react/_internal/api/__mocks__/indexer.msw.ts +16 -0
- package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
- package/src/react/_internal/api/__mocks__/marketplace.msw.ts +2 -0
- package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
- package/src/react/_internal/api/laos-api.ts +3 -0
- package/src/react/_internal/api/marketplace.gen.ts +5 -3
- package/src/react/_internal/api/query-keys.ts +12 -4
- package/src/react/_internal/api/services.ts +2 -14
- 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/utils.ts +4 -4
- package/src/react/_internal/wagmi/create-config.ts +28 -13
- package/src/react/_internal/wallet/wallet.ts +4 -4
- package/src/react/hooks/__tests__/useBalanceOfCollectible.laos.test.tsx +367 -0
- 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__/useCollectionBalanceDetails.test.tsx +17 -0
- package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +11 -3
- package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +3 -3
- package/src/react/hooks/__tests__/useCurrencyBalance.test.tsx +7 -3
- package/src/react/hooks/__tests__/useFilters.test.tsx +2 -2
- package/src/react/hooks/__tests__/useGetTokenRanges.test.tsx +111 -0
- package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +83 -57
- package/src/react/hooks/__tests__/useTransferTokens.test.tsx +469 -0
- package/src/react/hooks/index.ts +3 -1
- package/src/react/hooks/useCheckoutOptions.tsx +96 -0
- package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +98 -57
- package/src/react/hooks/useCollectionBalanceDetails.tsx +95 -68
- package/src/react/hooks/useCollectionDetailsPolling.tsx +3 -7
- package/src/react/hooks/useComparePrices.tsx +90 -82
- package/src/react/hooks/useConvertPriceToUSD.tsx +85 -71
- package/src/react/hooks/useCurrencyBalance.tsx +132 -46
- package/src/react/hooks/useERC721SaleMintedTokens.tsx +8 -5
- package/src/react/hooks/useFilters.tsx +154 -111
- package/src/react/hooks/useGetCountOfPrimarySaleItems.tsx +48 -0
- package/src/react/hooks/useGetTokenRanges.tsx +83 -22
- package/src/react/hooks/useList1155ShopCardData.tsx +2 -0
- package/src/react/hooks/useList721ShopCardData.tsx +12 -7
- package/src/react/hooks/useListCollections.tsx +25 -25
- package/src/react/hooks/useListMarketCardData.tsx +2 -1
- package/src/react/hooks/useListPrimarySaleItems.tsx +66 -0
- package/src/react/hooks/useListTokenMetadata.ts +71 -0
- package/src/react/hooks/useOpenConnectModal.tsx +9 -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/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 +7 -4
- package/src/react/queries/checkoutOptions.ts +85 -0
- package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
- package/src/react/queries/collectionBalanceDetails.ts +92 -0
- package/src/react/queries/comparePrices.ts +108 -0
- package/src/react/queries/convertPriceToUSD.ts +92 -0
- package/src/react/queries/filters.ts +138 -0
- package/src/react/queries/getTokenRanges.ts +62 -0
- package/src/react/queries/index.ts +3 -0
- package/src/react/queries/inventory.ts +6 -0
- package/src/react/queries/listBalances.ts +4 -3
- package/src/react/queries/listCollections.ts +7 -3
- package/src/react/queries/listTokenMetadata.ts +2 -2
- package/src/react/queries/marketplaceConfig.ts +1 -1
- 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/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/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 +13 -8
- package/src/react/ui/components/_internals/action-button/store.ts +44 -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/Footer.tsx +11 -4
- package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
- package/src/react/ui/components/marketplace-collectible-card/types.ts +4 -3
- package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
- package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +5 -1
- package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
- package/src/react/ui/components/media/Media.stories.tsx +642 -0
- package/src/react/ui/components/media/Media.tsx +24 -19
- package/src/react/ui/components/media/types.ts +6 -0
- package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +15 -0
- package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +6 -0
- package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +7 -1
- package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +9 -1
- package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +15 -8
- package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +3 -0
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +30 -27
- package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +2 -2
- package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +11 -2
- package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +1 -1
- package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +7 -0
- 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/store.ts +3 -3
- package/src/react/ui/modals/MakeOfferModal/Modal.tsx +30 -13
- package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
- package/src/react/ui/modals/SellModal/Modal.tsx +11 -8
- package/src/react/ui/modals/SellModal/store.ts +3 -3
- 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 +51 -48
- 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 +31 -35
- 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/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 +5 -2
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +23 -17
- 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/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 +155 -20
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +339 -40
- 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 -13
- 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 +36 -10
- package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +32 -20
- package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +91 -62
- package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +43 -44
- package/src/react/ui/modals/_internal/types.ts +2 -2
- package/src/types/sdk-config.ts +6 -1
- package/src/utils/network.ts +15 -0
- package/test/test-utils.tsx +2 -0
- package/vitest.shims.d.ts +2 -0
- package/vitest.storybook.config.js +33 -0
- package/dist/CalendarIcon-DbQ7Vxcw.js.map +0 -1
- package/dist/_internal-BgWcRIak.js.map +0 -1
- package/dist/api-DTIan01C.js.map +0 -1
- package/dist/builder-api-C_zj5mr3.d.ts +0 -12
- package/dist/index-BUVWziLP.d.ts +0 -60
- package/dist/index-COt10OgI.d.ts +0 -24
- package/dist/index-DPNWNa7t.d.ts +0 -414
- package/dist/index-DsfCs3-x.d.ts +0 -122
- package/dist/index-dUb6wb4Y.d.ts +0 -22
- package/dist/marketplace.gen-BSDIX7NZ.js.map +0 -1
- package/dist/marketplaceConfig-C6X1SUik.js.map +0 -1
- package/dist/queries-CUU65uYZ.js.map +0 -1
- package/dist/react-DAIicQPT.js.map +0 -1
- package/dist/transaction-CcVViHEL.js.map +0 -1
- package/dist/utils-BPYfgDSL.js.map +0 -1
- package/dist/utils-CW2NA5KG.js.map +0 -1
- package/dist/wagmi-CDzEQbfk.js.map +0 -1
- package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +0 -104
- package/src/react/hooks/useGetTokenSuppliesMap.tsx +0 -73
- package/src/react/hooks/useListPrimarySaleItems.ts +0 -102
- package/src/react/queries/getTokenSuppliesMap.ts +0 -77
- package/src/react/ui/modals/TransferModal/_store.ts +0 -66
- package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +0 -166
- package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
- /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/{options-B4QN7Xou.js → options-BBBR8u_4.js} +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { GetTokenBalancesReturn, Page } from '@0xsequence/indexer';
|
|
2
2
|
import { infiniteQueryOptions } from '@tanstack/react-query';
|
|
3
|
-
import type { Hex } from 'viem';
|
|
3
|
+
import type { Address, Hex } from 'viem';
|
|
4
4
|
import type { SdkConfig } from '../../types';
|
|
5
5
|
import { balanceQueries, getIndexerClient, LaosAPI } from '../_internal';
|
|
6
6
|
|
|
7
7
|
export type UseListBalancesArgs = {
|
|
8
8
|
chainId: number;
|
|
9
|
-
accountAddress?:
|
|
10
|
-
contractAddress?:
|
|
9
|
+
accountAddress?: Address;
|
|
10
|
+
contractAddress?: Address;
|
|
11
11
|
tokenId?: string;
|
|
12
12
|
includeMetadata?: boolean;
|
|
13
13
|
metadataOptions?: {
|
|
@@ -34,6 +34,7 @@ export async function fetchBalances(
|
|
|
34
34
|
return laosClient.getTokenBalances({
|
|
35
35
|
chainId: args.chainId.toString(),
|
|
36
36
|
accountAddress: args.accountAddress,
|
|
37
|
+
contractAddress: args.contractAddress as Address,
|
|
37
38
|
includeMetadata: args.includeMetadata,
|
|
38
39
|
page: {
|
|
39
40
|
sort: [
|
|
@@ -28,7 +28,7 @@ export interface FetchListCollectionsParams {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
* Fetches
|
|
31
|
+
* Fetches collections from the metadata API with marketplace config filtering
|
|
32
32
|
*/
|
|
33
33
|
export async function fetchListCollections(params: FetchListCollectionsParams) {
|
|
34
34
|
const { marketplaceType, marketplaceConfig, config } = params;
|
|
@@ -150,14 +150,18 @@ export const listCollectionsOptions = ({
|
|
|
150
150
|
config: SdkConfig;
|
|
151
151
|
}) => {
|
|
152
152
|
return queryOptions({
|
|
153
|
-
queryKey: [
|
|
153
|
+
queryKey: [
|
|
154
|
+
...collectionKeys.list,
|
|
155
|
+
{ marketplaceType, marketplaceConfig, config },
|
|
156
|
+
],
|
|
154
157
|
queryFn: marketplaceConfig
|
|
155
158
|
? () =>
|
|
156
159
|
fetchListCollections({
|
|
157
|
-
marketplaceType,
|
|
158
160
|
marketplaceConfig,
|
|
159
161
|
config,
|
|
162
|
+
marketplaceType,
|
|
160
163
|
})
|
|
161
164
|
: skipToken,
|
|
165
|
+
enabled: Boolean(marketplaceConfig),
|
|
162
166
|
});
|
|
163
167
|
};
|
|
@@ -2,7 +2,7 @@ import { queryOptions } from '@tanstack/react-query';
|
|
|
2
2
|
import type { SdkConfig } from '../../types';
|
|
3
3
|
import {
|
|
4
4
|
getMetadataClient,
|
|
5
|
-
|
|
5
|
+
tokenKeys,
|
|
6
6
|
type ValuesOptional,
|
|
7
7
|
} from '../_internal';
|
|
8
8
|
import type { StandardQueryOptions } from '../types/query';
|
|
@@ -49,7 +49,7 @@ export function listTokenMetadataQueryOptions(
|
|
|
49
49
|
);
|
|
50
50
|
|
|
51
51
|
return queryOptions({
|
|
52
|
-
queryKey: [...
|
|
52
|
+
queryKey: [...tokenKeys.metadata, params],
|
|
53
53
|
queryFn: () =>
|
|
54
54
|
fetchListTokenMetadata({
|
|
55
55
|
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
@@ -38,7 +38,7 @@ export const fetchMarketplaceConfig = async ({
|
|
|
38
38
|
} satisfies MarketCollection;
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
const shopCollections = builderMarketplaceConfig.shopCollections.map(
|
|
41
|
+
const shopCollections = (builderMarketplaceConfig.shopCollections ?? []).map(
|
|
42
42
|
(collection) => {
|
|
43
43
|
return {
|
|
44
44
|
...collection,
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { infiniteQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { Address } from 'viem';
|
|
3
|
+
import type { SdkConfig } from '../../types';
|
|
4
|
+
import {
|
|
5
|
+
getMarketplaceClient,
|
|
6
|
+
type ListPrimarySaleItemsArgs,
|
|
7
|
+
type ListPrimarySaleItemsReturn,
|
|
8
|
+
type Page,
|
|
9
|
+
type PrimarySaleItemsFilter,
|
|
10
|
+
type ValuesOptional,
|
|
11
|
+
} from '../_internal';
|
|
12
|
+
import type { StandardQueryOptions } from '../types/query';
|
|
13
|
+
|
|
14
|
+
export interface FetchPrimarySaleItemsParams {
|
|
15
|
+
chainId: number;
|
|
16
|
+
primarySaleContractAddress: Address;
|
|
17
|
+
filter?: PrimarySaleItemsFilter;
|
|
18
|
+
page?: Page;
|
|
19
|
+
config: SdkConfig;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Fetches primary sale items from the marketplace API
|
|
24
|
+
*/
|
|
25
|
+
export async function fetchPrimarySaleItems(
|
|
26
|
+
params: FetchPrimarySaleItemsParams,
|
|
27
|
+
): Promise<ListPrimarySaleItemsReturn> {
|
|
28
|
+
const { chainId, primarySaleContractAddress, filter, page, config } = params;
|
|
29
|
+
|
|
30
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
31
|
+
|
|
32
|
+
return marketplaceClient.listPrimarySaleItems({
|
|
33
|
+
chainId: String(chainId),
|
|
34
|
+
primarySaleContractAddress,
|
|
35
|
+
filter,
|
|
36
|
+
page,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export type ListPrimarySaleItemsQueryOptions =
|
|
41
|
+
ValuesOptional<FetchPrimarySaleItemsParams> & {
|
|
42
|
+
query?: StandardQueryOptions;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const listPrimarySaleItemsQueryOptions = (
|
|
46
|
+
params: ListPrimarySaleItemsQueryOptions,
|
|
47
|
+
) => {
|
|
48
|
+
const enabled = Boolean(
|
|
49
|
+
params.primarySaleContractAddress &&
|
|
50
|
+
params.chainId &&
|
|
51
|
+
params.config &&
|
|
52
|
+
(params.query?.enabled ?? true),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
type PageParam = { page: number; pageSize: number };
|
|
56
|
+
const initialPage: PageParam = { page: 1, pageSize: 30 };
|
|
57
|
+
|
|
58
|
+
return infiniteQueryOptions({
|
|
59
|
+
queryKey: ['listPrimarySaleItems', params],
|
|
60
|
+
queryFn: async ({ pageParam }) => {
|
|
61
|
+
return fetchPrimarySaleItems({
|
|
62
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
63
|
+
chainId: params.chainId!,
|
|
64
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
65
|
+
primarySaleContractAddress: params.primarySaleContractAddress!,
|
|
66
|
+
filter: params.filter,
|
|
67
|
+
page: pageParam,
|
|
68
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
69
|
+
config: params.config!,
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
initialPageParam: initialPage,
|
|
73
|
+
getNextPageParam: (lastPage) =>
|
|
74
|
+
lastPage.page?.more
|
|
75
|
+
? {
|
|
76
|
+
page: (lastPage.page?.page || 1) + 1,
|
|
77
|
+
pageSize: lastPage.page?.pageSize || 30,
|
|
78
|
+
}
|
|
79
|
+
: undefined,
|
|
80
|
+
...params.query,
|
|
81
|
+
enabled,
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export type { ListPrimarySaleItemsArgs, ListPrimarySaleItemsReturn };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { queryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { Address } from 'viem';
|
|
3
|
+
import type { SdkConfig } from '../../types';
|
|
4
|
+
import {
|
|
5
|
+
type GetCountOfPrimarySaleItemsReturn,
|
|
6
|
+
getMarketplaceClient,
|
|
7
|
+
type PrimarySaleItemsFilter,
|
|
8
|
+
} from '../_internal';
|
|
9
|
+
import type { StandardQueryOptions } from '../types/query';
|
|
10
|
+
|
|
11
|
+
export interface FetchPrimarySaleItemsCountParams {
|
|
12
|
+
chainId: number;
|
|
13
|
+
primarySaleContractAddress: Address;
|
|
14
|
+
filter?: PrimarySaleItemsFilter;
|
|
15
|
+
config: SdkConfig;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Fetches the count of primary sale items from the marketplace API
|
|
20
|
+
*/
|
|
21
|
+
export async function fetchPrimarySaleItemsCount(
|
|
22
|
+
params: FetchPrimarySaleItemsCountParams,
|
|
23
|
+
): Promise<GetCountOfPrimarySaleItemsReturn> {
|
|
24
|
+
const { chainId, primarySaleContractAddress, filter, config } = params;
|
|
25
|
+
|
|
26
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
27
|
+
return marketplaceClient.getCountOfPrimarySaleItems({
|
|
28
|
+
chainId: String(chainId),
|
|
29
|
+
primarySaleContractAddress,
|
|
30
|
+
filter,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type PrimarySaleItemsCountQueryOptions =
|
|
35
|
+
Partial<FetchPrimarySaleItemsCountParams> & {
|
|
36
|
+
query?: StandardQueryOptions;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const primarySaleItemsCountQueryOptions = (
|
|
40
|
+
args: PrimarySaleItemsCountQueryOptions,
|
|
41
|
+
) => {
|
|
42
|
+
const enabled = Boolean(
|
|
43
|
+
args.primarySaleContractAddress &&
|
|
44
|
+
args.chainId &&
|
|
45
|
+
args.config &&
|
|
46
|
+
(args.query?.enabled ?? true),
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
return queryOptions({
|
|
50
|
+
queryKey: ['primarySaleItemsCount', args],
|
|
51
|
+
queryFn: () =>
|
|
52
|
+
fetchPrimarySaleItemsCount({
|
|
53
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
54
|
+
chainId: args.chainId!,
|
|
55
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
56
|
+
primarySaleContractAddress: args.primarySaleContractAddress!,
|
|
57
|
+
filter: args.filter,
|
|
58
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
59
|
+
config: args.config!,
|
|
60
|
+
}),
|
|
61
|
+
...args.query,
|
|
62
|
+
enabled,
|
|
63
|
+
});
|
|
64
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { GetTokenSuppliesArgs } from '@0xsequence/indexer';
|
|
2
|
+
import { queryOptions } from '@tanstack/react-query';
|
|
3
|
+
import type { SdkConfig } from '../../types';
|
|
4
|
+
import {
|
|
5
|
+
getIndexerClient,
|
|
6
|
+
LaosAPI,
|
|
7
|
+
tokenKeys,
|
|
8
|
+
type ValuesOptional,
|
|
9
|
+
} from '../_internal';
|
|
10
|
+
import type { StandardQueryOptions } from '../types/query';
|
|
11
|
+
|
|
12
|
+
export interface FetchTokenSuppliesParams
|
|
13
|
+
extends Omit<GetTokenSuppliesArgs, 'contractAddress'> {
|
|
14
|
+
chainId: number;
|
|
15
|
+
collectionAddress: string;
|
|
16
|
+
config: SdkConfig;
|
|
17
|
+
isLaos721?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Fetches token supplies with support for both indexer and LAOS APIs
|
|
22
|
+
* Uses the more efficient single-contract APIs from both services
|
|
23
|
+
*/
|
|
24
|
+
export async function fetchTokenSupplies(params: FetchTokenSuppliesParams) {
|
|
25
|
+
const { chainId, collectionAddress, config, isLaos721, ...rest } = params;
|
|
26
|
+
|
|
27
|
+
if (isLaos721) {
|
|
28
|
+
const laosApi = new LaosAPI();
|
|
29
|
+
|
|
30
|
+
// Convert indexer Page format to LAOS PaginationOptions format
|
|
31
|
+
const laosPage = rest.page
|
|
32
|
+
? {
|
|
33
|
+
sort:
|
|
34
|
+
rest.page.sort?.map((sortBy) => ({
|
|
35
|
+
column: sortBy.column,
|
|
36
|
+
order: sortBy.order,
|
|
37
|
+
})) || [],
|
|
38
|
+
}
|
|
39
|
+
: undefined;
|
|
40
|
+
|
|
41
|
+
const result = await laosApi.getTokenSupplies({
|
|
42
|
+
chainId: chainId.toString(),
|
|
43
|
+
contractAddress: collectionAddress,
|
|
44
|
+
includeMetadata: rest.includeMetadata,
|
|
45
|
+
page: laosPage,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const indexerClient = getIndexerClient(chainId, config);
|
|
52
|
+
|
|
53
|
+
const apiArgs: GetTokenSuppliesArgs = {
|
|
54
|
+
contractAddress: collectionAddress,
|
|
55
|
+
...rest,
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const result = await indexerClient.getTokenSupplies(apiArgs);
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export type TokenSuppliesQueryOptions =
|
|
63
|
+
ValuesOptional<FetchTokenSuppliesParams> & {
|
|
64
|
+
query?: StandardQueryOptions;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export function tokenSuppliesQueryOptions(params: TokenSuppliesQueryOptions) {
|
|
68
|
+
const enabled = Boolean(
|
|
69
|
+
params.chainId &&
|
|
70
|
+
params.collectionAddress &&
|
|
71
|
+
params.config &&
|
|
72
|
+
(params.query?.enabled ?? true),
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
return queryOptions({
|
|
76
|
+
queryKey: [...tokenKeys.supplies, params],
|
|
77
|
+
queryFn: () =>
|
|
78
|
+
fetchTokenSupplies({
|
|
79
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
80
|
+
chainId: params.chainId!,
|
|
81
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
82
|
+
collectionAddress: params.collectionAddress!,
|
|
83
|
+
// biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
|
|
84
|
+
config: params.config!,
|
|
85
|
+
isLaos721: params.isLaos721,
|
|
86
|
+
includeMetadata: params.includeMetadata,
|
|
87
|
+
metadataOptions: params.metadataOptions,
|
|
88
|
+
page: params.page,
|
|
89
|
+
}),
|
|
90
|
+
...params.query,
|
|
91
|
+
enabled,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import type { Address, Hex } from 'viem';
|
|
3
|
+
import type { Address } from 'viem';
|
|
5
4
|
import type {
|
|
6
5
|
CollectibleCardAction,
|
|
7
6
|
MarketplaceType,
|
|
@@ -13,7 +12,7 @@ import { useActionButtonLogic } from './hooks/useActionButtonLogic';
|
|
|
13
12
|
|
|
14
13
|
type ActionButtonProps = {
|
|
15
14
|
chainId: number;
|
|
16
|
-
collectionAddress:
|
|
15
|
+
collectionAddress: Address;
|
|
17
16
|
tokenId: string;
|
|
18
17
|
orderbookKind?: OrderbookKind;
|
|
19
18
|
isTransfer?: boolean;
|
|
@@ -33,75 +32,76 @@ type ActionButtonProps = {
|
|
|
33
32
|
};
|
|
34
33
|
quantityDecimals?: number;
|
|
35
34
|
quantityRemaining?: number;
|
|
35
|
+
unlimitedSupply?: boolean;
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
export
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
export function ActionButton({
|
|
39
|
+
collectionAddress,
|
|
40
|
+
chainId,
|
|
41
|
+
tokenId,
|
|
42
|
+
orderbookKind,
|
|
43
|
+
action,
|
|
44
|
+
owned,
|
|
45
|
+
highestOffer,
|
|
46
|
+
lowestListing,
|
|
47
|
+
onCannotPerformAction,
|
|
48
|
+
marketplaceType,
|
|
49
|
+
salesContractAddress,
|
|
50
|
+
prioritizeOwnerActions,
|
|
51
|
+
salePrice,
|
|
52
|
+
quantityDecimals,
|
|
53
|
+
quantityRemaining,
|
|
54
|
+
unlimitedSupply,
|
|
55
|
+
}: ActionButtonProps) {
|
|
56
|
+
const { shouldShowAction, isOwnerAction } = useActionButtonLogic({
|
|
42
57
|
tokenId,
|
|
43
|
-
orderbookKind,
|
|
44
|
-
action,
|
|
45
58
|
owned,
|
|
46
|
-
|
|
47
|
-
lowestListing,
|
|
59
|
+
action,
|
|
48
60
|
onCannotPerformAction,
|
|
49
|
-
|
|
50
|
-
salesContractAddress,
|
|
51
|
-
prioritizeOwnerActions,
|
|
52
|
-
salePrice,
|
|
53
|
-
quantityDecimals,
|
|
54
|
-
quantityRemaining,
|
|
55
|
-
}: ActionButtonProps) => {
|
|
56
|
-
const { shouldShowAction, isOwnerAction } = useActionButtonLogic({
|
|
57
|
-
tokenId,
|
|
58
|
-
owned,
|
|
59
|
-
action,
|
|
60
|
-
onCannotPerformAction,
|
|
61
|
-
});
|
|
61
|
+
});
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
if (!shouldShowAction) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
67
|
+
if (isOwnerAction || prioritizeOwnerActions) {
|
|
68
|
+
return (
|
|
69
|
+
<OwnerActions
|
|
70
|
+
action={action}
|
|
71
|
+
tokenId={tokenId}
|
|
72
|
+
collectionAddress={collectionAddress}
|
|
73
|
+
chainId={chainId}
|
|
74
|
+
orderbookKind={orderbookKind}
|
|
75
|
+
highestOffer={highestOffer}
|
|
76
|
+
/>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
80
|
+
const nonOwnerProps =
|
|
81
|
+
marketplaceType === 'shop' && salesContractAddress && salePrice
|
|
82
|
+
? {
|
|
83
|
+
marketplaceType: 'shop' as const,
|
|
84
|
+
salesContractAddress,
|
|
85
|
+
salePrice,
|
|
86
|
+
action,
|
|
87
|
+
tokenId,
|
|
88
|
+
collectionAddress,
|
|
89
|
+
chainId,
|
|
90
|
+
quantityDecimals,
|
|
91
|
+
quantityRemaining,
|
|
92
|
+
unlimitedSupply,
|
|
93
|
+
}
|
|
94
|
+
: {
|
|
95
|
+
marketplaceType: 'market' as const,
|
|
96
|
+
orderbookKind,
|
|
97
|
+
lowestListing,
|
|
98
|
+
action,
|
|
99
|
+
tokenId,
|
|
100
|
+
collectionAddress,
|
|
101
|
+
chainId,
|
|
102
|
+
quantityDecimals,
|
|
103
|
+
quantityRemaining,
|
|
104
|
+
};
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
);
|
|
106
|
+
return <NonOwnerActions {...nonOwnerProps} />;
|
|
107
|
+
}
|
package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx
CHANGED
|
@@ -5,15 +5,24 @@ import { createMockWallet } from '@test/mocks/wallet';
|
|
|
5
5
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
6
6
|
import { CollectibleCardAction } from '../../../../../../types';
|
|
7
7
|
import * as walletModule from '../../../../../_internal/wallet/useWallet';
|
|
8
|
+
import * as hooksModule from '../../../../../hooks';
|
|
8
9
|
import { ActionButtonBody } from '../components/ActionButtonBody';
|
|
9
|
-
import {
|
|
10
|
+
import { useActionButtonStore } from '../store';
|
|
10
11
|
|
|
11
12
|
vi.mock('../store', () => ({
|
|
12
|
-
|
|
13
|
+
useActionButtonStore: vi.fn(() => ({
|
|
14
|
+
setPendingAction: vi.fn(),
|
|
15
|
+
})),
|
|
16
|
+
}));
|
|
17
|
+
|
|
18
|
+
vi.mock('../../../../../hooks', () => ({
|
|
19
|
+
useOpenConnectModal: vi.fn(),
|
|
13
20
|
}));
|
|
14
21
|
|
|
15
22
|
describe('ActionButtonBody', () => {
|
|
16
23
|
const mockOnClick = vi.fn();
|
|
24
|
+
const mockOpenConnectModal = vi.fn();
|
|
25
|
+
const mockSetPendingAction = vi.fn();
|
|
17
26
|
const defaultProps = {
|
|
18
27
|
label: 'Buy now' as const,
|
|
19
28
|
tokenId: '123',
|
|
@@ -29,6 +38,14 @@ describe('ActionButtonBody', () => {
|
|
|
29
38
|
isLoading: false,
|
|
30
39
|
isError: false,
|
|
31
40
|
});
|
|
41
|
+
|
|
42
|
+
vi.spyOn(hooksModule, 'useOpenConnectModal').mockReturnValue({
|
|
43
|
+
openConnectModal: mockOpenConnectModal,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
(useActionButtonStore as ReturnType<typeof vi.fn>).mockReturnValue({
|
|
47
|
+
setPendingAction: mockSetPendingAction,
|
|
48
|
+
});
|
|
32
49
|
});
|
|
33
50
|
|
|
34
51
|
it('executes onClick directly when user is connected', () => {
|
|
@@ -38,7 +55,7 @@ describe('ActionButtonBody', () => {
|
|
|
38
55
|
fireEvent.click(button);
|
|
39
56
|
|
|
40
57
|
expect(mockOnClick).toHaveBeenCalledTimes(1);
|
|
41
|
-
expect(
|
|
58
|
+
expect(mockSetPendingAction).not.toHaveBeenCalled();
|
|
42
59
|
});
|
|
43
60
|
|
|
44
61
|
it('sets pending action and opens connect modal when user is not connected', () => {
|
|
@@ -57,10 +74,11 @@ describe('ActionButtonBody', () => {
|
|
|
57
74
|
fireEvent.click(button);
|
|
58
75
|
|
|
59
76
|
expect(mockOnClick).not.toHaveBeenCalled();
|
|
60
|
-
expect(
|
|
77
|
+
expect(mockSetPendingAction).toHaveBeenCalledWith(
|
|
61
78
|
defaultProps.action,
|
|
62
79
|
defaultProps.onClick,
|
|
63
80
|
defaultProps.tokenId,
|
|
64
81
|
);
|
|
82
|
+
expect(mockOpenConnectModal).toHaveBeenCalledTimes(1);
|
|
65
83
|
});
|
|
66
84
|
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useOpenConnectModal } from '@0xsequence/connect';
|
|
4
3
|
import { Button, type IconProps } from '@0xsequence/design-system';
|
|
5
4
|
import type { ComponentType } from 'react';
|
|
6
5
|
import type { CollectibleCardAction } from '../../../../../../types';
|
|
7
6
|
import { useWallet } from '../../../../../_internal/wallet/useWallet';
|
|
8
|
-
import {
|
|
7
|
+
import { useOpenConnectModal } from '../../../../../hooks';
|
|
8
|
+
import { useActionButtonStore } from '../store';
|
|
9
9
|
|
|
10
10
|
type ActionButtonBodyProps = {
|
|
11
11
|
label: 'Buy now' | 'Sell' | 'Make an offer' | 'Create listing' | 'Transfer';
|
|
@@ -24,7 +24,8 @@ export function ActionButtonBody({
|
|
|
24
24
|
}: ActionButtonBodyProps) {
|
|
25
25
|
const { wallet } = useWallet();
|
|
26
26
|
const address = wallet?.address;
|
|
27
|
-
const {
|
|
27
|
+
const { openConnectModal } = useOpenConnectModal();
|
|
28
|
+
const { setPendingAction } = useActionButtonStore();
|
|
28
29
|
|
|
29
30
|
const handleClick = (e: React.MouseEvent) => {
|
|
30
31
|
e.preventDefault();
|
|
@@ -32,7 +33,7 @@ export function ActionButtonBody({
|
|
|
32
33
|
|
|
33
34
|
if (!address && action) {
|
|
34
35
|
setPendingAction(action, onClick, tokenId);
|
|
35
|
-
|
|
36
|
+
openConnectModal();
|
|
36
37
|
} else {
|
|
37
38
|
onClick();
|
|
38
39
|
}
|
|
@@ -15,6 +15,7 @@ type NonOwnerActionsBaseProps = {
|
|
|
15
15
|
chainId: number;
|
|
16
16
|
quantityDecimals?: number;
|
|
17
17
|
quantityRemaining?: number;
|
|
18
|
+
unlimitedSupply?: boolean;
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
type ShopNonOwnerActionsProps = NonOwnerActionsBaseProps & {
|
|
@@ -48,6 +49,7 @@ export function NonOwnerActions(props: NonOwnerActionsProps) {
|
|
|
48
49
|
chainId,
|
|
49
50
|
quantityDecimals,
|
|
50
51
|
quantityRemaining,
|
|
52
|
+
unlimitedSupply,
|
|
51
53
|
marketplaceType,
|
|
52
54
|
} = props;
|
|
53
55
|
|
|
@@ -80,6 +82,7 @@ export function NonOwnerActions(props: NonOwnerActionsProps) {
|
|
|
80
82
|
},
|
|
81
83
|
quantityDecimals: quantityDecimals ?? 0,
|
|
82
84
|
quantityRemaining: quantityRemaining ?? 0,
|
|
85
|
+
unlimitedSupply,
|
|
83
86
|
})
|
|
84
87
|
}
|
|
85
88
|
icon={SvgCartIcon}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { Address } from 'viem';
|
|
4
4
|
import { CollectibleCardAction } from '../../../../../../types';
|
|
5
5
|
import type { Order, OrderbookKind } from '../../../../../_internal';
|
|
6
6
|
import { useCreateListingModal } from '../../../../modals/CreateListingModal';
|
|
@@ -11,7 +11,7 @@ import { ActionButtonBody } from './ActionButtonBody';
|
|
|
11
11
|
type OwnerActionsProps = {
|
|
12
12
|
action: CollectibleCardAction;
|
|
13
13
|
tokenId: string;
|
|
14
|
-
collectionAddress:
|
|
14
|
+
collectionAddress: Address;
|
|
15
15
|
chainId: number;
|
|
16
16
|
orderbookKind?: OrderbookKind;
|
|
17
17
|
highestOffer?: Order;
|
|
@@ -36,7 +36,7 @@ export function OwnerActions({
|
|
|
36
36
|
tokenId={tokenId}
|
|
37
37
|
onClick={() =>
|
|
38
38
|
showCreateListingModal({
|
|
39
|
-
collectionAddress: collectionAddress as
|
|
39
|
+
collectionAddress: collectionAddress as Address,
|
|
40
40
|
chainId,
|
|
41
41
|
collectibleId: tokenId,
|
|
42
42
|
orderbookKind,
|
|
@@ -70,7 +70,7 @@ export function OwnerActions({
|
|
|
70
70
|
tokenId={tokenId}
|
|
71
71
|
onClick={() =>
|
|
72
72
|
showTransferModal({
|
|
73
|
-
collectionAddress: collectionAddress as
|
|
73
|
+
collectionAddress: collectionAddress as Address,
|
|
74
74
|
chainId,
|
|
75
75
|
collectibleId: tokenId,
|
|
76
76
|
})
|
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
import { useEffect } from 'react';
|
|
4
4
|
import { CollectibleCardAction } from '../../../../../../types';
|
|
5
5
|
import { useWallet } from '../../../../../_internal/wallet/useWallet';
|
|
6
|
-
import {
|
|
7
|
-
clearPendingAction,
|
|
8
|
-
executePendingAction,
|
|
9
|
-
usePendingAction,
|
|
10
|
-
} from '../store';
|
|
6
|
+
import { useActionButtonStore } from '../store';
|
|
11
7
|
|
|
12
8
|
type UseActionButtonLogicProps = {
|
|
13
9
|
tokenId: string;
|
|
@@ -30,7 +26,8 @@ export const useActionButtonLogic = ({
|
|
|
30
26
|
CollectibleCardAction.BUY,
|
|
31
27
|
CollectibleCardAction.OFFER,
|
|
32
28
|
];
|
|
33
|
-
const pendingAction =
|
|
29
|
+
const { pendingAction, clearPendingAction, executePendingAction } =
|
|
30
|
+
useActionButtonStore();
|
|
34
31
|
const pendingActionType = pendingAction?.type;
|
|
35
32
|
|
|
36
33
|
// Handle owner restrictions
|
|
@@ -57,6 +54,7 @@ export const useActionButtonLogic = ({
|
|
|
57
54
|
tokenId,
|
|
58
55
|
onCannotPerformAction,
|
|
59
56
|
pendingActionType,
|
|
57
|
+
clearPendingAction,
|
|
60
58
|
]);
|
|
61
59
|
|
|
62
60
|
// Execute pending action when user becomes connected
|
|
@@ -67,10 +65,17 @@ export const useActionButtonLogic = ({
|
|
|
67
65
|
pendingAction &&
|
|
68
66
|
pendingAction?.collectibleId === tokenId
|
|
69
67
|
) {
|
|
70
|
-
executePendingAction(
|
|
68
|
+
executePendingAction();
|
|
71
69
|
clearPendingAction();
|
|
72
70
|
}
|
|
73
|
-
}, [
|
|
71
|
+
}, [
|
|
72
|
+
address,
|
|
73
|
+
owned,
|
|
74
|
+
tokenId,
|
|
75
|
+
pendingAction,
|
|
76
|
+
executePendingAction,
|
|
77
|
+
clearPendingAction,
|
|
78
|
+
]);
|
|
74
79
|
|
|
75
80
|
const shouldShowAction = !address
|
|
76
81
|
? [CollectibleCardAction.BUY, CollectibleCardAction.OFFER].includes(action)
|