import React from 'react'; import { View, StyleSheet, Text } from 'react-native'; 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, paddingHorizontal: 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 } }); interface IRCTextInputProps { label: string; error: { error: any; reason: any; }; loading: boolean; secureTextEntry: boolean; containerStyle: any; inputStyle: object; inputRef: any; testID: string; iconLeft: string; iconRight: string; placeholder: string; left: JSX.Element; onIconRightPress(): void; theme: string; } export default class RCTextInput extends React.PureComponent { 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; // @ts-ignore return ; } tooglePassword = () => { this.setState((prevState: any) => ({ 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} ); } }