/* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable no-nested-ternary */ import { FormControl } from 'components/FormControl' import { FormGroup } from 'components/FormGroup' import { useInputState, useNumberInputState } from 'components/forms/FormInput.hooks' import { InputDateTime } from 'components/InputDateTime' import { vendingMinterList } from 'config/minter' import type { TokenInfo } from 'config/token' import { stars, tokensList } from 'config/token' import React, { useEffect, useState } from 'react' import { resolveAddress } from 'utils/resolveAddress' import { useWallet } from '../../../contexts/wallet' import { NumberInput, TextInput } from '../../forms/FormInput' import type { UploadMethod } from './UploadDetails' interface MintingDetailsProps { onChange: (data: MintingDetailsDataProps) => void numberOfTokens: number | undefined uploadMethod: UploadMethod minimumMintPrice: number mintingTokenFromFactory?: TokenInfo importedMintingDetails?: MintingDetailsDataProps } export interface MintingDetailsDataProps { numTokens: number unitPrice: string perAddressLimit: number startTime: string paymentAddress?: string selectedMintToken?: TokenInfo } export const MintingDetails = ({ onChange, numberOfTokens, uploadMethod, minimumMintPrice, mintingTokenFromFactory, importedMintingDetails, }: MintingDetailsProps) => { const wallet = useWallet() const [timestamp, setTimestamp] = useState() const [selectedMintToken, setSelectedMintToken] = useState(stars) const numberOfTokensState = useNumberInputState({ id: 'numberoftokens', name: 'numberoftokens', title: 'Number Of Tokens', subtitle: '', placeholder: '100', }) const unitPriceState = useNumberInputState({ id: 'unitPrice', name: 'unitPrice', title: 'Unit Price', subtitle: `Price of each token (min. ${minimumMintPrice} ${ mintingTokenFromFactory ? mintingTokenFromFactory.displayName : 'STARS' })`, placeholder: '50', }) const perAddressLimitState = useNumberInputState({ id: 'peraddresslimit', name: 'peraddresslimit', title: 'Per Address Limit', subtitle: '', placeholder: '1', }) const paymentAddressState = useInputState({ id: 'payment-address', name: 'paymentAddress', title: 'Payment Address (optional)', subtitle: 'Address to receive minting revenues (defaults to current wallet address)', placeholder: 'stars1234567890abcdefghijklmnopqrstuvwxyz...', }) const resolvePaymentAddress = async () => { await resolveAddress(paymentAddressState.value.trim(), wallet).then((resolvedAddress) => { paymentAddressState.onChange(resolvedAddress) }) } useEffect(() => { void resolvePaymentAddress() }, [paymentAddressState.value]) useEffect(() => { if (numberOfTokens) numberOfTokensState.onChange(numberOfTokens) const data: MintingDetailsDataProps = { numTokens: numberOfTokensState.value, unitPrice: unitPriceState.value ? (Number(unitPriceState.value) * 1_000_000).toString() : unitPriceState.value === 0 ? '0' : '', perAddressLimit: perAddressLimitState.value, startTime: timestamp ? (timestamp.getTime() * 1_000_000).toString() : '', paymentAddress: paymentAddressState.value.trim(), selectedMintToken, } onChange(data) // eslint-disable-next-line react-hooks/exhaustive-deps }, [ numberOfTokens, numberOfTokensState.value, unitPriceState.value, perAddressLimitState.value, timestamp, paymentAddressState.value, selectedMintToken, ]) useEffect(() => { if (importedMintingDetails) { numberOfTokensState.onChange(importedMintingDetails.numTokens) unitPriceState.onChange(Number(importedMintingDetails.unitPrice) / 1_000_000) perAddressLimitState.onChange(importedMintingDetails.perAddressLimit) setTimestamp(new Date(Number(importedMintingDetails.startTime) / 1_000_000)) paymentAddressState.onChange(importedMintingDetails.paymentAddress ? importedMintingDetails.paymentAddress : '') setSelectedMintToken(tokensList.find((token) => token.id === importedMintingDetails.selectedMintToken?.id)) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [importedMintingDetails]) return (
setTimestamp(date)} value={timestamp} />
) }