From 44b73a080dca47e3056ef2a90ee7cb59f23b3581 Mon Sep 17 00:00:00 2001 From: NANDO9322 Date: Mon, 9 Feb 2026 12:23:48 -0300 Subject: [PATCH] fix: (cadastro-profissiona) ajuste de redirecionamento --- frontend/components/ProfessionalForm.tsx | 24 +++++++++++------------- frontend/contexts/AuthContext.tsx | 20 +++++++++++++------- frontend/pages/ProfessionalRegister.tsx | 14 ++++++++++---- frontend/pages/Register.tsx | 10 +++++++--- frontend/pages/RegistrationSuccess.tsx | 2 ++ 5 files changed, 43 insertions(+), 27 deletions(-) diff --git a/frontend/components/ProfessionalForm.tsx b/frontend/components/ProfessionalForm.tsx index 414aecc..6e8a964 100644 --- a/frontend/components/ProfessionalForm.tsx +++ b/frontend/components/ProfessionalForm.tsx @@ -6,6 +6,7 @@ import { getFunctions } from "../services/apiService"; interface ProfessionalFormProps { onSubmit: (data: ProfessionalData) => void; onCancel: () => void; + isLoading?: boolean; } export interface ProfessionalData { @@ -42,6 +43,7 @@ export interface ProfessionalData { export const ProfessionalForm: React.FC = ({ onSubmit, onCancel, + isLoading = false, }) => { const [functions, setFunctions] = useState< Array<{ id: string; nome: string }> @@ -173,6 +175,7 @@ export const ProfessionalForm: React.FC = ({ const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); + if (isLoading) return; // Validação de foto de perfil if (!formData.avatar) { @@ -720,19 +723,14 @@ export const ProfessionalForm: React.FC = ({ )} {/* Botões */} -
- - -
+
+ + +
); diff --git a/frontend/contexts/AuthContext.tsx b/frontend/contexts/AuthContext.tsx index c1ec97d..d77209d 100644 --- a/frontend/contexts/AuthContext.tsx +++ b/frontend/contexts/AuthContext.tsx @@ -262,8 +262,8 @@ const login = async (email: string, password?: string) => { } }; - const register = async (data: any) => { - setIsLoading(true); + const register = async (data: any, autoLogin: boolean = true, skipLoading: boolean = false) => { + if (!skipLoading) setIsLoading(true); try { const API_URL = import.meta.env.VITE_API_URL || "http://localhost:8080"; @@ -305,11 +305,15 @@ const login = async (email: string, password?: string) => { const responseData = await response.json(); if (responseData.user && responseData.user.ativo) { - if (responseData.access_token) { - localStorage.setItem('token', responseData.access_token); - setToken(responseData.access_token); + + if (autoLogin) { + if (responseData.access_token) { + localStorage.setItem('token', responseData.access_token); + setToken(responseData.access_token); + } } + const backendUser = responseData.user; const mappedUser: User = { id: backendUser.id, @@ -333,7 +337,9 @@ const login = async (email: string, password?: string) => { cidade: backendUser.cidade, estado: backendUser.estado, }; - setUser(mappedUser); + if (autoLogin) { + setUser(mappedUser); + } } return { @@ -348,7 +354,7 @@ const login = async (email: string, password?: string) => { } return { success: false, error: "Erro desconhecido" }; } finally { - setIsLoading(false); + if (!skipLoading) setIsLoading(false); } }; diff --git a/frontend/pages/ProfessionalRegister.tsx b/frontend/pages/ProfessionalRegister.tsx index 13b2585..dd815c7 100644 --- a/frontend/pages/ProfessionalRegister.tsx +++ b/frontend/pages/ProfessionalRegister.tsx @@ -1,4 +1,5 @@ import React, { useState, useEffect } from "react"; +import { useNavigate } from "react-router-dom"; import { ProfessionalForm, ProfessionalData, @@ -13,12 +14,15 @@ interface ProfessionalRegisterProps { export const ProfessionalRegister: React.FC = ({ onNavigate, }) => { + const navigate = useNavigate(); const { register } = useAuth(); const [isSuccess, setIsSuccess] = useState(false); + const [isSubmitting, setIsSubmitting] = useState(false); // Removed access code logic as per requirement const handleSubmit = async (professionalData: ProfessionalData) => { + setIsSubmitting(true); try { // 1. Cadastrar Usuário (Auth) e Logar Automaticamente const authResult = await register({ @@ -29,7 +33,7 @@ export const ProfessionalRegister: React.FC = ({ role: professionalData.funcaoLabel?.toUpperCase().includes("PESQUISA") ? "RESEARCHER" : "PHOTOGRAPHER", tipo_profissional: professionalData.funcaoLabel || "", // Envia o nome da função (ex: Cinegrafista) regiao: professionalData.regiao, // Pass region - }); + }, false, true); // autoLogin = false, skipLoading = true to prevent global loading & form flash if (!authResult.success) { throw new Error("Falha no cadastro de usuário."); @@ -111,12 +115,12 @@ export const ProfessionalRegister: React.FC = ({ console.log("Profissional cadastrado com sucesso!"); // Limpar dados de sessão após cadastro bem-sucedido - sessionStorage.removeItem('professionalAccessValidated'); - sessionStorage.removeItem('professionalAccessData'); - setIsSuccess(true); + // Agora feito na página de sucesso + navigate("/cadastro-sucesso", { replace: true }); } catch (error: any) { console.error("Erro ao cadastrar profissional:", error); alert(error.message || "Erro ao cadastrar profissional. Tente novamente."); + setIsSubmitting(false); } }; @@ -173,6 +177,8 @@ export const ProfessionalRegister: React.FC = ({ onNavigate("cadastro")} + onNavigate={onNavigate} + isLoading={isSubmitting} /> ); diff --git a/frontend/pages/Register.tsx b/frontend/pages/Register.tsx index 7028516..bdc259f 100644 --- a/frontend/pages/Register.tsx +++ b/frontend/pages/Register.tsx @@ -1,4 +1,5 @@ import React, { useState, useEffect } from "react"; +import { useNavigate } from "react-router-dom"; import { Button } from "../components/Button"; import { Input } from "../components/Input"; import { useAuth } from "../contexts/AuthContext"; @@ -10,6 +11,7 @@ interface RegisterProps { } export const Register: React.FC = ({ onNavigate }) => { + const navigate = useNavigate(); const { register } = useAuth(); const [companies, setCompanies] = useState< Array<{ id: string; nome: string }> @@ -107,10 +109,12 @@ export const Register: React.FC = ({ onNavigate }) => { complemento: formData.complemento, bairro: formData.bairro, cidade: formData.cidade, + estado: formData.estado, - }); - setIsLoading(false); - window.location.href = "/cadastro-sucesso"; + }, false, true); // autoLogin=false, skipLoading=true + + // Keep loading true while redirecting + navigate("/cadastro-sucesso", { replace: true }); } catch (err: any) { setIsLoading(false); setError(err.message || "Erro ao realizar cadastro"); diff --git a/frontend/pages/RegistrationSuccess.tsx b/frontend/pages/RegistrationSuccess.tsx index a0dcdc5..1999747 100644 --- a/frontend/pages/RegistrationSuccess.tsx +++ b/frontend/pages/RegistrationSuccess.tsx @@ -9,6 +9,8 @@ export const RegistrationSuccess: React.FC = () => { // Clear session data to lock /cadastro again sessionStorage.removeItem('accessCodeValidated'); sessionStorage.removeItem('accessCodeData'); + sessionStorage.removeItem('professionalAccessValidated'); + sessionStorage.removeItem('professionalAccessData'); }, []); return (