import React from 'react'; import { View, StyleSheet, Text } from 'react-native'; import PropTypes from 'prop-types'; import { BorderlessButton } from 'react-native-gesture-handler'; import sharedStyles from '../views/Styles'; import TextInput from '../presentation/TextInput'; import { themes } from '../constants/colors'; import { CustomIcon } from '../lib/Icons'; import ActivityIndicator from './ActivityIndicator'; const styles = StyleSheet.create({ error: { textAlign: 'center', paddingTop: 5 }, inputContainer: { marginBottom: 10 }, label: { marginBottom: 10, fontSize: 14, ...sharedStyles.textSemibold }, input: { ...sharedStyles.textRegular, height: 48, fontSize: 16, paddingLeft: 14, paddingRight: 14, borderWidth: StyleSheet.hairlineWidth, borderRadius: 2 }, inputIconLeft: { paddingLeft: 45 }, inputIconRight: { paddingRight: 45 }, wrap: { position: 'relative' }, iconContainer: { position: 'absolute', top: 14 }, iconLeft: { left: 15 }, iconRight: { right: 15 } }); export default class RCTextInput extends React.PureComponent { static propTypes = { label: PropTypes.string, error: PropTypes.object, loading: PropTypes.bool, secureTextEntry: PropTypes.bool, containerStyle: PropTypes.any, inputStyle: PropTypes.object, inputRef: PropTypes.func, testID: PropTypes.string, iconLeft: PropTypes.string, placeholder: PropTypes.string, left: PropTypes.element, theme: PropTypes.string } static defaultProps = { error: {}, theme: 'light' } state = { showPassword: false } get iconLeft() { const { testID, iconLeft, theme } = this.props; return ( ); } get iconPassword() { const { showPassword } = this.state; const { testID, theme } = this.props; return ( ); } get loading() { const { theme } = this.props; return ; } tooglePassword = () => { this.setState(prevState => ({ showPassword: !prevState.showPassword })); } render() { const { showPassword } = this.state; const { label, left, error, loading, secureTextEntry, containerStyle, inputRef, iconLeft, inputStyle, testID, placeholder, theme, ...inputProps } = this.props; const { dangerColor } = themes[theme]; return ( {label ? ( {label} ) : null} {iconLeft ? this.iconLeft : null} {secureTextEntry ? this.iconPassword : null} {loading ? this.loading : null} {left} {error && error.reason ? {error.reason} : null} ); } }