import React from 'react'; import { View, StyleSheet, Text, TextInput, ViewPropTypes, Platform } from 'react-native'; import PropTypes from 'prop-types'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import sharedStyles from '../views/Styles'; import { COLOR_DANGER, COLOR_TEXT } from '../constants/colors'; const styles = StyleSheet.create({ inputContainer: { marginBottom: 15 }, label: { marginBottom: 10, color: COLOR_TEXT, fontSize: 14, fontWeight: '700' }, input: { fontSize: 14, paddingTop: 12, paddingBottom: 12, paddingHorizontal: 10, borderWidth: 1.5, borderRadius: 2, backgroundColor: 'white', borderColor: '#E7EBF2', color: 'black' }, labelError: { color: COLOR_DANGER }, inputError: { color: COLOR_DANGER, borderColor: COLOR_DANGER }, wrap: { position: 'relative' }, icon: { position: 'absolute', color: 'rgba(0,0,0,.45)', height: 45, textAlignVertical: 'center', ...Platform.select({ ios: { padding: 12 }, android: { paddingHorizontal: 12, paddingTop: 18, paddingBottom: 6 } }) } }); export default class RCTextInput extends React.PureComponent { static propTypes = { label: PropTypes.string, error: PropTypes.object, secureTextEntry: PropTypes.bool, containerStyle: ViewPropTypes.style, inputStyle: PropTypes.object, inputRef: PropTypes.func, testID: PropTypes.string, iconLeft: PropTypes.string, placeholder: PropTypes.string } static defaultProps = { error: {} } state = { showPassword: false } icon = ({ name, onPress, style, testID }) => iconLeft = name => this.icon({ name, onPress: null, style: { left: 0 }, testID: this.props.testID ? `${ this.props.testID }-icon-left` : null }); iconPassword = name => this.icon({ name, onPress: () => this.tooglePassword(), style: { right: 0 }, testID: this.props.testID ? `${ this.props.testID }-icon-right` : null }); tooglePassword = () => this.setState({ showPassword: !this.state.showPassword }); render() { const { label, error, secureTextEntry, containerStyle, inputRef, iconLeft, inputStyle, testID, placeholder, ...inputProps } = this.props; const { showPassword } = this.state; return ( {label ? {label} : null } {iconLeft ? this.iconLeft(iconLeft) : null} {secureTextEntry ? this.iconPassword(showPassword ? 'eye-off' : 'eye') : null} {error.error ? {error.reason} : null} ); } }