diff --git a/package-lock.json b/package-lock.json index 3a03d4c..a5fc875 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "react": "^18.2.0", "react-apexcharts": "^1.7.0", "react-bootstrap": "^2.10.10", + "react-bootstrap-icons": "^1.11.6", "react-dom": "^18.2.0", "react-flatpickr": "^4.0.11", "react-input-mask": "^2.0.4", @@ -30401,6 +30402,18 @@ } } }, + "node_modules/react-bootstrap-icons": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/react-bootstrap-icons/-/react-bootstrap-icons-1.11.6.tgz", + "integrity": "sha512-ycXiyeSyzbS1C4+MlPTYe0riB+UlZ7LV7YZQYqlERV2cxDiKtntI0huHmP/3VVvzPt4tGxqK0K+Y6g7We3U6tQ==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": ">=16.8.6" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", diff --git a/package.json b/package.json index 2ee1efb..1b3f407 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "react": "^18.2.0", "react-apexcharts": "^1.7.0", "react-bootstrap": "^2.10.10", + "react-bootstrap-icons": "^1.11.6", "react-dom": "^18.2.0", "react-flatpickr": "^4.0.11", "react-input-mask": "^2.0.4", diff --git a/src/components/patients/PatientForm.jsx b/src/components/patients/PatientForm.jsx index 6d16b63..a64f5be 100644 --- a/src/components/patients/PatientForm.jsx +++ b/src/components/patients/PatientForm.jsx @@ -57,24 +57,47 @@ function PatientForm({ onSave, onCancel, PatientDict }) { estadoCivil: '', rnConvenio: false, - //CAMPOS: INFORMAÇÕES MÉDICAS + // INFORMAÇÕES MÉDICAS tipoSanguineo: '', peso: '', altura: '', imc: '', alergias: '', - // CAMPOS: INFORMAÇÕES DE CONVÊNIO + // INFORMAÇÕES DE CONVÊNIO convenio: '', plano: '', numeroMatricula: '', validadeCarteira: '', validadeIndeterminada: false, + pacienteVip: false, // NOVO CAMPO ADICIONADO - // CAMPO: ANEXOS + // ANEXO anexos: null, }); + // 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, + infoAdicionais: false, + anexos: 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); @@ -95,6 +118,18 @@ function PatientForm({ onSave, onCancel, PatientDict }) { setFormData({ ...formData, [name]: checked }); } else 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 { setFormData({ ...formData, [name]: value }); } @@ -167,6 +202,7 @@ function PatientForm({ onSave, onCancel, PatientDict }) { numeroMatricula: formData.numeroMatricula, validadeCarteira: formData.validadeCarteira, validadeIndeterminada: formData.validadeIndeterminada, + pacienteVip: formData.pacienteVip, // Adicionando o novo campo }, }); }; @@ -175,266 +211,379 @@ function PatientForm({ onSave, onCancel, PatientDict }) {

MedicoConnect

- {/* ------------------ DADOS PESSOAIS ------------------ */} -
Dados Pessoais
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - -
-
-
- - {/* ------------------ INFORMAÇÕES MÉDICAS ------------------ */} -
Informações Médicas
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - {/* ------------------ INFORMAÇÕES DE CONVÊNIO ------------------ */} -
Informações de convênio
-
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - -
-
-
- - {/* ------------------ ENDEREÇO ------------------ */} -
Endereço
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - {/* ------------------ CONTATO ------------------ */} -
Contato
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - {/* ------------------ INFORMAÇÕES ADICIONAIS ------------------ */} -
Informações Adicionais
+ {/* DADOS PESSOAIS */}
- - +
handleToggleCollapse('dadosPessoais')}> + Dados Pessoais + + {collapsedSections.dadosPessoais ? '▲' : '▼'} + +
+
+
+ {/* AVATAR E INPUT DE FOTO */} +
+
+ {avatarUrl ? ( + Avatar do Paciente + ) : ( +
+ ☤ +
+ )} +
+
+ + + {formData.foto && {formData.foto.name}} +
+
+ {/* CADASTRO */} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+
+
- {/* ------------------ ANEXOS DO PACIENTE ------------------ */} -
Anexos do Paciente
+ {/* INFORMAÇÕES MÉDICAS */}
- - - {formData.anexos ? formData.anexos.name : 'Nenhum arquivo escolhido'} +
handleToggleCollapse('infoMedicas')}> + Informações Médicas + + {collapsedSections.infoMedicas ? '▲' : '▼'} + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + {/* INFORMAÇÕES DE CONVÊNIO */} +
+
handleToggleCollapse('infoConvenio')}> + Informações de convênio + + {collapsedSections.infoConvenio ? '▲' : '▼'} + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ {/* NOVO CAMPO: PACIENTE VIP */} +
+
+ + +
+
+
+
+
+ + {/* ENDEREÇO */} +
+
handleToggleCollapse('endereco')}> + Endereço + + {collapsedSections.endereco ? '▲' : '▼'} + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + {/* CONTATO */} +
+
handleToggleCollapse('contato')}> + Contato + + {collapsedSections.contato ? '▲' : '▼'} + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + {/* INFORMAÇÕES ADICIONAIS */} +
+
handleToggleCollapse('infoAdicionais')}> + Informações Adicionais + + {collapsedSections.infoAdicionais ? '▲' : '▼'} + +
+
+
+
+ + +
+
+
+
+ + {/* ANEXOS DO PACIENTE */} +
+
handleToggleCollapse('anexos')}> + Anexos do Paciente + + {collapsedSections.anexos ? '▲' : '▼'} + +
+
+
+
+ + + {formData.anexos ? formData.anexos.name : 'Nenhum arquivo escolhido'} +
+
+
{/* Botões */}