import { addressUtils } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import styled from 'styled-components'; import { colors } from 'ts/style/colors'; import { Container } from 'ts/components/ui/container'; import { Paragraph } from 'ts/components/text'; export interface ConfigGeneratorAddressInputProps { value?: string; onChange?: (address: string, isValid: boolean) => void; } export interface ConfigGeneratorAddressInputState { errMsg: string; } export interface InputProps { className?: string; value?: string; width?: string; fontSize?: string; fontColor?: string; padding?: string; placeholderColor?: string; placeholder?: string; backgroundColor?: string; onChange?: (event: React.ChangeEvent) => void; } export class ConfigGeneratorAddressInput extends React.Component< ConfigGeneratorAddressInputProps, ConfigGeneratorAddressInputState > { public state = { errMsg: '', }; public render(): React.ReactNode { const { errMsg } = this.state; const hasError = !_.isEmpty(errMsg); return ( {errMsg} ); } private readonly _handleChange = (event: React.ChangeEvent): void => { const address = event.target.value; const isValidAddress = addressUtils.isAddress(address.toLowerCase()) || address === ''; const errMsg = isValidAddress ? '' : 'Please enter a valid Ethereum address'; this.setState({ errMsg, }); this.props.onChange(address, isValidAddress); }; } const PlainInput: React.StatelessComponent = ({ value, className, placeholder, onChange }) => ( ); export const Input = styled(PlainInput)` background-color: ${colors.white}; color: ${colors.textDarkSecondary}; font-size: 1rem; width: 100%; padding: 16px 20px 18px; border-radius: 4px; border: 1px solid transparent; outline: none; &::placeholder { color: #333333; opacity: 0.5; } `;