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"; import { getCompanies } from "../services/apiService"; import { formatPhone, formatCPFCNPJ, formatCEP } from "../utils/masks"; interface RegisterProps { onNavigate: (page: string) => void; } export const Register: React.FC = ({ onNavigate }) => { const navigate = useNavigate(); const { register } = useAuth(); const [companies, setCompanies] = useState< Array<{ id: string; nome: string }> >([]); const [isLoadingCompanies, setIsLoadingCompanies] = useState(true); const [formData, setFormData] = useState({ name: "", email: "", phone: "", password: "", confirmPassword: "", empresaId: "", cpfCnpj: "", cep: "", endereco: "", numero: "", complemento: "", bairro: "", cidade: "", estado: "", }); const [agreedToTerms, setAgreedToTerms] = useState(false); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(""); useEffect(() => { const loadCompanies = async () => { setIsLoadingCompanies(true); const result = await getCompanies(); if (result.data) { setCompanies(result.data); } setIsLoadingCompanies(false); }; loadCompanies(); }, []); // Verifica se tem empresa pré-selecionada via URL (código de acesso) useEffect(() => { const urlParams = new URLSearchParams(window.location.search); const empresaId = urlParams.get('empresa_id'); const empresaNome = urlParams.get('empresa_nome'); if (empresaId) { setFormData(prev => ({ ...prev, empresaId })); // Limpa os parâmetros da URL após usar window.history.replaceState({}, document.title, window.location.pathname); } }, [companies]); const handleChange = (field: string, value: string | boolean) => { setFormData((prev) => ({ ...prev, [field]: value })); setError(""); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsLoading(true); setError(""); // Validação do checkbox de termos if (!agreedToTerms) { setError("Você precisa concordar com os termos de uso para continuar"); setIsLoading(false); return; } // Validações if (formData.password !== formData.confirmPassword) { setError("As senhas não coincidem"); setIsLoading(false); return; } if (formData.password.length < 6) { setError("A senha deve ter no mínimo 6 caracteres"); setIsLoading(false); return; } try { await register({ name: formData.name, email: formData.email, password: formData.password, phone: formData.phone, role: "EVENT_OWNER", // Client Role company_id: formData.empresaId, cpf_cnpj: formData.cpfCnpj, cep: formData.cep, endereco: formData.endereco, numero: formData.numero, complemento: formData.complemento, bairro: formData.bairro, cidade: formData.cidade, estado: formData.estado, }, 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"); } }; return (
{/* Logo dentro do card */}
Photum Formaturas
Comece agora

Crie sua conta

Já tem uma conta?{" "}

Você é um profissional?

handleChange("name", e.target.value)} /> handleChange("email", e.target.value)} /> handleChange("phone", formatPhone(e.target.value))} mask="phone" /> handleChange("cpfCnpj", formatCPFCNPJ(e.target.value))} placeholder="000.000.000-00" maxLength={18} />
handleChange("cep", formatCEP(e.target.value))} placeholder="00000-000" onBlur={(e) => { const cep = e.target.value.replace(/\D/g, ''); if (cep.length === 8) { fetch(`https://viacep.com.br/ws/${cep}/json/`) .then(res => res.json()) .then(data => { if (!data.erro) { setFormData(prev => ({ ...prev, endereco: data.logradouro, bairro: data.bairro, cidade: data.localidade, estado: data.uf })); } }); } }} /> handleChange("numero", e.target.value)} />
handleChange("endereco", e.target.value)} />
handleChange("complemento", e.target.value)} /> handleChange("bairro", e.target.value)} />
handleChange("cidade", e.target.value)} /> handleChange("estado", e.target.value)} maxLength={2} />

Se a sua empresa não estiver listada, entre em contato com a administração e selecione "Não Cadastrado"{" "} abaixo.

{formData.empresaId && companies.find(c => c.id === formData.empresaId) && (

✓ Empresa pré-selecionada baseada no seu código de acesso

)} {isLoadingCompanies ? (

Carregando empresas...

) : ( )}
handleChange("password", e.target.value)} /> handleChange("confirmPassword", e.target.value) } error={ error && (error.includes("senha") || error.includes("coincidem")) ? error : undefined } />
setAgreedToTerms(e.target.checked)} className="mt-0.5 sm:mt-1 h-4 w-4 flex-shrink-0 border-gray-300 rounded focus:ring-2" style={{ accentColor: "#B9CF33" }} />
{error && error.includes("termos") && ( {error} )}
{error && !error.includes("termos") && !error.includes("senha") && !error.includes("coincidem") && (
{error}
)}
); };