Browse Source

Enable/Disable password view

master
GabrielTrettel 3 years ago
parent
commit
4f8c963c3a
  1. 82
      src/app/components/forms/PasswordFormField.js
  2. 15
      src/app/screens/RegisterScreen.js

82
src/app/components/forms/PasswordFormField.js

@ -1,50 +1,57 @@
import React, {useState} from "react"; import React, { useState } from "react";
import ErrorMessage from "./ErrorMessage"; import ErrorMessage from "./ErrorMessage";
import { useFormikContext } from "formik"; import { useFormikContext } from "formik";
import { View, TextInput, StyleSheet } from "react-native"; import {
View,
TextInput,
StyleSheet,
TouchableNativeFeedback,
} from "react-native";
import { MaterialCommunityIcons } from "@expo/vector-icons"; import { MaterialCommunityIcons } from "@expo/vector-icons";
import colors from "../../config/colors"; import colors from "../../config/colors";
import defaultStyles from "../../config/styles"; import defaultStyles from "../../config/styles";
function PasswordFormField({ name, ...otherProps }) { function PasswordFormField({
const { name,
values, flex = 0,
setFieldTouched, paddingLeft = 16,
setFieldValue, paddingRight = 16,
handleChange, ...otherProps
errors, }) {
touched, const { values, setFieldTouched, errors, touched } = useFormikContext();
} = useFormikContext();
const [fieldVal, setFieldVal] = useState(values[name]); const [fieldVal, setFieldVal] = useState(values[name]);
const [hidePswd, setHidePswd] = useState(true);
return ( return (
<View> <View flex={flex} paddingLeft={paddingLeft} paddingRight={paddingRight}>
<View style={styles.container}> <View style={styles.container}>
<TextInput <TextInput
flex={1} flex={1}
onBlur={() => setFieldTouched(name)} onBlur={() => setFieldTouched(name)}
onChangeText={(val) => { onChangeText={(val) => {
setFieldVal(val); setFieldVal(val);
}} }}
value={fieldVal.toString()} value={fieldVal.toString()}
style={defaultStyles.text} style={defaultStyles.text}
height={48} height={48}
placeholderTextColor={colors.medium} secureTextEntry={hidePswd}
{...otherProps} placeholderTextColor={colors.medium}
/> {...otherProps}
/>
<MaterialCommunityIcons <TouchableNativeFeedback onPress={() => setHidePswd(!hidePswd)}>
name={"eye"} <MaterialCommunityIcons
size={20} name={hidePswd ? "eye-off" : "eye"}
color={defaultStyles.colors.medium} size={25}
style={styles.icon} color={defaultStyles.colors.medium}
/> style={styles.icon}
</View> />
<View style={{ paddingHorizontal: 16 }}> </TouchableNativeFeedback>
<ErrorMessage error={errors[name]} visible={touched[name]} />
</View>
</View> </View>
{/* <View style={{ paddingHorizontal: 2 }}> */}
<ErrorMessage error={errors[name]} visible={touched[name]} />
{/* </View> */}
</View>
); );
} }
@ -59,11 +66,10 @@ const styles = StyleSheet.create({
borderWidth: 1, borderWidth: 1,
padding: 5, padding: 5,
paddingLeft: 10, paddingLeft: 10,
marginHorizontal: 16
}, },
icon: { icon: {
marginRight: 10, marginRight: 10,
alignItems: "flex-end" alignItems: "flex-end",
}, },
}); });

15
src/app/screens/RegisterScreen.js

@ -34,9 +34,10 @@ import {
import { AuthContext } from "../auth/context"; import { AuthContext } from "../auth/context";
import authStorage from "../auth/storage"; import authStorage from "../auth/storage";
import ConfirmationModal from "../components/ConfirmationModal"; import ConfirmationModal from "../components/ConfirmationModal";
import PasswordFormField from "../components/forms/PasswordFormField";
const phoneRegex = RegExp( const phoneRegex = RegExp(
/^\(?[\(]?([0-9]{2})?\)?[)\b]?([0-9]{4,5})[-. ]?([0-9]{4})$/ /^\(?[\(]?([0-9]{2,3})?\)?[)\b]?([0-9]{4,5})[-. ]?([0-9]{4})$/
); );
const validationSchema = Yup.object().shape({ const validationSchema = Yup.object().shape({
@ -396,18 +397,17 @@ export default function RegisterScreen(props) {
flex={1} flex={1}
maxLength={12} maxLength={12}
name="number" name="number"
placeholder="Digite o número de telefone celular" placeholder="(DDD) XXXXX-XXXX"
paddingRight={2} paddingRight={2}
/> />
</View> </View>
<Text style={styles.labelStyle}>Senha:*</Text> <Text style={styles.labelStyle}>Senha:*</Text>
<View style={styles.iconField}> <View style={styles.iconField}>
<MaterialCommunityIconsCustom name="lock" /> <MaterialCommunityIconsCustom name="lock" />
<FormField <PasswordFormField
flex={1} flex={1}
maxLength={12} maxLength={20}
name="password" name="password"
secureTextEntry={true}
placeholder="Digite a senha" placeholder="Digite a senha"
paddingRight={2} paddingRight={2}
/> />
@ -415,11 +415,10 @@ export default function RegisterScreen(props) {
<Text style={styles.labelStyle}>Confirmar senha:*</Text> <Text style={styles.labelStyle}>Confirmar senha:*</Text>
<View style={styles.iconField}> <View style={styles.iconField}>
<MaterialCommunityIconsCustom name="lock" /> <MaterialCommunityIconsCustom name="lock" />
<FormField <PasswordFormField
flex={1} flex={1}
maxLength={12} maxLength={20}
name="confirmPassword" name="confirmPassword"
secureTextEntry={true}
placeholder="Repita a senha" placeholder="Repita a senha"
paddingRight={2} paddingRight={2}
/> />

|||||||
100:0
Loading…
Cancel
Save