From 181f8885e28f5c9490c3381c74396ef17bc62483 Mon Sep 17 00:00:00 2001
From: lumb19 <lumb19@inf.ufpr.br>
Date: Wed, 6 Mar 2024 11:52:02 -0300
Subject: [PATCH] Issue #26: CONNECT signup modal to api

---
 src/app/login/components/LoginForm.js   |  4 +-
 src/app/login/components/SignupModal.js | 66 ++++++++++++++++++++-----
 src/axiosConfig.js                      |  2 +-
 3 files changed, 57 insertions(+), 15 deletions(-)

diff --git a/src/app/login/components/LoginForm.js b/src/app/login/components/LoginForm.js
index bbbe7232..963d7038 100644
--- a/src/app/login/components/LoginForm.js
+++ b/src/app/login/components/LoginForm.js
@@ -47,7 +47,7 @@ export default function LoginForm({
               label="E-mail"
               className="m-5"
               onChange={handleEmailChange}
-              error={errorMessage != ""}
+              error={errorMessage.length > 0}
             />
             <TextField
               fullWidth
@@ -55,7 +55,7 @@ export default function LoginForm({
               label="Senha"
               className="mb-5"
               onChange={handlePasswordChange}
-              error={errorMessage != ""}
+              error={errorMessage != errorMessage.length > 0}
             />
             <Button
               fullWidth
diff --git a/src/app/login/components/SignupModal.js b/src/app/login/components/SignupModal.js
index 263a1234..af3409e2 100644
--- a/src/app/login/components/SignupModal.js
+++ b/src/app/login/components/SignupModal.js
@@ -4,22 +4,57 @@ import Button from "@mui/material/Button";
 import Modal from "@mui/material/Modal";
 import { TextField, Divider, Alert } from "@mui/material";
 import { useState } from "react";
+import mecredApi from "@/axiosConfig";
 
 export default function SignupModal({ open, handleClose }) {
   const [userName, setUserName] = useState("");
   const [userEmail, setUserEmail] = useState("");
   const [userPassword, setUserPassword] = useState("");
   const [userPasswordConfirmation, setUserPasswordConfirmation] = useState("");
-  const [errorMessage, setErrorMessage] = useState("");
+  const [feedbackMessage, setfeedbackMessage] = useState("");
+  const [error, setError] = useState(false);
+
+  const helperText = "As senhas devem ser iguais!";
+
+  const userSignup = async () => {
+    mecredApi
+      .post("/auth", {
+        name: userName,
+        email: userEmail,
+        password: userPassword,
+        password_confirmation: userPasswordConfirmation,
+      })
+      .then((response) => {
+        setfeedbackMessage("Usuário cadastrado com sucesso! Por favor confirme seu e-mail.");
+        setError(false);
+        
+      })
+      .catch(e => {
+        setfeedbackMessage(e['response']['data']['errors']['full_messages'][0]);
+        setError(true);
+      })
+  };
+
+  const resetForm = () => {
+    setUserName("");
+    setUserEmail("");
+    setUserPassword("");
+    setUserPasswordConfirmation("");
+  }
 
   const handleSubmit = (event) => {
     event.preventDefault();
 
-    if (!userName || !userEmail || !userPassword || !userPasswordConfirmation)
-      setErrorMessage("Todos os campos marcados com * são obrigatórios!")
-    else if (userPassword != userPasswordConfirmation)
-      setErrorMessage("As senhas devem ser iguais!");
-    };
+    if (!userName || !userEmail || !userPassword || !userPasswordConfirmation) {
+      setfeedbackMessage("Todos os campos marcados com * são obrigatórios!");
+      setError(true);
+    } else if (userPassword != userPasswordConfirmation) {
+      setfeedbackMessage("As senhas devem ser iguais!");
+      setError(true);
+    }
+    else userSignup();
+      resetForm();
+  };
 
   return (
     <Modal
@@ -30,14 +65,14 @@ export default function SignupModal({ open, handleClose }) {
       <Box className="bg-white sm:w-1/2 xl:w-1/4 p-5 flex flex-col items-center border-none rounded-xl">
         <h1 className="text-secondary text-2xl font-bold m-5">Cadastre-se</h1>
         <form onSubmit={handleSubmit}>
-          {errorMessage ? <Alert severity="error">{errorMessage}</Alert> : null}
+          {feedbackMessage ? <Alert severity={error ? "error" : "success"}>{feedbackMessage}</Alert> : null}
           <TextField
             fullWidth
             onChange={(e) => setUserName(e.target.value)}
             label="Nome Completo *"
             className="my-5"
             value={userName}
-            error={!userName && errorMessage}
+            error={!userName && error}
           />
           <TextField
             fullWidth
@@ -46,7 +81,7 @@ export default function SignupModal({ open, handleClose }) {
             type="email"
             className="mb-5"
             value={userEmail}
-            error={!userEmail && errorMessage}
+            error={!userEmail && error}
           />
           <TextField
             fullWidth
@@ -55,7 +90,7 @@ export default function SignupModal({ open, handleClose }) {
             label="Senha *"
             className="mb-5"
             value={userPassword}
-            error={!userPassword && errorMessage}
+            error={!userPassword && error}
           />
           <TextField
             fullWidth
@@ -64,8 +99,15 @@ export default function SignupModal({ open, handleClose }) {
             label="Confirmar senha *"
             className="mb-5"
             value={userPasswordConfirmation}
-            error={userPasswordConfirmation != userPassword && userPasswordConfirmation != ""}
-            helperText={userPasswordConfirmation && userPasswordConfirmation != userPassword && <p>As senhas devem ser iguais!</p>}
+            error={
+              userPasswordConfirmation != userPassword &&
+              userPasswordConfirmation != ""
+            }
+            helperText={
+              userPasswordConfirmation.length > 0 &&
+              userPasswordConfirmation != userPassword &&
+              helperText
+            }
           />
           <Button
             fullWidth
diff --git a/src/axiosConfig.js b/src/axiosConfig.js
index 67f46a09..3189ce56 100644
--- a/src/axiosConfig.js
+++ b/src/axiosConfig.js
@@ -1,7 +1,7 @@
 import axios from "axios";
 
 const mecredApi = axios.create({
-    baseURL: 'https://api.portalmec.c3sl.ufpr.br/v1',
+    baseURL: 'https://api.portalmechomologa.c3sl.ufpr.br/v1',
     timeout: 1000
 })
 
-- 
GitLab