fix: (cadastro-profissiona) ajuste de redirecionamento

This commit is contained in:
NANDO9322 2026-02-09 12:23:48 -03:00
parent 4ce07c1fc5
commit 44b73a080d
5 changed files with 43 additions and 27 deletions

View file

@ -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<ProfessionalFormProps> = ({
onSubmit,
onCancel,
isLoading = false,
}) => {
const [functions, setFunctions] = useState<
Array<{ id: string; nome: string }>
@ -173,6 +175,7 @@ export const ProfessionalForm: React.FC<ProfessionalFormProps> = ({
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<ProfessionalFormProps> = ({
)}
{/* Botões */}
<div className="flex gap-4 pt-4">
<Button
type="button"
variant="outline"
onClick={onCancel}
className="flex-1"
>
Cancelar
</Button>
<Button type="submit" className="flex-1">
Cadastrar Profissional
</Button>
</div>
<div className="flex justify-end gap-3 pt-6 border-t font-medium">
<Button type="button" variant="outline" onClick={onCancel} disabled={isLoading}>
Cancelar
</Button>
<Button type="submit" disabled={isLoading}>
{isLoading ? "Cadastrando..." : "Cadastrar Profissional"}
</Button>
</div>
</form>
</div>
);

View file

@ -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);
}
};

View file

@ -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<ProfessionalRegisterProps> = ({
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<ProfessionalRegisterProps> = ({
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<ProfessionalRegisterProps> = ({
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<ProfessionalRegisterProps> = ({
<ProfessionalForm
onSubmit={handleSubmit}
onCancel={() => onNavigate("cadastro")}
onNavigate={onNavigate}
isLoading={isSubmitting}
/>
</div>
);

View file

@ -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<RegisterProps> = ({ 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<RegisterProps> = ({ 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");

View file

@ -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 (