2025-08-31 19:53:59 -03:00

267 lines
10 KiB
JavaScript

import React, { useState } from 'react';
import InputMask from "react-input-mask";
function PatientForm({ onSave, onCancel }) {
const [formData, setFormData] = useState({
nome: '',
nomeSocial: '',
dataNascimento: '',
genero: '',
documento: '',
numeroDocumento: '',
cpf: '',
profissao: '',
nomeMae: '',
profissaoMae: '',
nomePai: '',
profissaoPai: '',
nomeResponsavel: '',
cpfResponsavel: '',
nomeConjuge: '',
outroId: '',
cep: '',
cidade: '',
estado: '',
bairro: '',
rua: '',
numero: '',
complemento: '',
email: '',
telefone1: '',
telefone2: '',
telefone3: '',
observacoes: ''
});
const handleChange = (e) => {
const { name, value } = e.target;
setFormData({
...formData,
[name]: value
});
};
// Função para buscar endereço pelo CEP
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,
rua: data.logradouro || '',
bairro: data.bairro || '',
cidade: data.localidade || '',
estado: data.uf || ''
}));
} else {
alert('CEP não encontrado!');
}
} catch (error) {
alert('Erro ao buscar o CEP.');
}
}
};
const handleSubmit = () => {
if (!formData.nome || !formData.cpf) {
alert('Por favor, preencha Nome e CPF.');
return;
}
onSave(
{nome: formData.nome,
nomeSocial: formData.nomeSocial,
dataNascimento: formData.dataNascimento,
genero: formData.genero,
documento: formData.documento,
numeroDocumento: formData.numeroDocumento,
cpf: formData.cpf,
profissao: formData.profissao,
nomeMae: formData.nomeMae,
profissaoMae: formData.profissaoMae,
nomePai: formData.nomePai,
profissaoPai: formData.profissaoPai,
nomeResponsavel: formData.nomeResponsavel,
cpfResponsavel: formData.cpfResponsavel,
nomeConjuge: formData.nomeConjuge,
outroId: formData.outroId,
endereco: {
cep: formData.cep,
cidade: formData.cidade,
estado: formData.estado,
bairro: formData.bairro,
logradouro: formData.rua,
numero: formData.numero,
complemento: formData.complemento,
},
contato: {
email: formData.email,
telefone1: formData.telefone1,
telefone2: formData.telefone2,
telefone3: formData.telefone3,
},
observacoes: formData.observacoes,
}
);
};
return (
<div className="card p-3">
<h3 className="mb-3 text-center">MedicoConnect</h3>
{/* ------------------ DADOS PESSOAIS ------------------ */}
<h5 className="mb-3">Dados Pessoais</h5>
<div className="row">
<div className="col-md-6 mb-3">
<label>Nome:</label>
<input type="text" className="form-control" name="nome" value={formData.nome} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Nome social:</label>
<input type="text" className="form-control" name="nomeSocial" value={formData.nomeSocial} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Data de nascimento:</label>
<input type="date" className="form-control" name="dataNascimento" value={formData.dataNascimento} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Gênero:</label>
<select className="form-control" name="genero" value={formData.genero} onChange={handleChange}>
<option value="">Selecione</option>
<option value="Masculino">Masculino</option>
<option value="Feminino">Feminino</option>
<option value="Outro">Outro</option>
</select>
</div>
<div className="col-md-6 mb-3">
<label>Outro documento:</label>
<input type="text" className="form-control" name="documento" value={formData.documento} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Número do documento:</label>
<input type="text" className="form-control" name="numeroDocumento" value={formData.numeroDocumento} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>CPF:</label>
<input type="text" className="form-control" name="cpf" value={formData.cpf} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Profissão:</label>
<input type="text" className="form-control" name="profissao" value={formData.profissao} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Nome da Mãe:</label>
<input type="text" className="form-control" name="nomeMae" value={formData.nomeMae} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Profissão da mãe:</label>
<input type="text" className="form-control" name="profissaoMae" value={formData.profissaoMae} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Nome do Pai:</label>
<input type="text" className="form-control" name="nomePai" value={formData.nomePai} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Profissão do pai:</label>
<input type="text" className="form-control" name="profissaoPai" value={formData.profissaoPai} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Nome do responsável:</label>
<input type="text" className="form-control" name="nomeResponsavel" value={formData.nomeResponsavel} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>CPF do responsável:</label>
<input type="text" className="form-control" name="cpfResponsavel" value={formData.cpfResponsavel} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Nome do esposo(a):</label>
<input type="text" className="form-control" name="nomeConjuge" value={formData.nomeConjuge} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Identificador de outro sistema:</label>
<input type="text" className="form-control" name="outroId" value={formData.outroId} onChange={handleChange} />
</div>
</div>
{/* ------------------ ENDEREÇO ------------------ */}
<h5>Endereço</h5>
<div className="row">
<div className="col-md-4 mb-3">
<label>CEP:</label>
<input type="text" className="form-control" name="cep" value={formData.cep} onChange={handleChange} onBlur={handleCepBlur} />
</div>
<div className="col-md-8 mb-3">
<label>Rua:</label>
<input type="text" className="form-control" name="rua" value={formData.rua} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Bairro:</label>
<input type="text" className="form-control" name="bairro" value={formData.bairro} onChange={handleChange} />
</div>
<div className="col-md-4 mb-3">
<label>Cidade:</label>
<input type="text" className="form-control" name="cidade" value={formData.cidade} onChange={handleChange} />
</div>
<div className="col-md-2 mb-3">
<label>Estado:</label>
<input type="text" className="form-control" name="estado" value={formData.estado} onChange={handleChange} />
</div>
<div className="col-md-4 mb-3">
<label>Número:</label>
<input type="text" className="form-control" name="numero" value={formData.numero} onChange={handleChange} />
</div>
<div className="col-md-8 mb-3">
<label>Complemento:</label>
<input type="text" className="form-control" name="complemento" value={formData.complemento} onChange={handleChange} />
</div>
</div>
{/* ------------------ CONTATO ------------------ */}
<h5>Contato</h5>
<div className="row">
<div className="col-md-6 mb-3">
<label>Email:</label>
<input type="email" className="form-control" name="email" value={formData.email} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Telefone:</label>
<input type="text" className="form-control" name="telefone1" value={formData.telefone1} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Telefone 2:</label>
<input type="text" className="form-control" name="telefone2" value={formData.telefone2} onChange={handleChange} />
</div>
<div className="col-md-6 mb-3">
<label>Telefone 3:</label>
<input type="text" className="form-control" name="telefone3" value={formData.telefone3} onChange={handleChange} />
</div>
</div>
{/* ------------------ INFORMAÇÕES ADICIONAIS ------------------ */}
<h5>Informações Adicionais</h5>
<div className="mb-3">
<label>Observações:</label>
<textarea className="form-control" name="observacoes" value={formData.observacoes} onChange={handleChange}></textarea>
</div>
{/* Botões */}
<div className="mt-3">
<button className="btn btn-success me-2" onClick={handleSubmit}>
Salvar Paciente
</button>
<button className="btn btn-light" onClick={onCancel}>
Cancelar
</button>
</div>
</div>
);
}
export default PatientForm;