import React, { useState, useEffect } from 'react'; import {Link} from 'react-router-dom' // formatar número // formatar CPF import { FormatTelefones,FormatPeso, FormatCPF } from '../utils/Formatar/Format'; function PatientForm({ onSave, onCancel, formData, setFormData }) { const [errorModalMsg, setErrorModalMsg] = useState(""); // Estado para controlar a exibição do modal e os dados do paciente existente const [showModal, setShowModal] = useState(false); const [showModal404, setShowModal404] = useState(false); const [pacienteExistente, setPacienteExistente] = useState(null); const [showSuccessModal, setShowSuccessModal] = useState(false); // Estado para armazenar a URL da foto do avatar const [avatarUrl, setAvatarUrl] = useState(null); // Estado para controlar quais seções estão colapsadas const [collapsedSections, setCollapsedSections] = useState({ dadosPessoais: true, // Alterado para true para a seção ficar aberta por padrão infoMedicas: false, infoConvenio: false, endereco: false, contato: false, }); // Função para alternar o estado de colapso de uma seção const handleToggleCollapse = (section) => { setCollapsedSections(prevState => ({ ...prevState, [section]: !prevState[section] })); }; // Lógica para calcular o IMC useEffect(() => { const peso = parseFloat(formData.peso); const altura = parseFloat(formData.height_m); if (peso > 0 && altura > 0) { const imcCalculado = peso / (altura * altura); setFormData(prev => ({ ...prev, bmi: imcCalculado.toFixed(2) })); } else { setFormData(prev => ({ ...prev, bmi: '' })); } }, [formData.peso, formData.altura]); const handleChange = (e) => { const { name, value, type, checked, files } = e.target; console.log(formData, name, checked) if (type === 'file') { setFormData({ ...formData, [name]: files[0] }); // Lógica para pré-visualizar a imagem no avatar if (name === 'foto' && files[0]) { const reader = new FileReader(); reader.onloadend = () => { setAvatarUrl(reader.result); }; reader.readAsDataURL(files[0]); } else if (name === 'foto' && !files[0]) { setAvatarUrl(null); // Limpa o avatar se nenhum arquivo for selecionado }} else if (name.includes('cpf')) { setFormData({...formData, cpf:FormatCPF(value) }); } else if (name.includes('phone')) { setFormData({ ...formData, [name]: FormatTelefones(value) }); }else if(name.includes('weight') || name.includes('bmi') || name.includes('height')){ setFormData({...formData,[name]: FormatPeso(value) }) }else if(name.includes('rn') || name.includes('vip')){ setFormData({ ...formData, [name]: checked }); } else{ setFormData({ ...formData, [name]: value }); } }; const handleCepBlur = async () => { const cep = formData.cep.replace(/\D/g, ''); if (cep.length === 8) { try { const response = await fetch(`https://viacep.com.br/ws/${cep}/json/`); const data = await response.json(); if (!data.erro) { setFormData((prev) => ({ ...prev, street: data.logradouro || '', neighborhood: data.bairro || '', city: data.localidade || '', state: data.uf || '' })); } else { alert('CEP não encontrado!'); } } catch (error) { alert('Erro ao buscar o CEP.'); } } }; const handleSubmit = async () => { if (!formData.full_name || !formData.cpf || !formData.sex || !formData.birth_date){ console.log(formData.full_name, formData.cpf, formData.sex, formData.birth_date) setErrorModalMsg('Por favor, preencha Nome, CPF, Gênero e data de nascimento.'); setShowModal404(true); return } onSave({ ...formData,bmi:12.0 }); }; return (

MediConnect

{/* DADOS PESSOAIS */}

handleToggleCollapse('dadosPessoais')} style={{ fontSize: '1.8rem' }}> Dados Pessoais {collapsedSections.dadosPessoais ? '▲' : '▼'}

{/* AVATAR E INPUT DE FOTO */}
{avatarUrl ? ( Avatar do Paciente ) : (
)}
{formData.foto && {formData.foto.name}}
{/* CADASTRO */}
{/* CAMPOS MOVIDOS */}
{formData.anexos ? formData.anexos.name : 'Nenhum arquivo escolhido'}
{/* INFORMAÇÕES MÉDICAS */}

handleToggleCollapse('infoMedicas')} style={{ fontSize: '1.8rem' }}> Informações Médicas {collapsedSections.infoMedicas ? '▲' : '▼'}

{/* INFORMAÇÕES DE CONVÊNIO */}

handleToggleCollapse('infoConvenio')} style={{ fontSize: '1.8rem' }}> Informações de convênio {collapsedSections.infoConvenio ? '▲' : '▼'}

{/* PACIENTE VIP */}
{/* ENDEREÇO */}

handleToggleCollapse('endereco')} style={{ fontSize: '1.8rem' }}> Endereço {collapsedSections.endereco ? '▲' : '▼'}

{/* CONTATO */}

handleToggleCollapse('contato')} style={{ fontSize: '1.8rem' }}> Contato {collapsedSections.contato ? '▲' : '▼'}

{/* Botões */}
{/* Modal para paciente existente */} {showModal && pacienteExistente && (
)} {/* Modal de sucesso ao salvar paciente */} {showSuccessModal && (
Paciente salvo com sucesso!

O cadastro do paciente foi realizado com sucesso.

)} {showModal404 && (
Atenção

{errorModalMsg || '(Erro 404).Por favor, tente novamente mais tarde'}

)}
); } export default PatientForm;