From afb611a7b59c5f555388e8e9b459d3df93f71df6 Mon Sep 17 00:00:00 2001 From: GabrielTrettel Date: Tue, 22 Mar 2022 16:39:11 -0300 Subject: [PATCH 1/5] setting timer to loading message in change password and fixing error messages --- src/app/screens/PasswordRecoveryScreen.js | 40 +++++++++++++++++------ 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/app/screens/PasswordRecoveryScreen.js b/src/app/screens/PasswordRecoveryScreen.js index 04f5472..aef112d 100644 --- a/src/app/screens/PasswordRecoveryScreen.js +++ b/src/app/screens/PasswordRecoveryScreen.js @@ -8,7 +8,7 @@ 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"; function SecQuestionPicker({ name }) { const [items, setItems] = useState([ @@ -66,29 +66,50 @@ const validationSchema = Yup.object().shape({ }); export default function PasswordRecovery({ navigation }) { + 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(() => { + console.log("to rodando", showLoading) + 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; @@ -125,8 +146,7 @@ export default function PasswordRecovery({ navigation }) { answer: "", secQuestion: "", }} - onSubmit={({number, answer, secQuestion}) => { - + onSubmit={({ number, answer, secQuestion }) => { handleSubmit(number, answer, secQuestion); }} > From 477325966ad743b12a05eb12c9c38dfbfcaed94d Mon Sep 17 00:00:00 2001 From: GabrielTrettel Date: Wed, 30 Mar 2022 17:31:47 -0300 Subject: [PATCH 2/5] Adding package dependency --- src/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/package.json b/src/package.json index cab0530..b1d1e24 100644 --- a/src/package.json +++ b/src/package.json @@ -16,6 +16,7 @@ }, "dependencies": { "@expo/metro-config": "^0.2.8", + "@react-native-async-storage/async-storage": "~1.15.0", "@react-native-community/checkbox": "^0.5.9", "@react-native-community/datetimepicker": "3.5.2", "@react-native-community/masked-view": "^0.1.11", From 67b3c9d5aa5a2962bb30b6b8dcf289dc3e0b3af0 Mon Sep 17 00:00:00 2001 From: GabrielTrettel Date: Wed, 30 Mar 2022 17:57:04 -0300 Subject: [PATCH 3/5] Enabling phone number form string to be editable or not --- src/app/components/forms/PhoneNumberFormField.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) 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) => { From 8c651def82c0363c719ae03aa90557f283b35a8e Mon Sep 17 00:00:00 2001 From: GabrielTrettel Date: Wed, 30 Mar 2022 17:57:33 -0300 Subject: [PATCH 4/5] Enabling already logged-in user to change password. --- src/app/navigation/AccountNavigator.js | 23 +++++++++++++++-------- src/app/navigation/AuthNavigator.js | 7 ++++--- src/app/screens/AccountScreen.js | 12 +++++++++++- src/app/screens/PasswordRecoveryScreen.js | 10 +++++++--- 4 files changed, 37 insertions(+), 15 deletions(-) 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/PasswordRecoveryScreen.js b/src/app/screens/PasswordRecoveryScreen.js index aef112d..ff27596 100644 --- a/src/app/screens/PasswordRecoveryScreen.js +++ b/src/app/screens/PasswordRecoveryScreen.js @@ -65,7 +65,10 @@ const validationSchema = Yup.object().shape({ .max(255), }); -export default function PasswordRecovery({ navigation }) { +export default function PasswordRecovery({ navigation, route }) { + const user = route.params.user; + console.log(user) + const [showLoading, setShowLoading] = useState(false); const [confirmatioModalData, setConfirmatioModalData] = useState({ show: false, @@ -142,7 +145,7 @@ export default function PasswordRecovery({ navigation }) {
From de94d72999594291828f1714c9346e8db5e2ac74 Mon Sep 17 00:00:00 2001 From: GabrielTrettel Date: Wed, 30 Mar 2022 18:04:52 -0300 Subject: [PATCH 5/5] Adding scroll view to change password screens --- .../PasswordRecoveryChangePswdScreen.js | 91 ++++++++------- src/app/screens/PasswordRecoveryScreen.js | 107 +++++++++--------- 2 files changed, 101 insertions(+), 97 deletions(-) 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 ff27596..a6c18e0 100644 --- a/src/app/screens/PasswordRecoveryScreen.js +++ b/src/app/screens/PasswordRecoveryScreen.js @@ -9,6 +9,7 @@ import PhoneNumberFormField from "../components/forms/PhoneNumberFormField"; import SearchablePicker from "../components/SearchablePicker"; import ConfirmationModal from "../components/ConfirmationModal"; import { loginByUsernamAnswers, existUsername } from "../api/auth"; +import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; function SecQuestionPicker({ name }) { const [items, setItems] = useState([ @@ -67,7 +68,6 @@ const validationSchema = Yup.object().shape({ export default function PasswordRecovery({ navigation, route }) { const user = route.params.user; - console.log(user) const [showLoading, setShowLoading] = useState(false); const [confirmatioModalData, setConfirmatioModalData] = useState({ @@ -78,11 +78,11 @@ export default function PasswordRecovery({ navigation, route }) { const handleSubmit = async (number, answer, secQuestion) => { setShowLoading(true); setTimeout(() => { - console.log("to rodando", showLoading) - showLoading && setConfirmatioModalData({ - message: "Validando informações", - show: true, - }); + showLoading && + setConfirmatioModalData({ + message: "Validando informações", + show: true, + }); }, 2000); const userExists = await existUsername(number); @@ -94,7 +94,7 @@ export default function PasswordRecovery({ navigation, route }) { setShowLoading(false); return; } - + const apiResponse = await loginByUsernamAnswers( number, secQuestion, @@ -104,7 +104,6 @@ export default function PasswordRecovery({ navigation, route }) { switch (apiResponse.status) { case 200: - console.log("ir pra proxima tela...."); navigation.navigate("PasswordRecoveryChangePswd", { authToken: apiResponse.data, username: number, @@ -142,51 +141,53 @@ export default function PasswordRecovery({ navigation, route }) { } /> -
{ - 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*: + + + + + +
); }