267 lines
10 KiB
JavaScript
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;
|