Skip to content

Commit 55edd4c

Browse files
committed
[Dashboard] Feature: Updated Mintable Modules (#5404)
https://linear.app/thirdweb/project/[modular-contracts]-modules-ui-c7a2be28299d/overview <!-- start pr-codex --> ## PR-Codex overview This PR focuses on enhancing the `Mintable` functionality in the dashboard and improving the handling of URIs in the `MintableERC721` and `MintableERC1155` modules. It also refines role management for minting processes. ### Detailed summary - Changed the condition in `module-instance.tsx` to check for "Mintable" instead of "Mintable-ignore". - Updated `mintWithRole.ts` in both `MintableERC721` and `MintableERC1155` to conditionally process `nfts` and set `baseURI`. - Simplified import statements in `Mintable.tsx`. - Modified `hasMinterRole` and `grantRoleTx` to use a more concise syntax for role checking and granting in `Mintable.tsx`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` <!-- end pr-codex -->
1 parent e0eea33 commit 55edd4c

File tree

4 files changed

+25
-22
lines changed

4 files changed

+25
-22
lines changed

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/Mintable.tsx

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,9 @@ import { useTxNotifications } from "hooks/useTxNotifications";
2727
import { CircleAlertIcon } from "lucide-react";
2828
import { useCallback } from "react";
2929
import { useForm } from "react-hook-form";
30-
import {
31-
type PreparedTransaction,
32-
prepareContractCall,
33-
sendAndConfirmTransaction,
34-
} from "thirdweb";
30+
import { type PreparedTransaction, sendAndConfirmTransaction } from "thirdweb";
3531
import { MintableERC721, MintableERC1155 } from "thirdweb/modules";
32+
import { grantRoles, hasAllRoles } from "thirdweb/modules";
3633
import { useReadContract } from "thirdweb/react";
3734
import type { NFTMetadataInputLimited } from "types/modified-types";
3835
import { parseAttributes } from "utils/parseAttributes";
@@ -79,10 +76,10 @@ function MintableModule(props: ModuleInstanceProps) {
7976
contract: contract,
8077
},
8178
);
82-
const hasMinterRole = useReadContract({
79+
const hasMinterRole = useReadContract(hasAllRoles, {
8380
contract: contract,
84-
method: "function hasAllRoles(address user, uint256 roles) returns (bool)",
85-
params: [ownerAccount?.address || "", MINTER_ROLE],
81+
user: ownerAccount?.address || "",
82+
roles: MINTER_ROLE,
8683
});
8784

8885
const isBatchMetadataInstalled = !!props.allModuleContractInfo.find(
@@ -97,10 +94,10 @@ function MintableModule(props: ModuleInstanceProps) {
9794
}
9895

9996
if (!hasMinterRole.data) {
100-
const grantRoleTx = prepareContractCall({
97+
const grantRoleTx = grantRoles({
10198
contract,
102-
method: "function grantRole(address user, uint256 role) public",
103-
params: [ownerAccount.address || "", MINTER_ROLE],
99+
user: ownerAccount.address,
100+
roles: MINTER_ROLE,
104101
});
105102

106103
await sendAndConfirmTransaction({

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/module-instance.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export function ModuleInstance(props: ModuleInstanceProps) {
3131
return <TransferableModule {...props} />;
3232
}
3333

34-
if (props.contractInfo.name.includes("Mintable-ignore")) {
34+
if (props.contractInfo.name.includes("Mintable")) {
3535
return <MintableModule {...props} />;
3636
}
3737

packages/thirdweb/src/extensions/modules/MintableERC1155/mintWithRole.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,14 @@ export function mintWithRole(
4545
return generatedMint({
4646
contract: options.contract,
4747
asyncParams: async () => {
48-
const batchOfUris = await uploadOrExtractURIs(
49-
[options.nft],
50-
options.contract.client,
51-
);
52-
const baseURI = getBaseUriFromBatch(batchOfUris);
48+
let baseURI = "";
49+
if (options.nft) {
50+
const batchOfUris = await uploadOrExtractURIs(
51+
[options.nft],
52+
options.contract.client,
53+
);
54+
baseURI = getBaseUriFromBatch(batchOfUris);
55+
}
5356

5457
const tokenId = options.tokenId ?? maxUint256;
5558
return {

packages/thirdweb/src/extensions/modules/MintableERC721/mintWithRole.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,14 @@ export function mintWithRole(options: BaseTransactionOptions<NFTMintParams>) {
4141
return generatedMint({
4242
contract: options.contract,
4343
asyncParams: async () => {
44-
const batchOfUris = await uploadOrExtractURIs(
45-
options.nfts,
46-
options.contract.client,
47-
);
48-
const baseURI = getBaseUriFromBatch(batchOfUris);
44+
let baseURI = "";
45+
if (options.nfts?.[0] !== "") {
46+
const batchOfUris = await uploadOrExtractURIs(
47+
options.nfts,
48+
options.contract.client,
49+
);
50+
baseURI = getBaseUriFromBatch(batchOfUris);
51+
}
4952

5053
return {
5154
to: getAddress(options.to),

0 commit comments

Comments
 (0)