diff --git a/src/app/components/forms/PhoneNumberFormField.js b/src/app/components/forms/PhoneNumberFormField.js index 5f8325d..e625827 100644 --- a/src/app/components/forms/PhoneNumberFormField.js +++ b/src/app/components/forms/PhoneNumberFormField.js @@ -1,13 +1,9 @@ -import React, { useState, useEffect } from "react"; +import React from "react"; import { useFormikContext } from "formik"; import { unMask, mask } from "react-native-mask-text"; import TextInput from "../TextInput"; import ErrorMessage from "./ErrorMessage"; -import { View, Text, StyleSheet } from "react-native"; -import { TouchableOpacity } from "react-native-gesture-handler"; -import colors from "../../config/colors"; -import defaultStyles from "../../config/styles"; -// import { MaskedTextInput } from "react-native-mask-text"; +import { View } from "react-native"; function PhoneNumberFormField({ name, @@ -16,6 +12,7 @@ function PhoneNumberFormField({ placeholder = "", paddingLeft = 16, paddingRight = 16, + editable = true, }) { const { values, @@ -37,6 +34,7 @@ function PhoneNumberFormField({ }} > setFieldTouched(name)} onChangeText={(val) => { diff --git a/src/app/navigation/AccountNavigator.js b/src/app/navigation/AccountNavigator.js index a330fec..20a1c8e 100644 --- a/src/app/navigation/AccountNavigator.js +++ b/src/app/navigation/AccountNavigator.js @@ -9,6 +9,8 @@ import UpdatePassword from "../screens/UpdatePassword"; import EditUserData from "../screens/EditUserData"; import ActivateInstitutionCode from "../screens/ActivateInstitutionCode"; import ActivateInstitutionShowCode from "../screens/ActivateInstitutionShowCode"; +import PasswordRecovery from "../screens/PasswordRecoveryScreen"; +import PasswordRecoveryChangePswd from "../screens/PasswordRecoveryChangePswdScreen"; const Stack = createStackNavigator(); @@ -78,15 +80,20 @@ const AccountNavigator = () => ( }} /> + + + + ( { + props.navigation.navigate("PasswordRecovery", {user: user}); + }, + }, { icon: "account", show: user.pluviometer != undefined, @@ -160,6 +169,7 @@ function AccountScreen(props) { setShowLog(true); }, }, + { icon: "login", show: !isRegistered, diff --git a/src/app/screens/PasswordRecoveryChangePswdScreen.js b/src/app/screens/PasswordRecoveryChangePswdScreen.js index 2efa95c..66b9a6e 100644 --- a/src/app/screens/PasswordRecoveryChangePswdScreen.js +++ b/src/app/screens/PasswordRecoveryChangePswdScreen.js @@ -8,6 +8,7 @@ import { dimensions } from "../config/dimensions"; import PasswordFormField from "../components/forms/PasswordFormField"; import ConfirmationModal from "../components/ConfirmationModal"; import { updatePassword } from "../api/auth"; +import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; const validationSchema = Yup.object().shape({ password: Yup.string() @@ -81,54 +82,56 @@ export default function PasswordRecoveryChangePswd({ navigation, route }) { }} /> -
{ - const psw_not_match = comparePassword( - form.password, - form.confirmPassword - ); - if (psw_not_match) { - actions.setFieldError( - "confirmPassword", - "As senhas não correspondem" + + { + const psw_not_match = comparePassword( + form.password, + form.confirmPassword ); - } else { - handleSubmit(form.password); - } - }} - > - - Redefinir sua senha - - Digite uma nova senha nos campos abaixo para redefini-la - - + if (psw_not_match) { + actions.setFieldError( + "confirmPassword", + "As senhas não correspondem" + ); + } else { + handleSubmit(form.password); + } + }} + > + + Redefinir sua senha + + Digite uma nova senha nos campos abaixo para redefini-la + + - - Nova senha*: - - + + Nova senha*: + + - - Confirmar a senha - - + + Confirmar a senha + + - - + + +
); } diff --git a/src/app/screens/PasswordRecoveryScreen.js b/src/app/screens/PasswordRecoveryScreen.js index 04f5472..a6c18e0 100644 --- a/src/app/screens/PasswordRecoveryScreen.js +++ b/src/app/screens/PasswordRecoveryScreen.js @@ -8,7 +8,8 @@ import { dimensions } from "../config/dimensions"; import PhoneNumberFormField from "../components/forms/PhoneNumberFormField"; import SearchablePicker from "../components/SearchablePicker"; import ConfirmationModal from "../components/ConfirmationModal"; -import {loginByUsernamAnswers} from "../api/auth"; +import { loginByUsernamAnswers, existUsername } from "../api/auth"; +import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; function SecQuestionPicker({ name }) { const [items, setItems] = useState([ @@ -65,30 +66,52 @@ const validationSchema = Yup.object().shape({ .max(255), }); -export default function PasswordRecovery({ navigation }) { +export default function PasswordRecovery({ navigation, route }) { + const user = route.params.user; + + const [showLoading, setShowLoading] = useState(false); const [confirmatioModalData, setConfirmatioModalData] = useState({ show: false, message: "", }); const handleSubmit = async (number, answer, secQuestion) => { - setConfirmatioModalData({ - message: "Validando informações", - show: true, - }); - const apiResponse = await loginByUsernamAnswers(number, secQuestion, answer); + setShowLoading(true); + setTimeout(() => { + showLoading && + setConfirmatioModalData({ + message: "Validando informações", + show: true, + }); + }, 2000); + + const userExists = await existUsername(number); + if (userExists.data == null) { + setConfirmatioModalData({ + message: "Número de telefone inválido", + show: true, + }); + setShowLoading(false); + return; + } + + const apiResponse = await loginByUsernamAnswers( + number, + secQuestion, + answer + ); + setShowLoading(false); switch (apiResponse.status) { case 200: - console.log("ir pra proxima tela...."); navigation.navigate("PasswordRecoveryChangePswd", { authToken: apiResponse.data, - username: number + username: number, }); break; case 404: setConfirmatioModalData({ - message: "Número de telefone inválido", + message: "Pergunta de segurança ou senha incorretos", show: true, }); break; @@ -118,51 +141,53 @@ export default function PasswordRecovery({ navigation }) { } /> -
{ - - handleSubmit(number, answer, secQuestion); - }} - > - - Recuperação de senha - - Responda à pergunta de segurança, isso ajuda a mostrar que essa - conta realmente pertence a você - - - - - Número de telefone*: - - - - - Pergunta*: - - - - - Resposta*: - - - - - + +
{ + handleSubmit(number, answer, secQuestion); + }} + > + + Recuperação de senha + + Responda à pergunta de segurança, isso ajuda a mostrar que essa + conta realmente pertence a você + + + + + Número de telefone*: + + + + + Pergunta*: + + + + + Resposta*: + + + + + +
); } diff --git a/src/package.json b/src/package.json index cffb7d6..b1a73bc 100644 --- a/src/package.json +++ b/src/package.json @@ -16,7 +16,7 @@ }, "dependencies": { "@expo/metro-config": "^0.2.8", - "@react-native-async-storage/async-storage": "^1.17.2", + "@react-native-async-storage/async-storagde94d72999594291828f1714c9346e8db5e2ac74e": "^1.17.2", "@react-native-community/checkbox": "^0.5.9", "@react-native-community/datetimepicker": "3.5.2", "@react-native-community/masked-view": "^0.1.11",