import React, { useState, useEffect } from "react"; import { Button } from "./Button"; import { Input } from "./Input"; import { getFunctions } from "../services/apiService"; interface ProfessionalFormProps { onSubmit: (data: ProfessionalData) => void; onCancel: () => void; } export interface ProfessionalData { nome: string; email: string; senha: string; confirmarSenha: string; funcaoId: string; cep: string; rua: string; numero: string; complemento: string; bairro: string; cidade: string; uf: string; whatsapp: string; cpfCnpj: string; banco: string; agencia: string; contaPix: string; carroDisponivel: string; possuiEstudio: string; qtdEstudios: string; tipoCartao: string; observacao: string; } export const ProfessionalForm: React.FC = ({ onSubmit, onCancel, }) => { const [functions, setFunctions] = useState< Array<{ id: string; nome: string }> >([]); const [isLoadingFunctions, setIsLoadingFunctions] = useState(false); const [functionsError, setFunctionsError] = useState(false); const [isLoadingCep, setIsLoadingCep] = useState(false); const [formData, setFormData] = useState({ nome: "", email: "", senha: "", confirmarSenha: "", funcaoId: "", cep: "", rua: "", numero: "", complemento: "", bairro: "", cidade: "", uf: "", whatsapp: "", cpfCnpj: "", banco: "", agencia: "", contaPix: "", carroDisponivel: "nao", possuiEstudio: "nao", qtdEstudios: "0", tipoCartao: "", observacao: "", }); useEffect(() => { const loadFunctions = async () => { setIsLoadingFunctions(true); setFunctionsError(false); try { const result = await getFunctions(); if (result.data) { setFunctions(result.data); } else { setFunctionsError(true); } } catch (error) { setFunctionsError(true); } setIsLoadingFunctions(false); }; loadFunctions(); }, []); const handleChange = (field: keyof ProfessionalData, value: string) => { setFormData((prev) => ({ ...prev, [field]: value })); }; const handleCepBlur = async () => { const cep = formData.cep.replace(/\D/g, ""); if (cep.length !== 8) return; setIsLoadingCep(true); try { const response = await fetch( `https://cep.awesomeapi.com.br/json/${cep}` ); if (!response.ok) throw new Error("CEP não encontrado"); const data = await response.json(); setFormData((prev) => ({ ...prev, rua: data.address || prev.rua, bairro: data.district || prev.bairro, cidade: data.city || prev.cidade, uf: data.state || prev.uf, })); } catch (error) { console.error("Erro ao buscar CEP:", error); // Opcional: mostrar erro para usuário } finally { setIsLoadingCep(false); } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); // Validação de senha if (formData.senha !== formData.confirmarSenha) { alert("As senhas não coincidem!"); return; } if (formData.senha.length < 6) { alert("A senha deve ter pelo menos 6 caracteres!"); return; } onSubmit(formData); }; const ufs = [ "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO", ]; return (
{/* Logo dentro do card */}
Photum Formaturas
Cadastro de Profissional

Crie sua conta profissional

Já tem uma conta?{" "}

{/* Informações Pessoais */}

Informações Pessoais

handleChange("nome", e.target.value)} /> handleChange("email", e.target.value)} /> handleChange("senha", e.target.value)} /> handleChange("confirmarSenha", e.target.value)} />
{isLoadingFunctions ? (

Carregando funções...

) : functionsError ? (

❌ Erro ao carregar funções. Verifique se o backend está rodando.

) : ( )}
{/* Endereço */}

Endereço

{ const value = e.target.value.replace(/\D/g, ""); const formatted = value.replace(/^(\d{5})(\d)/, "$1-$2"); handleChange("cep", formatted); }} onBlur={handleCepBlur} maxLength={9} /> {isLoadingCep && (

Buscando endereço...

)}
handleChange("rua", e.target.value)} />
{ const value = e.target.value.replace(/\D/g, ""); handleChange("numero", value); }} />
handleChange("complemento", e.target.value)} /> handleChange("bairro", e.target.value)} />
handleChange("cidade", e.target.value)} />
{/* Contato */}

Contato

handleChange("whatsapp", e.target.value)} mask="phone" />
{/* Dados Bancários */}

Dados Bancários

{ const value = e.target.value.replace(/\D/g, ""); let formatted = ""; if (value.length <= 11) { // CPF: 000.000.000-00 formatted = value.replace( /(\d{3})(\d{3})(\d{3})(\d{0,2})/, "$1.$2.$3-$4" ); } else { // CNPJ: 00.000.000/0000-00 formatted = value .slice(0, 14) .replace( /(\d{2})(\d{3})(\d{3})(\d{4})(\d{0,2})/, "$1.$2.$3/$4-$5" ); } handleChange("cpfCnpj", formatted); }} className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-[#B9CF33] focus:border-transparent" placeholder="000.000.000-00 ou 00.000.000/0000-00" />
handleChange("banco", e.target.value)} /> { const value = e.target.value.replace(/\D/g, ""); handleChange("agencia", value); }} /> handleChange("contaPix", e.target.value)} />
{/* Informações Profissionais */}

Informações Profissionais

{formData.possuiEstudio === "sim" && ( handleChange("qtdEstudios", e.target.value)} /> )} handleChange("tipoCartao", e.target.value)} />