import React, { Component } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { ellipsify } from '../../send.utils'; import { isValidDomainName } from '../../../../helpers/utils/util'; import { isBurnAddress, isValidHexAddress, } from '../../../../../shared/modules/hexstring-utils'; export default class EnsInput extends Component { static contextTypes = { t: PropTypes.func, metricsEvent: PropTypes.func, }; static propTypes = { className: PropTypes.string, selectedAddress: PropTypes.string, selectedName: PropTypes.string, scanQrCode: PropTypes.func, onPaste: PropTypes.func, onValidAddressTyped: PropTypes.func, internalSearch: PropTypes.bool, userInput: PropTypes.string, onChange: PropTypes.func.isRequired, onReset: PropTypes.func.isRequired, lookupEnsName: PropTypes.func.isRequired, initializeEnsSlice: PropTypes.func.isRequired, resetEnsResolution: PropTypes.func.isRequired, }; componentDidMount() { this.props.initializeEnsSlice(); } onPaste = (event) => { if (event.clipboardData.items?.length) { const clipboardItem = event.clipboardData.items[0]; clipboardItem?.getAsString((text) => { const input = text.trim(); if ( !isBurnAddress(input) && isValidHexAddress(input, { mixedCaseUseChecksum: true }) ) { this.props.onPaste(input); } }); } }; onChange = ({ target: { value } }) => { const { onValidAddressTyped, internalSearch, onChange, lookupEnsName, resetEnsResolution, } = this.props; const input = value.trim(); onChange(input); if (internalSearch) { return null; } // Empty ENS state if input is empty // maybe scan ENS if (isValidDomainName(input)) { lookupEnsName(input); } else { resetEnsResolution(); if ( onValidAddressTyped && !isBurnAddress(input) && isValidHexAddress(input, { mixedCaseUseChecksum: true }) ) { onValidAddressTyped(input); } } return null; }; render() { const { t } = this.context; const { className, selectedAddress, selectedName, userInput } = this.props; const hasSelectedAddress = Boolean(selectedAddress); return (
{hasSelectedAddress ? ( <>
{selectedName || ellipsify(selectedAddress)}
{selectedName && (
{selectedAddress}
)}
) : ( <>
); } }