import React, { Component } from 'react'; import PropTypes from 'prop-types'; import styled, { css } from 'styled-components'; import colors from 'config/colors'; import ICONS from 'config/icons'; import Icon from 'components/Icon'; import { FONT_SIZE, FONT_WEIGHT, TRANSITION, } from 'config/variables'; const Wrapper = styled.div` width: 100%; display: flex; flex-direction: column; justify-content: flex-start; `; const InputWrapper = styled.div` display: flex; `; const InputIconWrapper = styled.div` flex: 1; position: relative; display: inline-block; `; const TopLabel = styled.span` padding-bottom: 4px; color: ${colors.TEXT_SECONDARY}; `; const StyledInput = styled.input` width: 100%; padding: 6px ${props => (props.hasIcon ? '40px' : '12px')} 6px 12px; line-height: 1.42857143; font-size: ${FONT_SIZE.SMALL}; font-weight: ${FONT_WEIGHT.BASE}; color: ${colors.TEXT_PRIMARY}; border-radius: 2px; ${props => props.hasAddon && css` border-top-right-radius: 0; border-bottom-right-radius: 0; `} border: 1px solid ${colors.DIVIDER}; border-color: ${props => props.borderColor}; background-color: ${colors.WHITE}; transition: ${TRANSITION.HOVER}; &:disabled { pointer-events: none; background: ${colors.GRAY_LIGHT}; color: ${colors.TEXT_SECONDARY}; } `; const StyledIcon = styled(Icon)` position: absolute; left: auto; right: 10px; `; const BottomText = styled.span` margin-top: 10px; font-size: ${FONT_SIZE.SMALLER}; color: ${props => (props.color ? props.color : colors.TEXT_SECONDARY)}; `; class Input extends Component { getIcon(inputState) { let icon = []; if (inputState === 'success') { icon = ICONS.CHECKED; } else if (inputState === 'warning') { icon = ICONS.WARNING; } else if (inputState === 'error') { icon = ICONS.ERROR; } return icon; } getColor(inputState) { let color = ''; if (inputState === 'success') { color = colors.SUCCESS_PRIMARY; } else if (inputState === 'warning') { color = colors.WARNING_PRIMARY; } else if (inputState === 'error') { color = colors.ERROR_PRIMARY; } return color; } render() { return ( {this.props.topLabel && ( {this.props.topLabel} )} {this.props.state && ( )} {this.props.sideAddons && this.props.sideAddons.map(sideAddon => sideAddon)} {this.props.bottomText && ( {this.props.bottomText} )} ); } } Input.propTypes = { className: PropTypes.string, innerRef: PropTypes.func, placeholder: PropTypes.string, type: PropTypes.string, autoComplete: PropTypes.string, autoCorrect: PropTypes.string, autoCapitalize: PropTypes.string, spellCheck: PropTypes.string, value: PropTypes.string, onChange: PropTypes.func, state: PropTypes.string, bottomText: PropTypes.string, topLabel: PropTypes.node, sideAddons: PropTypes.arrayOf(PropTypes.node), isDisabled: PropTypes.bool, }; Input.defaultProps = { type: 'text', }; export default Input;