@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,82 +1,96 @@
|
|
|
1
|
-
|
|
2
|
-
import { type Address, formatUnits } from 'viem';
|
|
3
|
-
import type { SdkConfig } from '../../types';
|
|
4
|
-
import { type Currency, currencyKeys, getQueryClient } from '../_internal';
|
|
5
|
-
import { marketCurrenciesQueryOptions } from '../queries/marketCurrencies';
|
|
6
|
-
import { useConfig } from './useConfig';
|
|
7
|
-
|
|
8
|
-
export interface UseConvertPriceToUSDArgs {
|
|
9
|
-
chainId: number;
|
|
10
|
-
currencyAddress: Address;
|
|
11
|
-
amountRaw: string;
|
|
12
|
-
query?: {
|
|
13
|
-
enabled?: boolean;
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export type UseConvertPriceToUSDReturn = {
|
|
18
|
-
usdAmount: number;
|
|
19
|
-
usdAmountFormatted: string;
|
|
20
|
-
};
|
|
1
|
+
'use client';
|
|
21
2
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
)) as Currency[];
|
|
33
|
-
const currencyDetails = currencies.find(
|
|
34
|
-
(c: Currency) =>
|
|
35
|
-
c.contractAddress.toLowerCase() === args.currencyAddress.toLowerCase(),
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
if (!currencyDetails) {
|
|
39
|
-
throw new Error('Currency not found');
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const amountDecimal = Number(
|
|
43
|
-
formatUnits(BigInt(args.amountRaw), currencyDetails.decimals),
|
|
44
|
-
);
|
|
45
|
-
const usdAmount = amountDecimal * currencyDetails.exchangeRate;
|
|
3
|
+
import { useQuery } from '@tanstack/react-query';
|
|
4
|
+
import type { Address } from 'viem';
|
|
5
|
+
import type { Optional } from '../_internal';
|
|
6
|
+
import {
|
|
7
|
+
type ConvertPriceToUSDQueryOptions,
|
|
8
|
+
type ConvertPriceToUSDReturn,
|
|
9
|
+
convertPriceToUSDQueryOptions,
|
|
10
|
+
type FetchConvertPriceToUSDParams,
|
|
11
|
+
} from '../queries/convertPriceToUSD';
|
|
12
|
+
import { useConfig } from './useConfig';
|
|
46
13
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
export const convertPriceToUSDOptions = (
|
|
54
|
-
args: UseConvertPriceToUSDArgs,
|
|
55
|
-
config: SdkConfig,
|
|
56
|
-
) => {
|
|
57
|
-
return queryOptions({
|
|
58
|
-
...args.query,
|
|
59
|
-
queryKey: [...currencyKeys.conversion, args],
|
|
60
|
-
queryFn: () => convertPriceToUSD(args, config),
|
|
61
|
-
});
|
|
62
|
-
};
|
|
14
|
+
export type UseConvertPriceToUSDParams = Optional<
|
|
15
|
+
ConvertPriceToUSDQueryOptions,
|
|
16
|
+
'config'
|
|
17
|
+
>;
|
|
63
18
|
|
|
64
19
|
/**
|
|
65
20
|
* Hook to convert a price amount from a specific currency to USD
|
|
66
|
-
*
|
|
21
|
+
*
|
|
22
|
+
* Converts cryptocurrency amounts to their USD equivalent using current exchange rates.
|
|
23
|
+
* Fetches currency data and calculates the USD value based on the provided amount
|
|
24
|
+
* and currency address.
|
|
25
|
+
*
|
|
26
|
+
* @param params - Configuration parameters
|
|
27
|
+
* @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
|
|
28
|
+
* @param params.currencyAddress - The currency contract address to convert from
|
|
29
|
+
* @param params.amountRaw - The raw amount in smallest units (e.g., wei for ETH)
|
|
30
|
+
* @param params.query - Optional React Query configuration
|
|
31
|
+
*
|
|
32
|
+
* @returns Query result containing USD amount and formatted USD amount
|
|
33
|
+
*
|
|
67
34
|
* @example
|
|
68
|
-
*
|
|
69
|
-
*
|
|
35
|
+
* Basic ETH to USD conversion:
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const { data: conversion, isLoading } = useConvertPriceToUSD({
|
|
70
38
|
* chainId: 1,
|
|
71
|
-
* currencyAddress:
|
|
72
|
-
* amountRaw:
|
|
73
|
-
* })
|
|
39
|
+
* currencyAddress: '0x0000000000000000000000000000000000000000', // ETH
|
|
40
|
+
* amountRaw: '1000000000000000000' // 1 ETH in wei
|
|
41
|
+
* })
|
|
42
|
+
*
|
|
43
|
+
* if (data) {
|
|
44
|
+
* console.log(`$${data.usdAmountFormatted}`); // e.g., "$2000.00"
|
|
45
|
+
* console.log(data.usdAmount); // e.g., 2000
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
74
48
|
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
49
|
+
* @example
|
|
50
|
+
* ERC-20 token conversion with conditional enabling:
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const { data: conversion } = useConvertPriceToUSD({
|
|
53
|
+
* chainId: 137,
|
|
54
|
+
* currencyAddress: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC on Polygon
|
|
55
|
+
* amountRaw: '1000000', // 1 USDC (6 decimals)
|
|
56
|
+
* query: {
|
|
57
|
+
* enabled: Boolean(userHasTokens),
|
|
58
|
+
* refetchInterval: 30000 // Update price every 30 seconds
|
|
59
|
+
* }
|
|
60
|
+
* })
|
|
77
61
|
* ```
|
|
78
62
|
*/
|
|
79
|
-
export
|
|
80
|
-
const
|
|
81
|
-
|
|
63
|
+
export function useConvertPriceToUSD(params: UseConvertPriceToUSDParams) {
|
|
64
|
+
const defaultConfig = useConfig();
|
|
65
|
+
|
|
66
|
+
const { config = defaultConfig, ...rest } = params;
|
|
67
|
+
|
|
68
|
+
const queryOptions = convertPriceToUSDQueryOptions({
|
|
69
|
+
config,
|
|
70
|
+
...rest,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
return useQuery({
|
|
74
|
+
...queryOptions,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { convertPriceToUSDQueryOptions };
|
|
79
|
+
|
|
80
|
+
export type {
|
|
81
|
+
FetchConvertPriceToUSDParams,
|
|
82
|
+
ConvertPriceToUSDQueryOptions,
|
|
83
|
+
ConvertPriceToUSDReturn,
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// Legacy exports for backward compatibility
|
|
87
|
+
export type UseConvertPriceToUSDArgs = {
|
|
88
|
+
chainId: number;
|
|
89
|
+
currencyAddress: Address;
|
|
90
|
+
amountRaw: string;
|
|
91
|
+
query?: {
|
|
92
|
+
enabled?: boolean;
|
|
93
|
+
};
|
|
82
94
|
};
|
|
95
|
+
|
|
96
|
+
export type UseConvertPriceToUSDReturn = ConvertPriceToUSDReturn;
|
|
@@ -1,51 +1,137 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}: {
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import type { Address } from 'viem';
|
|
4
|
+
import { erc20Abi, formatUnits, zeroAddress } from 'viem';
|
|
5
|
+
import { useBalance, useReadContracts } from 'wagmi';
|
|
6
|
+
|
|
7
|
+
export type UseCurrencyBalanceArgs = {
|
|
9
8
|
currencyAddress: Address | undefined;
|
|
10
9
|
chainId: number | undefined;
|
|
11
10
|
userAddress: Address | undefined;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
11
|
+
query?: {
|
|
12
|
+
enabled?: boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Hook to fetch cryptocurrency balance for a user
|
|
18
|
+
*
|
|
19
|
+
* Retrieves the balance of a specific currency (native token or ERC-20)
|
|
20
|
+
* for a given user address using wagmi. Handles both native tokens (ETH, MATIC, etc.)
|
|
21
|
+
* and ERC-20 tokens with automatic decimal formatting through direct blockchain calls.
|
|
22
|
+
*
|
|
23
|
+
* @param args - Configuration parameters
|
|
24
|
+
* @param args.currencyAddress - The currency contract address (use zero address for native tokens)
|
|
25
|
+
* @param args.chainId - The chain ID to query on
|
|
26
|
+
* @param args.userAddress - The user address to check balance for
|
|
27
|
+
* @param args.query - Optional wagmi query configuration
|
|
28
|
+
*
|
|
29
|
+
* @returns Wagmi query result containing raw and formatted balance values
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* Native token balance (ETH):
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const { data: ethBalance, isLoading } = useCurrencyBalance({
|
|
35
|
+
* currencyAddress: '0x0000000000000000000000000000000000000000', // Zero address for ETH
|
|
36
|
+
* chainId: 1,
|
|
37
|
+
* userAddress: '0x1234...'
|
|
38
|
+
* })
|
|
39
|
+
*
|
|
40
|
+
* if (data) {
|
|
41
|
+
* console.log(`ETH Balance: ${data.formatted} ETH`); // e.g., "1.5 ETH"
|
|
42
|
+
* console.log(`Raw balance: ${data.value.toString()}`); // e.g., "1500000000000000000"
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ERC-20 token balance (USDC):
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const { data: usdcBalance } = useCurrencyBalance({
|
|
50
|
+
* currencyAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
|
|
51
|
+
* chainId: 1,
|
|
52
|
+
* userAddress: userAddress,
|
|
53
|
+
* query: {
|
|
54
|
+
* enabled: Boolean(userAddress), // Only fetch when user is connected
|
|
55
|
+
* refetchInterval: 30000 // Update every 30 seconds
|
|
56
|
+
* }
|
|
57
|
+
* })
|
|
58
|
+
*
|
|
59
|
+
* if (data) {
|
|
60
|
+
* console.log(`USDC Balance: $${data.formatted}`); // e.g., "$1000.50"
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export function useCurrencyBalance(args: UseCurrencyBalanceArgs) {
|
|
65
|
+
const { currencyAddress, chainId, userAddress, query } = args;
|
|
66
|
+
|
|
67
|
+
// Check if all required parameters are present
|
|
68
|
+
const hasAllParams = Boolean(currencyAddress && chainId && userAddress);
|
|
69
|
+
const isNativeToken = currencyAddress === zeroAddress;
|
|
70
|
+
|
|
71
|
+
// For native token (zero address), use useBalance
|
|
72
|
+
const nativeBalance = useBalance({
|
|
73
|
+
address: userAddress,
|
|
74
|
+
chainId,
|
|
75
|
+
query: {
|
|
76
|
+
...query,
|
|
77
|
+
enabled: hasAllParams && isNativeToken && (query?.enabled ?? true),
|
|
78
|
+
},
|
|
50
79
|
});
|
|
80
|
+
|
|
81
|
+
// For ERC-20 tokens, use useReadContracts to get both balance and decimals
|
|
82
|
+
const erc20Balance = useReadContracts({
|
|
83
|
+
contracts:
|
|
84
|
+
hasAllParams && !isNativeToken && currencyAddress && userAddress
|
|
85
|
+
? [
|
|
86
|
+
{
|
|
87
|
+
address: currencyAddress,
|
|
88
|
+
abi: erc20Abi,
|
|
89
|
+
functionName: 'balanceOf',
|
|
90
|
+
args: [userAddress],
|
|
91
|
+
chainId,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
address: currencyAddress,
|
|
95
|
+
abi: erc20Abi,
|
|
96
|
+
functionName: 'decimals',
|
|
97
|
+
chainId,
|
|
98
|
+
},
|
|
99
|
+
]
|
|
100
|
+
: [],
|
|
101
|
+
query: {
|
|
102
|
+
...query,
|
|
103
|
+
enabled: hasAllParams && !isNativeToken && (query?.enabled ?? true),
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Return native balance result if zero address
|
|
108
|
+
if (isNativeToken) {
|
|
109
|
+
return {
|
|
110
|
+
...nativeBalance,
|
|
111
|
+
data: nativeBalance.data
|
|
112
|
+
? {
|
|
113
|
+
value: nativeBalance.data.value,
|
|
114
|
+
formatted: nativeBalance.data.formatted,
|
|
115
|
+
}
|
|
116
|
+
: undefined,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Return ERC-20 balance result with formatted data
|
|
121
|
+
const [balanceResult, decimalsResult] = erc20Balance.data || [];
|
|
122
|
+
const balance = balanceResult?.result;
|
|
123
|
+
const decimals = decimalsResult?.result;
|
|
124
|
+
|
|
125
|
+
const formattedData =
|
|
126
|
+
balance !== undefined && decimals !== undefined
|
|
127
|
+
? {
|
|
128
|
+
value: balance,
|
|
129
|
+
formatted: formatUnits(balance, decimals),
|
|
130
|
+
}
|
|
131
|
+
: undefined;
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
...erc20Balance,
|
|
135
|
+
data: formattedData,
|
|
136
|
+
};
|
|
51
137
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Address } from 'viem';
|
|
2
2
|
import { useReadContract } from 'wagmi';
|
|
3
3
|
import { ERC721_SALE_ABI } from '../../../../sdk/src';
|
|
4
|
-
import {
|
|
4
|
+
import { useTokenSupplies } from './useTokenSupplies';
|
|
5
5
|
|
|
6
6
|
interface UseERC721SaleMintedTokensProps {
|
|
7
7
|
chainId: number;
|
|
@@ -34,9 +34,8 @@ export function useERC721SaleMintedTokens({
|
|
|
34
34
|
|
|
35
35
|
// Get token supplies for all potential tokens in the sale
|
|
36
36
|
const { data: tokenSupplies, isLoading: tokenSuppliesLoading } =
|
|
37
|
-
|
|
37
|
+
useTokenSupplies({
|
|
38
38
|
chainId,
|
|
39
|
-
tokenIds,
|
|
40
39
|
collectionAddress: contractAddress as Address,
|
|
41
40
|
});
|
|
42
41
|
|
|
@@ -44,8 +43,12 @@ export function useERC721SaleMintedTokens({
|
|
|
44
43
|
|
|
45
44
|
// Count how many tokens have been minted/owned
|
|
46
45
|
const ownedCount = tokenIds.reduce((count, tokenId) => {
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
let supply: { tokenID: string; supply: string } | undefined;
|
|
47
|
+
|
|
48
|
+
if (tokenSupplies) {
|
|
49
|
+
supply = tokenSupplies.tokenIDs.find((s) => s.tokenID === tokenId);
|
|
50
|
+
}
|
|
51
|
+
|
|
49
52
|
// If supply exists and is greater than 0, token exists and is owned
|
|
50
53
|
const hasOwner = supply ? BigInt(supply.supply) > 0n : false;
|
|
51
54
|
return count + (hasOwner ? 1 : 0);
|
|
@@ -1,126 +1,152 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
1
3
|
import type { PropertyFilter } from '@0xsequence/metadata';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { compareAddress } from '../../utils';
|
|
4
|
+
import { useQuery } from '@tanstack/react-query';
|
|
5
|
+
import type { Optional } from '../_internal';
|
|
5
6
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} from '../
|
|
10
|
-
import { marketplaceConfigOptions } from '../queries/marketplaceConfig';
|
|
7
|
+
type FetchFiltersParams,
|
|
8
|
+
type FiltersQueryOptions,
|
|
9
|
+
filtersQueryOptions,
|
|
10
|
+
} from '../queries/filters';
|
|
11
11
|
import { useConfig } from './useConfig';
|
|
12
12
|
|
|
13
|
-
export type
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
13
|
+
export type UseFiltersParams = Optional<FiltersQueryOptions, 'config'>;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Hook to fetch metadata filters for a collection
|
|
17
|
+
*
|
|
18
|
+
* Retrieves property filters for a collection from the metadata service,
|
|
19
|
+
* with support for marketplace-specific filter configuration including
|
|
20
|
+
* exclusion rules and custom ordering.
|
|
21
|
+
*
|
|
22
|
+
* @param params - Configuration parameters
|
|
23
|
+
* @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
|
|
24
|
+
* @param params.collectionAddress - The collection contract address to fetch filters for
|
|
25
|
+
* @param params.showAllFilters - Whether to show all filters or apply marketplace filtering
|
|
26
|
+
* @param params.excludePropertyValues - Whether to exclude property values from the response
|
|
27
|
+
* @param params.query - Optional React Query configuration
|
|
28
|
+
*
|
|
29
|
+
* @returns Query result containing property filters for the collection
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* Basic usage:
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const { data: filters, isLoading } = useFilters({
|
|
35
|
+
* chainId: 137,
|
|
36
|
+
* collectionAddress: '0x1234...'
|
|
37
|
+
* })
|
|
38
|
+
*
|
|
39
|
+
* if (data) {
|
|
40
|
+
* console.log(`Found ${data.length} filters`);
|
|
41
|
+
* data.forEach(filter => {
|
|
42
|
+
* console.log(`${filter.name}: ${filter.values?.join(', ')}`);
|
|
43
|
+
* });
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* With marketplace filtering disabled:
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const { data: allFilters } = useFilters({
|
|
51
|
+
* chainId: 1,
|
|
52
|
+
* collectionAddress: '0x5678...',
|
|
53
|
+
* showAllFilters: true, // Bypass marketplace filter rules
|
|
54
|
+
* query: {
|
|
55
|
+
* enabled: Boolean(selectedCollection),
|
|
56
|
+
* staleTime: 300000 // Cache for 5 minutes
|
|
57
|
+
* }
|
|
58
|
+
* })
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* Exclude property values for faster loading:
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const { data: filterNames } = useFilters({
|
|
65
|
+
* chainId: 137,
|
|
66
|
+
* collectionAddress: collectionAddress,
|
|
67
|
+
* excludePropertyValues: true, // Only get filter names, not values
|
|
68
|
+
* query: {
|
|
69
|
+
* enabled: Boolean(collectionAddress)
|
|
70
|
+
* }
|
|
71
|
+
* })
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export function useFilters(params: UseFiltersParams) {
|
|
75
|
+
const defaultConfig = useConfig();
|
|
76
|
+
|
|
77
|
+
const { config = defaultConfig, ...rest } = params;
|
|
78
|
+
|
|
79
|
+
const queryOptions = filtersQueryOptions({
|
|
80
|
+
config,
|
|
81
|
+
...rest,
|
|
68
82
|
});
|
|
69
83
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const exclusionRule = exclusions.find((rule) => rule.key === filter.name);
|
|
73
|
-
|
|
74
|
-
if (!exclusionRule) {
|
|
75
|
-
acc.push(filter);
|
|
76
|
-
return acc;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (exclusionRule.condition === FilterCondition.ENTIRE_KEY) {
|
|
80
|
-
return acc;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (
|
|
84
|
-
exclusionRule.condition === FilterCondition.SPECIFIC_VALUE &&
|
|
85
|
-
exclusionRule.value
|
|
86
|
-
) {
|
|
87
|
-
const filteredValues =
|
|
88
|
-
filter.values?.filter((value) => value !== exclusionRule.value) || [];
|
|
89
|
-
if (filteredValues.length > 0) {
|
|
90
|
-
acc.push({ ...filter, values: filteredValues });
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return acc;
|
|
95
|
-
},
|
|
96
|
-
[],
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
return filteredResults;
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
export const filtersOptions = (args: UseFiltersArgs, config: SdkConfig) => {
|
|
103
|
-
return queryOptions({
|
|
104
|
-
...args.query,
|
|
105
|
-
queryKey: [...collectableKeys.filter, args, config],
|
|
106
|
-
queryFn: () => fetchFilters(args, config),
|
|
84
|
+
return useQuery({
|
|
85
|
+
...queryOptions,
|
|
107
86
|
});
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Hook to progressively load collection filters
|
|
91
|
+
*
|
|
92
|
+
* First loads filter names only for fast initial display, then loads full filter
|
|
93
|
+
* data with values. Uses placeholder data to provide immediate feedback while
|
|
94
|
+
* full data loads in the background.
|
|
95
|
+
*
|
|
96
|
+
* @param params - Configuration parameters (same as useFilters)
|
|
97
|
+
*
|
|
98
|
+
* @returns Query result with additional loading states
|
|
99
|
+
* @returns result.isLoadingNames - Whether filter names are still loading
|
|
100
|
+
* @returns result.isFetchingValues - Whether filter values are being fetched
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* Progressive filter loading:
|
|
104
|
+
* ```typescript
|
|
105
|
+
* const {
|
|
106
|
+
* data: filters,
|
|
107
|
+
* isLoadingNames,
|
|
108
|
+
* isFetchingValues,
|
|
109
|
+
* isLoading
|
|
110
|
+
* } = useFiltersProgressive({
|
|
111
|
+
* chainId: 137,
|
|
112
|
+
* collectionAddress: '0x1234...'
|
|
113
|
+
* })
|
|
114
|
+
*
|
|
115
|
+
* if (isLoadingNames) {
|
|
116
|
+
* return <div>Loading filters...</div>;
|
|
117
|
+
* }
|
|
118
|
+
*
|
|
119
|
+
* return (
|
|
120
|
+
* <div>
|
|
121
|
+
* {filters?.map(filter => (
|
|
122
|
+
* <FilterComponent
|
|
123
|
+
* key={filter.name}
|
|
124
|
+
* filter={filter}
|
|
125
|
+
* isLoadingValues={isFetchingValues}
|
|
126
|
+
* />
|
|
127
|
+
* ))}
|
|
128
|
+
* </div>
|
|
129
|
+
* );
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
export function useFiltersProgressive(params: UseFiltersParams) {
|
|
133
|
+
const defaultConfig = useConfig();
|
|
134
|
+
|
|
135
|
+
const { config = defaultConfig, ...rest } = params;
|
|
117
136
|
|
|
118
137
|
const namesQuery = useQuery(
|
|
119
|
-
|
|
138
|
+
filtersQueryOptions({
|
|
139
|
+
config,
|
|
140
|
+
...rest,
|
|
141
|
+
excludePropertyValues: true,
|
|
142
|
+
}),
|
|
120
143
|
);
|
|
121
144
|
|
|
122
145
|
const fullQuery = useQuery({
|
|
123
|
-
...
|
|
146
|
+
...filtersQueryOptions({
|
|
147
|
+
config,
|
|
148
|
+
...rest,
|
|
149
|
+
}),
|
|
124
150
|
placeholderData: namesQuery.data,
|
|
125
151
|
});
|
|
126
152
|
|
|
@@ -132,4 +158,21 @@ export const useFiltersProgressive = (args: UseFiltersArgs) => {
|
|
|
132
158
|
isFetchingValues,
|
|
133
159
|
isLoadingNames,
|
|
134
160
|
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export { filtersQueryOptions };
|
|
164
|
+
|
|
165
|
+
export type { FetchFiltersParams, FiltersQueryOptions };
|
|
166
|
+
|
|
167
|
+
// Legacy exports for backward compatibility
|
|
168
|
+
export type UseFiltersArgs = {
|
|
169
|
+
chainId: number;
|
|
170
|
+
collectionAddress: string;
|
|
171
|
+
showAllFilters?: boolean;
|
|
172
|
+
excludePropertyValues?: boolean;
|
|
173
|
+
query?: {
|
|
174
|
+
enabled?: boolean;
|
|
175
|
+
};
|
|
135
176
|
};
|
|
177
|
+
|
|
178
|
+
export type UseFilterReturn = PropertyFilter[];
|