import React, { Fragment, PureComponent } from 'react'; import ENSSubdomainRegistry from 'Embark/contracts/ENSSubdomainRegistry'; import { Button, Field, TextInput, Card, Info, Text } from '../../ui/components' import { IconCheck } from '../../ui/icons' import theme from '../../ui/theme' import { withFormik } from 'formik'; import PublicResolver from 'Embark/contracts/PublicResolver'; import { hash } from 'eth-ens-namehash'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import RegisterSubDomain from '../ens/registerSubDomain'; const { getPrice } = ENSSubdomainRegistry.methods; const invalidSuffix = '0000000000000000000000000000000000000000' const nullAddress = '0x0000000000000000000000000000000000000000' const validAddress = address => address != nullAddress; const validStatusAddress = address => !address.includes(invalidSuffix); const formatName = domainName => domainName.includes('.') ? domainName : `${domainName}.stateofus.eth`; const getDomain = fullDomain => formatName(fullDomain).split('.').slice(1).join('.'); const hashedDomain = domainName => hash(getDomain(domainName)); const cardStyle = { width: '75%', marginLeft: '15%', padding: '30px' } const addressStyle = { fontSize: '18px', fontWeight: 400, cursor: 'copy', wordWrap: 'break-word', } const backButton = { fontSize: '40px', color: theme.accent, cursor: 'pointer' } class Register extends PureComponent { state = { domainPrice: null }; componentDidMount() { const { domainName } = this.props; getPrice(hashedDomain(domainName)) .call() .then((res) => { this.setState({ domainPrice: res })}); } render() { const { domainName, setStatus } = this.props; const { domainPrice } = this.state; const formattedDomain = formatName(domainName); const formattedDomainArray = formattedDomain.split('.') return ( {formattedDomain.toUpperCase()} can be registered for {domainPrice} SNT this.setState({ registered: { address, statusAccount } })} />
setStatus(null)}>←
) } } class DisplayAddress extends PureComponent { state = { copied: false } render() { const { copied } = this.state const { domainName, address, statusAccount, setStatus } = this.props const markCopied = (v) => { this.setState({ copied: v }) } const isCopied = address => address == copied; const renderCopied = address => isCopied(address) && Copied!; return ( {validAddress(address) ?
{formatName(domainName).toUpperCase()} Resolves To: {address && Ethereum Address {renderCopied(address)}}
{address}
{validStatusAddress(statusAccount) && Status Address {renderCopied(statusAccount)}} {validStatusAddress(statusAccount) &&
{statusAccount}
}
: {domainName.toUpperCase()} }
setStatus(null)}>←
) } } const InnerForm = ({ values, errors, touched, handleChange, handleBlur, handleSubmit, isSubmitting, status, setStatus }) => ( {!status ?
: validAddress(status.address) ? : }
) const NameLookup = withFormik({ mapPropsToValues: props => ({ domainName: '' }), async handleSubmit(values, { status, setSubmitting, setStatus }) { const { domainName } = values; const { addr, text } = PublicResolver.methods; const lookupHash = hash(formatName(domainName)); const address = await addr(lookupHash).call(); const statusAccount = await text(lookupHash, 'statusAccount').call(); setStatus({ address, statusAccount }); } })(InnerForm) export default NameLookup;