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: {
...sharedStyles.textAlignCenter,
paddingTop: 5
},
inputContainer: {
marginBottom: 10
},
label: {
marginBottom: 10,
fontSize: 14,
...sharedStyles.textSemibold
},
input: {
...sharedStyles.textRegular,
height: 48,
fontSize: 16,
padding: 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,
iconRight: PropTypes.string,
placeholder: PropTypes.string,
left: PropTypes.element,
onIconRightPress: PropTypes.func,
theme: PropTypes.string
}
static defaultProps = {
error: {},
theme: 'light'
}
state = {
showPassword: false
}
get iconLeft() {
const { testID, iconLeft, theme } = this.props;
return (
);
}
get iconRight() {
const { iconRight, onIconRightPress, 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, iconRight, inputStyle, testID, placeholder, theme, ...inputProps
} = this.props;
const { dangerColor } = themes[theme];
return (
{label ? (
{label}
) : null}
{iconLeft ? this.iconLeft : null}
{iconRight ? this.iconRight : null}
{secureTextEntry ? this.iconPassword : null}
{loading ? this.loading : null}
{left}
{error && error.reason ? {error.reason} : null}
);
}
}