diff --git a/src/shared/claim-button-erc20.tsx b/src/shared/claim-button-erc20.tsx index 3305423..20d16a8 100644 --- a/src/shared/claim-button-erc20.tsx +++ b/src/shared/claim-button-erc20.tsx @@ -17,6 +17,7 @@ import { useAddress, useClaimConditions, useClaimIneligibilityReasons, + useTokenSupply, Web3Button, } from "@thirdweb-dev/react"; import type { TokenDrop } from "@thirdweb-dev/sdk"; @@ -45,17 +46,35 @@ export const ERC20ClaimButton: React.FC = ({ const claimConditions = useClaimConditions(contract); const activeClaimCondition = useActiveClaimCondition(contract); + const claimIneligibilityReasons = useClaimIneligibilityReasons(contract, { quantity: debouncedQuantity, walletAddress: address || "", }); - const numberTotal = useMemo(() => { - return activeClaimCondition.data?.maxQuantity; - }, [activeClaimCondition.data?.maxQuantity]); + + const claimedSupply = useTokenSupply(contract); + + const totalAvailableSupply = useMemo(() => { + try { + return BigNumber.from(activeClaimCondition.data?.availableSupply || 0); + } catch { + return BigNumber.from(1_000_000_000); + } + }, [activeClaimCondition.data?.availableSupply]); const numberClaimed = useMemo(() => { - return activeClaimCondition.data?.currentMintSupply; - }, [activeClaimCondition.data]); + return BigNumber.from(claimedSupply.data?.value || 0).toString(); + }, [claimedSupply]); + + const numberTotal = useMemo(() => { + const n = totalAvailableSupply.add( + BigNumber.from(claimedSupply.data?.value || 0), + ); + if (n.gte(1_000_000_000)) { + return ""; + } + return n.toString(); + }, [totalAvailableSupply, claimedSupply]); const priceToMint = useMemo(() => { const bnPrice = BigNumber.from( @@ -76,10 +95,10 @@ export const ERC20ClaimButton: React.FC = ({ let bnMaxClaimable; try { bnMaxClaimable = BigNumber.from( - parseFloat(activeClaimCondition.data?.maxQuantity || "0") || 0, + activeClaimCondition.data?.maxQuantity || 0, ); } catch (e) { - bnMaxClaimable = BigNumber.from(1_000_000_000_000); + bnMaxClaimable = BigNumber.from(1_000_000_000); } let perTransactionClaimable; @@ -88,7 +107,7 @@ export const ERC20ClaimButton: React.FC = ({ activeClaimCondition.data?.quantityLimitPerTransaction || 0, ); } catch (e) { - perTransactionClaimable = BigNumber.from(1_000_000_000_000); + perTransactionClaimable = BigNumber.from(1_000_000_000); } if (perTransactionClaimable.lte(bnMaxClaimable)) { @@ -102,7 +121,7 @@ export const ERC20ClaimButton: React.FC = ({ if (snapshotClaimable) { if (snapshotClaimable === "0") { // allowed unlimited for the snapshot - bnMaxClaimable = BigNumber.from(1_000_000_000_000); + bnMaxClaimable = BigNumber.from(1_000_000_000); } else { try { bnMaxClaimable = BigNumber.from(snapshotClaimable); @@ -112,16 +131,23 @@ export const ERC20ClaimButton: React.FC = ({ } } - if (bnMaxClaimable.gte(1_000_000_000_000)) { - return 1_000_000_000_000; + let max; + if (totalAvailableSupply.lt(bnMaxClaimable)) { + max = totalAvailableSupply; + } else { + max = bnMaxClaimable; } - return bnMaxClaimable.toNumber(); + if (max.gte(1_000_000_000)) { + return 1_000_000_000; + } + return max.toNumber(); }, [ activeClaimCondition.data?.maxQuantity, activeClaimCondition.data?.quantityLimitPerTransaction, activeClaimCondition.data?.snapshot, address, + totalAvailableSupply, ]); const isSoldOut = useMemo(() => { @@ -292,7 +318,7 @@ export const ERC20ClaimButton: React.FC = ({ {isLoading ? "00" : numberClaimed} {" "} - /{" "} + {numberTotal !== "" && "/ "} {isLoading ? "00" : numberTotal} {" "} diff --git a/yarn.lock b/yarn.lock index fdd4451..5d02f9c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1835,9 +1835,9 @@ bn.js "^5.2.0" "@metaplex-foundation/mpl-candy-machine@^4.4.1": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-4.7.0.tgz#5fac140167dcabb2458dd109fc3a7d041ebe3293" - integrity sha512-5L2HkRHd+ojV4p9REfjyUIQh2HtLFntsGCCOmy6K3pICHGQ/URt1oUwMW/stpwL4C6oEaY1Z8BjcIdDd4LjicA== + version "4.7.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-4.7.1.tgz#ecf6ebbe96245084c9a186761ecc51c62ce1206f" + integrity sha512-tBNRAfBE/rYy9pe2aJD4gTFw+pgQ11o3AJjoYGB4+05ow0VjJMSt6kQGzHm2LRPgdLY4diKAq8qHvgsbV5ikNQ== dependencies: "@metaplex-foundation/beet" "^0.4.0" "@metaplex-foundation/beet-solana" "^0.3.0" @@ -2722,9 +2722,9 @@ start-server-and-test "^1.14.0" "@solana/wallet-adapter-base@^0.9.2": - version "0.9.17" - resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.17.tgz#b388fea0ec6da40e23342068a4cfa9be65dc8f63" - integrity sha512-YEkO04QndfRXb6psznMuRsw2YBHqVGxmuJgQskCHp2DAkHWPDNbKlv+Q4mOD2gfkUNHUMP8sTnwORhsIR3fQjQ== + version "0.9.18" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.18.tgz#9365304a76977b4446a1167b240d588f2c5448d5" + integrity sha512-5HQFytLmb64j1Nzc6dwddZx+IUePN/PYqVMyf/ok7fN3z8Vw3EIFS8b+RFfBpj4HWbc2kqv5fpnLlaAH7q67pA== dependencies: eventemitter3 "^4.0.0" @@ -2752,9 +2752,9 @@ tweetnacl "^1.0.3" "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.35.1", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.47.3", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.56.2": - version "1.63.1" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.63.1.tgz#88a19a17f5f4aada73ad70a94044c1067cab2b4d" - integrity sha512-wgEdGVK5FTS2zENxbcGSvKpGZ0jDS6BUdGu8Gn6ns0CzgJkK83u4ip3THSnBPEQ5i/jrqukg998BwV1H67+qiQ== + version "1.64.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.64.0.tgz#b7f5a976976039a0161242e94d6e1224ab5d30f9" + integrity sha512-AcFaoy48GxSmzBryVwB88C/UPJd/UQa+nFrO/uPc8ww6RCjanZY2vEZxdfTZub+q1NMUckwXpPwF32jJLe7SPA== dependencies: "@babel/runtime" "^7.12.5" "@noble/ed25519" "^1.7.0" @@ -2924,9 +2924,9 @@ integrity sha512-PiQjdRcAUBlu3poc4g6dN9KvjTgYsA1Vi+B/IgryptCgcJeMY4cldMabKCgPaCg9dPVpUq4O+SOM00P6mBNvGw== "@thirdweb-dev/react@^3.3.0-nightly-df74340": - version "3.3.0-nightly-df74340" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/react/-/react-3.3.0-nightly-df74340.tgz#608f9b56b831760a3a50a9e922631e76736c5a9a" - integrity sha512-Pep26ox3jiJ/Ii4v7IDP1Ij6Ux8a5E3ckoJ2mi1VkMJSACqEMZY88Cpx97FZUodyjIOFfQUfMJ8uSYWEiVi15A== + version "3.3.0" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/react/-/react-3.3.0.tgz#6d4aefb40dd1450c79614d2bb8d149ff9f06ef2a" + integrity sha512-Px/G9Gn29R9FIQcZWeg1yhINnGGqPZ0C9fZo1qQ5YCIIl8MHMDBmYyHy+UOg5x++OkqCA69oWF3qdCS3cy2/cg== dependencies: "@emotion/react" "^11.10.0" "@emotion/styled" "^11.10.0" @@ -2948,9 +2948,9 @@ wagmi "^0.2.28" "@thirdweb-dev/sdk@^3.3.0-nightly-df74340": - version "3.3.0-nightly-df74340" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/sdk/-/sdk-3.3.0-nightly-df74340.tgz#e003ad21e29ca4dd62bf5cf81757a6c1a5779fb9" - integrity sha512-ZRoYLx6v2Ao2Mowm5c9P6uRkgzVZZskUSvuRz5Ec4DegZIjA5Olwe3y/j5FyGikej6iHoJeUEIg5myZ3UZ6NTw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/sdk/-/sdk-3.3.0.tgz#91fb6196760611a147e12a5520278139132d7420" + integrity sha512-rVrcrLoCpQFwg4jh6/YN+S2eeplWoCZO3u/W4scVPgqrdBm8HIL8nWqbeVi/lY7gPB+9SHv6854gPvsOqPWoAw== dependencies: "@metaplex-foundation/js" "^0.15.0" "@metaplex-foundation/mpl-token-metadata" "^2.2.2" @@ -2958,7 +2958,7 @@ "@solana/spl-token" "^0.2.0" "@solana/web3.js" "^1.50.1" "@thirdweb-dev/contracts-js" "^1.1.9" - "@thirdweb-dev/storage" "^1.0.4" + "@thirdweb-dev/storage" "^1.0.5" bn.js "^5.2.1" bs58 "^5.0.0" cbor-x "^1.4.1" @@ -2981,6 +2981,15 @@ form-data "^4.0.0" uuid "^9.0.0" +"@thirdweb-dev/storage@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/storage/-/storage-1.0.5.tgz#fb44d1f748e14db1c4661e2264f0541eaac3976f" + integrity sha512-9pRp97nGiAN78carYHmLmomB9oPkXUraA6oU+pzzygSr5kOtoeIIPILGZW2XK8rPA8w0y4LiThFOaa0dUyyVkQ== + dependencies: + cross-fetch "^3.1.5" + form-data "^4.0.0" + uuid "^9.0.0" + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -3559,9 +3568,9 @@ algo-msgpack-with-bigint@^2.1.1: integrity sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ== algosdk@^1.13.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/algosdk/-/algosdk-1.21.0.tgz#2e11fe5eb719ed932659c1472baf344bf4bfffbf" - integrity sha512-pgHzEExFn8hjcDphQYo+0Pi6TLWZOyXPcxjisldd6ZaaF0cNsB6C97n66OXi0gtL3mvMIgD53SLBfzy1u9YM+g== + version "1.22.0" + resolved "https://registry.yarnpkg.com/algosdk/-/algosdk-1.22.0.tgz#7d38232883a4de3bb9403fb9592cdaf0785c8b35" + integrity sha512-oj2G1ucLyqfTAPM9iIWiSfU0Jmwx1gaafqlC2RaWcwHx86cwnFTwEf/haFQ9yoirkIozVlZYTYtv+Ltkj3il8w== dependencies: algo-msgpack-with-bigint "^2.1.1" buffer "^6.0.2" @@ -4619,10 +4628,10 @@ csv-generate@^4.2.0: resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-4.2.0.tgz#06e23634415c1d5a7cb111102bbea868b0857e6f" integrity sha512-zlIESlGQaYqIhNYwBN2pj5KXNMYbAXZYMOgNoVSoYV8MQyGZwcNWX+kx5LHxocp+zQDqzSgeKh+e+AZs+nCq4Q== -csv-parse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.3.0.tgz#85cc02fc9d1c89bd1b02e69069c960f8b8064322" - integrity sha512-UXJCGwvJ2fep39purtAn27OUYmxB1JQto+zhZ4QlJpzsirtSFbzLvip1aIgziqNdZp/TptvsKEV5BZSxe10/DQ== +csv-parse@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.3.1.tgz#78b028eb2d2a3e16e62ee8abe710ff7a0b1f8b3b" + integrity sha512-R4Hv6eGJNzgcKdThZ6XORbSQ873HVcNke74QIq+LbwpT90LaZ8Xzl7KKiuIP16xq/P7ofzRt0h7S0xm+fVScsw== csv-stringify@^6.2.0: version "6.2.0" @@ -4630,12 +4639,12 @@ csv-stringify@^6.2.0: integrity sha512-dcUbQLRTTDcgQxgEU8V9IctkaCwHZjZfzUZ5ZB3RY8Y+pXtdtl5iVQHfGzANytFFkRKanYzBXrkfpNdGR7eviA== csv@^6.0.5: - version "6.2.0" - resolved "https://registry.yarnpkg.com/csv/-/csv-6.2.0.tgz#edab9979067fe9bb4c6a4381aaebba96ef5b3017" - integrity sha512-yT7dkCsJLJ36NUW0d0ei7parOcUCx/QVkK77puwA/rF4bMciTB5Kf+wuegL+7zh8s6revFM+BFQ2h+U2k4jgBQ== + version "6.2.1" + resolved "https://registry.yarnpkg.com/csv/-/csv-6.2.1.tgz#2f26b81b410f9464a98e942f249da16cd9c1eea2" + integrity sha512-qTEPklcIZkJGaB/j6/2qNXZbKgWSXPVMyRnZvRcb1F7MGyvLqJexlZlbJ3NQkgmUoAeScZhsRHjlZEgImBfCYQ== dependencies: csv-generate "^4.2.0" - csv-parse "^5.3.0" + csv-parse "^5.3.1" csv-stringify "^6.2.0" stream-transform "^3.2.0" @@ -6585,9 +6594,9 @@ jayson@^3.4.4: ws "^7.4.5" joi@^17.4.0: - version "17.6.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.2.tgz#00ac55ce6495596545cce45309f38738cfbd7cd3" - integrity sha512-+gqqdh1xc1wb+Lor0J9toqgeReyDOCqOdG8QSdRcEvwrcRiFQZneUCGKjFjuyBWUb3uaFOgY56yMaZ5FIc+H4w== + version "17.6.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.3.tgz#b8e9e143f0188884563e6de50f8b23ddcd3cb2f5" + integrity sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -8062,7 +8071,14 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@^7.3.2: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -9273,9 +9289,9 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.2.tgz#eb0f535eb309811b60276a9cc8c02af4355db420" - integrity sha512-VSdf2/K3FqAetooKQv45Hcu6sA00aDgWZeGcG6V9IYJnVLTnb6988Tie79K5nx2vK7cEpf+yW8Oy+7iPAbdiHA== + version "2.1.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.3.tgz#9b3a4c8aff9821b696275c79a8bee8399d945207" + integrity sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg== yargs-parser@^13.1.2: version "13.1.2"