import React, { useState } from "react"; import { StyleSheet, View, Text } from "react-native"; import * as Yup from "yup"; import { Form, SubmitButton, FormField } from "../components/forms"; import colors from "../config/colors"; import { dimensions } from "../config/dimensions"; 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([ { value: "1", label: "Qual a sua cor predileta?" }, { value: "2", label: "Qual é seu livro predileto?", }, { value: "3", label: "Qual o nome da rua em que você cresceu?", }, { value: "4", label: "Qual o nome do seu bicho de estimação predileto?", }, { value: "5", label: "Qual a sua comida predileta?", }, { value: "7", label: "Qual é o seu país preferido?", }, { value: "8", label: "Qual é a sua marca de carro predileto?", }, ]); return ( ); } const phoneRegex = RegExp( /^\(?[\(]?([0-9]{2})?\)?[)\b]?([0-9]{4,5})[-. ]?([0-9]{4})$/ ); const validationSchema = Yup.object().shape({ number: Yup.string() .matches(phoneRegex, "Número inválido") .required("O número de telefone é obrigatório"), secQuestion: Yup.string().required("Escolha a pergunta de segurança"), answer: Yup.string() .required("A resposta da pergunta de segurança é obrigatória") .max(255), }); 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) => { 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: navigation.navigate("PasswordRecoveryChangePswd", { authToken: apiResponse.data, username: number, }); break; case 404: setConfirmatioModalData({ message: "Pergunta de segurança ou senha incorretos", show: true, }); break; case 422: setConfirmatioModalData({ message: "Pergunta de segurança ou senha incorretos", show: true, }); break; default: setConfirmatioModalData({ message: "Algo deu errado, tente novamente mais tarde", show: true, }); break; } }; return (
{ 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*:
); } const styles = StyleSheet.create({ labelStyle: { fontSize: dimensions.text.secondary, fontWeight: "bold", textAlign: "left", color: colors.secondary, marginBottom: 14, paddingHorizontal: 16, }, textHeader: { textAlign: "center", fontWeight: "bold", fontSize: 22, }, textSubtitle: { textAlign: "center", fontSize: dimensions.text.secondary, marginVertical: 22, }, });