diff --git a/.env.example b/.env.example index b941cb0..f0f762f 100644 --- a/.env.example +++ b/.env.example @@ -1,13 +1,16 @@ -APP_VERSION=0.4.8 +APP_VERSION=0.4.9 NEXT_PUBLIC_PINATA_ENDPOINT_URL=https://api.pinata.cloud/pinning/pinFileToIPFS -NEXT_PUBLIC_SG721_CODE_ID=1702 -NEXT_PUBLIC_VENDING_MINTER_CODE_ID=1701 -NEXT_PUBLIC_VENDING_FACTORY_ADDRESS="stars1xz4d6wzxqn3udgsm5qnr78y032xng4r2ycv7aw6mjtsuw59s2n9s93ec0v" -NEXT_PUBLIC_BASE_FACTORY_ADDRESS="stars1c6juqgd7cm80afpmuszun66rl9zdc4kgfht8fk34tfq3zk87l78sdxngzv" +NEXT_PUBLIC_SG721_CODE_ID=1911 +NEXT_PUBLIC_SG721_UPDATABLE_CODE_ID=1912 +NEXT_PUBLIC_VENDING_MINTER_CODE_ID=1909 +NEXT_PUBLIC_BASE_MINTER_CODE_ID=1910 +NEXT_PUBLIC_VENDING_FACTORY_ADDRESS="stars1ynec878x5phexq3hj4zdgvp6r5ayfmxks38kvunwyjugqn3hqeqq3cgtuw" +NEXT_PUBLIC_VENDING_FACTORY_UPDATABLE_ADDRESS="stars1fnfywcnzzwledr93at65qm8gf953tjxgh6u2u4r8n9vsdv7u75eqe7ecn3" +NEXT_PUBLIC_BASE_FACTORY_ADDRESS="stars1sr37phnuahzsc6tpner9875g3fy69khlgvvyzgs2vjtuupw6lffqd7lark" +NEXT_PUBLIC_BASE_FACTORY_UPDATABLE_ADDRESS="stars13pw8r33dsnghlxfj2upaywf38z2fc6npuw9maq9e5cpet4v285sscgzjp2" NEXT_PUBLIC_SG721_NAME_ADDRESS="stars1fx74nkqkw2748av8j7ew7r3xt9cgjqduwn8m0ur5lhe49uhlsasszc5fhr" -NEXT_PUBLIC_BASE_MINTER_CODE_ID=613 -NEXT_PUBLIC_WHITELIST_CODE_ID=1835 +NEXT_PUBLIC_WHITELIST_CODE_ID=1913 NEXT_PUBLIC_BADGE_HUB_CODE_ID=1336 NEXT_PUBLIC_BADGE_HUB_ADDRESS="stars1dacun0xn7z73qzdcmq27q3xn6xuprg8e2ugj364784al2v27tklqynhuqa" NEXT_PUBLIC_BADGE_NFT_CODE_ID=1337 diff --git a/components/collections/actions/Action.tsx b/components/collections/actions/Action.tsx index 305e907..9cdfad6 100644 --- a/components/collections/actions/Action.tsx +++ b/components/collections/actions/Action.tsx @@ -26,7 +26,7 @@ import { resolveAddress } from 'utils/resolveAddress' import type { CollectionInfo } from '../../../contracts/sg721/contract' import { TextInput } from '../../forms/FormInput' -import type { MinterType } from './Combobox' +import type { MinterType, Sg721Type } from './Combobox' interface CollectionActionsProps { minterContractAddress: string @@ -35,6 +35,7 @@ interface CollectionActionsProps { vendingMinterMessages: VendingMinterInstance | undefined baseMinterMessages: BaseMinterInstance | undefined minterType: MinterType + sg721Type: Sg721Type } type ExplicitContentType = true | false | undefined @@ -46,6 +47,7 @@ export const CollectionActions = ({ vendingMinterMessages, baseMinterMessages, minterType, + sg721Type, }: CollectionActionsProps) => { const wallet = useWallet() const [lastTx, setLastTx] = useState('') @@ -100,7 +102,15 @@ export const CollectionActions = ({ id: 'token-uri', name: 'tokenURI', title: 'Token URI', - subtitle: 'URI for the token to be minted', + subtitle: 'URI for the token', + placeholder: 'ipfs://', + }) + + const baseURIState = useInputState({ + id: 'base-uri', + name: 'baseURI', + title: 'Base URI', + subtitle: 'Base URI to batch update token metadata with', placeholder: 'ipfs://', }) @@ -154,13 +164,18 @@ export const CollectionActions = ({ placeholder: '5%', }) - const showTokenUriField = type === 'mint_token_uri' + const showTokenUriField = isEitherType(type, ['mint_token_uri', 'update_token_metadata']) const showWhitelistField = type === 'set_whitelist' const showDateField = isEitherType(type, ['update_start_time', 'update_start_trading_time']) const showLimitField = type === 'update_per_address_limit' - const showTokenIdField = isEitherType(type, ['transfer', 'mint_for', 'burn']) + const showTokenIdField = isEitherType(type, ['transfer', 'mint_for', 'burn', 'update_token_metadata']) const showNumberOfTokensField = type === 'batch_mint' - const showTokenIdListField = isEitherType(type, ['batch_burn', 'batch_transfer', 'batch_mint_for']) + const showTokenIdListField = isEitherType(type, [ + 'batch_burn', + 'batch_transfer', + 'batch_mint_for', + 'batch_update_token_metadata', + ]) const showRecipientField = isEitherType(type, [ 'transfer', 'mint_to', @@ -176,6 +191,7 @@ export const CollectionActions = ({ const showExternalLinkField = type === 'update_collection_info' const showRoyaltyRelatedFields = type === 'update_collection_info' const showExplicitContentField = type === 'update_collection_info' + const showBaseUriField = type === 'batch_update_token_metadata' const payload: DispatchExecuteArgs = { whitelist: whitelistState.value, @@ -185,7 +201,9 @@ export const CollectionActions = ({ sg721Contract: sg721ContractAddress, tokenId: tokenIdState.value, tokenIds: tokenIdListState.value, - tokenUri: tokenURIState.value, + tokenUri: tokenURIState.value.trim().endsWith('/') + ? tokenURIState.value.trim().slice(0, -1) + : tokenURIState.value.trim(), batchNumber: batchNumberState.value, vendingMinterMessages, baseMinterMessages, @@ -195,6 +213,9 @@ export const CollectionActions = ({ txSigner: wallet.address, type, price: priceState.value.toString(), + baseUri: baseURIState.value.trim().endsWith('/') + ? baseURIState.value.trim().slice(0, -1) + : baseURIState.value.trim(), collectionInfo, } const resolveRecipientAddress = async () => { @@ -350,13 +371,14 @@ export const CollectionActions = ({